AWS 里面有个叫做 AWS System Manager 的服务,可以帮助管理员批量的自动化管理AWS的资源。比如说,我可以通过他的 Run Command 批量地对指定的EC2 实例组实现某个操作,如升级系统,执行一段脚本,更新agent等等

AWS System Manger 批量操作EC2 实例

默认情况下,这个System Manager是没有权限去访问EC2的,所以第一步需要创建一个IAM role,授权System Manager去访问EC2。它默认已经提供了一个 policy 叫做 AmazonEC2RoleforSSM,创建一个Role,选择这个Policy就行了

AWS System Manger 批量操作EC2 实例

下一步需要在EC2上绑定这个Role

AWS System Manger 批量操作EC2 实例

如果只有几个EC2实例可以手动操作 ,如果有上百台手动操作就太慢了,我们可以考虑用脚本来配置。

安装AWSPowerShell, 然后设定账户初始化,然后就可以获取实例并注册IAMRole了

#Install-Module AWSPowerShell -force

Set-AWSCredential -AccessKey XXXXX  -SecretKey YYYYYY -StoreAs test

#Get-AWSCredential -ListProfileDetail

Initialize-AWSDefaults -ProfileName test -Region ap-southeast-2

$instances=Get-EC2Instance | select -ExpandProperty instances
foreach($item in $instances){

    $iamrole=$item  | select -ExpandProperty IamInstanceProfile
    if($iamrole -eq $null){

        Register-EC2IamInstanceProfile -InstanceId $item.InstanceId -IamInstanceProfile_Arn arn:aws:iam::3861158221239:instance-profile/AmazonEC2RoleForSSM
    }

}

我们可以通过下面的脚本来判断是否绑定成功

$filter = New-Object Amazon.EC2.Model.Filter -Property @{Name = "iam-instance-profile.arn"; Value = "arn:aws:iam::386115804199:instance-profile/AmazonEC2RoleForSSM"} 
$ec2 = @(Get-EC2Instance -Filter $filter)
$ec2instances = $ec2.instances  #returns instances with its attributes
$ec2instances.privateipaddress  #

成功之后我们返回 System manager的界面,在Managed Instances 下面可以看见所有的EC2 实例了

AWS System Manger 批量操作EC2 实例

最后做过简单的测试

点击 run Command 然后选择 AWS-RunPowerShellScript

AWS System Manger 批量操作EC2 实例

输入一个简单的命令
AWS System Manger 批量操作EC2 实例

选择几台测试的实例机器
AWS System Manger 批量操作EC2 实例

点击Run

几秒后查看结果

AWS System Manger 批量操作EC2 实例