是否有任何东西可以将 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 代码?

是否有任何可用的原生 WPF 多选组合框?

Typescript 中是不是有“类”的类型? “任何”包括它吗?

当中间列可以是任何东西时,是不是使用 3 列 SQL 索引?

在C#中是否可以在一个列表中添加两个参数?

是否有必要将方法定义为“公共”?