gpt4 book ai didi

amazon-web-services - 使用 Ansible Tower 将 cloudformation 堆栈部署到 AWS

转载 作者:行者123 更新时间:2023-12-03 07:37:47 31 4
gpt4 key购买 nike

我是 Ansible、Ansible Tower 和 AWS Cloud Formation 的新手,我正在尝试让 Ansible Tower 使用 Cloud Formation 模板部署 EC2 容器服务。我尝试运行部署作业并遇到以下错误。

 TASK [create/update stack] *****************************************************
task path: /var/lib/awx/projects/_6__api/tasks/create_stack.yml:2
<127.0.0.1> ESTABLISH LOCAL CONNECTION FOR USER: awx
<127.0.0.1> EXEC /bin/sh -c '( umask 77 && mkdir -p "` echo $HOME/.ansible/tmp/ansible-tmp-1470427494.79-207756006727790 `" && echo ansible-tmp-1470427494.79-207756006727790="` echo $HOME/.ansible/tmp/ansible-tmp-1470427494.79-207756006727790 `" ) && sleep 0'
<127.0.0.1> PUT /tmp/tmpgAsKKv TO /var/lib/awx/.ansible/tmp/ansible-tmp-1470427494.79-207756006727790/cloudformation
<127.0.0.1> EXEC /bin/sh -c 'sudo -H -S -n -u root /bin/sh -c '"'"'echo BECOME-SUCCESS-coqlkeqywlqhagfixtfpfotjgknremaw; LANG=en_US.UTF-8 LC_ALL=en_US.UTF-8 AWS_DEFAULT_REGION=us-west-2 LC_MESSAGES=en_US.UTF-8 /usr/bin/python /var/lib/awx/.ansible/tmp/ansible-tmp-1470427494.79-207756006727790/cloudformation; rm -rf "/var/lib/awx/.ansible/tmp/ansible-tmp-1470427494.79-207756006727790/" > /dev/null 2>&1'"'"' && sleep 0'
fatal: [localhost]: FAILED! => {"changed": false, "failed": true, "invocation": {"module_name": "cloudformation"}, "module_stderr": "/bin/sh: /usr/bin/sudo: Permission denied\n", "module_stdout": "", "msg": "MODULE FAILURE", "parsed": false}

这是创建/更新任务:

---
- name: create/update stack
cloudformation:
stack_name: my-stack
state: present
template: templates/stack.yml
template_format: yaml
template_parameters:
VpcId: "{{ vpc_id }}"
SubnetId: "{{ subnet_id }}"
KeyPair: "{{ ec2_keypair }}"
DbUsername: "{{ db_username }}"
DbPassword: "{{ db_password }}"
InstanceCount: "{{ instance_count | default(1) }}"
tags:
Environment: test
register: cf_stack

- debug: msg={{ cf_stack }}
when: debug is defined

Ansible Tower 执行的 playbook 是一个 site.yml 文件:

---
- name: Deployment Playbook
hosts: localhost
connection: local
gather_facts: no
environment:
AWS_DEFAULT_REGION: "{{ lookup('env', 'AWS_DEFAULT_REGION') | default('us-west-2', true) }}"
tasks:
- include: tasks/create_stack.yml
- include: tasks/deploy_app.yml

这就是我的剧本文件夹结构:

/deploy
/group_vars
all
/library
aws_ecs_service.py
aws_ecs_task.py
aws_ecs_taskdefinition.py
/tasks
stack.yml
/templates
site.yml

我的一切都基于 Justin Menga 的pluralsight 类(class)“使用 Docker 和 Ansible 进行持续交付”,但他使用 Jenkins,而不是 Ansible Tower,这可能就是脱节的原因。不管怎样,希望这是足够的信息,让我知道我是否还应该提供 stack.yml 文件。库目录下的文件是Menga从他的视频类(class)中定制的模块。

感谢您阅读所有内容以及任何潜在的帮助!这是他的部署剧本存储库的链接,我根据该存储库对所有内容进行了严格建模,https://github.com/jmenga/todobackend-deploy 。我拿出来的东西是DB RDS的东西。

最佳答案

如果您查看错误消息的最后两行,您会发现它正在尝试升级权限但失败了:

<127.0.0.1> EXEC /bin/sh -c 'sudo -H -S -n -u root /bin/sh -c '"'"'echo BECOME-SUCCESS-coqlkeqywlqhagfixtfpfotjgknremaw; LANG=en_US.UTF-8 LC_ALL=en_US.UTF-8 AWS_DEFAULT_REGION=us-west-2 LC_MESSAGES=en_US.UTF-8 /usr/bin/python /var/lib/awx/.ansible/tmp/ansible-tmp-1470427494.79-207756006727790/cloudformation; rm -rf "/var/lib/awx/.ansible/tmp/ansible-tmp-1470427494.79-207756006727790/" > /dev/null 2>&1'"'"' && sleep 0'
fatal: [localhost]: FAILED! => {"changed": false, "failed": true, "invocation": {"module_name": "cloudformation"}, "module_stderr": "/bin/sh: /usr/bin/sudo: Permission denied\n", "module_stdout": "", "msg": "MODULE FAILURE", "parsed": false}

由于这是一项本地任务,它正在尝试切换到运行 Ansible Tower 的机器上的 root 用户,并且该用户可能(并且有充分的理由)没有执行此操作的权限。

使用普通 Ansible,您可以通过不指定 --become 来避免这种情况。或-b命令行上的标志或通过指定 become: false在任务/游戏定义中。

正如您在评论中指出的,对于 Ansible Tower,需要在作业模板中取消选中“启用权限升级”选项。

关于amazon-web-services - 使用 Ansible Tower 将 cloudformation 堆栈部署到 AWS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38797246/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com