はじめに
Ansibleでのインフラの自動化についてさわりの確認を行いました。
コード例
インフラコード化の例として、AWSにEC2インスタンスを作成例を挙げます。
以下に、Ansible Playbookの基本的な例を示します。
この例では、AWSにEC2インスタンスを作成し、セキュリティグループを設定するためのタスクが含まれています。このPlaybookを使用する前に、AnsibleがAWSの認証情報にアクセスできるように設定する必要があります(通常は環境変数やAWSの認証情報ファイルを介して行います)。
- name: AWS EC2インスタンスのプロビジョニング
hosts: localhost
gather_facts: false
tasks:
- name: セキュリティグループの作成
ec2_group:
name: my_security_group
description: "セキュリティグループの説明"
region: ap-northeast-1 # 例: 東京リージョン
rules:
- proto: tcp
ports:
- 22
cidr_ip: 0.0.0.0/0
rules_egress:
- proto: all
cidr_ip: 0.0.0.0/0
register: security_group
- name: EC2インスタンスの作成
ec2:
key_name: my_key_pair
instance_type: t2.micro
image: ami-0abcdef1234567890 # 使用するAMIのID
wait: yes
group: "{{ security_group.group_id }}"
region: ap-northeast-1 # 例: 東京リージョン
count: 1
vpc_subnet_id: subnet-12345678 # 使用するサブネットID
assign_public_ip: yes
register: ec2
vars:
ansible_python_interpreter: /usr/bin/python3
このPlaybookは次のように機能します:
-
セキュリティグループの作成:
-
my_security_group
という名前のセキュリティグループを作成。 - ポート22(SSH)へのインバウンドアクセスを許可。
- すべてのアウトバウンドトラフィックを許可。
-
-
EC2インスタンスの作成:
-
t2.micro
インスタンスタイプを使用。 - 指定されたAMIを基にインスタンスを作成。
- 作成したセキュリティグループを割り当て。
- 指定されたサブネット内でパブリックIPを割り当て。
-
このPlaybookを実行する前に、以下を確認してください:
- 適切なAWSの認証情報を設定していること。
-
my_key_pair
、ami-0abcdef1234567890
、subnet-12345678
などの値を、実際の環境に合わせて適切なものに置き換えること。
このPlaybookを実行するには、Ansibleがインストールされた環境で ansible-playbook [Playbookのファイル名].yml
コマンドを実行します。
Ansible用語
Ansibleにおける「Playbook」、「インベントリー」、「モジュール」、「ロール」という要素について、先ほどのコード例を参照しながら説明します。
1. Playbook
PlaybookはAnsibleの構成管理とマルチノードオーケストレーションシステムの中心です。YAML形式で記述され、Ansibleが実行する一連の「プレイ」を定義します。各「プレイ」は特定のホスト群に対して実行されるタスクのセットです。
- 上記のコード例: これはPlaybookの一例で、AWS上にEC2インスタンスとセキュリティグループを設定するタスクを含んでいます。
2. インベントリー
インベントリーはAnsibleが管理するホスト(サーバー、デバイスなど)のリストです。これは通常、テキストファイルで管理され、グループやホスト変数を定義することができます。
-
関連性: このコード例では、
hosts: localhost
と記載されており、これはローカルホスト(実行中のマシン)をターゲットにしています。実際のインベントリーでは、複数のリモートホストやグループが指定されることが多いです。
3. モジュール
モジュールは、Ansibleのタスクを実行するための特定のコマンドやスクリプトです。Ansibleは何百ものモジュールを備えており、各モジュールは特定のタスクを実行します。
-
上記のコード例:
-
ec2_group
モジュールはセキュリティグループを作成します。 -
ec2
モジュールはEC2インスタンスをプロビジョニングします。
-
4. ロール
ロールはプレイブックの再利用可能なコンポーネントで、特定の機能や設定セットをカプセル化します。ロールはタスク、変数、ファイル、テンプレートなどを含むことができ、大規模なプレイブックをより管理しやすく、再利用しやすくします。
- 関連性: 上記のコード例にはロールは含まれていませんが、AWSリソースのプロビジョニングに関連するロールを作成し、それを再利用することができます(例えば、特定のタイプのEC2インスタンスをセットアップするロール)。
これらの要素を組み合わせることで、Ansibleを使った複雑な自動化と構成管理のタスクを効率的に管理することができます。
参考記事