1

次のような基本的な Ansible プレイブックがあります。

---

- name: Provision ec2 servers
  hosts: 127.0.0.1
  connection: local
  roles:
    - aws

- name: Configure {{ application_name }} servers
  hosts: webservers
  sudo: yes
  sudo_user: root
  remote_user: ubuntu
  vars:
    - setup_git_repo: no
    - update_apt_cache: yes
  vars_files:
    - env_vars/common.yml
    - env_vars/remote.yml
  roles:
    - common
    - db
    - memcached
    - web

次のインベントリで:

[localhost]
127.0.0.1 ansible_python_interpreter=/usr/local/bin/python

Provision ec2 servers タスクは、期待どおりのことを行います。ec2 インスタンスを作成します。また、ホスト グループ [webservers] を作成し、作成したインスタンス IP をそれに追加します。

次に、Configure {{ application_name }} servers ステップでそのサーバーを構成し、必要なものをすべてインストールします。

これまでのところ、これはすべて私が望んでいることとまったく同じであり、すべてが機能しているようです。

ここが私が立ち往生している場所です。さまざまな役割の ec2 インスタンスを起動できるようにしたいと考えています。理想的には、dbserver、webserver、およびおそらく memcached サーバーを作成します。このインフラストラクチャの任意の部分を分離して展開できるようにしたいと考えています。たとえば、db サーバーのみを作成してプロビジョニングします。

これを機能させるために私が考えることができる唯一の方法...まあ、それらは機能しません。

インベントリにホストのないホスト グループを単純に宣言してみました。

[webservers]

[dbservers]

[memcachedservers]

しかし、それは構文エラーです。

次のように、各サーバーを明示的にプロビジョニングし、ホスト グループを宣言しても問題ありません。

- name: Provision webservers
  hosts: webservers
  connection: local
  roles:
    - aws

- name: Provision dbservers
  hosts: dbservers
  connection: local
  roles:
    - aws

- name: Provision memcachedservers
  hosts: memcachedservers
  connection: local
  roles:
    - aws

しかし、これらのグループはそれぞれのステップが完了するまで存在しないため、それもうまくいかないと思います。

動的インベントリについてはたくさん見てきましたが、それがどのように役立つのか理解できませんでした。ansible ec2 プロビジョニング プロジェクトの無数の例にも目を通しました。それらはすべて、必ず既存の ec2 インスタンスをプロビジョニングするか、単一のインスタンスを作成してすべてをインストールします。

4

2 に答える 2