Aws lambda 将地形输出作为Lambda函数的环境变量传递

Aws lambda 将地形输出作为Lambda函数的环境变量传递,aws-lambda,terraform,terraform-provider-aws,Aws Lambda,Terraform,Terraform Provider Aws,我遇到了以下需求,需要将Terraform输出或Terraform动态创建的资源ID作为环境变量传递给同一Terraform模板中的Lambda函数 我的terraform创建了大量资源,如Lambda函数、API网关、网关方法、网关资源等。。我需要将API网关资源id作为环境变量发送给Lambda函数。不幸的是,我不能在Lambda函数中添加“dependens”,因为它是createcycle依赖项 无论如何,我们可以将这些动态创建的资源ID作为输入环境变量传递给lambda函数吗 谢谢您可

我遇到了以下需求,需要将Terraform输出或Terraform动态创建的资源ID作为环境变量传递给同一Terraform模板中的Lambda函数

我的terraform创建了大量资源,如Lambda函数、API网关、网关方法、网关资源等。。我需要将API网关资源id作为环境变量发送给Lambda函数。不幸的是,我不能在Lambda函数中添加“dependens”,因为它是createcycle依赖项

无论如何,我们可以将这些动态创建的资源ID作为输入环境变量传递给lambda函数吗


谢谢

您可以尝试在lambda代码中使用
SSM参数存储
,以避免此问题的hack-y解决方案

您可以让Terraform创建一个参数,该参数具有引用您提供的某个变量的唯一路径,并且只需在lambda资源声明中将该路径设置为环境变量,以便在代码中引用

地形一侧可能看起来像这样:

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
)