AWS Lambda を使用して、AWS アカウントのタスクを自動化したいと考えています。設定する方法を教えてください。
簡単な説明
スケジュールに基づいて、または特定のイベントへの応答で、Lambda と統合して関数を呼び出すことができる AWS のサービスが複数あります。Lambda と統合できる AWS のサービスの詳細については、Lambda を他のサービスで使用するを参照してください。
この記事では、タスクの自動化に Lambda を使用する一般的な 2 つの AWS のサービスの例を示します。
その他の例については、スケジュールされたイベントで Lambda を使用するとAmazon S3 で Lambda を使用するを参照してください。
解決方法
重要: EventBridge と Amazon S3 は、Lambda 関数の実行ロールを自動的に更新し、リソースベースのポリシーを使用して必要なアクセスを追加します。すべての AWS のサービスがこれを行うわけではありません。Lambda を別の AWS のサービスと統合する場合は、必要なアクセス許可を手動で追加してください。
Amazon CloudWatch Logs への入力をログに記録する Lambda 関数を作成する
注意: 作成するこの関数は、設定するイベントのターゲットになります。サンプル関数コードを、ユースケースで自動化するタスクの独自のコードに置き換えます。
1. Lambda コンソールで、[Create function] を選択します。[Create function] ページが開き、デフォルトの [Author from scratch] オプションが表示されます。
2. [Basic information] で、以下を入力します。
[Function Name] に関数の名前を入力します。
[Runtime] で [Node.js 14.x] を選択します。
3. [Permissions] で、[Change default execution role] を選択します。 次の中の 1 つを実行します。
Lambda を初めて使用する場合は、[Create a new role with basic Lambda permissions] を選択します。
使用する Lambda 実行ロールをすでに作成している場合は、[Use an existing role] を選択します。
AWS 管理ポリシーテンプレートを使用して新しい実行ロールを作成する場合は、[Create a new role from AWS policy templates] を選択します。次に、名前を入力し、ポリシーテンプレートを選択します。
4. [Create function] をクリックします。
5. [Configuration] ペインの下の [Function code] で、index.js ファイルを開きます。次に、以下のサンプル関数コードをコピーして、エディタペインに貼り付けます。
'use strict';
exports.handler = (event, context, callback) => {
console.log('LogScheduledEvent');
console.log('Received event:', JSON.stringify(event, null, 2));
callback(null, 'Finished');
};
6. [Deploy] を選択します。
詳細については、コンソールで Lambda 関数を作成するを参照してください。独自のデプロイパッケージを構築およびアップロードするか、コンテナイメージの作成とアップロードによって、Lambda 関数を作成することもできます。
(EventBridge の場合) スケジュールに従って、またはイベントに応答してトリガーする EventBridge ルールを作成する
スケジュールされたイベントの場合
特定のタイミングで何も入力せずにタスクを自動化するには、スケジュールに従ってトリガーする EventBridge ルールの作成の指示に従ってください。自動化されたタスクを実行するスケジュールを必ず指定してください。イベントに応じてトリガーするターゲットとして作成した Lambda 関数を追加します。
注意: ルールを作成すると、Lambda 関数は定義したタイミングで自動的に呼び出されます。サンプルの関数コードを使用した場合、Lambda からのログのストリームがスケジュールに従って CloudWatch に入力されます。
例については、EventBridge を使用して Lambda 関数をスケジュールするを参照してください。
サービスイベントの場合
AWS のサービスによって生成されたイベントに応じてタスクを自動化するには、AWS のサービスのためのルールの作成の指示に従ってください。
この設定の例では、ルールを作成するときに次の設定を使用します。
[Service Name] で [EC2] を選択します。
[Event Type] で [EC2 Instance State-change Notification] を選択します。
ターゲットとして作成した Lambda 関数を追加します。
注意: ルールを作成すると、定義したイベントパターンが発生するたびに Lambda 関数が呼び出されます。
詳細については、EventBridge のイベントパターンとサポートされている AWS のサービスからの EventBridge イベントの例を参照してください。
EventBridge ルールをテストするには
EventBridge ルールをテストするには、インスタンスを停止または開始して、Amazon Elastic Compute Cloud (Amazon EC2) インスタンスの状態を変化させます。Lambda は CloudWatch にログのストリームを送信します。
EC2 インスタンスを起動する方法については、インスタンスを起動するを参照してください。
注意: EC2 インスタンスに接続すると、AWS アカウントで料金が発生する場合があります。この例のためだけにインスタンスを作成する場合は、完了した後、必ずインスタンスを終了してください。
詳細については、Amazon EventBridge の使用を開始するを参照してください。
(Amazon S3 の場合) Lambda 関数をトリガーするように Amazon S3 イベント通知を設定する
Amazon S3 イベント通知を使用して Lambda 関数をトリガーするには、イベント通知の有効化と設定の指示に従ってください。
この設定の例では、S3 イベント通知を作成するときに以下の設定を使用します。
[Event types] で、[All object create events] チェックボックスを選択します。
[Destination] で、[Lambda function] を選択します。
[Lambda function] ドロップダウンリストで、前に作成した Lambda 関数を選択します。
S3 バケットの作成方法については、最初の S3 バケットを作成するを参照してください。
Amazon S3 イベント通知をテストするには
セットアップをテストするには、オブジェクトを S3 バケットにアップロードします。プレフィックスまたはサフィックスフィルターを設定した場合、オブジェクトに正しいプレフィックスまたはサフィックスがあることを確認してください。
アップロードが完了すると、Lambda 関数が呼び出されます。サンプルの関数コードを使用した場合、Lambda からのログのストリームが CloudWatch に入力されます。これらの CloudWatch logs には、S3 バケット名やオブジェクト名など、イベントオブジェクトのメタデータが含まれています。
例については、Amazon S3 で Lambda を使用するを参照してください。
関連情報
EC2 インスタンスの状態が変化したときに、カスタマイズされた E メール通知を受け取るにはどうすればよいですか?