概要
TerraformでLambdaファンクションをデプロイする最低限だけ書いたメモ。
以下に資材一式がある。
https://github.com/kuredev/test-lambda-circleci/tree/minimum-lambda
前提
- terraform がインストール済であること
- tfenv が使いやすそう
- AWSの認証情報が設定されていること(環境変数かホームディレクトリの .aws配下等)
- デプロイするLambdaファンクションの仕様
手順
Lambdaファンクションのソースコードを準備
src/lambda_handler.rb
require "json" class LambdaHandler def self.lambda_handler(*) puts "hogehoge" { result: true } end end
Terraformファイルを準備
main.tf
provider "aws" { region = "ap-northeast-1" } resource "aws_lambda_function" "test-terraform" { filename = data.archive_file.test-terraform.output_path function_name = "test-terraform" role = aws_iam_role.test-terraform.arn handler = "lambda_handler.LambdaHandler.lambda_handler" runtime = "ruby2.7" source_code_hash = data.archive_file.test-terraform.output_base64sha256 } data "archive_file" "test-terraform" { type = "zip" source_dir = "./src" output_path = "tmp/test-terraform.zip" } data "aws_iam_policy_document" "test-terraform" { statement { actions = [ "sts:AssumeRole" ] principals { type = "Service" identifiers = ["lambda.amazonaws.com"] } } } resource "aws_iam_role" "test-terraform" { name = "test-terraform-role" assume_role_policy = data.aws_iam_policy_document.test-terraform.json } resource "aws_iam_role_policy_attachment" "test-terraform" { role = aws_iam_role.test-terraform.id policy_arn = "arn:aws:iam::aws:policy/service-role/AWSLambdaBasicExecutionRole" }
デプロイ
$ terraform init $ terraform deploy
関連リンク
lambda_function | Resources | hashicorp/aws | Terraform Registry https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/lambda_function