次のような基本的な 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 インスタンスをプロビジョニングするか、単一のインスタンスを作成してすべてをインストールします。