如何在作为自动缩放组的一部分的所有amazon ec2实例上运行shell脚本?

时间:2015-04-24 07:57:19

标签: shell amazon-web-services amazon-ec2 autoscaling

有人可以告诉我如何在属于自动缩放组的所有ec2实例上运行shell脚本吗?

场景是我有一个脚本,我想在许多ec2实例上运行,这些实例作为自动缩放组的一部分自动打开。本机方法是SSH到每个实例并运行脚本。我正在寻找一种方法,当我在其中一个ec2实例上运行它时,它可以在所有实例上自动运行或者更好的方法吗?

提前致谢。

5 个答案:

答案 0 :(得分:2)

您需要在新的启动配置中将该shell脚本添加到用户数据,然后更新自动缩放组。

https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/user-data.html#user-data-shell-scripts

更新启动配置

  

如果要更改Auto Scaling组的启动配置,则必须创建启动配置,然后使用新的启动配置更新Auto Scaling组。更改Auto Scaling组的启动配置时,将使用新配置参数启动任何新实例,但不会影响现有实例。

https://docs.aws.amazon.com/autoscaling/latest/userguide/LaunchConfiguration.html

答案 1 :(得分:0)

您可以通过多种不同方式实施......

  1. 使用awscli获取自动缩放组中的所有实例 aws autoscaling describe-auto-scaling-groups --auto-scaling-group-name myTestGroup

  2. SSHkit是远程服务器上有趣的工具运行命令

  3. 投入时间,使用木偶,厨师等适当的工具自动化您的基础设施。使用puppet mcollective,你可以做魔术,包括你所询问的内容。

    更新

    将实例添加到自动缩放组时,新标记名称= aws:autoscaling:groupName,value = name_of_assigned_autoscaling_group已添加,因此很容易找到它搜索此标记。

    $ asgName=testASG

    $ aws ec2 describe-instances --filters Name=tag-key,Values='aws:autoscaling:groupName' Name=tag-value,Values=$asgName --output text --query 'Reservations[*].Instances[*].[InstanceId,PublicIpAddress]'

    您将从上面的命令获得的输出是实例名称和公共IP:

    i-4c42aabc 52.1.x.y

    您可以使用这是您的脚本......

答案 2 :(得分:0)

我会用Chef做。 Opsworks(一个aws产品)是厨师以及许多能够完全符合您需求的东西,并为您提供更大的灵活性。

答案 3 :(得分:0)

或许

Run Command

您也可以使用它来调用脚本:
*好作弊:在EC2部分的左侧菜单中选择Run Command。单击“运行命令”按钮。然后设置您的AWS-RunShellScript。输入您的代码。然后在底部有一个标记为“AWS Command Line Interface command”的下拉列表,选择正确的平台并将命令复制/粘贴到脚本中。

$Command_Id = aws ssm send-command --document-name "AWS-RunPowerShellScript" --targets '{\"Key\":\"tag:Name\",\"Values\":[\"RunningTests\"]}' --parameters '{\"commands\":[\"Start-Process \\\"C:\\\\path\\\\to\\\\scripts\\\\LOCAL_RUN.ps1\\\"\"]}' --comment "Run Tests Locally" --timeout-seconds 3800 --region us-east-1 --query 'Command.CommandId' --output text | Out-String


根据问题:使用Auto Scaling组名称而不是“RunningTests”。或者,在控制台中:在“运行命令”设置中。选择“指定标签”单选按钮,然后选择“名称”和Auto Scaling组 Select Auto Scaling Group in Run Command


*注意:上面的命令是windows powershell,但您可以在运行命令设置中选择正确的平台,将脚本转换为Linux / OS或其他任何内容。 />

**注意:确保该实例上的用户具有运行命令的AmazonSSMFullAccess权限设置。

***注意:默认情况下,SSM代理安装在Windows实例上。如果您正在运行Linux或其他东西,则可能需要install the SSM Agent.

答案 4 :(得分:0)

对于简单的实现,您可以使用python结构(http://www.fabfile.org/)。它是一种从本地或bashin实例运行命令到服务器列表的工具。

这是一个具有基本脚手架和示例的存储库。许多CICD工具都具有满足此要求的功能,但我发现Fabric最容易实现简单的安装。

https://github.com/techsemicolon/python-fabric-ec2-aws