[AWS] Lambdaからプライベートサブネット内のEC2を起動・停止する

概要

  • Lambdaを用いてプライベートサブネット内のEC2の起動・停止を操作したい

解決方法

ポイントはセキュリティグループ、ポリシー/ロール、そしてLambdaの配置場所です。

  1. セキュリティグループの設定
  2. ポリシー/ロールの設定
  3. Lambdaの配置場所

1. セキュリティグループの設定

セキュリティグループは、①EC2のセキュリティグループ、②Lambdaのセキュリティグループの2つが必要になります。Inbound rulesOutbound rulesは以下の通りです。

①EC2のセキュリティグループ

  • Inbound rules : ②LambdaのセキュリティグループからのHTTPS(443)を許可する
  • Outbound rules : デフォルト設定(全通信許可)

②Lambdaのセキュリティグループ

  • Inbound rules : デフォルト設定(通信無し)
  • Outbound rules : デフォルト設定(全通信許可)

2. ポリシー/ロールの設定

Lambdaに AmazonEC2FullAccess ポリシーを持つロールを設定します。

※起動・停止だけの場合はFull権限でなくてもよいですが、ここでは分かりやすさの観点からFull権限としておきます。必要に応じて最小権限に変更してください。

3. Lambdaの配置場所

これが少し混乱する箇所かと思いますが、VPC外に配置しておけば問題ありません。つまり、VPCおよびプライベートサブネットへのアタッチは不要ということです。これは「EC2 APIがインターネット上に存在する」ということが理由です。

以上の3点に注意すれば無事Lambdaからプライベートサブネット上のEC2の起動・停止操作が可能になると思います。

CloudWatch Alarmを起点にLambdaを動かす場合はCloudWatch AlarmからLambdaが起動されないときの確認点も見ておいてください。起動したEC2からECRへ接続できないときはEC2からECRへ接続できないときの対処が該当します。