Estou tentando instalar o ansible em uma instância. Achei que poderia usar AWS::CloudFormation::Init
para executar sudo pip install ansible
. Isso não parece estar funcionando, no entanto. Este é o meu recurso de instância:
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
Existe uma maneira de ver o que está acontecendo quando isso é tentado para que eu possa descobrir onde / por que está falhando? Existe alguma coisa que outros possam sugerir olhar para descobrir isso?
EDIT1: Eu removi o sudo
caso que pudesse estar atrapalhando por qualquer motivo (eu não achei que fosse, mas eu queria eliminá-lo do mesmo jeito). Isso não teve impacto. Também verifiquei que as aws-cli
ferramentas estão instaladas, o que era esperado, pois é a AWS Linux AMI
EDIT2: Esta é uma versão do recurso ansibleInstance em que tentei executar comandos via 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
Suspeito que haja algo errado com a formatação, mas não consigo descobrir o que é.
EDIT3: Corri cfn-init
pela sugestão jordanm. Isso parece fornecer os metadados para a instância e, se eu fizer login e executar manualmente, cfn-init
os comandos serão processados:
[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 sensível 2.5.4 arquivo de configuração = Nenhum caminho de pesquisa do módulo configurado = [u'/home/ec2-user/.ansible/plugins/modules', u'/usr/share/ansible/plugins/modules'] localização do módulo python ansible = /usr/local/lib/python2.7/site-packages/ansible local do executável = /usr/local/bin/ansible versão python = 2.7.13 (padrão, 31 de janeiro de 2018, 00:17:36) [GCC 4.8.5 20150623 (Red Hat 4.8.5-11)]
Então agora minha pergunta é: por que não será cfn-init
executado de acordo com o UserData
?
SOLUÇÃO: Graças a @jordanm, consegui resolver isso. Meu trecho de trabalho:
ansibleInstance: Tipo: 'AWS::EC2::Instância' Metadados: 'AWS::CloudFormation::Init': configuração: comandos: ansible: comando: "sudo pip install ansible" teste: "pip --version" ignoreErrors: 'false' Propriedades: ImageId: ami-467ca739 KeyName: Candidate-EyMm7zuOcn Tipo de instância: t2.micro SubnetId: !Ref subnetTest SecurityGroupIds: - !Ref allowSSH Tag: - Chave: Nome Valor: Teste Dados do usuário: Fn::Base64: !Sub | #!/bin/bash -xe # Instale o Ansible a partir dos metadados /opt/aws/bin/cfn-init -v -s ${AWS::StackName} --resource ansibleInstance
Você tem que executar
cfn-init
paraAWS::CloudFormation::Init
fazer qualquer coisa. Isso é feito mais comumente por meio de dados do usuário de inicialização na nuvem. Aqui está o exemplo da documentação do cfn-init :