見出し画像

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にログは残らない

関連タグ

#lambda #terraform #サーバーレス #aws

いいなと思ったら応援しよう!