the*_*ien 5 amazon-web-services amazon-cloudformation
我正在尝试在实例上安装 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
Run Code Online (Sandbox Code Playgroud)
有没有办法查看尝试执行此操作时发生的情况,以便我可以找出失败的位置/原因?有没有其他人可能会建议考虑解决这个问题?
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
Run Code Online (Sandbox Code Playgroud)
我怀疑格式有问题,但我无法弄清楚它是什么。
EDIT3:我cfn-init
按照 jordanm 的建议运行。这似乎确实为实例提供了元数据,如果我然后登录并手动执行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(红帽 4.8.5-11)]
所以现在我的问题是:为什么不cfn-init
执行UserData
?
解决方案:感谢@jordanm,我能够解决这个问题。我的工作片段:
ansible实例: 类型:'AWS::EC2::Instance' 元数据: 'AWS::CloudFormation::Init': 配置: 命令: 可靠的: 命令:“sudo pip install ansible” 测试:“pip --version” 忽略错误:'假' 特性: 图像 ID:ami-467ca739 KeyName: Candidate-EyMm7zuOcn 实例类型:t2.micro SubnetId: !Ref subnetTest 安全组 ID: - !Ref allowSSH 标签: - 关键:姓名 值:测试 用户数据: Fn::Base64: !Sub | #!/bin/bash -xe # 从元数据安装 Ansible /opt/aws/bin/cfn-init -v -s ${AWS::StackName} --resource ansibleInstance
你必须执行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'
- |+
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
5818 次 |
最近记录: |