AWS CDK - 更新现有的 lambda 环境变量

Mik*_*ike 6 amazon-web-services aws-lambda aws-cdk

我希望能够通过 AWS CDK 更新现有的 lambda 函数。我需要更新环境变量配置。据我所知这是不可能的,有什么可行的办法可以实现这一点吗?

我正在使用这样的代码来导入 lambda:

    const importedLambdaFromArn = lambda.Function.fromFunctionAttributes(
      this,
      'external-lambda-from-arn',
      {
        functionArn: 'my-arn',
        role: importedRole,
      }
    );
Run Code Online (Sandbox Code Playgroud)

目前,我必须手动更改 cloudformation 模板。直接在cdk中更新会好得多。

fed*_*nev 4

是的,这是可能的,尽管您应该在实际操作之前阅读@Allan_Chua 的答案。Lambda 的UpdateFunctionConfiguration API 可以修改已部署函数的环境变量。CDK 的AwsCustomResource构造允许我们在堆栈部署期间调用该 API。*

假设您想要将TABLE_NAME之前部署的 lambda 设置为 DynamoDB 表名称的值:

// MyStack.ts

const existingFunc = lambda.Function.fromFunctionArn(this, 'ImportedFunction', arn);

const table = new dynamo.Table(this, 'DemoTable', {
  partitionKey: { name: 'id', type: dynamo.AttributeType.STRING },
});

new cr.AwsCustomResource(this, 'UpdateEnvVar', {
  onCreate: {
    service: 'Lambda',
    action: 'updateFunctionConfiguration',
    parameters: {
      FunctionName: existingFunc.functionArn,
      Environment: {
        Variables: {
          TABLE_NAME: table.tableName,
        },
      },
    },
    physicalResourceId: cr.PhysicalResourceId.of('DemoTable'),
  },
  policy: cr.AwsCustomResourcePolicy.fromSdkCalls({
    resources: [existingFunc.functionArn],
  }),
});
Run Code Online (Sandbox Code Playgroud)

在底层,自定义资源创建一个 lambda,UpdateFunctionConfiguration在创建堆栈时使用 JS SDK 进行调用。还有onUpdate一些onDelete案件需要处理。


* 同样,这是否是一个好主意取决于用例。您随时可以UpdateFunctionConfiguration在没有 CDK 的情况下进行调用。