TerraformでAWSの環境構築 ( Lambda )
やったこと
Terraformを利用してAWS環境のlambda-functionを作成する。
実行環境
■ $ terraform --version
Terraform v0.12.0 + provider.aws v2.13.0
lambda-functionをつくる
公式Doc: Resource: aws_lambda_function
■ IAMロール
lambda-basic-execution
というIAMロールは事前に作成したものをセットした。
data "aws_iam_role" "basic" { name = "lambda-basic-execution" }
■ Lambdaの設定 ( handler / runtime / timeout / memory_size )
よく設定するパラメータは以下のようにセットした。
handler = "main" runtime = "go1.x" memory_size = 128 timeout = 10
■ 環境変数
environment { variables = { CHANNEL = var.channel WEBHOOKURL = var.webhookurl } }
Terraformのコード全体
■ ディレクトリ構造(一部抜粋)
├── external │ └── lambda │ └── codepipeline-slack.zip ├── lambda.tf ├── modules │ ├── lambda │ │ └── main.tf
→ external/lambda/
にlambdaに展開するGoファイルをzip圧縮したものを配置
■ Resource側 ( modules/lambda/main.tf )
variable "function_name" {} variable "filename" {} variable "handler" {} variable "runtime" {} variable "channel" {} variable "webhookurl" {} variable "memory_size" {} variable "timeout" {} data "aws_iam_role" "basic" { name = "lambda-basic-execution" } resource "aws_lambda_function" "lambda" { function_name = var.function_name filename = var.filename handler = var.handler role = data.aws_iam_role.basic.arn runtime = var.runtime memory_size = var.memory_size timeout = var.timeout environment { variables = { CHANNEL = var.channel WEBHOOKURL = var.webhookurl } } }
■ Module側 (lambda.tf)
module "create_lambda_codepipeline_slack" { source = "./modules/lambda" function_name = "codepipeline-slack" filename = "./external/lambda/codepipeline-slack.zip" handler = "main" runtime = "go1.x" memory_size = 128 timeout = 10 channel = "test" webhookurl = "https://hooks.slack.com/services/XXXXX" }
まとめ
Terraformを利用してAWS lambda-functionを作成しました。 Goのコードのzip圧縮や環境変数・実行環境などを自動化できるので、テンプレート化して 構築すると便利かも。