Lambda でタスクを自動化する方法を教えてください。

最終更新日: 2019 年 10 月 14 日

AWS Lambda を使用して、AWS アカウントのタスクを自動化したいのですが、セットアップするにはどうすればよいですか ?

簡単な説明

スケジュールに基づいて、または特定のイベントへの応答で、Lambda と統合して関数を呼び出すことができる AWS のサービスが複数あります。Amazon CloudWatch EventsAmazon Simple Storage Service (Amazon S3) イベント通知は、タスクの自動化に最もよく使用されるものの一部です。この記事では、ユースケースのガイドラインとして使用できる両方の方法の例を示します。

その他の例については、「チュートリアル: スケジュールされたイベントでの AWS Lambda の使用」と「チュートリアル: Amazon S3 での AWS Lambda の使用」を参照してください。

注意: CloudWatch と Amazon S3 は、Lambda 関数の実行ロールを自動的に更新し、リソースベースのポリシーを使用して必要なアクセスを追加します。ただし、すべての AWS のサービスがこれを自動的に行うわけではなく、他のプロセスが関数の実行ロールを変更して、正しく呼び出されなくなる場合もあります。このような場合、Lambda と統合するサービスのアクセス許可を手動で追加します。

解決方法

Lambda 関数の作成

次の例の手順に従って、入力を Amazon CloudWatch Logs に記録する単純な関数を作成します。この関数は、設定するイベントのターゲットになります。サンプル関数コードを、ユースケースで自動化するタスクの独自のコードに置き換えることができます。

注意: 独自のデプロイパッケージを構築してアップロードすることで Lambda 関数を作成することもできます。

1.    Lambda コンソールを開きます。

2.    Lambda を初めて使用する場合は、[今すぐ開始] を選択します。そうでない場合は、[関数を作成] を選択します。[関数を作成] ページが開き、[最初から作成] オプションが表示されます。

3.    [最初から作成] を選択した状態で、[基本情報] の下で、次の操作を実行します。
[関数名] には、関数の名前を入力します。
[ランタイム] では、[Node.js 10.x] を選択します。

4.    [アクセス許可] の下で、[実行ロールの選択または作成] を展開し、次のいずれかを実行します。
Lambda を初めて使用する場合は、[基本的な Lambda のアクセス許可を持つ新しいロールを作成] を選択します。
使用する Lambda 実行ロールをすでに作成している場合は、[既存のロールを使用] を選択します。
AWS 管理ポリシーテンプレートを使用して新しい実行ロールを作成する場合は、[AWS ポリシーテンプレートから新しいロールを作成] をクリックし、名前を入力してからポリシーテンプレートを選択します。

5.    [関数を作成] を選択します。

6.    [関数コード] の [設定] ペインで、次のように、このサンプル関数コードを [エディタペイン] に貼り付けます。

'use strict';
exports.handler = (event, context, callback) => {
    console.log('LogScheduledEvent');
    console.log('Received event:', JSON.stringify(event, null, 2));
    callback(null, 'Finished');
};

7.    [保存] を選択します。

詳細については、[コンソールで Lambda 関数を作成する] を参照してください。

CloudWatch Events ルールの作成

CloudWatch Events を使用して、スケジュールに基づいてトリガーするルール、またはイベントに応じてトリガーするルールを作成します。詳細については、「Amazon CloudWatch Events の使用を開始する」を参照してください。

スケジュールされたイベント

特定のタイミングで何も入力せずに処理を行うには、「スケジュールに従ってトリガーする CloudWatch Events ルールの作成」の指示に従ってください。自動化タスクを実行する頻度またはタイミングのスケジュールを指定します。イベントに応じてトリガーするターゲットとして作成した Lambda 関数を追加します。

ルールを作成すると、Lambda 関数は定義したタイミングで自動的に呼び出されます。サンプルの関数コードを使用した場合、Lambda からのログのストリームがスケジュールに従って CloudWatch に入力されます。

注意: 別の例については、「チュートリアル: CloudWatch Events を使用して AWS Lambda 関数をスケジュールする」を参照してください。

サービスイベント

AWS のサービスによって生成されたイベントに応じて処理を行うには、「イベントでトリガーする CloudWatch Events ルールの作成」の指示に従ってください。このセットアップ例のサービス名では、[EC2] を選択します。[イベントタイプ] で [EC2 インスタンスの状態変更通知] を選択します。ターゲットとして作成した Lambda 関数を追加します。

注意: 詳細については、「CloudWatch Events のイベントパターン」と「サポートされているサービスからの CloudWatch Events のイベント例」を参照してください。

ルールを作成すると、定義したイベントパターンが発生するたびに Lambda 関数が呼び出されます。

この例では、Amazon Elastic Compute Cloud (Amazon EC2) インスタンスの状態を変更することでルールをテストできます。まだ行っていない場合は、EC2 インスタンスを起動します。インスタンスを作成し、インスタンスを停止または開始すると、Lambda はログのストリームを CloudWatch に送信します。

注意: EC2 インスタンスでは、AWS アカウントに料金が発生する場合があります。この例のためだけにインスタンスを作成する場合は、繰り返し発生する料金を防ぐために、完了したら必ずインスタンスを終了してください。

Amazon S3 イベント通知の設定

指定したサポートされている Amazon S3 イベントタイプが S3 バケットで発生するたびに、Amazon S3 イベント通知を使用して Lambda 関数をトリガーします。詳細とイベントの例については、「Amazon S3 での AWS Lambda の使用」を参照してください。

まだ行っていない場合は、S3 バケットを作成します。次に、イベント通知の有効化と設定の手順に従ってください。この例の [イベント] では、[すべてのオブジェクト作成イベント] チェックボックスを選択します。[送信先] では、[Lambda 関数] を選択します。[Lambda] では、作成した Lambda 関数を選択します。

セットアップをテストするには、オブジェクトを S3 バケットにアップロードします。プレフィックスまたはサフィックスフィルターを設定した場合、オブジェクトに正しいプレフィックスまたはサフィックスがあることを確認してください。アップロードが完了すると、Lambda 関数が呼び出されます。サンプルの関数コードを使用した場合、Lambda からのログのストリームが CloudWatch に入力されます。このログには、S3 バケット名やオブジェクト名など、イベントオブジェクトのメタデータが含まれています。