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

Lambda挂载AWS EFS正常,但CloudFormation销毁/更新栈时卡顿

解决CloudFormation销毁/修改Lambda+EFS栈时的20分钟卡顿问题

问题根源

当CloudFormation销毁栈或替换Lambda资源(比如修改Lambda ID)时,会等待EFS的挂载连接完全断开后才能删除EFS资源。但Lambda的执行环境不会主动释放EFS挂载,AWS内部会强制等待20分钟的超时时间,导致操作卡顿。

解决方案

通过主动清理Lambda的EFS挂载或终止执行环境,让CloudFormation无需等待超时即可完成资源销毁/更新,以下是具体实现方法:


1. 用自定义资源主动移除Lambda的EFS挂载

在CDK中添加自定义资源(Custom Resource),在栈销毁、Lambda资源更新或删除前,调用Lambda API移除EFS挂载配置,强制断开连接。

修改你的CDK代码,添加以下逻辑:

// 导入自定义资源模块
import * as cr from 'aws-cdk-lib/custom-resources';

// ... 原有的VPC、EFS、Lambda创建代码 ...

const createEmbeddingHandler = new lambda.DockerImageFunction(this, 'CreateEmbeddingLambdaFunction', {
  // ... 原有的Lambda配置 ...
});

// 添加清理EFS挂载的自定义资源
const lambdaEfsCleanup = new cr.AwsCustomResource(this, 'LambdaEfsCleanup', {
  // 创建时初始化挂载配置(可选)
  onCreate: {
    service: 'Lambda',
    action: 'updateFunctionConfiguration',
    parameters: {
      FunctionName: createEmbeddingHandler.functionName,
      FileSystemConfigs: [{
        Arn: accessPoint.accessPointArn,
        LocalMountPath: '/mnt/filesystem'
      }]
    },
    physicalResourceId: cr.PhysicalResourceId.of(`LambdaEfsCleanup-${createEmbeddingHandler.functionName}`)
  },
  // 删除前清空EFS挂载配置
  onDelete: {
    service: 'Lambda',
    action: 'updateFunctionConfiguration',
    parameters: {
      FunctionName: createEmbeddingHandler.functionName,
      FileSystemConfigs: []
    }
  },
  // 更新时先移除旧挂载(适配Lambda ID修改场景)
  onUpdate: {
    service: 'Lambda',
    action: 'updateFunctionConfiguration',
    parameters: {
      FunctionName: createEmbeddingHandler.functionName,
      FileSystemConfigs: []
    }
  },
  // 赋予自定义资源修改Lambda配置的权限
  policy: cr.AwsCustomResourcePolicy.fromSdkCalls({
    resources: [createEmbeddingHandler.functionArn]
  })
});

// 确保Lambda资源的删除依赖于清理操作完成
createEmbeddingHandler.node.addDependency(lambdaEfsCleanup);

2. 强制终止Lambda执行环境(可选补充)

如果移除挂载后仍有延迟,可以在自定义资源中添加终止Lambda执行环境的操作,通过设置并发数为0强制停止所有运行中的实例:

// 修改onDelete的配置,替换为以下内容
onDelete: {
  service: 'Lambda',
  action: 'putFunctionConcurrency',
  parameters: {
    FunctionName: createEmbeddingHandler.functionName,
    ReservedConcurrentExecutions: 0
  }
}

执行此操作后,Lambda会立即终止所有运行中的执行环境,彻底断开EFS连接。

注意事项

  • 自定义资源需要具备修改Lambda配置和设置并发数的权限,代码中的AwsCustomResourcePolicy已经自动处理权限范围。
  • 若修改Lambda ID(即创建新Lambda资源),旧Lambda的删除流程会触发自定义资源的onDelete操作,确保旧挂载被清理。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 03:05:12