【问题标题】:Is it possible to use AWS::CloudFormation::Init and metadata in AWS::OpsWorks::Instance resource?是否可以在 AWS::OpsWorks::Instance 资源中使用 AWS::CloudFormation::Init 和元数据?
【发布时间】:2017-04-24 17:46:30
【问题描述】:

我想通过 opsworks 创建一个堆栈,并且我想在我的堆栈实例中配置用户数据。我不需要 Auto Scaling 组,因此可以像在 AWS::EC2::Instance 中那样在 AWS::OpsWorks::Instance 资源中使用元数据和 AWS::CloudFormation::Init 吗?启动配置?

 "Resources": {
      "MyInstance": {
        "Type": "AWS::EC2::Instance",
        "Metadata" : {
          "AWS::CloudFormation::Init" : {
            "config" : {
              "packages" : {},
              "groups" : {},
              "users" : {},
              "sources" : {},
              "files" : {},
              "commands" : {},
              "services" : {}
            }
          }
        },
        "Properties": {
          [...]
        }
      }
    }

【问题讨论】:

    标签: amazon-web-services amazon-cloudformation aws-opsworks


    【解决方案1】:

    TLDR:使用 Chef 食谱和食谱来配置 AWS::OpsWorks::Instance,而不是 cfn-init

    在内部,OpsWorks 使用 cloud-init 在实例上安装 AWS OpsWorks Stacks 代理(请参阅 Using Custom AMIs: Startup Behavior)。大概出于这个原因,OpsWorks 实例不支持设置自定义用户数据脚本,因此您无法像在常规 AWS::EC2::Instance 资源上一样在启动时运行 cfn-init

    对于解决方法,您可以为您的实例使用 use a custom AMI,并将 AMI 配置为在启动时调用 cfn-init

    但是,强烈建议不要使用这样的解决方法 - 您真的不应该一开始就需要在 OpsWorks 堆栈中使用 cfn-init(或其对应的 AWS::CloudFormation::Init 元数据)。 cfn-init 与 OpsWorks 提供的更强大的基于 Chef 的配置管理完全正交,这可能是您首先使用 OpsWorks 的原因。好好利用它!使用 Chef 食谱和说明书来配置您的实例。

    如果您确实需要使用 cfn-init 和自定义用户数据(例如,以支持遗留代码),那么我建议您坚持使用标准 EC2 实例,直到您可以将应用程序逻辑移植到自定义 Chef 说明书。

    【讨论】:

    • 这个逻辑的问题在于 Chef 依赖于签入存储库的代码。如果您正在执行自定义配方并需要用户数据来配置您的实例以访问存储库,您会遇到第 22 条问题。
    猜你喜欢
    • 1970-01-01
    • 2017-03-01
    • 1970-01-01
    • 2013-03-01
    • 2018-05-08
    • 1970-01-01
    • 2014-12-19
    • 2020-10-08
    • 2020-01-04
    相关资源
    最近更新 更多