チュートリアル: CloudWatch イベント を使用して AWS Lambda 関数をスケジュールする - Amazon CloudWatch Events

チュートリアル: CloudWatch イベント を使用して AWS Lambda 関数をスケジュールする

注記

Amazon EventBridge is the preferred way to manage your events. CloudWatch イベント and EventBridge are the same underlying service and API, but EventBridge provides more features. Changes you make in either CloudWatch or EventBridge will appear in each console. For more information, see Amazon EventBridge.

スケジュールに基づいて AWS Lambda 関数を実行するルールを設定できます。このチュートリアルでは、AWS マネジメントコンソール または AWS CLI を使用してルールを作成する方法について説明します。AWS CLI を使用したいがインストールしていない場合は、AWS Command Line Interface ユーザーガイド を参照してください。

CloudWatch イベント は、スケジュール式で第 2 レベルの精度を提供しません。Cron 式を使用した最小の解決は分です。CloudWatch イベント とターゲットサービスが持つ分散性の特質により、スケジュールされたルールがトリガーされてから、ターゲットサービスがターゲットリソースの実行を優先するまでの遅延は、数秒となる可能性があります。スケジュールされたルールは、その分のうちにトリガーされますが、正確に 0 秒にトリガーされません。

ステップ 1: AWS Lambda 関数を作成する

スケジュールされたイベントのログを記録するラムダ関数を作成します。ルールを作成するときに、この関数を指定します。

Lambda 関数を作成するには

  1. AWS Lambda コンソール (https://console.aws.amazon.com/lambda/) を開きます。

  2. Lambda を初めて使用する場合は、ウェルカムページを参照してください。[Get Started Now] を選択します。そうでない場合、[Lambda 関数の作成] を選択します。

  3. [設計図の選択] ページで、フィルターに helloを入力し、[hello-world] 設計図を選択します。

  4. [Configure triggers] ページで、[Next] を選択します。

  5. [: Configure function] ページで、以下の作業を行います。

    1. Lambda 関数の名前と説明を入力します。たとえば、関数名を「LogScheduledEvent」とします。

    2. Lambda 関数のサンプルコードを編集します。例:

      'use strict'; exports.handler = (event, context, callback) => { console.log('LogScheduledEvent'); console.log('Received event:', JSON.stringify(event, null, 2)); callback(null, 'Finished'); };
    3. [Role] で、[Choose an existing role] を選択します。[既存のロール] で基本的な実行ロールを選択します。それ以外の場合は、新しい基本的な実行ロールを作成します。

    4. [次へ] を選択します。

  6. [Review] ページで、[Create function] を選択します。

ステップ 2: ルールを作成する

Lambda 関数をスケジュールに従って実行するルールを作成します。

コンソールを使用してルールを作成するには

  1. https://console.aws.amazon.com/cloudwatch/ にある CloudWatch コンソールを開きます。

  2. ナビゲーションペインで、[Events]、[Create rule] の順に選択します。

  3. [Event Source] で、以下の操作を実行します。

    1. [Schedule] を選択します。

    2. [Fixed rate of] を選択し、スケジュール間隔 (たとえば 5 分) を指定します。

  4. [ターゲット] で、[ターゲットの追加]、[Lambda 関数] の順に選択します。

  5. [関数] で、作成した Lambda 関数を選択します。

  6. [Configure details] を選択します。

  7. [Rule definition] で、ルールの名前と説明を入力します。

  8. [Create rule] を選択します。

必要に応じて、AWS CLI を使用してルールを作成できます。まず、Lambda 関数を呼び出すためのアクセス権限をルールに付与する必要があります。次にルールを作成し、Lambda 関数をターゲットとして追加できます。

AWS CLI を使用してルールを作成するには

  1. 次の [put-rule] コマンドを使用して、スケジュールに従ってトリガーするルールを作成します。

    aws events put-rule \ --name my-scheduled-rule \ --schedule-expression 'rate(5 minutes)'

    このルールがトリガーされると、このルールのターゲットへの入力として機能するイベントを生成します。以下に示しているのは、イベントの例です。

    { "version": "0", "id": "53dc4d37-cffa-4f76-80c9-8b7d4a4d2eaa", "detail-type": "Scheduled Event", "source": "aws.events", "account": "123456789012", "time": "2015-10-08T16:53:06Z", "region": "us-east-1", "resources": [ "arn:aws:events:us-east-1:123456789012:rule/my-scheduled-rule" ], "detail": {} }
  2. 次の add-permission コマンドを使用して、信頼する CloudWatch イベント サービスプリンシパル (events.amazonaws.com) や指定された Amazon リソースネーム (ARN) を持つルールに対するスコープ権限 :

    aws lambda add-permission \ --function-name LogScheduledEvent \ --statement-id my-scheduled-event \ --action 'lambda:InvokeFunction' \ --principal events.amazonaws.com \ --source-arn arn:aws:events:us-east-1:123456789012:rule/my-scheduled-rule
  3. 次の put-targets コマンドを使用して、このルールに作成した Lambda 関数を 5 分ごとに実行するように追加します。

    aws events put-targets --rule my-scheduled-rule --targets file://targets.json

    次の内容で、targets.json ファイルを作成します。

    [ { "Id": "1", "Arn": "arn:aws:lambda:us-east-1:123456789012:function:LogScheduledEvent" } ]

ステップ 3: ルールの確認

ステップ 2 を完了してから少なくとも 5 分後に、Lambda 関数が呼び出されたことを確認できます。

ルールをテストするには

  1. https://console.aws.amazon.com/cloudwatch/ にある CloudWatch コンソールを開きます。

  2. ナビゲーションペインで、[Events]、[Rules] を選択し、作成したルールの名前を選択して、[Show metrics for the rule] を選択します。

  3. Lambda 関数からの出力を表示するには、以下の操作を実行します。

    1. ナビゲーションペインで [Logs] を選択します。

    2. Lambda 関数 (/aws/lambda/function-name) のロググループの名前を選択します。

    3. 起動したインスタンスの関数によって提供されるデータを表示するログのストリーム名を選択します。

  4. (オプション) 終了したら、ルールを無効にすることができます。

    1. https://console.aws.amazon.com/cloudwatch/ にある CloudWatch コンソールを開きます。

    2. ナビゲーションペインで、[Events]、[Rules] を選択します。

    3. ルールを選択し、[アクション]、[無効化] を選択します。

    4. 確認を求められたら、[Disable] を選択します。