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

AWS CDK 技术问题:如何创建无需指定代码的Lambda函数

在AWS CDK中创建无代码的Lambda函数方法

方法1:用占位符代码满足CDK必填要求

你可以给Lambda指定一段极简的占位代码,先通过CDK的校验,后续发布流水线部署时会自动覆盖这段代码。示例(TypeScript):

import { Function, Runtime, Code } from 'aws-cdk-lib/aws-lambda';
import { Stack, StackProps } from 'aws-cdk-lib';
import { Construct } from 'constructs';

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

    // 创建占位Lambda,后续会被流水线代码替换
    const placeholderLambda = new Function(this, 'PipelineManagedLambda', {
      runtime: Runtime.NODEJS_20_X,
      handler: 'index.handler',
      // 内联极简代码作为占位
      code: Code.fromInline(`
        exports.handler = async () => {
          return { statusCode: 200, body: 'Placeholder - to be replaced' };
        };
      `),
    });
  }
}

这种方式简单直接,完全符合CDK的要求,后续流水线通过UpdateFunctionCode API或部署工具替换代码时不会有冲突。

方法2:用CloudFormation原生构造CfnFunction

如果不想写任何占位代码,可以直接使用CDK封装的CloudFormation原生资源CfnFunction,它允许只配置核心属性(运行时、处理器、角色等),不指定代码参数。示例(TypeScript):

import { CfnFunction, Runtime } from 'aws-cdk-lib/aws-lambda';
import { Stack, StackProps } from 'aws-cdk-lib';
import { Construct } from 'constructs';
import { Role, ServicePrincipal, ManagedPolicy } from 'aws-cdk-lib/aws-iam';

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

    // 创建Lambda执行角色
    const lambdaRole = new Role(this, 'LambdaExecRole', {
      assumedBy: new ServicePrincipal('lambda.amazonaws.com'),
      managedPolicies: [
        ManagedPolicy.fromAwsManagedPolicyName('service-role/AWSLambdaBasicExecutionRole')
      ]
    });

    // 创建无代码的Lambda,由流水线后续部署代码
    const emptyLambda = new CfnFunction(this, 'EmptyLambda', {
      functionName: 'MyPipelineLambda',
      runtime: Runtime.NODEJS_20_X.name,
      handler: 'index.handler',
      role: lambdaRole.roleArn,
      // 不指定code属性,留空
    });
  }
}

这种方式更贴近原生CloudFormation逻辑,适合完全由流水线掌控代码部署的场景,但要注意:初始创建的Lambda无法正常执行,必须等流水线推送代码后才能工作。

注意事项

  • 确保流水线拥有足够权限更新Lambda,比如lambda:UpdateFunctionCode和lambda:UpdateFunctionConfiguration权限。
  • 如果用CodeDeploy做蓝绿部署,需要在CDK中提前配置好Lambda别名和部署组,保证流水线能无缝对接。

内容的提问来源于stack exchange,提问作者Fabio Milheiro

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 11:40:23