有人可以告诉我如何在属于自动缩放组的所有ec2实例上运行shell脚本吗?
场景是我有一个脚本,我想在许多ec2实例上运行,这些实例作为自动缩放组的一部分自动打开。本机方法是SSH到每个实例并运行脚本。我正在寻找一种方法,当我在其中一个ec2实例上运行它时,它可以在所有实例上自动运行或者更好的方法吗?
提前致谢。
答案 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)
您可以通过多种不同方式实施......
使用awscli获取自动缩放组中的所有实例 aws autoscaling describe-auto-scaling-groups --auto-scaling-group-name myTestGroup
SSHkit是远程服务器上有趣的工具运行命令
或
投入时间,使用木偶,厨师等适当的工具自动化您的基础设施。使用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)
您也可以使用它来调用脚本:
*好作弊:在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组
*注意:上面的命令是windows powershell,但您可以在运行命令设置中选择正确的平台,将脚本转换为Linux / OS或其他任何内容。 />
**注意:确保该实例上的用户具有运行命令的AmazonSSMFullAccess权限设置。
***注意:默认情况下,SSM代理安装在Windows实例上。如果您正在运行Linux或其他东西,则可能需要install the SSM Agent.
答案 4 :(得分:0)
对于简单的实现,您可以使用python结构(http://www.fabfile.org/)。它是一种从本地或bashin实例运行命令到服务器列表的工具。
这是一个具有基本脚手架和示例的存储库。许多CICD工具都具有满足此要求的功能,但我发现Fabric最容易实现简单的安装。