Terraformでlambdaを立ち上げる
要件
Terrafromでlambdaを立ち上げる
タスク
Terrafromでlambdaを立ち上げる
lambdaの実行結果をcloud watchで確認できるようにする
参考記事
▼teraform x lamndaを詳しく説明してくれる!
▼ lamndaとcloud watchの関係がわかる!
▼ terraformの${path.module}に関しての説明
学べること
terraformでlambdaの立ち上げ方がわかる
サーバーレスを理解できる
安くクラウドを仕様する方法
ヒント
main.tf
##########################################
# lambda
##########################################
# ------------------------------
# 通知用Pythonスクリプトの圧縮処理
# ------------------------------
data "archive_file" "lambda_zip" {
source_dir = "${path.module}/src/"
output_path = "${path.module}/test.zip"
} type = "zip"
# ------------------------------
# lambdaのfunctionを設定
# ------------------------------
resource "aws_lambda_function" "sample_app" {
filename = data.archive_file.lambda_zip.output_path
function_name = "test-func"
role = aws_iam_role.lambda_role.arn
handler = "sample_file_name.sample_func_name" //ファイル名.関数名
runtime = "python3.9"
source_code_hash = data.archive_file.lambda_zip.output_base64sha256
timeout = "45"
}
# ------------------------------
# lambdaのロールを設定
# ------------------------------
resource "aws_iam_role" "lambda_role" {
name = "lambda_role"
assume_role_policy = data.aws_iam_policy_document.lambda_role_document.json
}
# ------------------------------
# lambdaのポリシードキュメントを作成
# ------------------------------
# 以下のものは一言で言えば、上記のroleは、lamndaのためのものだよ言っているいるようなもの
data "aws_iam_policy_document" "lambda_role_document" {
statement {
actions = ["sts:AssumeRole"]
principals {
type = "Service"
identifiers = ["lambda.amazonaws.com"]
}
}
}
# ------------------------------
# lambdaの基本的なポリシーを追加
# ------------------------------
# これがないとcloud watchにログが書き込まれない、、
data "aws_iam_policy" "lambda_basic_execution" {
arn = "arn:aws:iam::aws:policy/service-role/AWSLambdaBasicExecutionRole"
}
resource "aws_iam_role_policy_attachment" "lambda_basic_execution" {
role = aws_iam_role.lambda_role.name
policy_arn = data.aws_iam_policy.lambda_basic_execution.arn
}
##########################################
# ロググループの追加
##########################################
# ------------------------------
# Lambda関数のログを格納するLogsグループ作成
# ------------------------------
resource "aws_cloudwatch_log_group" "lambda_log_group" {
name = "/aws/lambda/${aws_lambda_function.sample_app.function_name}"
}
lambdaで実行させるpythonファイル
sample_file_name.py
#!/usr/bin/python3.9
def sample_func_name(event, context):
print("hell world")
ハマりポイント
terraformでlamdaを立ち上げた時に、ポリシー等を設定しなければ、cloud watchにログは残らない