美文网首页AWS 服务实战程序员@IT·互联网
AWS 向 EC2 发送命令远程执行脚本

AWS 向 EC2 发送命令远程执行脚本

作者: 字母数字或汉字 | 来源:发表于2017-01-07 19:27 被阅读788次
    AWS

    很多时候,我们会需要在 EC2 实例之外向实例发送命令,由实例来执行。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 获取地区(region)信息,这是怎么做到的?这是实例的动态数据。具体请参考 检索动态数据检索实例元数据

    设置了 aws 的默认地区,是因为有些 aws-cli 命令必须指定区域方可执行。

    注意,我们需要给 EC2 的 IAM 角色添加 AmazonEC2RoleforSSM 托管策略,使实例能够与 Run Command API 进行通信。给命令发送方的角色添加 AmazonSSMFullAccess 托管策略。具体请参考 配置访问权限

    配置完成,我们就能使用 AWS 的 EC2 控制台的系统管理器服务来发送命令,或者使用 aws-cli 或 AWS SDK 来做。

    下面演示了发送“运行两条 Shell 脚本给实例 ${INSTANCE_ID}”的命令:

    待运行的命令:

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

    使用 aws ssm send-command 命令来发送我们的命令:

    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\"]}"
    

    我们可以检查命令的执行结果,可以从 EC2 控制台的系统管理器服务——命令历史记录查看,也可以使用编程方式来做。

    能够看到 exit code 和输出,如果输出很长,建议通过指定 S3 地址,注意此时也需要提供 S3 的访问权限。

    官方文档可以参考 EC2 远程管理 的《EC2 实例入门》部分。

    SSM 还有其他功能,比如敏感数据管理、定时任务、元数据采集等,但最常用的莫如执行脚本了。

    祝大家使用愉快。

    相关文章

      网友评论

        本文标题:AWS 向 EC2 发送命令远程执行脚本

        本文链接:https://www.haomeiwen.com/subject/juifbttx.html