如何在第二个CloudFormation栈中复用已创建的Elastic Beanstalk资源
CloudFormation跨栈复用EB应用配置错误解决方案
错误根因
你在第二个栈的Resources段中声明了AWS::ElasticBeanstalk::Application类型的资源,该资源类型的作用是新建Elastic Beanstalk应用,哪怕你指定的ApplicationName是已经存在的名称,CloudFormation仍会尝试创建同名新应用,自然触发名称被占用的报错。ImportValue仅用于导入跨栈的输出值,不会自动关联已有的同类型资源,你不需要在第二个栈中重复声明第一个栈已经创建完成的EB应用资源。
正确配置方案
第二个栈无需保留EB应用的资源声明,直接在声明EB环境资源时,关联导入的应用名即可:
Resources: # 删除原有EBApplication的资源声明,无需重复创建应用 EBEnvironment: Type: AWS::ElasticBeanstalk::Environment Properties: # 直接引用第一个栈导出的EB应用名 ApplicationName: !ImportValue card-balance-EBApplicationName EnvironmentName: 自定义环境名称,如prod-env # 其余环境配置(解决方案栈版本、实例规格、版本标签等)按实际需求补充
注意事项
- 你当前的ImportValue写法冗余,导出名固定的情况下无需使用
Fn::Sub,直接写!ImportValue card-balance-EBApplicationName即可,仅当导出名需要拼接变量时才需要配合Sub使用。 - 跨栈导入要求两个栈必须处于同一个AWS账号和同一区域下,跨账号/跨区域的导出值无法直接通过ImportValue导入。
内容的提问来源于stack exchange,提问作者Mark
相关产品推荐
相关产品推荐

