Quantcast
Channel: プログラミング
Viewing all articles
Browse latest Browse all 8151

【Terraform】Terraform ~ AWS Lambda ~ - プログラム の超個人的なメモ

$
0
0

■ はじめに

大分、久しぶりに、Terraformを使うので
リハビリがてらに、AWS Lambdaをまとめていく

目次

【1】API
 1)aws_lambda_function
 2)aws_lambda_layer_version
 3)aws_lambda_permission
【2】Tips
 1)archive_file で ZIP圧縮する
【3】Hello World
 0)前提条件
 1)サンプル
 2)実行

【1】API

1)aws_lambda_function

* Lambda関数を作成

https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/lambda_function

2)aws_lambda_layer_version

* Lambda レイヤー を作成

https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/lambda_layer_version

3)aws_lambda_permission

* S3などのリソースに対して、Lambda関数のアクセス許可を付与

https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/lambda_permission

【2】Tips

1)archive_file

*  archive_fileで ZIP圧縮する

https://registry.terraform.io/providers/hashicorp/archive/latest/docs/data-sources/file

# Archive a single file.
data "archive_file" "init" {
  type        ="zip"
  source_file ="${path.module}/init.tpl"
  output_path ="${path.module}/files/init.zip"
}

2)filebase64sha256

* ファイルをbase64エンコードしたSHA256ハッシュ値を返す

https://developer.hashicorp.com/terraform/language/functions/filebase64sha256

【3】Hello World

手始めに、最小単位の物を作ってみる

0)前提条件

* Lambda の IAMロールは、既に作成してあるもの
 ("arn:aws:iam::123456789012:role/your-role")とし、
 それを使うものとする

1)サンプル

* TFコードとLambdaの基になるPythonコードを作成する

フォルダ構成

├── lambda_function
│   └── main.py
└── main.tf

main.tf

# LambdaのファイルをZIP圧縮する
data "archive_file" "demo_zip" {
  type        ="zip"
  source_dir  ="${path.module}/lambda_function"
  output_path ="${path.module}/demo_lambda.zip"
}

# Lambda関数の作成
resource "aws_lambda_function" "demo_lambda" {
  function_name    ="demo-lambda"
  handler          ="main.handler"
  runtime          ="python3.12"
  filename= data.archive_file.demo_zip.output_path
  source_code_hash = filebase64sha256(data.archive_file.demo_zip.output_path)
  role ="arn:aws:iam::123456789012:role/your-role"
}

# 
resource "aws_cloudwatch_log_group" "demo_log_group" {
  name ="/aws/lambda/${aws_lambda_function.demo_lambda.function_name}"
  retention_in_days =30}

main.py

import json

defhandler(event, context):
    response = {
        'statusCode': 200,
        'body': 'Hello, World!'
    }
    return response

2)実行

terraform init

terraform plan

terraform apply

参考文献

https://zenn.dev/not75743/articles/7a7d3a2fc7e788
https://qiita.com/curlneko/items/15607f8ef319cc97a75e
https://qiita.com/neruneruo/items/feca4ea15e2230c188b4
https://hands-on.cloud/s3-trigger-lambda-terraform-example/

関連記事

Terraform ~ 環境構築編 ~
https://dk521123.hatenablog.com/entry/2023/04/05/000224
Terraform ~ 入門編 ~
https://dk521123.hatenablog.com/entry/2019/12/09/222057
Terraform ~ 基本編 ~
https://dk521123.hatenablog.com/entry/2023/05/03/000000
Terraform ~ AWS ECR ~
https://dk521123.hatenablog.com/entry/2023/05/23/002314
Lambda ~ Python / 入門編 ~
https://dk521123.hatenablog.com/entry/2021/10/07/103317
Lambda ~ Python / 外部モジュール追加 ~
https://dk521123.hatenablog.com/entry/2024/05/25/005456
Lambda ~ Python / S3トリガー ~
https://dk521123.hatenablog.com/entry/2024/05/23/162229


Viewing all articles
Browse latest Browse all 8151

Trending Articles