data "archive_file" "lambda" {
type = "zip"
source_file = "lambda.js"
output_path = "lambda_function_payload.zip"
}
resource "aws_iam_role" "iam_for_lambda" {
name = "iam_for_lambda"
assume_role_policy = jsonencode({
Version = "2012-10-17"
Statement = [
{
Action = "sts:AssumeRole"
Principal = {
Service = "lambda.amazonaws.com"
}
Effect = "Allow"
Sid = ""
},
]
})
}
Action = "sts:AssumeRole"
Principal = { Service = "lambda.amazonaws.com" }
즉 Lambda가 다른 aws 리소스를 접근하기 위한 설정
resource "aws_iam_role_policy_attachment" "lambda_basic_execution" {
policy_arn = "arn:aws:iam::aws:policy/service-role/AWSLambdaBasicExecutionRole"
role = aws_iam_role.iam_for_lambda.name
}
policy_arn = "arn:aws:iam::aws:policy/service-role/AWSLambdaBasicExecutionRole"
IAM 역할 정책 첨부 리소스를 생성
role = aws_iam_role.iam_for_lambda.name
위에 설정한 규칙 적용
resource "aws_lambda_function" "test_lambda" {
filename = data.archive_file.lambda.output_path
function_name = "lambda_function_name"
role = aws_iam_role.iam_for_lambda.arn
handler = "lambda.test"
source_code_hash = data.archive_file.lambda.output_base64sha256
runtime = "nodejs18.x"
environment {
variables = {
foo = "bar"
}
}
}