定期的に実行するようにスケジュールされたAWSLambda関数を作成する

スポンサーリンク

定期的に実行するようにスケジュールされたAWS Lambda関数を作成してみます。

■PC環境

>Windows 10

Google Chrome

■AWS Lambda関数を作成する

定期的に実行するようにスケジュールされたAWS Lambda関数を作成しますが、その前にAWSマネジメントコンソール(https://aws.amazon.com/jp/console/)にアクセスし、お持ちのアカウント情報でログインを行います。

ログイン後、「サービス」から「Lambda」をクリックします。クリック後、左メニューから「ダッシュボード」をクリックし、さらに「関数の作成」ボタンをクリックします。

クリックすると、「関数の作成」に移動します。このページ内で「一から作成」を選択し、「基本的な情報」を入力していきます。まずは「関数名」は、今回「Schedulelambdafunction」とします。次に「ランタイム」は、デフォルトでは「node.js」といった設定になっていますが、すでに設定されているランタイムをクリックするとメニューが表示されますので、今回は「Python 3.7」を選択します。

選択後、「アーキテクチャ」は「x86_64」を選択します。選択後、「デフォルトの実行ロールの変更」の文字をクリックすると、追加で設定項目が表示されます。表示された「実行ロール」から「既存のロールを使用する」を選択します。

 

選択後「既存のロール」から、今回は「service-role/Hello-role-***」という既存のロールを選択します。選択後、「関数の作成」ボタンをクリックし、既存のロールを用いましたが、上記の「ロググループが存在しません 特定のロググループ: /aws/lambda/Schedulelambdafunction はこのアカウントまたはリージョンに存在しません。」というエラーが発生、ログが確認できませんでした。

確認できませんでしたので、「基本的なLambda アクセス権限で新しいロールを作成」を選択すると、上記のエラーが表示されない。

クリックすると、「関数 Schedulelambdafunction を正常に作成しました。関数コードおよび設定を変更できるようになりました。テストイベントで関数を呼び出すには、[テスト] をクリックします。」と表示され、AWS Lambda関数が作成されます。

作成されたAWS Lambda関数では、概要などが表示され、ページ下にはコードソースが表示されていますので、コードを変更します。

■コード

import json
import datetime

def lambda_handler(event,context):
	current_data = datetime.datetime.now()
	print(str(current_data))
	return{
	'statusCode':200,
	'body': json.dumps(str(current_data))
	}

今回はimportでPython標準ライブラリであるjsonとdatetimeを呼び出します。その後、def文を用いてlambda_handler()という関数を定義します。定義した関数を呼び出した時に実行される処理としては、current_data変数内に、datetime.datetime.now()を用いて、現在日時のdatetimeオブジェクトを取得し、格納。格納後、print()でstr()を用いてcurrent_data変数を文字列に変換し出力。さらにreturnでステータスコードなどを返すというものです。

■テスト・検証

コードを変更後、「Deploy」ボタンをクリックします。クリックすると「関数 Schedulelambdafunction が正常に更新されました。」と表示され、コードの更新が行われます。

コードの更新後、「テスト」タブをクリックします。

クリックすると、「テストイベント」が表示されますので、タブ内で「

設定後「テンプレート – オプション」を「hello-world」に選択します。選択後、「テスト」ボタンをクリックします。

クリックすると、「実行結果:成功」と表示されますので、こちらをクリックすると、テストの詳細が確認できます。確認すると、今回作成したAWS Lambda関数が呼び出され、returnが返されていることが確認できました。これでテスト・検証は完了です。

■スケジュールされたLambda実行用のEventBridgeイベントルールを作成する

完了後、スケジュールされたLambda実行用のEventBridgeイベントルールを作成します。作成のために、「AWSマネジメントコンソール」から「CloudWatch」サービスへ移動します。

移動後、「イベント」の「ルール」をクリックします。クリックすると、2022年6月現在、「CloudWatch Events は EventBridge となりました」というポップアップが表示されています。このポップアップ内に「Amazon EventBridge に移動」ボタンがありますので、こちらをクリックします。

クリックすると、「Amazon EventBridge」の「ルール」に移動します。「ルール」内の「ルールを作成」ボタンをクリックします。

クリックすると、「ルールを作成」が表示されます。「ルールを作成」内ではまず「ルールの詳細を定義」します。「名前」は、今回「Schedulelambdafunction」とします。「説明 – オプション」は、今回は未入力とします。「イベントバス」は「default」を選択します。選択後「ルールタイプ」は「スケジュール」を選択します。

選択後、「次へ」ボタンをクリックします。

クリックすると、「スケジュールを定義」が表示され、スケジュールを定義しますので、「スケジュールパターン」を「特定の時刻 (毎月第 1 月曜日の午前 8 時 (PST) など) に実行されるきめ細かいスケジュール。(Cron 式)」か、「通常のレートで実行されるスケジュール (10 分ごとなど)。(レート式)」のいずれかを選択します。今回は、「通常のレートで実行されるスケジュール (10 分ごとなど)。(レート式)」します。

選択後、レート式では、値を「1」とし、単位を「分」とします。これで1分ごとにスケジュールが実行されるようになります。

レート式を設定後、「次へ」ボタンをクリックします。

クリックすると、「ターゲットを選択」が表示されます。こちらではターゲットを選択していますので、「ターゲット1」内で「ターゲットタイプ」を「AWS のサービス」に選択します。

選択後、「ターゲットを選択」で「Lambda 関数」を選択します。選択後、「関数」では今回作成した

選択後、「バージョン/エイリアスを設定」は「デフォルト」とし、「追加設定」は「ターゲット入力を設定」を「定数(JSONテキスト)」とします。

「定数(JSONテキスト)」に設定後、「JSON で定数を指定」の入力欄に「{}」と入力します。

入力すると「JSON は有効です」と表示されます。これでターゲット入力の設定は完了です。

完了後、「イベントの最大有効期間 – オプション」、「再試行回数 – オプション」は未設定のままで、「デッドレターキュー」は「なし」に選択します。

選択後、「次へ」ボタンをクリックします。

クリックすると、「タグを設定 – オプション」が表示されます。「タグを設定」では、AWS のリソースに割り当てるラベルを設定できますが、今回は設定しないので、デフォルトのままで「次へ」ボタンをクリックします。

クリックすると、「レビューと作成」が表示されます。こちらでは、定義したルールの詳細などを確認できます。マウスでスクロールしながら、ページ下まで確認します。

確認後、ページ下にある「ルールの作成」ボタンをクリックします。

クリックすると、「ルール Schedulelambdafunction を正常に作成しました」と表示され、ルールの作成が完了となります。

完了後、サーバーレス関数の実行を確認するために、「Lambda」サービスの作成した関数に戻り、「テスト」を行っておきます。「テスト」後、「モニタリング」タブをクリックします。

クリックすると、タブが開き「CloudWatch のログを表示」ボタンがありますので、こちらをクリックします。

クリックすると、「CloudWatch」サービスへ移動し、「ログストリーム」にログが表示されていますので、こちらをクリックします。

クリックすると、「タイムスタンプ」と「メッセージ」が記録されており、「START RequestId」と「END RequestId」の間で、定期的なスケジュールが実行され、現在の日時が出力されていることが確認できました。

コメント

タイトルとURLをコピーしました