0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

ansible x postgresql の動作検証環境を docker を用いて構築する

Last updated at Posted at 2020-06-06

この記事でできるようになること

  • docker を用いて ansible x postgresql の実行環境を構築できる
  • ansible で用いる ディレクトリ構造がざっくり分かる
  • postgresql の最低限の設定項目がざっくり分かる

Hands ON: Ansible x PostgreSQL

コンテナを立ち上げる

  • ansible コンテナ
    • ansible コマンドをインストールし,実行するコンテナ
    • target コンテナに対して ansible コマンドを実行しDBをセットアップする
  • target コンテナ
    • sshd を立ち上げ,ssh 接続可能にされたコンテナ
    • このコンテナに ansible コマンドを用いて postgreSQL を起動し DBを作成する
docker-compose -up d

コンテナ間の接続を確認する

# ansible docker に入る
docker exec -it ansible /bin/bash

# ansible docker から target01 コンテナに ssh できることを確認
ssh target01

ansible を用いて target01, 02 コンテナに posrgreSQL の DBをセットアップする

# ansible docker に入る
docker exec -it ansible /bin/bash

# target01,02 コンテナに対して ansible を実行する
ansible-playbook -i inventory.ini playbook.yml

# posrgresql がインストールされ,サービスとして起動されていることを確認
ssh target01
systemctl list-unit-files | grep postgresql

# posrgresql にログインするため postges ユーザーに切り替え
su postgres

# posrgresql にログイン (ユーザーは現在のシステムユーザーになる)
psql

# exampledb が作成されていることを確認 (ansible で作成した)
\l

ansible コンテナから, target01 コンテナに立ち上げた db に接続する

  • ansible でセットアップした db 接続情報
    • db: exampledb
    • user: jdoe
    • password: test

psql -h target01 -d exampledb -U jdoe

Docker 設定詳細

  • ansible コンテナ

    • centos x python イメージを使用
    • ansible をインストール
  • target コンテナ

    • amazonlinux を使用
    • sshd 起動し,外部からssh接続を可能にする
      • openssh-server をインストール
      • root ユーザーに パスワード無しで接続できるようにする
      • ssh 接続のために 22 番port を開ける
    • systemd を実行可能にする
      • /sbin/init コマンドを実行する ( + docker-compose での privledge 設定も必要)
  • docker-compose

    • ansible コンテナに, このレポジトリのディレクトリをマウント
      • ansible 関連の設定ファイルを配置するため
    • target コンテナに priviledged: true を設定
      • target コンテナ内で,systemd を用いた postgres の起動を可能にするため

Ansible 詳細

  • posrgresql セットアップのテンプレートとしてgeerlingguy/ansible-role-postgresql を使用
    • Ansible-Galaxy に登録されている ansible テンプレート
    • posrgresql のテンプレートの中で利用数が多いものを選択した

Ansible関連のファイル説明(必要なファイルのみ記述)


❯ tree ./ -l 3
./
├── README.md
├── ansible.cfg     # ansible コマンドの設定ファイル,roles の配置場所等を指定
├── ansible_log     # ansible コマンドのログファイル
│   └── log
├── inventory.ini   # ansible コマンドを実行する対象の host, ip 等の設定ファイル
├── group_vars      # ansible コマンド実行対象毎に ansible で設定する変数ファイルの置き場
│   └── target          # target コンテナに対して ansible コマンドを実行するときの変数
│       └── dbuser_password_postgres.yml
├── playbook.yml     # ansible-playbook コマンドで用いる,ansible の実行内容を設定するファイル
├── requirements.yml # ansible-galaxy コマンドで用いる,role をansible-galaxy から取得する際に用いる設定ファイル
└── roles            # playbook.yml で指定する role の内容を配置するディレクトリ
    └── geerlingguy.postgresql      # ansible-galaxy で提供されている postgresql をセットアップする role のテンプレート
        ├── LICENSE
        ├── README.md
        ├── defaults             # main.yml で読み込まれる変数を定義するディレクトリ
        │   └── main.yml
        ├─── vars                # main.yml で読み込まれる変数を定義するディレクトリ, defaults を上書きできる
        │   └── RedHat-2.yml        # amazonlinux でこのテンプレートを利用する際に使う定義ファイル,元々のこのファイルは定義されていなく amazonlinux で動かすために作成
        ├── handlers
        │   └── main.yml
        ├── meta
        │   └── main.yml
        ├── molecule
        │   └── default
        │       ├── converge.yml
        │       └── molecule.yml
        ├── tasks               # この role で実行する処理を定義するディレクトリ
        │   ├── configure.yml
        │   ├── databases.yml
        │   ├── initialize.yml
        │   ├── main.yml            # この role が playbook.yml で呼ばれたときに参照され,他の ymlの内容が読み込まれる
        │   ├── setup-Debian.yml
        │   ├── setup-RedHat.yml
        │   ├── users.yml
        │   └── variables.yml
        └── templates           # templateモジュールでセットアップされるJinja2形式のテキストファイルを配置するディレクトリ
            ├── pg_hba.conf.j2      # postgresql 設定ファイルのテンプレート,このテンプレートに変数を代入したファイルが taget に配置される
            └── postgres.sh.j2      # postgresql 設定ファイルのテンプレート,このテンプレートに変数を代入したファイルが taget に配置される  

Ansible を用いた postgresql 設定詳細

  • 行っていることは主に2つ

    • Ansible の postgresql モジュールに必要な設定値を渡して postgresql を設定(ユーザー作成,DB作成 etc)
      • postgresql_db: postgresql の db セットアップモジュール
      • postgresql_user: postgresql の user セットアップモジュール
    • Ansible と jinja テンプレートを用いて posrgresql 設定ファイルを生成し,target に配置(外部ホストからの接続設定等)
  • 外部からのアクセス設定

    • /var/lib/pgsql/data/postgresql.conf
      • DB へとアクセスを許可する ip を記述する設定ファイル
      • ansible の lineinfile モジュールを用いて,デフォルトで生成される posrgresql.conf ファイルの記述を書き換える
    • /var/lib/pgsql/data/pg_hba.conf
      • DB への各ユーザー毎の接続設定を記述する設定ファイル
      • ansible の template モジュールを用いて,生成したファイルを target に配置することで設定

pg_hba.conf の設定項目

  • type
    • local: ローカルからの接続についての設定項目であることを示す
    • host: 外部からの接続についての設定項目であることを示す
  • database
    • どの db に対する設定か, all もしくは db 名を記載
  • user
    • どの user に対する設定か,all もしくは db 名を記載
  • address
    • どの ip アドレスからの接続についての設定か (CIDR で指定)
  • auth_method
    • 認証方式, 色々存在
    • basic: ベーシック認証,パスワードを平文で要求 (通信内容にそのまま記載される)
    • md5: クライアントに対して認証時にMD5暗号化パスワードを要求
      • md5形式では パスワード無し は無効なので,必ず何らかのパスワードを設定する必要がある
0
0
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
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?