我用这个脚本创建了一个lambda层。
resource "aws_lambda_layer_version" "lambda_common_layer" {
layer_name = "lambda_common_layer"
s3_bucket = "${aws_s3_bucket_object.object_lambda_common_layer.bucket}"
s3_key = "${aws_s3_bucket_object.object_lambda_common_layer.key}"
s3_object_version = "${aws_s3_bucket_object.object_lambda_common_layer.version_id}"
source_code_hash = "${data.archive_file.layer_zip_lambda_common_layer.output_base64sha256}"
description = "Common layer providing logging"
compatible_runtimes = ["python3.6"]
}
我还有一个 lambda 定义,我想在其中使用该层。为此,我需要传递一个 ARN 列表,但我不知道如何获取现有 lambda 层的 ARN,这些是具有单独 Terraform 脚本的不同项目。怎么办呢?这是我的 lambda 声明
我试图只将图层名称作为资源,但它被突出显示
resource "aws_lambda_layer_version" "lambda_common_layer" {
layer_name = "lambda_common_layer"
}
...
layers = ["${aws_lambda_layer_version.lambda_common_layer.layer_arn}"]
您需要从声明 lambda 层资源的项目中获取处于远程状态的数据源。
在我看来,这是最简单的方法是使用远程状态后端来存储每个项目的地形状态,以便您可以从其他项目引用它。根据我的经验,最容易设置的远程状态是 S3 远程状态。
完成此操作后,您可以在 lambda 层项目中包含一个 outputs.tf
文件,如下所示:
output "lambda_layer_arn" {
value = "${aws_lambda_layer_version.lambda_common_layer.arn}"
}
output "lambda_layer_version_arn" {
value = "${aws_lambda_layer_version.lambda_common_layer.layer_arn}"
}
通过输出这些值,它们将在远程状态下可供其他地形模块使用。