我遇到以下要求,我需要将Terraform输出或Terraform动态创建的资源ID作为环境变量传递给同一terraform模板中的Lambda函数。
我的Terraform创建了大量资源,例如Lambda函数,API网关,网关方法,网关资源等。我需要将API网关资源ID作为环境变量发送给Lambda函数。不幸的是,我不能在Lambda函数中放置“ Depends on”,因为它是创建周期依赖项。
无论如何,我们可以将这些动态创建的资源ID作为输入环境变量传递给lambda函数吗?
谢谢
答案 0 :(得分:2)
您可以尝试在lambda代码中利用SSM Parameter Store
来避免针对此问题的骇客解决方案。
您可以让Terraform创建一个具有唯一路径的参数,该路径引用您提供的某些变量,只需将此路径设置为lambda资源声明中的环境变量,即可在代码中引用。
Terraform面可能看起来像这样:
resource "aws_ssm_parameter" "resource_id" {
name = "${var.resource_id_path}" // This is the 'unique key'
type = "String"
value = "${some-apigateway-resource.value}"
}
resource "aws_lambda_function" "my_lambda" {
...
environment {
variables = {
ssm_path = "${var.resource_id_path}"
}
}
}
Lambda端看起来可能像这样(Python):
import boto3
client = boto3.client('ssm')
response = client.get_parameter(
Name=os.environ['ssm_path']
WithDecryption=False
)
希望这会有所帮助