首页 > 解决方案 > 使用环境变量条件部署 lambdas

问题描述

我已经尝试使用 terraform 部署 1 个 lambda。问题是 - 我打算只使用我制作的当前代码部署 lambda,如果我需要使用相同的代码但具有不同的环境变量部署 2nd、3rd 和 4rth lambda 怎么办?请参阅下面的示例场景

LAMBDA-1 = hello-Earth
ENV VARS:
    KMS-KEY-1 = data.aws_kms_key.key1.id
    KMS-KEY-2 = data.aws_kms_key.key2.id
    ENV = DEV

LAMBDA-2 = hello-Mars
ENV VARS:
    KMS-KEY-1 = data.aws_kms_key.key1.id
    KMS-KEY-2 = data.aws_kms_key.key2.id
    ENV = SQA
    VARIETY = HOT
    SIZE = LARGE

LAMBDA-3 = hello-Neptune
ENV VARS:
    KMS-KEY-1 = data.aws_kms_key.key1.id
    KMS-KEY-2 = data.aws_kms_key.key2.id
    ENV = UAT
    VARIETY = COLD
    SIZE = MEDIUM
    DISTANCE = FAR

LAMBDA-4 = hello-Pluto
ENV VARS
    ENV = PROD
    SIZE = SMALL
    DISTANCE = FAR

标签: aws-lambdaterraformterraform-provider-aws

解决方案


aws_lambda_function 资源有一个环境参数。在其中您可以定义您的环境变量。

因此,您的 lambda 函数资源将是相同的,但具有不同的环境参数,如下所示:

resource "aws_lambda_function" "hello-Earth" {
  filename      = "lambda_function_payload.zip"
  function_name = "hello-Earth"
  role          = "${aws_iam_role.iam_for_lambda.arn}"
  handler       = "exports.test"

  source_code_hash = "${filebase64sha256("lambda_function_payload.zip")}"

  runtime = "nodejs8.10"

  environment {
    variables = {
      KMS-KEY-1 = data.aws_kms_key.key1.id
      KMS-KEY-2 = data.aws_kms_key.key2.id
      ENV = "UAT"
      VARIETY = "COLD"
      SIZE = "MEDIUM"
      DISTANCE = "FAR"
    }
  }
}

resource "aws_lambda_function" "hello-Mars" {
  filename      = "lambda_function_payload.zip"
  function_name = "hello-Mars"
  role          = "${aws_iam_role.iam_for_lambda.arn}"
  handler       = "exports.test"

  source_code_hash = "${filebase64sha256("lambda_function_payload.zip")}"

  runtime = "nodejs8.10"

  environment {
    variables = {
      KMS-KEY-1 = data.aws_kms_key.key1.id
      KMS-KEY-2 = data.aws_kms_key.key2.id
      ENV = "SQA"
      VARIETY = "HOT"
      SIZE = "LARGE"
    }
  }
}

推荐阅读