TerraformでLambdaのScheduled EventをDeployします

圓圓小熊(Maruマル)
4 min readJun 8, 2018

--

晚點再補上中文版,這是要給同事看的教學文件。破日文QQ

Terraform は、インフラ環境における構築・変更・バージョン変更を安全かつ効率的に行うツール。Terraformは既存の有名なサービスプロバイダが提供している内部サービスも管理できます。(参考:QittaInfra as Code

  1. 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

--

--

圓圓小熊(Maruマル)
圓圓小熊(Maruマル)

Written by 圓圓小熊(Maruマル)

在日本東京打拼的軟體工程師。喜歡滑雪,旅遊,吃美食,寫程式,參加Meetup,以及比價。最近沈迷寫Chatbot,Django以及把玩AWS。

No responses yet