【问题标题】:Reuse Elastic Beanstalk resource creating in one cloud formation stack in a second cloud formation stack在第二个云形成堆栈中重用在一个云形成堆栈中创建的 Elastic Beanstalk 资源
【发布时间】:2021-12-18 21:08:29
【问题描述】:

我有一个创建 Elastic Beanstalk 应用程序的现有云形成堆栈:

 Resources:
   EBApplication:
     Type: AWS::ElasticBeanstalk::Application
     Properties:
       ApplicationName: !Ref ApplicationName
       Description: "AWS Elastic Beanstalk Account Balance application"

我想在另一个堆栈中使用这个资源,所以我在同一个 yaml 文件的末尾导出它:

Outputs:
  EBApplicationName:
    Value: !Ref EBApplication
    Export:
      Name: card-balance-EBApplicationName

现在在我的第二个云形成堆栈中,我打算使用弹性豆茎资源,我正在尝试:

Resources:
  EBApplication:
    Type: AWS::ElasticBeanstalk::Application
    Properties:
      ApplicationName: !ImportValue 
            'Fn::Sub': 'card-balance-EBApplicationName'

但我收到一条错误消息,指出应用程序名称已被使用,因为它正在尝试创建一个新的 Elastic Beanstalk 应用程序(具有相同的相同)而不是重用第一个应用程序。我做错了什么?

编辑 这里的这个问题也有类似的问题。本质上,我想要 2 个单独的堆栈 - 每个环境一个 - 但它们在同一个 EB 应用程序下。看来这个人实现了这一点,请参阅答案How to create multiple Elasticbeanstalk environments using a single cloudformation template下的评论

【问题讨论】:

标签: amazon-web-services amazon-elastic-beanstalk amazon-cloudformation


【解决方案1】:

EB 应用程序资源必须在一个且唯一的堆栈中:

EBApplication:
  Type: AWS::ElasticBeanstalk::Application
  Properties:
     ApplicationName: !Ref EBApplicationName
     Description: "Application Description"

在此堆栈中,您可以在环境中引用应用程序:

EBApplicationEnvironment1:
  Type: AWS::ElasticBeanstalk::Environment
  Properties:
    ApplicationName: !Ref EBApplication
    EnvironmentName: !Ref EBnvironmentName1

这是因为,根据documentation Ref 返回资源名称。

在另一个堆栈中,您不能按资源引用,但可以按名称:

EBApplicationEnvironment2:
  Type: AWS::ElasticBeanstalk::Environment
  Properties:
    ApplicationName: !Ref EBApplicationName
    EnvironmentName: !Ref EBnvironmentName2

使用 Ref,您可以引用另一个资源(仅在同一个堆栈中)和一个参数。因此,对于您的情况,您可以在两个堆栈中传递相同的应用程序名称作为参数。您不一定需要输出名称。 (CloudFormation 并非总是如此。它在这里工作,因为您可以定义名称,并且可以按名称引用环境中的资源。在其他情况下需要 ARN 或 id。输出将在那里工作) .

另请注意,第一个堆栈拥有应用程序和环境 1。您需要先删除(在需要时)第二个堆栈,然后再删除第一个。

【讨论】:

  • 谢谢,我正在尝试这个,但是当我尝试创建堆栈 2 时,我得到:“您必须指定配置模板名称或解决方案堆栈名称。(服务:AWSElasticBeanstalk;状态代码:400;错误代码:缺失参数;"
  • 需要这些参数。请参阅docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/… 中的一些示例。答案中的代码 sn-ps 并不完整。
【解决方案2】:

我做错了什么?

您不能“重用第一个”第一个。对第一个 EB 环境的所有修改都必须使用第一个 CFN 堆栈执行。

在第二个堆栈中,您只能在其他资源中引用 EB return values,一旦您在第一个堆栈中导出这些值。

【讨论】:

  • 不太确定该怎么做,首先,我是否正确地从第一个堆栈输出?
  • @Mark 你不能在第二个堆栈中使用AWS::ElasticBeanstalk::Application。它想创建一个重复的 EB 应用程序。因此它出错了。
  • 这个答案和下面的评论怎么样?生病编辑问题
  • @Mark 另一个答案比我的更详细,因此应该被接受。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-03-27
  • 2018-11-20
  • 2020-06-18
  • 2021-10-04
  • 2017-10-24
  • 2015-02-15
相关资源
最近更新 更多