Powershell 如何在自动缩放组内按计划停止/启动EC2实例而不终止该实例?

Powershell 如何在自动缩放组内按计划停止/启动EC2实例而不终止该实例?,powershell,amazon-web-services,amazon-ec2,scheduled-tasks,autoscaling,Powershell,Amazon Web Services,Amazon Ec2,Scheduled Tasks,Autoscaling,如果您有一个自动缩放组,您如何开始/停止实例(不启动/终止)?默认行为仅适用于启动和终止实例,但由于我们还可以通过停止实例节省成本,因此我们更希望允许实例持续存在 出于我们的目的,我们有一个QA环境,我们希望每天启动/停止几个自动校准组,以便在开发团队晚上和周末离开办公室时节省资金 那么如何做到这一点呢 注意: 我将很快给出我自己的详细答案。首先,AWS autoscaling group是一个容器,用于存储基于启动配置的多个实例。如果我们能够禁用触发上/下伸缩的进程,那么我们就回到了只保存实例

如果您有一个自动缩放组,您如何开始/停止实例(启动/终止)?默认行为仅适用于启动和终止实例,但由于我们还可以通过停止实例节省成本,因此我们更希望允许实例持续存在

出于我们的目的,我们有一个QA环境,我们希望每天启动/停止几个自动校准组,以便在开发团队晚上和周末离开办公室时节省资金

那么如何做到这一点呢

注意:


我将很快给出我自己的详细答案。

首先,AWS autoscaling group是一个容器,用于存储基于启动配置的多个实例。如果我们能够禁用触发上/下伸缩的进程,那么我们就回到了只保存实例的容器

为了禁用这些进程,我们需要使用AWS-CLI中的命令。对于本例,我将使用
powershell
,但在
bash
中编写同样简单:

