AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / server / 问题 / 915930
Accepted
theillien
theillien
Asked: 2018-06-10 12:55:53 +0800 CST2018-06-10 12:55:53 +0800 CST 2018-06-10 12:55:53 +0800 CST

AWS::CloudFormation::Init 不执行命令

  • 772

我正在尝试在实例上安装 ansible。我想我可以AWS::CloudFormation::Init用来执行sudo pip install ansible. 不过,这似乎不起作用。这是我的实例资源:

ansibleInstance:
  Type: 'AWS::EC2::Instance'
  Metadata:
    'AWS::CloudFormation::Init':
      commands:
        ansible:
          command: "sudo pip install ansible"
          test: "pip --version"
          ignoreErrors: 'false'
  Properties:
    ImageId: ami-467ca739
    KeyName: Candidate-EyMm7zuOcn
    InstanceType: t2.micro
    SubnetId: !Ref subnetTest
    SecurityGroupIds:
    - !Ref allowSSH
    Tags:
      - Key: Name
        Value: Test

有没有办法查看尝试此操作时发生的情况,以便我可以找出失败的位置/原因?有没有其他人可能建议看一下来解决这个问题?

EDIT1:我删除了sudo可能出于某种原因妨碍的以防万一(我不认为它会,但我想完全消除它)。那没有影响。我还验证了aws-cli安装了预期的工具,因为它是AWS Linux AMI

EDIT2:这是 ansibleInstance 资源的一个版本,我尝试通过以下方式执行命令UserData:

ansibleInstance:
  Type: 'AWS::EC2::Instance'
  Properties:
    ImageId: ami-467ca739
    KeyName: Candidate-EyMm7zuOcn
    InstanceType: t2.micro
    SubnetId: !Ref subnetTest
    SecurityGroupIds:
    - !Ref allowSSH
    Tags:
      - Key: Name
        Value: Test
  UserData:
    Fn::Base64:
      !Sub |
        #!/bin/bash -xe
        pip install ansible

我怀疑格式有问题,但我无法弄清楚它是什么。

EDIT3:我cfn-init按照约旦的建议跑了。这似乎确实向实例提供了元数据,如果我随后登录并手动执行cfn-init命令,则处理:

[ec2-user@ip-192-168-1-121 ~]$ sudo /opt/aws/bin/cfn-init -v -s cfTest --resource ansibleInstance
[ec2-user@ip-192-168-1-121 ~]$ ansible --version
可靠的 2.5.4
  配置文件 = 无
  配置的模块搜索路径 = [u'/home/ec2-user/.ansible/plugins/modules', u'/usr/share/ansible/plugins/modules']
  ansible python模块位置= /usr/local/lib/python2.7/site-packages/ansible
  可执行位置 = /usr/local/bin/ansible
  python 版本 = 2.7.13(默认,2018 年 1 月 31 日,00:17:36)[GCC 4.8.5 20150623(Red Hat 4.8.5-11)]

所以现在我的问题是:为什么不cfn-init按UserData?

解决方案:感谢@jordanm,我能够解决这个问题。我的工作片段:

  实例:
    类型:'AWS::EC2::Instance'
    元数据:
      'AWS::CloudFormation::Init':
        配置:
          命令:
            可靠:
              命令:“sudo pip install ansible”
              测试:“点子--版本”
              忽略错误:'假'
    特性:
      ImageId:ami-467ca739
      KeyName:Candidate-EyMm7zuOcn
      实例类型:t2.micro
      SubnetId: !Ref 子网测试
      安全组 ID:
      - !Ref 允许SSH
      标签:
        - 键:名称
          值:测试
      用户数据:
        Fn::Base64:
          !子 |
            #!/bin/bash -xe
            # 从元数据安装 Ansible
            /opt/aws/bin/cfn-init -v -s ${AWS::StackName} --resource ansibleInstance
amazon-web-services
  • 1 1 个回答
  • 6943 Views

1 个回答

  • Voted
  1. Best Answer
    jordanm
    2018-06-11T21:16:15+08:002018-06-11T21:16:15+08:00

    你必须执行cfn-init才能AWS::CloudFormation::Init做任何事情。这通常通过 cloud-init 用户数据完成。以下是cfn-init 文档中的示例:

    UserData: !Base64 
      'Fn::Join':
        - ''
        - - |
            #!/bin/bash -xe
          - |
            # Install the files and packages from the metadata
          - '/opt/aws/bin/cfn-init -v '
          - '         --stack '
          - !Ref 'AWS::StackName'
          - '         --resource WebServerInstance '
          - '         --configsets InstallAndRun '
          - '         --region '
          - !Ref 'AWS::Region'
          - |+
    
    • 5

相关问题

  • 与 AWS 中的其他系统相比,CentOS 报告的总内存较低

  • 如何在 Amazon Linux 服务器上升级到 Java 1.8?

  • 了解 Amazon AWS 使用数据

  • 亚马逊提供的负载均衡服务体验如何?

  • ELB 中现有节点的 AWS 自动缩放问题

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    新安装后 postgres 的默认超级用户用户名/密码是什么?

    • 5 个回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve