AWS CDK - 更新现有的 lambda 环境变量
AWS CDK - update existing lambda environment variables
我希望能够通过 AWS CDK 更新现有的 lambda 函数。我需要更新环境变量配置。据我所知,这是不可能的,有什么可行的方法可以实现吗?
我正在使用这样的代码导入 lambda:
const importedLambdaFromArn = lambda.Function.fromFunctionAttributes(
this,
'external-lambda-from-arn',
{
functionArn: 'my-arn',
role: importedRole,
}
);
目前,我必须手动更改 cloudformation 模板。直接在cdk更新会好很多
CDK
的主要目的是使 AWS 客户能够自动 provision
资源。如果我们尝试更新由其他 CloudFormation 堆栈管理的 pre-existing 资源的设置,最好更新其父 CloudFormation 模板上的变量而不是 CDK。这为您提供了以下优势:
- 变量应该是什么样子的只有一个真实来源
- 每当从这些来源推送更新时,CDK 和 CloudFormation 模板之间没有拖拉 war。
- 否则,因为这是一个计算层,所以只需从 CloudFormation 中删除 lambda 函数并开始完全使用 CDK 兄弟!
希望这条建议对您有所帮助
是的,这是可能的,尽管您应该在实际操作之前阅读@Allan_Chua 的回答。 Lambda 的 UpdateFunctionConfiguration API can modify a deployed function's environment variables. The CDK's AwsCustomResource 构造让我们在堆栈部署期间调用 API。*
假设您要将先前部署的 lambda 上的 TABLE_NAME
设置为 DynamoDB table 名称的值:
// 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],
}),
});
在幕后,custom resource 创建了一个 lambda,它在创建堆栈时使用 JS SDK 进行 UpdateFunctionConfiguration
调用。还有 onUpdate
和 onDelete
个案例需要处理。
* 同样,这是否是 good idea or not 取决于用例。你总是可以在没有 CDK 的情况下调用 UpdateFunctionConfiguration
。
我希望能够通过 AWS CDK 更新现有的 lambda 函数。我需要更新环境变量配置。据我所知,这是不可能的,有什么可行的方法可以实现吗?
我正在使用这样的代码导入 lambda:
const importedLambdaFromArn = lambda.Function.fromFunctionAttributes(
this,
'external-lambda-from-arn',
{
functionArn: 'my-arn',
role: importedRole,
}
);
目前,我必须手动更改 cloudformation 模板。直接在cdk更新会好很多
CDK
的主要目的是使 AWS 客户能够自动 provision
资源。如果我们尝试更新由其他 CloudFormation 堆栈管理的 pre-existing 资源的设置,最好更新其父 CloudFormation 模板上的变量而不是 CDK。这为您提供了以下优势:
- 变量应该是什么样子的只有一个真实来源
- 每当从这些来源推送更新时,CDK 和 CloudFormation 模板之间没有拖拉 war。
- 否则,因为这是一个计算层,所以只需从 CloudFormation 中删除 lambda 函数并开始完全使用 CDK 兄弟!
希望这条建议对您有所帮助
是的,这是可能的,尽管您应该在实际操作之前阅读@Allan_Chua 的回答。 Lambda 的 UpdateFunctionConfiguration API can modify a deployed function's environment variables. The CDK's AwsCustomResource 构造让我们在堆栈部署期间调用 API。*
假设您要将先前部署的 lambda 上的 TABLE_NAME
设置为 DynamoDB table 名称的值:
// 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],
}),
});
在幕后,custom resource 创建了一个 lambda,它在创建堆栈时使用 JS SDK 进行 UpdateFunctionConfiguration
调用。还有 onUpdate
和 onDelete
个案例需要处理。
* 同样,这是否是 good idea or not 取决于用例。你总是可以在没有 CDK 的情况下调用 UpdateFunctionConfiguration
。