【AWS】TerraformでDynamoDBとLambdaを作成してみた

TerraformでDynamoDBとLambdaを作成してみた
構成
こんな感じ

実践!
1.環境作成
1-1.下記ファイルを作成
version.tf
terraform { required_providers { aws = { source = "hashicorp/aws" version = "~> 5.0" } } required_version = ">= 1.0.0" }
provider.tf
provider "aws" { profile = "testvault" region = "ap-northeast-1" }
main.tf
resource "aws_dynamodb_table" "example_table" { name = "ExampleTable" billing_mode = "PAY_PER_REQUEST" hash_key = "key" attribute { name = "key" type = "S" } tags = { Environment = "dev" Name = "ExampleTable" } } resource "aws_dynamodb_table_item" "example_item" { table_name = aws_dynamodb_table.example_table.name hash_key = aws_dynamodb_table.example_table.hash_key item = <<ITEM { "key": {"S": "1"}, "name": {"S": "テストデータ"} } ITEM } resource "aws_iam_role" "lambda_execution_role" { name = "lambda-execution-role" assume_role_policy = jsonencode({ Version = "2012-10-17", Statement = [ { Effect = "Allow", Principal = { Service = "lambda.amazonaws.com" }, Action = "sts:AssumeRole" } ] }) } resource "aws_iam_policy_attachment" "lambda_dynamodb_attach" { name = "lambda-dynamodb-policy" roles = [aws_iam_role.lambda_execution_role.name] policy_arn = "arn:aws:iam::aws:policy/AmazonDynamoDBFullAccess" } resource "aws_lambda_function" "example_lambda" { filename = "lambda_function.zip" function_name = "example_lambda" role = aws_iam_role.lambda_execution_role.arn handler = "lambda_function.lambda_handler" runtime = "python3.9" environment { variables = { TABLE_NAME = aws_dynamodb_table.example_table.name } } }
lambda_function.py
import boto3 import os def lambda_handler(event, context): # DynamoDBクライアントの初期化 dynamodb = boto3.resource('dynamodb') table_name = os.environ['TABLE_NAME'] table = dynamodb.Table(table_name) # DynamoDBテーブルからデータを取得 response = table.get_item(Key={"key": "1"}) item = response.get('Item', {}) return { "statusCode": 200, "body": item }
1-2.lambda_function.pyをzip化し、tfファイルと同じ階層のフォルダに保存
1-3.terraform実行
> terraform fmt > terraform init > terraform plan > terraform apply
2.動作確認
2-1.作成したLambda関数のテストを実行し、200OKとアイテム情報が返ってくることを確認
