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