テラフォームモジュールは、ほとんどすべてのサポートされているAWSラムダリソースを作成し、機能とレイヤーに必要なラムダ依存関係の構築とパッケージングの世話をします。
このTerraformモジュールは、ServerLess.tfフレームワークの一部であり、Terraformのサーバーレスで作業するときにすべての操作を簡素化することを目的としています。
serverless.tf
モジュールとの統合をサポートします(例を参照)。 module "lambda_function" {
source = " terraform-aws-modules/lambda/aws "
function_name = " my-lambda1 "
description = " My awesome lambda function "
handler = " index.lambda_handler "
runtime = " python3.12 "
source_path = " ../src/lambda-function1 "
tags = {
Name = " my-lambda1 "
}
}
module "lambda_function" {
source = " terraform-aws-modules/lambda/aws "
function_name = " lambda-with-layer "
description = " My awesome lambda function "
handler = " index.lambda_handler "
runtime = " python3.12 "
publish = true
source_path = " ../src/lambda-function1 "
store_on_s3 = true
s3_bucket = " my-bucket-id-with-lambda-builds "
layers = [
module . lambda_layer_s3 . lambda_layer_arn ,
]
environment_variables = {
Serverless = " Terraform "
}
tags = {
Module = " lambda-with-layer "
}
}
module "lambda_layer_s3" {
source = " terraform-aws-modules/lambda/aws "
create_layer = true
layer_name = " lambda-layer-s3 "
description = " My amazing lambda layer (deployed from S3) "
compatible_runtimes = [ " python3.12 " ]
source_path = " ../src/lambda-layer "
store_on_s3 = true
s3_bucket = " my-bucket-id-with-lambda-builds "
}
module "lambda_function_existing_package_local" {
source = " terraform-aws-modules/lambda/aws "
function_name = " my-lambda-existing-package-local "
description = " My awesome lambda function "
handler = " index.lambda_handler "
runtime = " python3.12 "
create_package = false
local_existing_package = " ../existing_package.zip "
}
個別のフロー(異なるリポジトリ、チーム、CI/CDパイプラインなど)で関数コードとインフラストラクチャリソース(IAM許可、ポリシー、イベントなど)を管理する場合。
ソースコードトラッキングを無効にして、 ignore_source_code_hash = true
を設定してモジュールを使用して展開(およびロールバック)をオフにし、ダミー関数を展開します。
インフラストラクチャとダミー関数が展開されている場合、外部ツールを使用して関数のソースコード(AWS CLIを使用)を更新し、Terraformを介してこのモジュールを使用してインフラストラクチャを管理できます。
local_existing_package
値の変更は、Terraformを介して展開をトリガーする可能性があることに注意してください。
module "lambda_function_externally_managed_package" {
source = " terraform-aws-modules/lambda/aws "
function_name = " my-lambda-externally-managed-package "
description = " My lambda function code is deployed separately "
handler = " index.lambda_handler "
runtime = " python3.12 "
create_package = false
local_existing_package = " ./lambda_functions/code.zip "
ignore_source_code_hash = true
}
このモジュールは、事前に構築されたパッケージをS3バケットにコピーしないことに注意してください。このモジュールは、局所的に構築されたパッケージとS3バケットのみを保存できます。
locals {
my_function_source = " ../path/to/package.zip "
}
resource "aws_s3_bucket" "builds" {
bucket = " my-builds "
acl = " private "
}
resource "aws_s3_object" "my_function" {
bucket = aws_s3_bucket . builds . id
key = " ${ filemd5 (local . my_function_source ) } .zip "
source = local . my_function_source
}
module "lambda_function_existing_package_s3" {
source = " terraform-aws-modules/lambda/aws "
function_name = " my-lambda-existing-package-local "
description = " My awesome lambda function "
handler = " index.lambda_handler "
runtime = " python3.12 "
create_package = false
s3_existing_package = {
bucket = aws_s3_bucket.builds.id
key = aws_s3_object.my_function.id
}
}
module "lambda_function_container_image" {
source = " terraform-aws-modules/lambda/aws "
function_name = " my-lambda-existing-package-local "
description = " My awesome lambda function "
create_package = false
image_uri = " 132367819851.dkr.ecr.eu-west-1.amazonaws.com/complete-cow:1.0 "
package_type = " Image "
}
module "lambda_layer_local" {
source = " terraform-aws-modules/lambda/aws "
create_layer = true
layer_name = " my-layer-local "
description = " My amazing lambda layer (deployed from local) "
compatible_runtimes = [ " python3.12 " ]
source_path = " ../fixtures/python-app1 "
}
module "lambda_layer_s3" {
source = " terraform-aws-modules/lambda/aws "
create_layer = true
layer_name = " my-layer-s3 "
description = " My amazing lambda layer (deployed from S3) "
compatible_runtimes = [ " python3.12 " ]
source_path = " ../fixtures/python-app1 "
store_on_s3 = true
s3_bucket = " my-bucket-id-with-lambda-builds "
}
確かに、Lambda@Edge関数をUS East(N. Virginia)地域( us-east-1
)に展開してください。 Lambda関数の要件と制限を参照してください。
module "lambda_at_edge" {
source = " terraform-aws-modules/lambda/aws "
lambda_at_edge = true
function_name = " my-lambda-at-edge "
description = " My awesome lambda@edge function "
handler = " index.lambda_handler "
runtime = " python3.12 "
source_path = " ../fixtures/python-app1 "
tags = {
Module = " lambda-at-edge "
}
}
module "lambda_function_in_vpc" {
source = " terraform-aws-modules/lambda/aws "
function_name = " my-lambda-in-vpc "
description = " My awesome lambda function "
handler = " index.lambda_handler "
runtime = " python3.12 "
source_path = " ../fixtures/python-app1 "
vpc_subnet_ids = module . vpc . intra_subnets
vpc_security_group_ids = [ module . vpc . default_security_group_id ]
attach_network_policy = true
}
module "vpc" {
source = " terraform-aws-modules/vpc/aws "
name = " my-vpc "
cidr = " 10.10.0.0/16 "
# Specify at least one of: intra_subnets, private_subnets, or public_subnets
azs = [ " eu-west-1a " , " eu-west-1b " , " eu-west-1c " ]
intra_subnets = [ " 10.10.101.0/24 " , " 10.10.102.0/24 " , " 10.10.103.0/24 " ]
}
Lambda関数が使用するIAMの役割にIAMポリシーを添付する6つのサポートされている方法があります。
policy_json
-json文字列またはheredoc、 attach_policy_json = true
。policy_jsons
attach_policy_jsons = true
and number_of_policy_jsons > 0
の場合、json文字列またはheredocのリスト。policy
attach_policy = true
の場合、既存のIAMポリシーのARN。policies
attach_policies = true
およびnumber_of_policies > 0
の場合、既存のIAMポリシーのARNSのリスト。policy_statements
-IAMポリシーとして生成されるIAMステートメントを定義するマップのマップ。 attach_policy_statements = true
が必要です。詳細については、 examples/complete
参照してください。assume_role_policy_statements
ラムダ関数の役割(信頼関係)を想定するためのIAMポリシーとして生成されるIAMステートメントを定義するマップのマップ。詳細については、 examples/complete
参照してください。 特定のリソースがLambda関数を呼び出すことを許可するために、Lambda許可を指定する必要があります。
module "lambda_function" {
source = " terraform-aws-modules/lambda/aws "
# ...omitted for brevity
allowed_triggers = {
Config = {
principal = " config.amazonaws.com "
principal_org_id = " o-abcdefghij "
}
APIGatewayAny = {
service = " apigateway "
source_arn = " arn:aws:execute-api:eu-west-1:135367859851:aqnku8akd0/*/*/* "
},
APIGatewayDevPost = {
service = " apigateway "
source_arn = " arn:aws:execute-api:eu-west-1:135367859851:aqnku8akd0/dev/POST/* "
},
OneRule = {
principal = " events.amazonaws.com "
source_arn = " arn:aws:events:eu-west-1:135367859851:rule/RunDaily "
}
}
}
条件付きでリソースを作成する方法が必要な場合がありますが、Terraformではmodule
ブロック内のcount
の使用が許可されていないため、ソリューションはcreate
引数を指定することです。
module "lambda" {
source = " terraform-aws-modules/lambda/aws "
create = false # to disable all resources
create_package = false # to control build package process
create_function = false # to control creation of the Lambda Function and related resources
create_layer = false # to control creation of the Lambda Layer and related resources
create_role = false # to control creation of the IAM role and policies required for Lambda Function
attach_cloudwatch_logs_policy = false
attach_dead_letter_policy = false
attach_network_policy = false
attach_tracing_policy = false
attach_async_event_policy = false
# ... omitted
}
これはモジュールによって行われる最も複雑な部分の1つであり、通常、内部を知る必要はありません。
package.py
それを行うPythonスクリプトです。 Python 3.6以降がインストールされていることを確認してください。スクリプトの主な機能は、ファイルのコンテンツに基づいてzip-archiveのファイル名を生成し、zip-archiveがすでに作成されているかどうかを確認し、必要な場合にのみzip-archiveを作成することです( apply
中、 plan
ではなく) 。
ファイルの同じコンテンツで作成されたzip-archiveのハッシュは、コンテンツが変更されない限り、Lambdaリソースの不必要な強制圧力を防ぐことを防ぎます。同じコンテンツに対して異なるファイル名が必要な場合は、追加の文字列引数hash_extra
指定できます。
このモジュールを1回の実行で複数回呼び出して、同じsource_path
を持つパッケージを作成すると、ZIP-Archivesは同じファイルに並行したために破損します。 2つのソリューションがあります - hash_extra
の異なる値を設定して、異なるアーカイブを作成するか、外部(このモジュールを使用)を1回(このモジュールを使用して)作成し、 local_existing_package
引数を渡して他のLambdaリソースを作成します。
建物とパッケージングは歴史的にデバッグ(特にTerraformを使用して)が困難であるため、ユーザーがデバッグ情報を簡単に確認できるようにしました。デバッグレベルは3つあります。 DEBUG
- 計画フェーズ中に何が起こっているのか、適用されたパターンの場合のzipファイルコンテンツフィルタリングのみを確認するために、 DEBUG2
より多くのロギング出力、 DEBUG3
すべてのロギング値を確認するために、 DUMP_ENV
すべてのロギング値とENV変数を参照してください(secretが含まれている可能性があるため、env変数を注意深く共有してください!)。
ユーザーは次のようなデバッグレベルを指定できます。
export TF_LAMBDA_PACKAGE_LOG_LEVEL=DEBUG2
terraform apply
ユーザーは、ある状況で役立つpatterns
でHeredoc文字列にコメントを有効にすることができます。これを行うには、この環境変数を設定します。
export TF_LAMBDA_PACKAGE_PATTERN_COMMENTS=true
terraform apply
展開パッケージをローカルまたはDockerで構築する際に、希望の柔軟性を実現するために、さまざまな方法でsource_path
指定できます。絶対的または相対パスを使用できます。 Terraformファイルをサブディレクトリに配置した場合、Terraformファイルの場所ではなく、 terraform plan
が実行されるディレクトリから相対パスが指定されていることに注意してください。
ローカルで構築する場合、パッケージを作成する際にファイルがソースディレクトリからコピーしていない場合、高速のPython正規表現を使用してマッチングファイルとディレクトリを見つけます。これにより、パッケージが非常に高速で理解しやすくなります。
source_path
が文字列に設定されると、そのパスのコンテンツを使用して展開パッケージを作成するために使用されます。
source_path = "src/function1"
source_path
がディレクトリのリストに設定されると、それぞれのコンテンツが取得され、1つのアーカイブが作成されます。
これは、複数の依存関係を持つ複数のソースから展開パッケージを作成する最も完全な方法です。この例では、利用可能なオプションのいくつかを示しています(詳細については、例/ビルドパッケージと例/ランタイムを参照):
source_path = [
" src/main-source " ,
" src/another-source/index.py " ,
{
path = " src/function1-dep " ,
patterns = [
" !.*/.* \ .txt " , # Skip all txt files recursively
]
}, {
path = " src/python-app1 " ,
pip_requirements = true ,
pip_tmp_dir = " /tmp/dir/location "
prefix_in_zip = " foo/bar1 " ,
}, {
path = " src/python-app2 " ,
pip_requirements = " requirements-large.txt " ,
patterns = [
" !vendor/colorful-0.5.4.dist-info/RECORD " ,
" !vendor/colorful-.+.dist-info/.* " ,
" !vendor/colorful/__pycache__/?.* " ,
]
}, {
path = " src/nodejs14.x-app1 " ,
npm_requirements = true ,
npm_tmp_dir = " /tmp/dir/location "
prefix_in_zip = " foo/bar1 " ,
}, {
path = " src/python-app3 " ,
commands = [
" npm install " ,
" :zip "
],
patterns = [
" !.*/.* \ .txt " , # Skip all txt files recursively
" node_modules/.+ " , # Include all node_modules
],
}, {
path = " src/python-app3 " ,
commands = [ " go build " ],
patterns = << END
bin/.*
abc/def/.*
END
}
]
少数のメモ:
python
またはnodejs
で始まる文字列として指定すると、ビルドプロセスは、 requirements.txt
またはpackage.json
ファイルがソースフォルダーにある場合、pythonおよびnodejs依存関係を自動的に構築します。この動作をカスタマイズする場合は、以下に説明するようにオブジェクト表記を使用してください。path
を除くすべての引数はオプションです。patterns
- Python Regex Filenamesのリストが満たされるはずです。デフォルト値はpatterns = [".*"]
に等しい「すべてを含む」です。これは、マルチラインヘレドック文字列として指定することもできます(コメントは許可されていません)。有効なパターンのいくつかの例:commands
オプションを使用して複数のコマンドをチェーンする場合、成功のために最後のコマンドのexitコードのみが確認されます。高速に失敗することを好む場合は、BASHオプションset -e
またはPOWERSHELLオプションでコマンドを開始します$ErrorActionPreference="Stop"
!. * /. * .txt # Filter all txt files recursively
node_modules/. * # Include empty dir or with a content if it exists
node_modules/.+ # Include full non empty node_modules dir with its content
node_modules/ # Include node_modules itself without its content
# It's also a way to include an empty dir if it exists
node_modules # Include a file or an existing dir only
!abc/. * # Filter out everything in an abc folder
abc/def/. * # Re-include everything in abc/def sub folder
!abc/def/hgk/. * # Filter out again in abc/def/hgk sub folder
commands
- 実行するコマンドのリスト。指定されている場合、この引数はpip_requirements
とnpm_requirements
を上書きします。:zip [source] [destination]
現在の作業ディレクトリ(最初の引数)のコンテンツを作成し、パス(2番目の引数)の内側に配置する特別なコマンドです。pip_requirements
-PIP pip install
を実行するかどうかを制御します。この機能を無効にするためにfalse
に設定され、 requirements.txt
path
使用してpip install
実行するのはtrue
。または、代わりに使用する別のファイル名に設定します。 source_path
パス(マップのリストではなく)を含む文字列として渡され、 requirements.txt
が存在する場合、 pip install
が自動的に実行されます。pip_tmp_dir
-PIPインストール用の一時ディレクトリを作成するようにベースディレクトリを設定します。 DockerビルドのDockerに役立ちます。poetry_install
poetry export
とpip install
を実行するかどうかを制御します。この機能を無効にするためにfalse
に設定されており、 pyproject.toml
とpoetry.lock
を使用してpoetry export
をpath
するのにtrue
。 source_path
パスを含む文字列(マップのリストではない)として渡され、ビルドシステムのpoetry
を持つpyproject.toml
が存在する場合、 poetry export
とpip install
が自動的に実行されます。poetry_export_extra_args
詩の輸出コマンドに追加する追加の詩の議論のリストnpm_requirements
-NPM npm install
を実行するかどうかを制御します。この機能を無効にするためにfalse
に設定され、 package.json
をpath
してnpm install
を実行するのはtrue
にあります。または、代わりに使用する別のファイル名に設定します。npm_tmp_dir
-baseディレクトリを設定して、NPMのインストールの一時ディレクトリを作成します。 DockerビルドのDockerに役立ちます。prefix_in_zip
指定されている場合、zip -archive内のプレフィックスとして使用されます。デフォルトでは、すべてがzip-archiveのルートにインストールされます。Lambda機能またはレイヤーがいくつかの依存関係を使用している場合、Dockerでそれらを構築し、それらを展開パッケージに含めることができます。これがあなたがそれを行う方法です:
build_in_docker = true
docker_file = "src/python-app1/docker/Dockerfile"
docker_build_root = "src/python-app1/docker"
docker_image = "public.ecr.aws/sam/build-python"
runtime = "python3.12" # Setting runtime is required when building package in Docker and Lambda Layer resource.
このモジュールを使用して、プライベートホストから依存関係をインストールできます。これを行うには、フォワードSSHエージェントが必要です。
docker_with_ssh_agent = true
デフォルトでは、使用されるdocker_image
レジストリpublic.ecr.aws/sam/
から来ており、指定するruntime
に基づいていることに注意してください。言い換えれば、 python3.12
のランタイムを指定し、 docker_image
を指定しない場合、 docker_image
public.ecr.aws/sam/build-python3.12
に解決します。これにより、デフォルトではruntime
がDockerコンテナで利用可能になります。
docker_image
をオーバーライドする場合は、 runtime
と同期しておくようにしてください。計画段階では、Dockerを使用する場合、パッケージを構築するためにruntime
利用可能であることを確認することはできません。つまり、ランタイムがない画像を使用しても、計画は引き続き成功しますが、適用は失敗します。
Dockerに構築するときに柔軟性を追加するには、必要な追加オプションを任意の数の追加オプションに渡すことができます(利用可能なオプションについてはDocker Run Referenceを参照):
docker_additional_options = [
" -e " , " MY_ENV_VAR='My environment variable value' " ,
" -v " , " /local:/docker-vol " ,
]
Dockerに建設するときにDockerエントリポイントをオーバーライドするには、 docker_entrypoint
を設定します。
docker_entrypoint = " /entrypoint/entrypoint.sh "
エントリポイントはコンテナ内のパスにマッピングする必要があるため、エントリポイントを含む独自の画像を作成するか、ボリュームをマウントしてホストのファイルにマップする必要があります(追加のDockerオプションの渡しを参照)。
デフォルトでは、このモジュールは展開パッケージを作成し、それを使用してLambda関数またはLambda層を作成または更新します。
場合によっては、パッケージの展開から2つの個別のステップに展開から展開パッケージのビルド(依存関係をコンパイルおよびインストールする)を分離する場合があります。
このモジュールの外側でアーカイブを作成する場合、 create_package = false
を設定し、次にlocal_existing_package = "existing_package.zip"
を設定する必要があります。または、展開パッケージをS3バケツに維持し、次のような参照を提供することをお勧めします。
create_package = false
s3_existing_package = {
bucket = " my-bucket-with-lambda-builds "
key = " existing_package.zip "
}
これは、2つのステップで実装できます。Curlを使用してローカルにファイルをダウンロードし、Paths to Deploymentパッケージをlocal_existing_package
引数として展開することです。
locals {
package_url = " https://raw.githubusercontent.com/terraform-aws-modules/terraform-aws-lambda/master/examples/fixtures/python-zip/existing_package.zip "
downloaded = " downloaded_package_ ${ md5 (local . package_url ) } .zip "
}
resource "null_resource" "download_package" {
triggers = {
downloaded = local.downloaded
}
provisioner "local-exec" {
command = " curl -L -o ${ local . downloaded } ${ local . package_url } "
}
}
data "null_data_source" "downloaded_package" {
inputs = {
id = null_resource.download_package.id
filename = local.downloaded
}
}
module "lambda_function_existing_package_from_remote_url" {
source = " terraform-aws-modules/lambda/aws "
function_name = " my-lambda-existing-package-local "
description = " My awesome lambda function "
handler = " index.lambda_handler "
runtime = " python3.12 "
create_package = false
local_existing_package = data . n ull_data_source . downloaded_package . outputs [ " filename " ]
}
AWS Sam Cliは、開発者がサーバーレスアプリケーションを開始、構築、テスト、および展開するのに役立つオープンソースツールです。 Sam CLI ToolはTerraformアプリケーションをサポートしています。
Sam CLIは、2つのテストの方法を提供します。Cloud(アクセル)のローカルテストとテストです。
SAM CLIを使用して、SAM Local Invokeコマンドを使用してTerraformアプリケーションで定義されたLambda関数をローカルに使用して呼び出し、関数Terraformアドレスまたは関数名を提供し、 hook-name
terraform
に設定してSam CLIに基礎となるプロジェクトを伝えることができますTerraformアプリケーションです。
次のように、Terraformアプリケーションルートディレクトリからsam local invoke
コマンドを実行できます。
sam local invoke --hook-name terraform module.hello_world_function.aws_lambda_function.this[0]
また、イベントをLambda機能に渡すことも、環境変数を上書きすることもできます。詳細については、こちらをご覧ください。
また、デバッグモードでLambda機能を呼び出し、Lambda機能ソースコードを希望のエディターでローカルにステップスルーすることもできます。詳細については、こちらをご覧ください。
AWS Sam CLIを使用して、AWS開発アカウントでアプリケーションをすばやくテストできます。 Sam Accelerateを使用して、Lambda関数をローカルに開発できるようになり、更新を保存すると、Sam CLIは更新されたLambda関数で開発アカウントを更新します。そのため、クラウドでテストできます。バグがある場合は、コードをすばやく更新でき、サムクリはクラウドにプッシュすることになります。 Sam Accelerateの詳細については、こちらをご覧ください。
次のように、Terraformアプリケーションルートディレクトリからsam sync
コマンドを実行できます。
sam sync --hook-name terraform --watch
通常、Sourceコードが変更されると、Lambda機能リソースが更新されます。 publish = true
が指定されている場合、新しいLambda関数バージョンも作成されます。
公開されたLambda関数は、バージョン番号または$LATEST
のいずれかを使用して呼び出すことができます。これは、追加のツールやサービスを必要としない最も簡単な展開方法です。
Lambda機能の制御展開(ローリング、カナリア、ロールバック)を実行するには、Lambda機能エイリアスを使用する必要があります。
簡単に言えば、Lambdaのエイリアスは、Lambda関数の1つのバージョン(展開が完了したとき)のいずれかのバージョン、またはLambda関数の2つの加重バージョン(ローリングまたはカナリアの展開中)のポインターのようなものです。
1つのLambda関数は、複数のエイリアスで使用できます。エイリアスを使用すると、複数の環境があるときに展開されるバージョンを大幅に制御できます。
エイリアスモジュールがあり、エイリアスの作業(構成、更新など)の作業を簡素化します。さまざまなユースケースの例/エイリアスを参照してください。エイリアスの構成と使用方法。
展開モジュールがあり、AWS CodeDeployを使用して展開するために必要なリソースを作成します。また、展開を作成し、完了を待ちます。完全なエンドツーエンドのビルド/更新/展開プロセスについては、例を参照してください。
Terraform Cloud、Terraform Enterprise、および他の多くのSaaSを実行するための他の多くのSaaSには、Pythonが労働者にプリインストールされていません。このモジュールを使用できるように、Pythonがインストールされた代替Docker画像を提供する必要があります。
Q1:なぜ何かを変更するたびに展開パッケージが再現されないのですか?または、なぜ展開パッケージが毎回再作成されているのに、コンテンツが変更されていないのはなぜですか?
回答:同時実行またはコンテンツハッシュに関連するいくつかの理由があります。時々、コンテンツハッシュの計算に使用されない依存関係の内部で変更が発生することがあります。または、同じソースから複数のパッケージが同時に作成されています。
hash_extra
の値を異なる値に設定することにより、強制することができます。
Q2:展開パッケージを再作成する方法は?
回答:
builds
ディレクトリから既存のzip-archiveを削除するか、ソースコードを変更します。現在のコンテンツハッシュにzip-archiveがない場合、terraform apply
中に再作成されます。
Q3: null_resource.archive[0] must be replaced
回答:これはおそらく、Zip-Archiveが展開されていることを意味しますが、現在はローカルに存在しないため、ローカルで再現する必要があります。 CI/CDプロセス(ワークスペースがクリーンな場合)中にこの問題に遭遇した場合、または複数の
terraform apply
スペースから、環境変数TF_RECREATE_MISSING_LAMBDA_PACKAGE=false
またはPASSrecreate_missing_package = false
を設定することができます。または、アーカイブを作成するかどうかを決定するときにファイルタイムスタンプを無視するパラメーターとしてtrigger_on_package_timestamp = false
を渡すことができます。
Q4:このエラーはどういう意味ですか? "We currently do not support adding policies for $LATEST."
?
回答:lambda関数が
publish = true
で作成されると、新しいバージョンが自動的に増加し、適格な識別子(バージョン番号)が利用可能になり、Lambda許可を設定するときに使用されます。
publish = false
(default)の場合、エラーにつながる$LATEST
のない識別子のみが利用可能です。解決策は、
create_current_version_allowed_triggers = false
を設定することにより、現在のバージョンのLambda権限の作成を無効にするか、Lambda関数(publish = true
)の公開を有効にすることです。
builds
ディレクトリがしばしば存在しないCI/CDプラットフォームで実行されるかのように作成します。名前 | バージョン |
---|---|
テラフォーム | > = 1.0 |
aws | > = 5.70 |
外部の | > = 1.0 |
地元 | > = 1.0 |
ヌル | > = 2.0 |
名前 | バージョン |
---|---|
aws | > = 5.70 |
外部の | > = 1.0 |
地元 | > = 1.0 |
ヌル | > = 2.0 |
モジュールなし。
名前 | タイプ |
---|---|
aws_cloudwatch_log_group.lambda | リソース |
aws_iam_policy.additional_inline | リソース |
aws_iam_policy.additional_json | リソース |
aws_iam_policy.additional_jsons | リソース |
aws_iam_policy.async | リソース |
aws_iam_policy.dead_letter | リソース |
aws_iam_policy.logs | リソース |
aws_iam_policy.tracing | リソース |
aws_iam_policy.vpc | リソース |
aws_iam_role.lambda | リソース |
aws_iam_role_policy_attachment.additional_inline | リソース |
aws_iam_role_policy_attachment.additional_json | リソース |
aws_iam_role_policy_attachment.additional_jsons | リソース |
aws_iam_role_policy_attachment.additional_many | リソース |
aws_iam_role_policy_attachment.additional_one | リソース |
aws_iam_role_policy_attachment.async | リソース |
AWS_IAM_ROLE_POLICY_ATTACHMENT.DEAD_LETTER | リソース |
aws_iam_role_policy_attachment.logs | リソース |
aws_iam_role_policy_attachment.tracing | リソース |
aws_iam_role_policy_attachment.vpc | リソース |
aws_lambda_event_source_mapping.this | リソース |
aws_lambda_function.this | リソース |
aws_lambda_function_event_invoke_config.this | リソース |
aws_lambda_function_url.this | リソース |
aws_lambda_layer_version.this | リソース |
aws_lambda_permission.current_version_triggers | リソース |
aws_lambda_permission.unqualified_alias_triggers | リソース |
aws_lambda_provisioned_concurrency_config.current_version | リソース |
aws_s3_object.lambda_package | リソース |
local_file.archive_plan | リソース |
null_Resource.Archive | リソース |
null_resource.sam_metadata_aws_lambda_function | リソース |
null_resource.sam_metadata_aws_lambda_layer_version | リソース |
AWS_ARN.LOG_GROUP_ARN | データソース |
aws_caller_identity.current | データソース |
aws_cloudwatch_log_group.lambda | データソース |
aws_iam_policy.tracing | データソース |
aws_iam_policy.vpc | データソース |
aws_iam_policy_document.additional_inline | データソース |
aws_iam_policy_document.assume_role | データソース |
aws_iam_policy_document.async | データソース |
aws_iam_policy_document.dead_letter | データソース |
aws_iam_policy_document.logs | データソース |
aws_partition.current | データソース |
aws_region.current | データソース |
external_external.Archive_Prepare | データソース |
名前 | 説明 | タイプ | デフォルト | 必須 |
---|---|---|---|---|
Aldoct_triggers | 許可されたトリガーのマップは、ラムダ許可を作成します | map(any) | {} | いいえ |
アーキテクチャ | Lambda関数の命令セットアーキテクチャ。有効な値は["x86_64"]および["arm64"]です。 | list(string) | null | いいえ |
artifacts_dir | アーティファクトを保存するディレクトリ名 | string | "builds" | いいえ |
ascume_role_policy_statements | ラムダ関数の役割を仮定するための動的なポリシーステートメントの地図(信頼関係) | any | {} | いいえ |
attach_async_event_policy | AsyncイベントポリシーをLambda機能のIAM役割に追加すべきかどうかを制御します | bool | false | いいえ |
attach_cloudwatch_logs_policy | CloudWatchログポリシーをLambda関数のIAMロールに追加する必要があるかどうかを制御します | bool | true | いいえ |
attach_create_log_group_permission | CloudWatchログポリシーに作成ロググループの許可を作成するかどうかを制御する | bool | true | いいえ |
attach_dead_letter_policy | SNS/SQSデッドレター通知ポリシーをLambda機能のIAMロールに追加する必要があるかどうかを制御します | bool | false | いいえ |
attach_network_policy | Lambda関数のIAM役割にVPC/ネットワークポリシーを追加する必要があるかどうかを制御します | bool | false | いいえ |
attach_policies | ラムダ関数のIAM役割にポリシーのリストを追加すべきかどうかを制御する | bool | false | いいえ |
attach_policy | ラムダ関数のIAM役割にポリシーを追加すべきかどうかを制御する | bool | false | いいえ |
attach_policy_json | policy_jsonをLambda関数のIAM役割に追加する必要があるかどうかを制御します | bool | false | いいえ |
attach_policy_jsons | policy_jsonsをLambda関数のIAM役割に追加する必要があるかどうかを制御します | bool | false | いいえ |
attach_policy_statements | policy_statementsをラムダ関数のIAM役割に追加すべきかどうかを制御する | bool | false | いいえ |
attach_tracing_policy | X線追跡ポリシーをLambda機能のIAM役割に追加する必要があるかどうかを制御します | bool | false | いいえ |
authorization_type | Lambda機能URLが使用する認証のタイプ。認証されたIAMユーザーのみへのアクセスを制限するように「AWS_IAM」に設定します。 IAM認証をバイパスし、パブリックエンドポイントを作成するために「なし」に設定します。 | string | "NONE" | いいえ |
build_in_docker | Dockerで依存関係を構築するかどうか | bool | false | いいえ |
cloudwatch_logs_kms_key_id | ログデータを暗号化するときに使用するKMSキーのARN。 | string | null | いいえ |
cloudwatch_logs_log_group_class | ロググループのログクラスを指定しました。考えられる値は次のとおりです。 STANDARD またはINFREQUENT_ACCESS | string | null | いいえ |
cloudwatch_logs_retention_in_days | 指定されたロググループにログイベントを保持する日数を指定します。考えられる値は、1、3、5、7、14、30、60、90、120、150、180、365、400、545、731、1827、および3653です。 | number | null | いいえ |
cloudwatch_logs_skip_destroy | 破壊時にロググループ(およびそれが含む可能性のあるログ)を保持するかどうか。 | bool | false | いいえ |
cloudwatch_logs_tags | リソースに割り当てるタグのマップ。 | map(string) | {} | いいえ |
code_singe_config_arn | コード署名構成用のAmazonリソース名(ARN) | string | null | いいえ |
compatible_architectures | アーキテクチャのリストラムダ層のリストは互換性があります。現在、X86_64およびARM64を指定できます。 | list(string) | null | いいえ |
compatible_runtimes | このレイヤーが互換性のあるランタイムのリスト。最大5回のランタイムを指定できます。 | list(string) | [] | いいえ |
cors | ラムダ関数URLで使用されるCORS設定 | any | {} | いいえ |
作成する | リソースを作成する必要があるかどうかを制御します | bool | true | いいえ |
create_async_event_config | Lambda機能/エイリアスのASYNCイベント構成を作成するかどうかを制御します | bool | false | いいえ |
create_current_version_allowed_triggers | Lambda関数の現在のバージョンでトリガーを許可するかどうか(Terraformが現在のリソースのみを管理するため、これは以前のバージョンからの許可を取り消すでしょう) | bool | true | いいえ |
create_current_version_async_event_config | Lambda関数の現在のバージョンでAsyncイベント構成を許可するかどうか(Terraformは現在のリソースのみを管理するため、これは以前のバージョンからの許可を取り消すでしょう) | bool | true | いいえ |
create_function | Lambda機能リソースを作成するかどうかを制御します | bool | true | いいえ |
create_lambda_function_url | lambda関数URLリソースを作成する必要があるかどうかを制御します | bool | false | いいえ |
create_layer | ラムダ層リソースを作成するかどうかを制御します | bool | false | いいえ |
create_package | Lambdaパッケージを作成するかどうかを制御します | bool | true | いいえ |
create_role | ラムダ関数のIAMの役割を作成する必要があるかどうかを制御する | bool | true | いいえ |
create_sam_metadata | SAMメタデータヌルリソースを作成するかどうかを制御します | bool | false | いいえ |
create_unqualified_alias_allowed_triggers | 資格のないエイリアスでトリガーが$最新バージョンを指すかどうか | bool | true | いいえ |
create_unqualified_alias_async_event_config | $最新バージョンを指す資格のないエイリアスでAsyncイベント構成を許可するかどうか | bool | true | いいえ |
create_unqualified_alias_lambda_function_url | Lambda Function URLの$最新バージョンを指す資格のないエイリアスを使用するかどうか | bool | true | いいえ |
dead_letter_target_arn | SNSトピックまたはSQSキューのARNは、呼び出しがいつ失敗したかを通知します。 | string | null | いいえ |
説明 | あなたのラムダ関数(または層)の説明 | string | "" | いいえ |
destination_on_failure | 失敗した非同期の呼び出しのための宛先リソースのAmazonリソース名(ARN) | string | null | いいえ |
destination_on_success | 非同期の呼び出しを成功させるための宛先リソースのAmazonリソース名(ARN) | string | null | いいえ |
docker_additional_options | Docker Runコマンドに渡す追加のオプション(環境変数、ボリュームなどを設定するなど) | list(string) | [] | いいえ |
docker_build_root | Root Dir Dockerの構築場所 | string | "" | いいえ |
docker_entrypoint | 使用するDockerエントリポイントへのパス | string | null | いいえ |
docker_file | Dockerに建設するときのDockerfileへの道 | string | "" | いいえ |
docker_image | ビルドに使用するDocker画像 | string | "" | いいえ |
docker_pip_cache | 共有ピップキャッシュフォルダーをDocker環境に取り付けるかどうか | any | null | いいえ |
docker_with_ssh_agent | ssh_auth_sockをDocker環境に渡すかどうか | bool | false | いいえ |
Environment_variables | ラムダ関数の環境変数を定義するマップ。 | map(string) | {} | いいえ |
ephemeral_storage_size | MBでの短命ストレージ(/TMP)の量あなたのラムダ機能は実行時に使用できます。 512 MBから10,240 MB(10 GB)の間の有効な値。 | number | 512 | いいえ |
event_source_mapping | イベントソースマッピングのマップ | any | {} | いいえ |
file_system_arn | ファイルシステムへのアクセスを提供するAmazon EFSアクセスポイントのAmazonリソース名(ARN)。 | string | null | いいえ |
file_system_local_mount_path | 関数が /MNT /で始まるファイルシステムにアクセスできるパス。 | string | null | いいえ |
function_name | Lambda関数のユニークな名前 | string | "" | いいえ |
function_tags | ラムダ関数にのみ割り当てるタグのマップ | map(string) | {} | いいえ |
ハンドラ | コードのラムダ関数エントリポイント | string | "" | いいえ |
HASH_EXTRA | ハッシュ関数に追加する文字列。異なる機能に同じソースパスを構築する場合に役立ちます。 | string | "" | いいえ |
Ingrore_source_code_hash | 関数のソースコードハッシュの変更を無視するかどうか。インフラストラクチャとコードの展開を個別に管理する場合、TRUEに設定します。 | bool | false | いいえ |
image_config_command | Docker画像のCMD | list(string) | [] | いいえ |
image_config_entry_point | Docker画像のエントリポイント | list(string) | [] | いいえ |
image_config_working_directory | Docker画像の作業ディレクトリ | string | null | いいえ |
Image_uri | 関数の展開パッケージを含むECR画像URI。 | string | null | いいえ |
invoke_mode | Lambda関数URLのモードを呼び出します。有効な値はバッファー(デフォルト)およびResponse_streamです。 | string | null | いいえ |
ipv6_allowed_for_dual_stack | デュアルスタックサブネットに接続されているVPC関数のアウトバウンドIPv6トラフィックを許可します | bool | null | いいえ |
kms_key_arn | あなたのラムダ機能で使用するKMSキーのARN | string | null | いいえ |
lambda_at_edge | lambda@edgeを使用して、公開を有効にし、タイムアウトを制限し、edgelambda.amazonaws.comが関数を呼び出すことを許可する場合、これをtrueに設定します | bool | false | いいえ |
lambda_at_edge_logs_all_regions | すべての地域でのロギングを許可するためにLambda@Edgeが使用するIAMポリシーでワイルドカードを指定するかどうか | bool | true | いいえ |
Lambda_role | Lambda関数に添付されたIamの役割Arn。これは、誰があなたのラムダ関数を呼び出すことができるか、そして私たちのラムダ関数がアクセスできるリソースの両方を支配します。詳細については、Lambda許可モデルを参照してください。 | string | "" | いいえ |
layer_name | 作成するラムダ層の名前 | string | "" | いいえ |
layer_skip_destroy | 以前に展開されたLambda層の古いバージョンを保持するかどうか。 | bool | false | いいえ |
レイヤー | ラムダ層バージョンのリスト(最大5)のリストラムダ関数に取り付けます。 | list(string) | null | いいえ |
license_info | ラムダ層のライセンス情報。たとえば、ライセンスのMITまたは完全なURL。 | string | "" | いいえ |
local_existing_package | 使用する既存のジップファイルへの絶対的なパス | string | null | いいえ |
logging_application_log_level | ラムダ関数のアプリケーションログレベル。有効な値は、「トレース」、「デバッグ」、「情報」、「警告」、「エラー」、または「致命的」です。 | string | "INFO" | いいえ |
logging_log_format | Lambda関数のログ形式。有効な値は「JSON」または「テキスト」です。 | string | "Text" | いいえ |
logging_log_group | クラウドウォッチロググループにログを送信します。 | string | null | いいえ |
logging_system_log_level | ラムダ関数のシステムログレベル。有効な値は、「デバッグ」、「情報」、または「警告」です。 | string | "INFO" | いいえ |
Maximion_event_age_in_seconds | ラムダが数秒で処理するために関数に送信するリクエストの最大年齢。 60〜21600の間の有効な値。 | number | null | いいえ |
Maximing_retry_attempts | 関数がエラーを返したときに再試行する最大回数。 0〜2の間の有効な値。デフォルトは2になります。 | number | null | いいえ |
memory_size | MBのメモリの量は、ランダ機能を実行時に使用できます。 64 MBの増分で128 MBから10,240 MB(10 GB)の間の有効な値。 | number | 128 | いいえ |
number_of_policies | ラムダ関数のIAM役割に添付するポリシーの数 | number | 0 | いいえ |
number_of_policy_jsons | Lambda機能のIAM役割に添付するためのJSONの数の数 | number | 0 | いいえ |
package_type | Lambda展開パッケージタイプ。有効なオプション:zipまたは画像 | string | "Zip" | いいえ |
ポリシー | ラムダ関数の役割に添付するためのポリシーステートメントARNのリストARN | list(string) | [] | いいえ |
ポリシー | ラムダ関数の役割に接続するための追加のポリシー文書ARN | string | null | いいえ |
policy_json | Lambda機能の役割に接続するJSONとしての追加のポリシー文書 | string | null | いいえ |
policy_jsons | Lambda機能の役割に添付するJSONとしての追加のポリシー文書のリスト | list(string) | [] | いいえ |
policy_name | IAMポリシー名。それはデフォルトの値をオーバーライドします。これはrole_nameと同じです | string | null | いいえ |
policy_path | それへのポリシーのパスは、ラムダ関数のIAMロールに追加されるべきです | string | null | いいえ |
policy_statements | ラムダ関数の役割に添付するための動的ポリシーステートメントのマップ | any | {} | いいえ |
PROSIMED_CONCURRENT_EXECUTIONS | 割り当てる容量の量。有効にするには1以上に設定するか、プロビジョニングされた並行性を無効にするために0に設定します。 | number | -1 | いいえ |
公開 | Creation/Changeを新しいLambda関数バージョンとして公開するかどうか。 | bool | false | いいえ |
プーチン_khuylo | プーチンがウクライナの主権と領土の完全性を尊重しないことに同意しますか?詳細:https://en.wikipedia.org/wiki/putin_khuylo! | bool | true | いいえ |
recreate_missing_package | 不足しているLambdaパッケージがローカルで欠落している場合に再作成するかどうか | bool | true | いいえ |
lated_security_groups_on_destroy | (オプション)Trueの場合、VPC_SECURITY_GROUP_IDSで定義されているすべてのセキュリティグループは、関数が破壊された後、デフォルトのセキュリティグループに置き換えられます。代わりに、交換用のセキュリティグループのカスタムリストを使用するように、facterment_security_group_ids変数を設定します。 | bool | null | いいえ |
facterment_security_group_ids | (Optional) List of security group IDs to assign to orphaned Lambda function network interfaces upon destruction. replace_security_groups_on_destroy must be set to true to use this attribute. | list(string) | null | いいえ |
reserved_concurrent_executions | The amount of reserved concurrent executions for this Lambda Function. A value of 0 disables Lambda Function from being triggered and -1 removes any concurrency limitations. Defaults to Unreserved Concurrency Limits -1. | number | -1 | いいえ |
role_description | Description of IAM role to use for Lambda Function | string | null | いいえ |
role_force_detach_policies | Specifies to force detaching any policies the IAM role has before destroying it. | bool | true | いいえ |
role_maximum_session_duration | Maximum session duration, in seconds, for the IAM role | number | 3600 | いいえ |
role_name | Name of IAM role to use for Lambda Function | string | null | いいえ |
role_path | Path of IAM role to use for Lambda Function | string | null | いいえ |
role_permissions_boundary | The ARN of the policy that is used to set the permissions boundary for the IAM role used by Lambda Function | string | null | いいえ |
role_tags | A map of tags to assign to IAM role | map(string) | {} | いいえ |
ランタイム | Lambda Function runtime | string | "" | いいえ |
s3_acl | The canned ACL to apply. Valid values are private, public-read, public-read-write, aws-exec-read, authenticated-read, bucket-owner-read, and bucket-owner-full-control. Defaults to private. | string | "private" | いいえ |
s3_bucket | S3 bucket to store artifacts | string | null | いいえ |
s3_existing_package | The S3 bucket object with keys bucket, key, version pointing to an existing zip-file to use | map(string) | null | いいえ |
s3_kms_key_id | Specifies a custom KMS key to use for S3 object encryption. | string | null | いいえ |
s3_object_override_default_tags | Whether to override the default_tags from provider? NB: S3 objects support a maximum of 10 tags. | bool | false | いいえ |
s3_object_storage_class | Specifies the desired Storage Class for the artifact uploaded to S3. Can be either STANDARD, REDUCED_REDUNDANCY, ONEZONE_IA, INTELLIGENT_TIERING, or STANDARD_IA. | string | "ONEZONE_IA" | いいえ |
s3_object_tags | A map of tags to assign to S3 bucket object. | map(string) | {} | いいえ |
s3_object_tags_only | Set to true to not merge tags with s3_object_tags. Useful to avoid breaching S3 Object 10 tag limit. | bool | false | いいえ |
s3_prefix | Directory name where artifacts should be stored in the S3 bucket. If unset, the path from artifacts_dir is used | string | null | いいえ |
s3_server_side_encryption | Specifies server-side encryption of the object in S3. Valid values are "AES256" and "aws:kms". | string | null | いいえ |
skip_destroy | Set to true if you do not wish the function to be deleted at destroy time, and instead just remove the function from the Terraform state. Useful for Lambda@Edge functions attached to CloudFront distributions. | bool | null | いいえ |
snap_start | (Optional) Snap start settings for low-latency startups | bool | false | いいえ |
source_path | The absolute path to a local file or directory containing your Lambda source code | any | null | いいえ |
store_on_s3 | Whether to store produced artifacts on S3 or locally. | bool | false | いいえ |
タグ | A map of tags to assign to resources. | map(string) | {} | いいえ |
タイムアウト | The amount of time your Lambda Function has to run in seconds. | number | 3 | いいえ |
timeouts | Define maximum timeout for creating, updating, and deleting Lambda Function resources | map(string) | {} | いいえ |
tracing_mode | Tracing mode of the Lambda Function. Valid value can be either PassThrough or Active. | string | null | いいえ |
trigger_on_package_timestamp | Whether to recreate the Lambda package if the timestamp changes | bool | true | いいえ |
trusted_entities | List of additional trusted entities for assuming Lambda Function role (trust relationship) | any | [] | いいえ |
use_existing_cloudwatch_log_group | Whether to use an existing CloudWatch log group or create new | bool | false | いいえ |
vpc_security_group_ids | List of security group ids when Lambda Function should run in the VPC. | list(string) | null | いいえ |
vpc_subnet_ids | List of subnet ids when Lambda Function should run in the VPC. Usually private or intra subnets. | list(string) | null | いいえ |
名前 | 説明 |
---|---|
lambda_cloudwatch_log_group_arn | The ARN of the Cloudwatch Log Group |
lambda_cloudwatch_log_group_name | The name of the Cloudwatch Log Group |
lambda_event_source_mapping_arn | The event source mapping ARN |
lambda_event_source_mapping_function_arn | The the ARN of the Lambda function the event source mapping is sending events to |
lambda_event_source_mapping_state | The state of the event source mapping |
lambda_event_source_mapping_state_transition_reason | The reason the event source mapping is in its current state |
lambda_event_source_mapping_uuid | The UUID of the created event source mapping |
lambda_function_arn | The ARN of the Lambda Function |
lambda_function_arn_static | The static ARN of the Lambda Function. Use this to avoid cycle errors between resources (eg, Step Functions) |
lambda_function_invoke_arn | The Invoke ARN of the Lambda Function |
lambda_function_kms_key_arn | The ARN for the KMS encryption key of Lambda Function |
lambda_function_last_modified | The date Lambda Function resource was last modified |
lambda_function_name | The name of the Lambda Function |
lambda_function_qualified_arn | The ARN identifying your Lambda Function Version |
lambda_function_qualified_invoke_arn | The Invoke ARN identifying your Lambda Function Version |
lambda_function_signing_job_arn | ARN of the signing job |
lambda_function_signing_profile_version_arn | ARN of the signing profile version |
lambda_function_source_code_hash | Base64-encoded representation of raw SHA-256 sum of the zip file |
lambda_function_source_code_size | The size in bytes of the function .zip file |
lambda_function_url | The URL of the Lambda Function URL |
lambda_function_url_id | The Lambda Function URL generated id |
lambda_function_version | Latest published version of Lambda Function |
lambda_layer_arn | The ARN of the Lambda Layer with version |
lambda_layer_created_date | The date Lambda Layer resource was created |
lambda_layer_layer_arn | The ARN of the Lambda Layer without version |
lambda_layer_source_code_size | The size in bytes of the Lambda Layer .zip file |
lambda_layer_version | The Lambda Layer version |
lambda_role_arn | The ARN of the IAM role created for the Lambda Function |
lambda_role_name | The name of the IAM role created for the Lambda Function |
lambda_role_unique_id | The unique id of the IAM role created for the Lambda Function |
local_filename | The filename of zip archive deployed (if deployment was from local) |
s3_object | The map with S3 object data of zip archive deployed (if deployment was from S3) |
During development involving modifying python files, use tox to run unit tests:
tox
This will try to run unit tests which each supported python version, reporting errors for python versions which are not installed locally.
If you only want to test against your main python version:
tox -e py
You can also pass additional positional arguments to pytest which is used to run test, eg to make it verbose:
tox -e py -- -vvv
Module managed by Anton Babenko. Check out serverless.tf to learn more about doing serverless with Terraform.
Please reach out to Betajob if you are looking for commercial support for your Terraform, AWS, or serverless project.
Apache 2 Licensed. See LICENSE for full details.