LoginSignup
2
1

Ansibleメモ

Posted at

はじめに

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は次のように機能します:

  1. セキュリティグループの作成:

    • my_security_group という名前のセキュリティグループを作成。
    • ポート22(SSH)へのインバウンドアクセスを許可。
    • すべてのアウトバウンドトラフィックを許可。
  2. EC2インスタンスの作成:

    • t2.micro インスタンスタイプを使用。
    • 指定されたAMIを基にインスタンスを作成。
    • 作成したセキュリティグループを割り当て。
    • 指定されたサブネット内でパブリックIPを割り当て。

このPlaybookを実行する前に、以下を確認してください:

  • 適切なAWSの認証情報を設定していること。
  • my_key_pairami-0abcdef1234567890subnet-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を使った複雑な自動化と構成管理のタスクを効率的に管理することができます。

参考記事

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1