【備忘録】Ansibleでプロビジョニング AzureのVMにping疎通をするまで
■はじめに
以前のエントリでTerraformからVMを構築したと思いますがこのままだとただの箱なので、VM上に設定を入れていこうと思います。
ただ手作業でプロビジョニングすると結構手間です。
今回はこのプロビジョニングをとても有名なツールAnsibleで行なっていきます。
本日はAzureのVMへの疎通までを行います。
■環境前提
macOS Catalina(10.15.4)
Homebrew 2.2.17
ansible 2.9.9
■事前準備
ちょっと前回エントリのTerraform設定にDNSラベル名を入れ忘れたので、手動で入れておきましょう(ダサい。。後日tfファイル直しておきます)
AzureのVM画面はキャプチャを貼ると機微情報だらけで全体的にモザイクになってしまうので、文面での説明で失礼します。
指定のVMを選択すると画面右側にDNS名が未設定で表示されています。
こちらを任意の文字列で設定しておいてください。
こちらがFQDNとなります。
また、前回のtfファイルを見ていただくとわかりますが実は既にSSH公開鍵の配布をしてあります。
ansibleはSSHでコントロールノードからターゲットノードへアクセスしてプロビジョニング処理を行います。
ですので事前にコントロールノード側(今回はmac)で公開鍵を作成しておいてください。
■ansibleの準備
とても簡単です。
brewコマンドであっさりインストールされます。
この辺りは色々な方が既に様々なブログ等で情報を書いてくださっているので省略します。
brew install ansible
ローカルにインストールされたあとは、2つのファイルを準備します。
①inventory.ini
inventory.iniには該当するサーバを記載します。
[test] Azureで設定したFQDNを指定 [test:vars] ansible_port=22 ansible_user=test
②playbook.yml
playbook.ymlにはプロビジョニングの操作を記載します。
(注意)
playbookの設定に関しては、簡単に説明ができなかったので一旦イメージが連想できるような記載をしていますが、当記載はまだ疎通が取れていない内容になっています。
飽くまで参考程度に眺めてください。(次回以降の別エントリで書きます→書きました)
--- # targetセクション # hosts allにするとinventoryのターゲットがそのまま使用される # rootでアクセスしたのちansibleユーザに切り替えてからsuする - name: selenoid_VM hosts: all gather_facts: true remote_user: qa become: true become_method: su # varsセクション # 引数として設定値があれば定義しておく # vars: # # tasksオプション # 構成管理の本体 tasks: - name: Upgrade apt: name: "*" state: latest - name: 基本インストール apt: name: - apt-transport-https - ca-certificates - curl - gnupg-agent - software-properties-common force: yes - name: docker関連の削除 apt: name: - docker - docker-engine - docker.io - containerd - runc state: absent - name: リポジトリの追加 apt_repository: repo: deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable state: present - name: docker再インストール apt: name: - docker-ce=5:19.03.8~3-0~ubuntu-bionic - docker-ce-cli=5:19.03.8~3-0~ubuntu-bionic - containerd.io # - name: ユーザ追加 # gpasswd: # user: qa # group: docker - name: パーミッション変更 file: path: /var/run/docker.sock mode: '0666'
■疎通をしてみる
さて、ping疎通です。
inventoryファイルをカレントディレクトリとして以下を実行してください。
ansible -i inventory.ini FQDN -m ping
うまくいったでしょうか?
実はボクはこんなエラーが出ました。
FQDN | UNREACHABLE! => { "changed": false, "msg": "Failed to connect to the host via ssh: @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@\r\n@ WARNING: UNPROTECTED PRIVATE KEY FILE! @\r\n@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@\r\nPermissions 0644 for '/Users/ユーザ名/.ssh/id_rsa' are too open.\r\nIt is required that your private key files are NOT accessible by others.\r\nThis private key will be ignored.\r\nLoad key \"/Users/ユーザ名/.ssh/id_rsa\": bad permissions\r\n test@FQDN: Permission denied (publickey).", "unreachable": true }
どうも公開鍵のパーミッションは644だと開きすぎの模様。
自分以外のユーザ権限を全て閉じてしまいます。
chmod 600 id_rsa.pub % ll total 24 -rw-------@ 1 ユーザ名 staff 1766 6 1 22:21 id_rsa
今一度実行してみましょう。
% ansible -i inventory.ini FQDN -m ping Enter passphrase for key '/Users/ユーザ名/.ssh/id_rsa': [DEPRECATION WARNING]: Distribution Ubuntu 18.04 on host FQDN should use /usr/bin/python3, but is using /usr/bin/python for backward compatibility with prior Ansible releases. A future Ansible release will default to using the discovered platform python for this host. See https://docs.ansible.com/ansible/2.9/reference_appendices/interpreter_discovery.html for more information. This feature will be removed in version 2.12. Deprecation warnings can be disabled by setting deprecation_warnings=False in ansible.cfg. FQDN | SUCCESS => { "ansible_facts": { "discovered_interpreter_python": "/usr/bin/python" }, "changed": false, "ping": "pong" }
AzureのVMと疎通ができました。
さて次回はplaybookの記述に関して進めて行きます。
ではでは。