将Terraform输出作为Lambda函数的环境变量传递

时间:2018-09-28 03:12:48

标签: aws-lambda terraform terraform-provider-aws

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

我的Terraform创建了大量资源,例如Lambda函数,API网关,网关方法,网关资源等。我需要将API网关资源ID作为环境变量发送给Lambda函数。不幸的是,我不能在Lambda函数中放置“ Depends on”,因为它是创建周期依赖项。

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

谢谢

1 个答案:

答案 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
)

希望这会有所帮助