是否有任何东西可以将 AWS::ElasticBeanstalk::Environment 链接到它创建的嵌套堆栈?
Posted
技术标签:
【中文标题】是否有任何东西可以将 AWS::ElasticBeanstalk::Environment 链接到它创建的嵌套堆栈?【英文标题】:Is there anything that links AWS::ElasticBeanstalk::Environment to the nested stack it creates? 【发布时间】:2020-10-28 03:42:25 【问题描述】:我可以通过 CloudFormation 在同一个模板中使用 AWS::ElasticBeanstalk::Environment 和 AWS::ElasticBeanstalk::ApplicationVersion 部署 EB 环境
这很好,但如果 beanstalk 应用程序 部署 失败,CloudFormation 不会失败 - 通常会成功创建堆栈/环境。所以 CloudFormation 部署成功,Beanstalk 应用程序版本部署失败,Beanstalk 回滚到以前的版本,并返回到健康状态,我知道它失败的唯一方法是查看控制台或做一些奇怪的事情,比如尝试检查当前应用程序部署后的版本。
嵌套堆栈 AWS::ElasticBeanstalk::Environment 创建但是如果应用程序版本部署失败,确实似乎会失败,但我找不到将两者联系起来的方法,这很烦人。 p>
我需要在 CloudFormation 完成后以编程方式识别 AWS::ElasticBeanstalk::Environment 创建的嵌套堆栈,并且可以检查该嵌套堆栈的状态以查看 Beanstalk 部署是否实际成功
编辑
至少它们被标记了环境名称。我真的不喜欢这个,但它似乎有效,但对更好的选择感到好奇:
aws cloudformation describe-stacks --query 'Stacks[?Tags[?Key == `elasticbeanstalk:environment-name` && Value == `myenvname`]].StackName: StackName' --output text
【问题讨论】:
【参考方案1】:从技术上讲,它不是嵌套堆栈,而是来自AWS::ElasticBeanstalk::Environment
的完全独立堆栈。
不过,获取堆栈名称的一种方法是通过 CFN 中的custom resource。
在 CFN 中,您将拥有一个 lambda,它将在您的环境中使用 describe-environments,获取 EB 堆栈名称,并将其返回到您的堆栈以进行进一步处理。
查询的结果之一是EnvironmentId
。例如
"EnvironmentId": "e-ctpmqpqwjm"
EB 生成的堆栈具有以下格式的名称:
awseb-<EnvironmentId>-stack
遗憾的是,我找不到任何参考。这是基于我自己的观察。因此,如果您选择探索此选项,则必须验证命名约定是否与您相同。
【讨论】:
如果这真的是唯一的方法,那么通过elasticbeanstalk:environment-name
标签过滤堆栈会好一百万倍。您可能也可以使用自己的标签部署环境并在其上进行搜索
@red888 是否更好是主观的。任何有权访问 aws 控制台的人都可以修改或删除标签,从而导致错误。但是您不能只删除EnvironmentId
或将其更改为您想要的任何内容,使其更具弹性。如果你想让一切都在 CFN 的控制之下,你仍然必须使用自定义资源,即使使用标签。以上是关于是否有任何东西可以将 AWS::ElasticBeanstalk::Environment 链接到它创建的嵌套堆栈?的主要内容,如果未能解决你的问题,请参考以下文章
是否有任何选项可以使用 tsc 或 ts-node 或其他任何东西更快地编译和运行 ts 代码?
Typescript 中是不是有“类”的类型? “任何”包括它吗?