我开始在Elastic Beanstalk(CNAME交换)中使用Swap Environment URLs
功能。如果我要坚持使用相同的环境名称,什么是最好的方法?
目前,我交换两次。首先,我启动了更改后的my-env-new
环境。我执行从my-env
到my-env-new
的第一次cname交换。然后,我删除前一个my-env
。我将新的my-env-new
克隆到my-env
中,然后再次交换。有更好的方法吗?
我运行一个AWS外部CI / CD管道,该管道使用环境名称来更新环境,因此我需要保留该名称。在这样的管道中对环境名称进行硬编码也许不是最佳实践。
答案 0 :(得分:0)
是的,这几乎就是您使用EB进行蓝色/绿色部署的方式。克隆是其中不可分割的一部分:
Lambda的功能是将蓝色环境克隆为绿色环境,重新交换URL,并在完成对蓝色环境的部署和测试后终止绿色环境。
AWS白皮书中描述了如何以自动方式执行操作的确切细节:
关于环境名称的硬编码,从您的问题中不确定我在哪里进行硬编码?如果对管道使用CloudFormatin,则可以将其作为默认参数传递给它。这样,很容易更改和重复使用管道。如果您是在AWS控制台中创建管道的,那么在部署阶段就必须选择现有的EB应用程序和EB环境。
答案 1 :(得分:0)
如果我要坚持使用相同的环境名称,什么是最佳方法?
不幸的是,在CNAME交换之后无法保留环境名称。 Elastic Beanstalk不支持重命名环境的功能。
您可以使用所需的名称终止环境,然后重新创建具有相同名称的环境,这是正确的。如前所述,如果使用这种方法,则需要等待旧环境被清理并从“环境”列表中删除。就像EC2实例终止时一样,即使终止后,项目也会显示一段时间(甚至长达一个小时)。在完全终止终止的环境之前,无法重复使用Elastic Beanstalk环境名称。
在这样的管道中对环境名称进行硬编码也许不是最佳实践。
您在这里的选择将取决于您的特定用例。例如,我们通常有用户使用Elastic Beanstalk实现CI / CD管道,他们希望确保将管道配置为指向正确的环境。根据管道配置,可能需要手动应用名称,或将管道指向环境CNAME。
如果需要自动执行此操作,以便可以为交换的环境获取环境名称,则可以考虑运行DescribeEnvironments()API调用以扫描所有环境,并基于CNAME字段进行过滤。这将允许您使用CNAME作为键来发现环境名称。如果您知道CNAME(在CNAME交换期间要在环境之间保留),那么将其用作过滤键将提供一种自动获取环境名称的方法。