#挂起HealthCheck和替换不健康进程,您可能会发现另一种组合更适合您。
$asGroup=“自动校准组的名称”;
aws自动缩放挂起进程`
--自动缩放组名称$asGroup`
--缩放过程健康检查不健康;
#验证更改
awsp自动缩放描述自动缩放组`
--自动缩放组名$asGroup;
出于我的目的,我希望这些实例在早上7点到晚上7点之间在线,以降低成本。这些实例在我们的开发团队和QA团队之间使用,他们更喜欢每天保持服务器的状态

注意:在EC2实例损坏或意外终止的情况下,我们的团队可以回滚到最新的AMI(他们真的只是希望日志保持不变,但如果日志丢失,这并不是世界末日)

接下来,我们需要一个脚本来启动/停止服务器,这里我有两个脚本,但您可以轻松地将其优化为一个脚本,并将参数传递到:

#在本例中,我们希望对所有自动缩放组执行此操作
#您需要Powershell 3.0+才能从Json使用ConvertFrom
$asGroups=aws autoscaling描述自动缩放组--查询“AutoScalingGroups[*]。{Name:AutoScalingGroupName,Instances:Instances[*].InstanceId}”;
$asGroups=“{asGroups:$asGroups}”|从Json转换;
#对于每个自动缩放组,检查每个实例并开始
foreach($asGroup in$($asGroups.asGroups)){
echo“AS:$($asGroup.Name)”;
foreach($asGroup.instances中的实例){
echo“启动实例:$instance”;
aws ec2启动实例`
--实例id$instance;
}
}
#在本例中,我们希望对所有自动缩放组执行此操作
#您需要Powershell 3.0+才能从Json使用ConvertFrom
$asGroups=awsp autoscaling描述自动缩放组--查询“AutoScalingGroups[*]。{Name:AutoScalingGroupName,Instances:Instances[*].InstanceId}”;
$asGroups=“{asGroups:$asGroups}”|从Json转换;
#对于每个自动缩放组,检查每个实例并停止
foreach($asGroup in$($asGroups.asGroups)){
echo“AS:$($asGroup.Name)”;
foreach($asGroup.instances中的实例){
echo“停止实例:$instance”;
awsp ec2停止实例`
--实例id$instance;
}
}
最后一步是将其添加到控制服务器上的计划任务中(我目前只使用我的桌面,它从不关闭)。附件是导出的日程任务示例,每周周一、周二、周三、周四、周五上午7点运行

<?xml version="1.0" encoding="UTF-16"?>
<Task version="1.2" xmlns="http://schemas.microsoft.com/windows/2004/02/mit/task">
  <RegistrationInfo>
    <Date>2014-08-22T13:13:02.2103946</Date>
    <Author>localhost\Administrator</Author>
  </RegistrationInfo>
  <Triggers>
    <CalendarTrigger>
      <StartBoundary>2014-08-22T07:00:00</StartBoundary>
      <Enabled>true</Enabled>
      <ScheduleByWeek>
        <DaysOfWeek>
          <Monday />
          <Tuesday />
          <Wednesday />
          <Thursday />
          <Friday />
        </DaysOfWeek>
        <WeeksInterval>1</WeeksInterval>
      </ScheduleByWeek>
    </CalendarTrigger>
  </Triggers>
  <Principals>
    <Principal id="Author">
      <UserId>localhost\Administrator</UserId>
      <LogonType>InteractiveToken</LogonType>
      <RunLevel>LeastPrivilege</RunLevel>
    </Principal>
  </Principals>
  <Settings>
    <MultipleInstancesPolicy>IgnoreNew</MultipleInstancesPolicy>
    <DisallowStartIfOnBatteries>true</DisallowStartIfOnBatteries>
    <StopIfGoingOnBatteries>true</StopIfGoingOnBatteries>
    <AllowHardTerminate>true</AllowHardTerminate>
    <StartWhenAvailable>false</StartWhenAvailable>
    <RunOnlyIfNetworkAvailable>false</RunOnlyIfNetworkAvailable>
    <IdleSettings>
      <StopOnIdleEnd>true</StopOnIdleEnd>
      <RestartOnIdle>false</RestartOnIdle>
    </IdleSettings>
    <AllowStartOnDemand>true</AllowStartOnDemand>
    <Enabled>true</Enabled>
    <Hidden>false</Hidden>
    <RunOnlyIfIdle>false</RunOnlyIfIdle>
    <WakeToRun>false</WakeToRun>
    <ExecutionTimeLimit>P3D</ExecutionTimeLimit>
    <Priority>7</Priority>
  </Settings>
  <Actions Context="Author">
    <Exec>
      <Command>C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe</Command>
      <Arguments>-ExecutionPolicy ByPass c:\tasks\AWS-Autoscaling-EC2-Start-Morning.ps1</Arguments>
      <WorkingDirectory>c:\tasks</WorkingDirectory>
    </Exec>
  </Actions>
</Task>

2014-08-22T13:13:02.2103946
本地主机\管理员
2014-08-22T07:00:00
真的
1.
本地主机\管理员
互动电视
租赁权
无知的新
真的
真的
真的
假的
假的
真的
假的
真的
真的
假的
假的
假的
P3D
7.
C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe
-执行策略绕过c:\tasks\AWS-Autoscaling-EC2-Start-Morning.ps1
c:\任务
您需要使此任务的“停止”版本在晚上7点停止服务器。只需将开始边界更改为<代码> 2014-0822T19:00:和更新<代码> - ExecutionPolicy ByPass C:\任务\AWS- AutoSCALL EC2-EngutyPask.PS1 到正确的代码> PS1

< P>您可以考虑使用.BR> 用于检索实例ID以及可用区域和区域等

选择并输入以下信息:

使用适当的信息配置每个管道

设置以下选项以实现适当的安全访问:

请注意,数据管道为您创建了必要的存储空间。
有关详细信息,请参阅


另请参阅使用的其他选项。

我建议明智的做法是实际实现他们的应用程序,以便从头终止并获取新实例不会对系统的运行造成问题。同意。但有时在测试环境中,您希望维护实例的状态,因为开发人员一直在对其运行测试,会创建日志,在我的情况下,我有点懒,我不想在此时为我的as组中的实例编写辅助ENI附件的脚本。我更进一步,我遇到了问题,请看一下我的问题
Name: for example, "Start EC2 instances" and "Stop EC2 instances".
Description: Provide relevant details about the pipeline as needed.
Source: Choose Build using template and choose the template Run AWS CLI command.
AWS CLI command: This is where you put your script to specify what the pipeline does.
Run: Choose on activation to run the pipeline as an on-demand pipeline.  
Run every: Enter a period for every pipeline run.
Starting: Enter a time and date for the pipeline to start.
Ending: Enter a time and date for the pipeline to end.
IAM Roles: Choose Custom
Pipeline Role: DataPipelineDefaultRole
EC2 Instance Role: DataPipelineDefaultResourceRole