【问题标题】:Cloudformation Output of Cloudformation InitCloudformation Init 的 Cloudformation 输出
【发布时间】:2019-08-01 14:08:17
【问题描述】:

我有一个 CloudFormation 堆栈,如下图所示,

  "Metadata" : {
            "AWS::CloudFormation::Init" : {
                "config" : {

                        "/home/ec2-user/create_db_user.sh" : {
                            "source" :                             

   "http://s3.amazonaws.com/devops/create_db_user.sh",
                            "mode" : "000755",
                            "owner" : "ec2-user"
                        }
                    }
 ...

当我需要将此初始化脚本输出设置到 cloudformation 堆栈后,我需要在 EC2 实例启动时运行此命令。

我怎么能做到这一点。

【问题讨论】:

  • 在 CloudFormation 中输出是什么意思?想知道成功了还是想看stdout
  • 您是否正在寻找使用 cloudformation 模板部署用户数据? docs.aws.amazon.com/AWSEC2/latest/UserGuide/user-data.html
  • @kichik 我想在堆栈输出中查看 AWS cloudformation 控制台的标准输出
  • 我们所说的输出有多大?
  • 我正在运行一个脚本来创建随机用户名和密码,我需要显示它的输出

标签: amazon-web-services amazon-cloudformation devops infrastructure-as-code


【解决方案1】:

聚会有点晚了,但除了上一个答案......

在创建 EC2 实例时AWS::CloudFormation::Init 的输出无法通过 Cloudformation 访问。

但是,在已启动的 EC2 实例上,您会发现AWS::CloudFormation::Init(又名cfn-init)和用户数据(cloud-init)的日志。

在 Amazon Linux 上,其结构如下:

  • /var/log/cfn-init-cmd.log:cfn-init 和带有时间戳的命令输出
  • /var/log/cfn-init.log:cfn-init和命令输出
  • /var/log/cloud-init.log:与运行用户数据中的命令有关的云初始化日志
  • /var/log/cloud-init-output.log:用户数据命令本身的输出

访问这些日志的最简单方法是将日志流式传输到 Cloudwatch Logs,这将使您能够按时间和内容搜索和过滤日志。还可以考虑使用 Cloudwatch Insights 进行搜索和过滤 - 它为搜索、过滤甚至简单的可视化(图表)提供了更全面、更易于理解的语法。

鉴于您已经在使用 cfn-init,您可以找到有关如何安装新的 Cloudwatch 代理(不是 Cloudwatch 日志代理!)的信息here。使用 Cloudwatch 代理的好处是它还可以将自定义指标流式传输到 Cloudwatch 指标(例如内存使用情况、应用指标、数据库指标等)。

对于已经在运行的 EC2 实例,请考虑查看 cfn-hup here

替代方法是使用 SSM(系统管理器)按照指令 here 将代理推送到已运行的实例上。

【讨论】:

    【解决方案2】:

    在您的问题的 cmets 中,有一些有效的观点可以推动您找到正确的解决方案。一般来说,您尝试做的事情是不可能的 - AWS::CloudFormation::Init 资源没有输出。它们不会在堆栈创建时进行评估,只是在 EC2 实例启动时存储和处理,但这不是 CloudFormation 堆栈运行的时间(可能是,但不总是 - 以 Auto Scaling 组为例)。

    【讨论】:

      【解决方案3】:

      根据this doc - 输出的值可以包括文字、参数引用、伪参数、映射值或内在函数。

      鉴于此,AWS::CloudFormation::Init 是 CloudFromation 元数据特定类型,但不是文字、参数、伪参数、映射值或内在函数。

      因此,您要实现的目标似乎是 CloudFormation 输出限制:(

      @m-jensen answer 列出了许多合适的解决方法。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-07-19
        • 2017-09-12
        • 1970-01-01
        • 1970-01-01
        • 2021-02-08
        • 1970-01-01
        • 1970-01-01
        • 2020-08-29
        相关资源
        最近更新 更多