こんにちは、シュガーです。
今回はAWS Lambdaを使ってEC2インスタンスを定時に自動で停止・起動させる方法をご紹介したいと思います。
Lambda関数作成編とCloudWatch Event作成編の2つに分けてご紹介いたします。
IAMロールの作成
まず準備としてIAMロールの作成を行います。
今回はLambdaからEC2の操作ができるよう権限を割り当てます。
IAMのコンソール画面の左メニューからロールを選択し、「ロールの作成」をクリックします。
ロールタイプはAWSサービスを選択し、その項目の中から「Lambda」を選択します。
次の画面のアクセス権限では、既存のポリシーをアタッチします。
「AmazonEC2FullAccess」と検索をし、表示されたポリシーをアタッチしましょう。
最後の確認画面では、ロール名及び説明を明記します。
ここは自分でわかるようなロール名を設定しましょう。
「ロールの作成」をクリックすることでロールの作成が完了です。
Lambda関数の作成(停止)
それでは停止用のLambda関数を作成します。
AWS Lambdaのダッシュボードから「関数の作成」を選択します。
・ステップ1
設計図の選択では「一から作成」を選択します。
・ステップ2
トリガーの設定では何もせず、そのまま「次へ」を選択します。
・ステップ3
関数の設定では、ランタイムの指定を行い、Lambda関数のコードを記述する必要があります。
また、この画面で先ほど作成したIAMロールの適用を行います。
今回はPython編ということでランタイムはPython 3.6を選びます。
Lambda関数のコードはこのように記述しました。
[‘X-XXXXXXXXX’]には停止させたいインスタンスIDを指定します。
複数指定したい場合には、インタンスIDとインスタンスIDの間に「,」を入れることで指定が可能になります。
1 2 3 4 5 |
import boto3 instances = ['X-XXXXXXXXX'] def lambda_handler(event, context): ec2 = boto3.client("ec2") ec2.stop_instances(InstanceIds=instances) |
次にIAMロールをアタッチします。
「既存のロールを選択」し、続けて先ほど作成したIAMロールをプルダウンから選びましょう。
ステップ4
確認画面で設定した情報に間違いがなければ「関数の作成」をクリックすることでLambda関数が作成されます。
Lambda関数の作成(起動)
続けて起動用のLambda関数を作成します。
手順は先程のLambda関数の作成(停止)と同じです。
Lambda関数のコードのみ異なります。
1 2 3 4 5 |
import boto3 instances = ['X-XXXXXXXXX'] def lambda_handler(event, context): ec2 = boto3.client("ec2") ec2.start_instances(InstanceIds=instances) |
IAMロールは同じで問題ありません。
確認画面で問題なければ起動用のLambda関数を作成しましょう。
最後に
今回はここまでになります。
次回ではCloudWatch Eventの設定を行いたいと思います。
【次回記事】AWS LambdaでEC2インスタンスの自動停止・起動(Python) ②CloudWatch Event作成編
お楽しみに!