使用 Ansible 部署到 Elastic Beanstalk

Deployment to Elastic Beanstalk with Ansible

我们正在使用 eb_deployer to deploy to Elastic Beanstalk and we would like to provision each node using .ebextensions 和 Ansible。

eb_deployer 创建的包看起来像这样(简化),它是用 Ansible 在控制节点上组装的:

- Procfile
- application.jar
- .ebextensions
    - ansible.config
    - provision.yml
    - roles
        - appdynamics
            - tasks
                - main.yml

ansible.config 在 Beanstalk 节点上安装 ansible 并运行单个剧本:

packages:
  python:
    ansible: []
container_commands:
  ansible:
    command: "ansible-playbook .ebextensions/provision.yml"

provision.yml(简体)只包含一个角色:

- name: provision eb instance
  hosts: localhost
  connection: local
  gather_facts: yes
  roles:
      - role: appdynamics
        controller_host: "example.com"
        controller_port: 443

现在的问题是 appdynamics 角色使用存储在保管库中的变量 appdynamics_accesskey,但保管库密码文件存储在控制节点上。 我们希望避免将保险库密码文件从控制机器复制到 S3 存储桶上的 .ebextensions,然后是 Beanstalk 节点。

遇到这种情况你会怎么做?也许还有其他工具更适合这种情况?

似乎 one way to solve this issue is to launch temporary instance, configure it with Ansible running on the control machine only, create an image with ec2_ami Ansible module, and use that image to configure custom image 用于自动缩放组。