1. 程式人生 > >AWS System Manger 批量操作EC2 例項

AWS System Manger 批量操作EC2 例項

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 例項