Lambdaから、rubySDKを使いec2内にあるshスクリプトファイルを実行したい。
ec2インスタンスでコマンドを実行する方法として一番一般的なのは、
sshが挙げられると思うが、今回はAWS Systems Manager (旧称 SSM)を使って見ようと思う。
AWS Systems Managerは、
ec2にインストールされてるエージェント経由でコマンドを実行できるサービスらしい。
##準備
Lambdaにポリシーをアタッチ
①AmazonSSMFullAccess
②AmazonEC2RoleforSSM
を与えた。
ざっくり与えすぎてるので精査する必要があり。
参考にしないで下さい。。
EC2の準備
最近のversionのec2は最初からSSMエージェントがインストールされているらしいが、
古いEC2などの場合は手動でインストールする必要がある。
東京リージョンのAmazon Linux (x86_64)の場合
① EC2にエージェントをインストール
sudo yum install -y https://s3.ap-northeast-1.amazonaws.com/amazon-ssm-ap-northeast-1/latest/linux_amd64/amazon-ssm-agent.rpm
参考
https://docs.aws.amazon.com/ja_jp/systems-manager/latest/userguide/agent-install-al.html
② EC2にポリシーをアタッチ
EC2にくっついてるロールに「AmazonSSMManagedInstanceCore」ポリシーをアタッチする。
実装
以下のようになる。
ssm_client = Aws::SSM::Client.new( region: '****')
command = 'sh /home/test.sh'
resp = ssm_client.send_command({ instance_ids: ["******"],
document_name: "AWS-RunShellScript",
comment: "Comment",
parameters: {
"commands" => [command]} })
send_commandの使い方は以下を参考
https://docs.aws.amazon.com/sdk-for-ruby/v3/api/Aws/SSM/Client.html#send_command-instance_method