🤔

[Terraform]Lambdaの構築に使用したリソースとその引数について

2024/03/06に公開

はじめに

TerraformでLambdaを構築する際に使用した「Lambdaが持つリソースはなにができるのか」「そのリソースが持つ引数には何を指定したらいいのか」の2点について分からなかったので簡単にまとめました。

Lambdaの構築に使用したTFコード

# Lambda
data "archive_file" "lambda_function_file" {
  type        = "zip"
  source_dir  = "./src/"
  output_path = "./upload/lambda_function.zip"
}

resource "aws_lambda_function" "get_gang_info" {
  filename         = data.archive_file.lambda_function_file.output_path
  function_name    = "get_gang_info"
  role             = aws_iam_role.dynamodb_read_only.arn
  handler          = "lambda_function.lambda_handler"
  source_code_hash = data.archive_file.lambda_function_file.output_base64sha256
  runtime          = "python3.12"
  timeout          = 29
}

resource "aws_lambda_permission" "tr_lambda_permit" {
  statement_id  = "get_gang_info_api"
  action        = "lambda:InvokeFunction"
  function_name = aws_lambda_function.get_gang_info.arn
  principal     = "apigateway.amazonaws.com"
  source_arn    = "${aws_api_gateway_rest_api.get_gang_info_api.execution_arn}/*/GET/gang"
}

リソースの機能と引数に指定する内容

archive_file

Lambda関数のスクリプトファイルをzip化できる。

引数 指定する内容
type zipを指定する
soruce_dir スクリプトが格納されたフォルダを指定する
output_path zip化したフォルダの出力先を指定する

aws_lambda_function

Lambda関数を作成することができる。

引数 指定する内容
filename zip化したファイルのパスを指定する
function_name Lambda関数名を指定する
role 他のAWSサービスに対してアクションを実行するのに必要なロールを指定する
handler スクリプトにあるメイン関数を指定する
source_code_hash 「archive_file.ラベル名.output_base64sha256」で指定する
runtime スクリプトで使用した開発言語を指定する
timeout スクリプトで使用した開発言語を指定する
runtime スクリプト処理の制限時間を指定する

aws_lambda_permission

他のAWSサービスにLambda関数へのアクセス権を与えることができる。

引数 指定する内容
statement_id アクセス権の名前を指定する
action 「lambda:InvokeFunction」ポリシーを指定する
function_name Lambda関数のARNを指定する
principal アクセス権を与えるAWSサービスのプリンシパルを指定する
source_arn アクセス権を与えるAWSサービスのARNを指定する

おわりに

まだまだ理解が浅いので、もっと深掘りしていこうと思います。

参考資料

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

Discussion