🤔
[Terraform]Lambdaの構築に使用したリソースとその引数について
はじめに
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