#概要図
Lambda ⇒ Systems Manager ⇒ EC2 ⇒(同期コマンド)⇒ S3
▼参考(にさせていただきました!)
https://dev.classmethod.jp/articles/lambda-s3-ec2-windows-sync/
#作業ステップ
▼前提
・S3にバケットを作成し、ファイルをアップロード済み
###①IAMロールを作成(EC2用)
AmazonEC2RoleforSSM
※上記権限は範囲が広いため、別のポリシーへの移行が推奨されていますので、
仕事で使用する場合は下記ページをご確認いただければと思います。
https://dev.classmethod.jp/articles/check-amazonec2roleforssm-policy/
###②EC2インスタンス作成(windowsサーバ ※ami-038c59e921e8b9c7d 使いました)
ロールに”①”をアタッチ
⇒SystemsManagerでEC2のオペレーションができるようになる
※SSMエージェントはデフォルトでインストールされていました。
###③IAMユーザを作成(EC2用)
AmazonS3FullAccess(S3フルアクセス)
###④EC2にRDP(リモートデスクトップ)し、AWS CLIをインストール
私はMSIインストーラでインストールしました。
https://dev.classmethod.jp/articles/first-login-to-ec2-windows/
https://docs.aws.amazon.com/cli/latest/userguide/install-windows.html
###⑤EC2にRDP(リモートデスクトップ)し、AWS CLIにアクセスキー・シークレットアクセスキーを設定
”③”で振り出した、アクセスキーシークレットアクセスキーを設定
⇒これにより、AWS CLIで、S3にアクセスできるようになる。
###⑥IAMロールを作成(lambda用)
AmazonEC2FullAccess
AmazonSSMFullAccess
※lambdaデフォルトポリシーに上記を追加
###⑦lambdaを作成
EC2にS3のファイルを同期するようなコマンドを実行させる。
#はまったポイント
##①lambdaからaws cliのコマンドを実行すると、下記のエラーが表示される。
aws : The term 'aws' is not recognized as the name of a cmdlet, function,
script file, or operable program. Check the spelling of the name, or if a path
was included, verify that the path is correct and try again.
まぁ、はまりました(笑)
▼試したこと
①コマンドを管理権限で実行する方法を探す
⇒sudo的なのはない、ただファイルを置けばできそうな感じ、、いったん放置
②EC2にadmin権限なしのユーザを作ってログインし、Power Shellでaws cliコマンド実行
⇒普通に実行できる。(admin権限周りは関係なさそう)
③EC2にデフォルトでインストールされているSSMエージェントのverを最新にしてみた
AWSコンソール>AWS System Manager>マネージドインスタンス>Agent auto updateを押下
⇒ダメもとでためしただけなんですが、、解決!!!
まさか、これなん、という感じでした。
いやー、無事解決、気持ちよかったです(*'▽')
#なるほどポイント
元々、パブリックサブネットでEC2/VPC外lambdaで実行していました。
EC2をプライベートサブネット(NATつき)に移動させても問題ないのか、確認してみました。
⇒Lamdbaからのコマンドが実行されなくなりました。
試していないですが、下記の作業で可能となるようです。
VPCエンドポイントは双方向なんですね。
https://dev.classmethod.jp/articles/tsnote-private-ec2-ssm-vpc-endpoint/
以上です。勉強になりました。