あなたのラムダをterraformでスケジュールする方法?
5330 ワード
定期的にあなたのラムダを定期的にユーザーアクションによって引き起こされることなく実行する必要がある場合があります.例えば、毎月/毎週のベースでお客様にメールを送信しようとしたり、データに対してプロセスを実行したりします.
ラムダ関数の実行は、AWS Event Bridge , ここで、スケジュールで実行し、ラムダをトリガルールを作成します.
イベントブリッジは、ソースから目的地までデータ(またはイベント)を渡すことによって、アプリケーションとサービスを接続するServerlessイベントバスです.このポストでは、イベントブリッジとラムダを設定し、ラムダ関数の実行をスケジュールする規則を設定します.
セットアップインフラストラクチャ
私はしばらくの間Torraformを学びたかったので、私はこのポストが行動にこれを置く優れた機会であると思いました.私がここの初心者であるので、おそらくterraformファイルを書くより良い方法があります、そして、私はどんなフィードバックも評価します.
まず、ラムダ関数にアップロードする簡単なJSコードを作成します.クリエイトア
インフラストラクチャの各部分に少しずつ掘りましょう.クリエイトア
クラウドプロバイダとしてAWSを定義し、プロファイル名とリソースを設定したい領域を設定します.
また、ロール名を示すハンドラー関数を識別し、ファイル名を追加しました.これは、ラムダコードをパッキングするZIPファイルの名前です.そこで、このインフラストラクチャ設定用のコードをパッケージ化する必要があります.次のコマンドを実行します.
ここで、イベントブリッジルールの設定を準備し、このルールのターゲットとしてラムダ関数を追加します.
インフラの配備
次のコマンドを実行し、インフラストラクチャを検証して配置します. 動作していることを確認するには、AWSコンソールにログインし、ラムダ関数を選択し、「モニター」タブをクリックします.実行する前に、次のようになります.
その後、数分後、期間、エラー、成功率と同時実行に注意してください-これは7時から7時15分までの直線として示しています.実際には、これらは5分ごとに受信された3つの接続点(イベント)です.
これが役に立つことを願っています.どのように、あなたはラムダ関数の実行を予定しますか?
ラムダ関数の実行は、AWS Event Bridge , ここで、スケジュールで実行し、ラムダをトリガルールを作成します.
イベントブリッジは、ソースから目的地までデータ(またはイベント)を渡すことによって、アプリケーションとサービスを接続するServerlessイベントバスです.このポストでは、イベントブリッジとラムダを設定し、ラムダ関数の実行をスケジュールする規則を設定します.
セットアップインフラストラクチャ
私はしばらくの間Torraformを学びたかったので、私はこのポストが行動にこれを置く優れた機会であると思いました.私がここの初心者であるので、おそらくterraformファイルを書くより良い方法があります、そして、私はどんなフィードバックも評価します.
まず、ラムダ関数にアップロードする簡単なJSコードを作成します.クリエイトア
index.js
次のコードをファイルしますexports.handler = async (event) => {
const payload = {
date: new Date(),
message: "awesome lambda function",
};
return JSON.stringify(payload);
};
第二に、私たちはterraformをインストールしたいと思います.brew tap hashicorp/tap
then brew install hashicorp/tap/terraform
. 他のオペレーティングシステムについてはdocs .インフラストラクチャの各部分に少しずつ掘りましょう.クリエイトア
main.tf
ファイルは、私たちの地形形態のすべてを含みます(これは複数のファイルとモジュールに分割されるかもしれません、しかし、このポストのために、私はすべての設定を一つのファイルに保ちます).クラウドプロバイダとしてAWSを定義し、プロファイル名とリソースを設定したい領域を設定します.
provider "aws" {
profile = "default"
region = "ap-southeast-2"
}
ラムダ関数と実行ロールを作成します(これはAWSサービスとリソースにアクセスするための関数の許可を付与するIAMロールです.関数は呼び出され、ログを書き込むか、他のアクションを実行するために使用することができます).resource "aws_iam_role" "iam_for_lambda" {
name = "iam_for_lambda"
# Terraform's "jsonencode" function converts a
# Terraform expression result to valid JSON syntax.
assume_role_policy = jsonencode({
Version = "2012-10-17"
Statement = [
{
Action = "sts:AssumeRole"
Effect = "Allow"
Sid = ""
Principal = {
Service = "lambda.amazonaws.com"
}
},
]
})
}
resource "aws_lambda_function" "test_lambda" {
filename = "schedule-lambda.zip"
function_name = "test_lambda"
role = aws_iam_role.iam_for_lambda.arn
handler = "index.handler"
source_code_hash = filebase64sha256("schedule-lambda.zip")
runtime = "nodejs12.x"
}
この前のスニペットでは、2つのリソースを定義しましたそれは2つの地形ですresource
ブロック、IAMロールの最初のもの、2番目はラムダ関数です.各構成ブロックの前にresource type
とresource name
. 一緒に、リソースタイプとリソース名は、それを更新するとき、資源を特定するためにterraformが使用できるユニークなIDを形成します.また、ロール名を示すハンドラー関数を識別し、ファイル名を追加しました.これは、ラムダコードをパッキングするZIPファイルの名前です.そこで、このインフラストラクチャ設定用のコードをパッケージ化する必要があります.次のコマンドを実行します.
zip -r ./schedule-lambda.zip index.js
.ここで、イベントブリッジルールの設定を準備し、このルールのターゲットとしてラムダ関数を追加します.
resource "aws_cloudwatch_event_rule" "every_5_minutes" {
name = "every_5_minutes_rule"
description = "trigger lambda every 5 minute"
schedule_expression = "rate(5 minutes)"
}
resource "aws_cloudwatch_event_target" "lambda_target" {
rule = aws_cloudwatch_event_rule.every_5_minutes.name
target_id = "SendToLambda"
arn = aws_lambda_function.test_lambda.arn
}
つの最後のステップは、我々がイベントブリッジ規則に我々のラムダ関数を起動する許可を与えるところですこれはaws_lambda_permission
:resource "aws_lambda_permission" "allow_eventbridge" {
statement_id = "AllowExecutionFromEventBridge"
action = "lambda:InvokeFunction"
function_name = aws_lambda_function.test_lambda.function_name
principal = "events.amazonaws.com"
source_arn = aws_cloudwatch_event_rule.every_5_minutes.arn
}
「アクション」でInvokeFunctionを指定し、関数名とソースを定義する方法インフラの配備
次のコマンドを実行し、インフラストラクチャを検証して配置します.
terraform init
作業ディレクトリを準備するにはterraform validate
設定が有効かどうかを調べるにはterraform plan
現在の設定で必要な変更を表示するにはterraform apply
インフラを作成または更新するにはその後、数分後、期間、エラー、成功率と同時実行に注意してください-これは7時から7時15分までの直線として示しています.実際には、これらは5分ごとに受信された3つの接続点(イベント)です.
これが役に立つことを願っています.どのように、あなたはラムダ関数の実行を予定しますか?
Reference
この問題について(あなたのラムダをterraformでスケジュールする方法?), 我々は、より多くの情報をここで見つけました https://dev.to/aws-builders/how-to-schedule-the-execution-of-your-lambda-code-2fl3テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol