ssm は、ssh で接続することなく、 必要な role があれば、特定の EC2 上へコマンドを送ることが出来ます。
Amazon Linux に対しても、実行できます。
EC2の自動セットアップを行いながらも、ssh キーの登録をしたくないようなときに役立ちます。
実行するリモートサーバー側に ssm-agent をインストールする。
cd /tmp curl https://amazon-ssm-ap-northeast-1.s3.amazonaws.com/latest/linux_amd64/amazon-ssm-agent.rpm -o amazon-ssm-agent.rpm yum install -y amazon-ssm-agent.rpm
実行するリモートサーバー側に role を設定する。
AmazonEC2RoleForSSM
コマンドを送る元に、role を設定する。
AmazonSSMFullAccess
実行方法
こんな感じ
def command(instance, commands): ssm = boto3.client('ssm') r = ssm.send_command( InstanceIds = [instance.instance_id], DocumentName = "AWS-RunShellScript", Parameters = { "commands": commands } ) command_id = r['Command']['CommandId'] while True: time.sleep(0.2) res = ssm.list_command_invocations(CommandId=command_id) invocations = res['CommandInvocations'] if len(invocations) <= 0: continue status = invocations[0]['Status'] if status == 'Success': return True if status == 'Failed': return False