You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何配置Amazon CDK,在Lambda函数部署后自动触发其执行?

实现CDK部署后自动调用Lambda函数

可以通过AWS CDK的**自定义资源(Custom Resource)**实现部署完成后自动调用Lambda函数,以下是具体实现方案:

核心思路

利用AwsCustomResource构造,在CloudFormation部署的「创建」或「更新」阶段,调用Lambda的Invoke API触发目标函数执行。无需额外编写辅助Lambda,直接通过CDK配置即可完成。

代码示例(TypeScript)

假设你已经定义了目标Lambda函数targetLambda,只需添加以下代码:

import * as cdk from 'aws-cdk-lib';
import * as lambda from 'aws-cdk-lib/aws-lambda';
import * as cr from 'aws-cdk-lib/custom-resources';
import { Construct } from 'constructs';

export class MyStack extends cdk.Stack {
  constructor(scope: Construct, id: string, props?: cdk.StackProps) {
    super(scope, id, props);

    // 你的目标Lambda函数(已存在)
    const targetLambda = new lambda.Function(this, 'TargetLambda', {
      runtime: lambda.Runtime.NODEJS_20_X,
      handler: 'index.handler',
      code: lambda.Code.fromAsset('lambda'),
    });

    // 部署后自动调用Lambda的自定义资源
    new cr.AwsCustomResource(this, 'InvokePostDeploy', {
      // 首次部署时调用
      onCreate: {
        service: 'Lambda',
        action: 'invoke',
        parameters: {
          FunctionName: targetLambda.functionName,
          InvocationType: 'Event', // 异步调用,不阻塞部署;如需同步用RequestResponse
          // 如需传参,添加Payload字段:Payload: JSON.stringify({ foo: 'bar' })
        },
        physicalResourceId: cr.PhysicalResourceId.of(`Invoke-${targetLambda.functionName}-${Date.now()}`),
      },
      // 更新部署时也调用
      onUpdate: {
        service: 'Lambda',
        action: 'invoke',
        parameters: {
          FunctionName: targetLambda.functionName,
          InvocationType: 'Event',
        },
        physicalResourceId: cr.PhysicalResourceId.of(`Invoke-${targetLambda.functionName}-${Date.now()}`),
      },
      // 授予自定义资源调用Lambda的权限
      policy: cr.AwsCustomResourcePolicy.fromStatements([
        new cdk.aws_iam.PolicyStatement({
          actions: ['lambda:InvokeFunction'],
          resources: [targetLambda.functionArn],
        }),
      ]),
    });
  }
}

关键配置说明

  • InvocationType:选Event时为异步调用,CloudFormation无需等待执行结果,部署流程不会被阻塞;选RequestResponse为同步调用,若Lambda执行失败会导致部署中断,适合需要验证执行结果的场景。
  • PhysicalResourceId:每次部署生成唯一ID,确保CloudFormation会触发调用操作(避免因资源ID重复跳过执行)。
  • 权限配置:必须为自定义资源授予lambda:InvokeFunction权限,否则无法调用目标Lambda。

内容的提问来源于stack exchange,提问作者Ken Yip

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.16 05:12:29