如何使用单个云表单模板创建多个弹性豆茎环境 [英] How to create multiple Elasticbeanstalk environments using a single cloudformation template

查看:8
本文介绍了如何使用单个云表单模板创建多个弹性豆茎环境的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

如何使用CloudForment在单个ElasticBeanstak应用程序下创建多个环境。

我已经创建了一个CloudForment模板,它基本上是通过配置必要的资源在AWS上创建CI/CD管道。在使用模板在相同的弹性豆茎应用程序下创建多个环境(例如,准备和生产)时,我遇到了一个问题。当我第一次部署模板时,比方说过渡环境,它工作得很好,但当我在本例中为生产环境重新部署它时,它失败了,并出现应用程序名称已存在的错误。我曾尝试使用CloudForformationConditions,但没有成功。我想知道是否有一种方法可以让我有一个条件来检查是否存在类似的ApplicationName,它跳过应用程序名称的创建,并在名称下创建一个环境。

    WebApplication:
        Type: AWS::ElasticBeanstalk::Application
        Properties:
          ApplicationName: !Sub "${GithubRepo}"
          Description: "Application Description"

      WebApplicationEnvironment:
        Type: AWS::ElasticBeanstalk::Environment
        Properties:
          ApplicationName: !Ref WebApplication
          EnvironmentName: !Sub "${GithubRepo}-${Stage}"
          TemplateName: !Ref WebApplicationTemplate

我希望在第二次运行模板时创建时,应在指定的应用程序中创建新环境。

推荐答案

我想知道是否有一种方法可以让我有一个条件来检查是否存在类似的ApplicationName,它跳过应用程序名称的创建,并在名称下创建一个环境。

简而言之,如果您愿意构建一个可以检查和返回可用于Web应用程序中的条件的值的自定义资源,则答案是肯定的。但这是一个糟糕的想法,原因如下:阶段堆栈的资源也将在PROD中使用,但由于您在堆栈之间隐式耦合它们,CloudForment将不知道如何处理更新。

如果您想在WebApplication和WebApplicationEnvironment之间建立一对多关系,最好是在不同的堆栈中创建它们。您可以使用堆栈导出将一个堆栈的数据公开给另一个堆栈。堆栈导出将防止您无意中更改其他堆栈所依赖的资源。

但对于您来说,更好的方法可能是为每个环境创建两个完全不同的堆栈。否则,您将无法测试Prod升级过程(当您升级阶段时,您将升级Prod)。

如果您真的想要削减成本,那么将所有环境放在同一堆栈中。如果您无论如何都不能使用它们来保持不同环境的不同,那么共享一个堆栈比在各个堆栈之间隐式共享资源更好。

这篇关于如何使用单个云表单模板创建多个弹性豆茎环境的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