代码之家  ›  专栏  ›  技术社区  ›  DenCowboy

使用cloudformation(yaml)在Ubuntu实例中启动cfn init

  •  4
  • DenCowboy  · 技术社区  · 7 年前

    我尝试以以下方式启动cfn init:

    Fn::Base64: !Sub | 
      #!/bin/bash
      sudo apt-get -y install python-setuptools
      mkdir aws-cfn-bootstrap-latest
      curl https://s3.amazonaws.com/cloudformation-examples/aws-cfn-bootstrap-latest.tar.gz | tar xz -C aws-cfn-bootstrap-latest --strip-components 1
      sudo easy_install aws-cfn-bootstrap-latest
      sudo /usr/local/bin/cfn-init --stack !Ref 'AWS::StackName' --resource xxx --region !Ref 'AWS::Region'
    

    第一步起作用。我可以访问实例并 cfn-init 已安装。当我执行 cfn-init --stack.. 命令在我的ec2实例中,当我硬编码stackname和region的值时,它可以正常工作。

    如何在 yaml 剧本似乎无法读取StackName和region的值。

    3 回复  |  直到 7 年前
        1
  •  4
  •   MaiKaY    7 年前

    如果您正在使用 !Sub 您需要用 ${} 而不是使用 !Ref

    试试这个

    Fn::Base64: !Sub | 
      #!/bin/bash
      sudo apt-get -y install python-setuptools
      mkdir aws-cfn-bootstrap-latest
      curl https://s3.amazonaws.com/cloudformation-examples/aws-cfn-bootstrap-latest.tar.gz | tar xz -C aws-cfn-bootstrap-latest --strip-components 1
      sudo easy_install aws-cfn-bootstrap-latest
      sudo /usr/local/bin/cfn-init --stack ${AWS::StackName} --resource xxx --region ${AWS::Region}
    

    如果指定模板参数名称或资源逻辑ID,例如 作为${InstanceTypeParameter},AWS CloudFormation返回相同的 值,就像使用了Ref内部函数一样。如果您指定 资源属性,例如${MyInstance.PublicIp},AWS CloudFormation返回的值与使用Fn::GetAtt时相同 内在功能。

    有关更多详细信息,请查看 AWS - Fn::Sub

        2
  •  0
  •   Waqar UlHaq    5 年前
    Fn::Base64: !Sub | 
      #!/bin/bash
      sudo apt-get -y install python-setuptools
      mkdir aws-cfn-bootstrap-latest
      curl https://s3.amazonaws.com/cloudformation-examples/aws-cfn-bootstrap-latest.tar.gz | tar xz -C aws-cfn-bootstrap-latest --strip-components 1
      sudo easy_install aws-cfn-bootstrap-latest
      sudo /usr/local/bin/cfn-init --stack ${AWS::StackName} --resource xxx --region ${AWS::Region}
    
    

    如果easy\u install对ubuntu 18.04不起作用,请使用以下命令:

    python /usr/lib/python2.7/dist-packages/easy_install.py aws-cfn-bootstrap-latest
    
        3
  •  0
  •   nirav kanani    2 年前

    如果找不到easy\u install命令,请尝试此操作它对我有效

    "UserData": {
      "Fn::Base64": { "Fn::Join":["", [
        "#!/bin/bash\n",
        "apt-get update\n",
        "apt-get install -y python-setuptools\n",
        "mkdir -p /opt/aws/bin\n",
        "apt-get install -y wget\n",
        "wget https://s3.amazonaws.com/cloudformation-examples/aws-cfn-bootstrap-py3-latest.tar.gz\n",
        "python3 -m easy_install --script-dir /opt/aws/bin aws-cfn-bootstrap-py3-latest.tar.gz\n",
        "/usr/local/bin/cfn-init --stack ", { "Ref":"AWS::StackName" }, " --resource WebServer", " --region ", { "Ref": "AWS::Region" }, "\n",
        "\n",
        "/usr/local/bin/cfn-signal --exit-code $? '", { "Ref" : "WaitHandle" }, "'\n"
      ]]}
    }