首页 > 解决方案 > Cloudformation Init 的 Cloudformation 输出

问题描述

我有一个 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 实例启动时运行此命令。

我怎么能这样。

标签: amazon-web-servicesamazon-cloudformationdevopsinfrastructure-as-code

解决方案


派对有点晚了,但除了之前的答案......

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

但是,在已启动的 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 日志代理!)的信息。使用 Cloudwatch 代理的好处是它还可以将自定义指标流式传输到 Cloudwatch 指标(例如内存使用情况、应用程序指标、数据库指标等)。

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

另一种方法是使用 SSM(系统管理器)按照此处的说明将代理推送到已运行的实例上。


推荐阅读