在第二个云形成堆栈中重用在一个云形成堆栈中创建的 Elastic Beanstalk 资源
Reuse Elastic Beanstalk resource creating in one cloud formation stack in a second cloud formation stack
我有一个创建 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
现在在我的第二个云形成堆栈中,我要使用弹性 beantalk 资源,我正在尝试:
Resources:
EBApplication:
Type: AWS::ElasticBeanstalk::Application
Properties:
ApplicationName: !ImportValue
'Fn::Sub': 'card-balance-EBApplicationName'
但我收到一条错误消息,指出应用程序名称已被使用,因为它正在尝试创建一个新的 Elastic Beanstalk 应用程序(相同)而不是重复使用第一个应用程序。我做错了什么?
编辑
This question here有类似的问题。本质上我想要 2 个独立的堆栈 - 每个环境一个 - 但它们在同一个 EB 应用程序下。看来这个人做到了这一点,请参阅他们在答案下的评论 How to create multiple Elasticbeanstalk environments using a single cloudformation template
What am I doing wrong?
你不能“重用第一个”第一个。必须使用第一个 CFN 堆栈执行对第一个 EB 环境的所有修改。
在第二个堆栈中,您只能在其他资源中引用 EB return values,一旦您在第一个堆栈中导出这些值。
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 returns 资源名称。
在另一个堆栈中,您不能按资源引用,但可以按名称引用:
EBApplicationEnvironment2:
Type: AWS::ElasticBeanstalk::Environment
Properties:
ApplicationName: !Ref EBApplicationName
EnvironmentName: !Ref EBnvironmentName2
使用 Ref,您可以同时引用另一个资源(仅在同一堆栈中)和一个参数。因此,对于您的情况,您可以在两个堆栈中传递相同的应用程序名称作为参数。您不一定需要输出名称。 (CloudFormation 并非总是如此。它在这里起作用,因为您可以定义名称,并且可以按名称引用环境中的资源。在其他情况下需要 ARN 或 ID。输出将在那里起作用) .
另请注意,第一个堆栈拥有应用程序和环境 1。您需要先删除(需要时)第二个堆栈,然后是第一个。
我有一个创建 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
现在在我的第二个云形成堆栈中,我要使用弹性 beantalk 资源,我正在尝试:
Resources:
EBApplication:
Type: AWS::ElasticBeanstalk::Application
Properties:
ApplicationName: !ImportValue
'Fn::Sub': 'card-balance-EBApplicationName'
但我收到一条错误消息,指出应用程序名称已被使用,因为它正在尝试创建一个新的 Elastic Beanstalk 应用程序(相同)而不是重复使用第一个应用程序。我做错了什么?
编辑 This question here有类似的问题。本质上我想要 2 个独立的堆栈 - 每个环境一个 - 但它们在同一个 EB 应用程序下。看来这个人做到了这一点,请参阅他们在答案下的评论 How to create multiple Elasticbeanstalk environments using a single cloudformation template
What am I doing wrong?
你不能“重用第一个”第一个。必须使用第一个 CFN 堆栈执行对第一个 EB 环境的所有修改。
在第二个堆栈中,您只能在其他资源中引用 EB return values,一旦您在第一个堆栈中导出这些值。
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 returns 资源名称。
在另一个堆栈中,您不能按资源引用,但可以按名称引用:
EBApplicationEnvironment2:
Type: AWS::ElasticBeanstalk::Environment
Properties:
ApplicationName: !Ref EBApplicationName
EnvironmentName: !Ref EBnvironmentName2
使用 Ref,您可以同时引用另一个资源(仅在同一堆栈中)和一个参数。因此,对于您的情况,您可以在两个堆栈中传递相同的应用程序名称作为参数。您不一定需要输出名称。 (CloudFormation 并非总是如此。它在这里起作用,因为您可以定义名称,并且可以按名称引用环境中的资源。在其他情况下需要 ARN 或 ID。输出将在那里起作用) .
另请注意,第一个堆栈拥有应用程序和环境 1。您需要先删除(需要时)第二个堆栈,然后是第一个。