TerraformでLambdaのScheduled EventをDeployします
4 min readJun 8, 2018
晚點再補上中文版,這是要給同事看的教學文件。破日文QQ
Terraform は、インフラ環境における構築・変更・バージョン変更を安全かつ効率的に行うツール。Terraformは既存の有名なサービスプロバイダが提供している内部サービスも管理できます。(参考:Qitta、Infra as Code)
- Terraformをインストールします(Mac環境)
$ brew install terraform
2. Terraformファイルを用意します
AWSのLambda functionを定期的に実行する場合は、CloudWatchのScheduled Eventルールを使います。
ルール :一致した受信イベントを検出し、処理のためにターゲットに振り分けます。(参考:公式文章、Qitta文章)
TerraformでDeployするCodeが下記に記載します。
$ mkdir terraform_prac
$ cd terraform_prac
$ touch main.tf
File:main.tf
schedule_expression:cron(0/5 * * * ? *) << 5分おきに実行する 、CRONの書き方このAWS公式ドキュメントを参考してください。
以降のTerraform Codeは、LambdaもうDeployしたという想定の下でした。(つまり、arnとfunction nameが確定していた)
# 1つのルールで、複数のターゲット(最大五つ)を振り分けることができ、それらのすべてが並列に処理されます。resource "aws_cloudwatch_event_rule" "run_xxx_every_five_minutes" {
name = "YOUR SCHEDULE EVENT RULE NAME"
description = "YOUR SCHEDULE EVENT RULE DESCRIPTION"
schedule_expression = "cron(0/5 * * * ? *)"
is_enabled = "false"
lifecycle {
create_before_destroy = false
}
}# Target(DeployedしたLambda)とEvent Ruleを紐付けますresource "aws_cloudwatch_event_target" "xxx_every_five_minutes" {
rule = "${aws_cloudwatch_event_rule.run_xxx_every_five_minutes.name}"
target_id = "xxx_every_five_minutes"
arn = "YOUR LAMBDA ARN"
depends_on = ["aws_cloudwatch_event_rule.run_xxx_every_five_minutes"]
lifecycle {
create_before_destroy = false
}
}# lambda_permissionでLambda権限を与えます(Allow Lambda to be executed by Cloud Watch)resource "aws_lambda_permission" "xxx_every_five_minutes_permission" {
action = "lambda:InvokeFunction"
function_name = "YOUR LAMBDA FUNCTION NAME"
principal = "events.amazonaws.com"
source_arn = "${aws_cloudwatch_event_rule.xxx_every_five_minutes.arn}"
lifecycle {
create_before_destroy = false
}
}
File:provider.tf (AWS権限を与えるため)
provider "aws" {
access_key = "YOUR AWS ACCESS KEY"
secret_key = "YOUR AWS SCRECT KEY"
region = "YOUR AWS REGION"
}
3. Terraformコード実行
実行計画を確認します。
$ terraform planリソースの変更を実行するコマンド
$ terraform applyリソース変更について、進行状況の確認
$ terraform show