AWS 向 EC2 發(fā)送命令遠程執(zhí)行腳本

AWS

很多時候,我們會需要在 EC2 實例之外向?qū)嵗l(fā)送命令,由實例來執(zhí)行。AWS 給我們提供了這種服務,叫 Amazon EC2 Simple System Manager(SSM)。

我們需要在目標實例安裝 SSM Agent 程序來通信。最好在實例的啟動腳本里來做這件事:

yum update -q -y

REGION=$(curl -s http://169.254.169.254/latest/dynamic/instance-identity/document | grep region | awk -F\\\" '{print $4}')
aws configure set default.region ${REGION}

function install_ssm_agent() {
    curl https://amazon-ssm-${REGION}.s3.amazonaws.com/latest/linux_amd64/amazon-ssm-agent.rpm -o /tmp/amazon-ssm-agent.rpm 2>/dev/null &&
    yum install -q -y /tmp/amazon-ssm-agent.rpm &&
    status amazon-ssm-agent || start amazon-ssm-agent
}

status amazon-ssm-agent || (start amazon-ssm-agent || install_ssm_agent)

你可能注意到我們從 169.254.169.254 獲取地區(qū)(region)信息,這是怎么做到的?這是實例的動態(tài)數(shù)據(jù)。具體請參考 檢索動態(tài)數(shù)據(jù)檢索實例元數(shù)據(jù)。

設置了 aws 的默認地區(qū),是因為有些 aws-cli 命令必須指定區(qū)域方可執(zhí)行。

注意,我們需要給 EC2 的 IAM 角色添加 AmazonEC2RoleforSSM 托管策略,使實例能夠與 Run Command API 進行通信。給命令發(fā)送方的角色添加 AmazonSSMFullAccess 托管策略。具體請參考 配置訪問權(quán)限。

配置完成,我們就能使用 AWS 的 EC2 控制臺的系統(tǒng)管理器服務來發(fā)送命令,或者使用 aws-cli 或 AWS SDK 來做。

下面演示了發(fā)送“運行兩條 Shell 腳本給實例 ${INSTANCE_ID}”的命令:

待運行的命令:

aws s3 cp s3://bucket/key /tmp/myscript.sh
chmod +x /tmp/myscript.sh && /tmp/myscript.sh

使用 aws ssm send-command 命令來發(fā)送我們的命令:

aws ssm send-command \
    --document-name "AWS-RunShellScript" \
    --instance-ids ${INSTANCE_ID} \
    --parameters "{\"commands\": [\"aws s3 cp s3://bucket/key /tmp/myscript.sh\", \"chmod +x /tmp/myscript.sh && /tmp/myscript.sh\"]}"

我們可以檢查命令的執(zhí)行結(jié)果,可以從 EC2 控制臺的系統(tǒng)管理器服務——命令歷史記錄查看,也可以使用編程方式來做。

能夠看到 exit code 和輸出,如果輸出很長,建議通過指定 S3 地址,注意此時也需要提供 S3 的訪問權(quán)限。

官方文檔可以參考 EC2 遠程管理 的《EC2 實例入門》部分。

SSM 還有其他功能,比如敏感數(shù)據(jù)管理、定時任務、元數(shù)據(jù)采集等,但最常用的莫如執(zhí)行腳本了。

祝大家使用愉快。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容