AWS LambdaでEC2インスタンスの自動停止・起動(Python)①Lambda関数作成編

まず準備として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の間に「,」を入れることで指定が可能になります。

1import boto32instances = ['X-XXXXXXXXX']3def lambda_handler(event, context):4    ec2 = boto3.client("ec2")5    ec2.stop_instances(InstanceIds=instances)

次にIAMロールをアタッチします。

「既存のロールを選択」し、続けて先ほど作成したIAMロールをプルダウンから選びましょう。

ステップ4

確認画面で設定した情報に間違いがなければ「関数の作成」をクリックすることでLambda関数が作成されます。

Lambda関数の作成(起動)

続けて起動用のLambda関数を作成します。

手順は先程のLambda関数の作成(停止)と同じです。

Lambda関数のコードのみ異なります。

1import boto32instances = ['X-XXXXXXXXX']3def lambda_handler(event, context):4    ec2 = boto3.client("ec2")5    ec2.start_instances(InstanceIds=instances)

IAMロールは同じで問題ありません。

確認画面で問題なければ起動用のLambda関数を作成しましょう。

最後に

今回はここまでになります。

次回ではCloudWatch Eventの設定を行いたいと思います。

【次回記事】AWS LambdaでEC2インスタンスの自動停止・起動(Python) ②CloudWatch Event作成編

お楽しみに!

この記事を書いた人

aws-recipe-user