なになれ

IT系のことを記録していきます

ローカル上のAWS LambdaのコードをTerraform化する

ローカル上のAWS LambdaのコードをTerraform化する方法について説明します。
ローカルにあるコードをTerraform化するにあたってはコードのzipファイル化が必要など、そのあたりのポイントを説明します。

説明

以下が全体のコードになります。

lambda.tf

resource "aws_lambda_function" "example" {
  function_name    = "lambda-terraform-example"
  handler          = "main.lambda_handler"
  runtime          = "python3.8"
  filename         = data.archive_file.lambda_function_payload.output_path
  source_code_hash = data.archive_file.lambda_function_payload.output_base64sha256
  role             = aws_iam_role.lambda_exec.arn
}

resource "aws_iam_role" "lambda_exec" {
  name = "lambda_exec_example"
  assume_role_policy = jsonencode({
    Version = "2012-10-17"
    Statement = [
      {
        Action = "sts:AssumeRole"
        Effect = "Allow"
        Principal = {
          Service = "lambda.amazonaws.com"
        }
      }
    ]
  })
}

resource "aws_iam_role_policy_attachment" "lambda_exec_basic" {
  policy_arn = "arn:aws:iam::aws:policy/service-role/AWSLambdaBasicExecutionRole"
  role       = aws_iam_role.lambda_exec.name
}

data "archive_file" "lambda_function_payload" {
  type        = "zip"
  source_dir  = "${path.module}/src"
  output_path = "${path.module}/lambda_function_payload.zip"
}

src/main.py

import json

def lambda_handler(event, context):
    return {
        'statusCode': 200,
        'body': json.dumps('Hello from Lambda!')
    }

aws_lambda_functionのリソースにfilenameとsource_code_hashのパラメータを指定しているのがポイントです。こちらにはLambda関数コードが含まれるZIPアーカイブファイルのパスとハッシュを指定します。Lambda関数のソースコードを含むZIPアーカイブは、data archive_fileブロックで作成され、filenameおよびsource_code_hashパラメータに渡されます。

aws_iam_roleリソースは、Lambda関数が使用するIAMロールを作成します。このロールには、AWS Lambdaによる関数の実行に必要なポリシーが含まれます。最後に、aws_iam_role_policy_attachmentリソースを使用して、作成したIAMロールにAWSLambdaBasicExecutionRoleポリシーをアタッチしています。これは、Lambda関数が必要な最小限の権限を持つようにするためのものです。 path.module はTerraformで使用される予約済み変数の一つで、現在のモジュールのルートディレクトリへの絶対パスを表します。

これでローカル上のAWS LambdaのコードをTerraform化することができます。

おわりに

以下のUdemy講座を公開しています。AWSやTerraformの入門から実践的な内容までを学べるものになっています。ぜひ受講ください。

www.udemy.com