[초보자용] Ansible을 체험해 보자

갑자기 "Ansible"평소부터 사용하고 있습니까?
"infrastructure as Code"가 당연해지고 있는 세상, 인프라 엔지니어 쪽은 물론 어플리케이션 엔지니어 쪽도 알아 두어 손해는 없는 기술입니다.

Ansible은 Red Hat이 개발한 오픈 소스 구성 관리 도구입니다.
소프트웨어 설치, 명령 실행 등의 작업을 코드화하고 자동화할 수 있습니다.
자세한 것은 「Ansible이란」등으로 구구 해 보세요.

본 기사에서는 Ansible을 사용한 적이 없는 분을 향해 1부터 순서를 설명해, 실제로 실행하기까지의 데모를 실시합니다.
목표는 다음과 같습니다.
  • 로컬 PC에 2 개의 가상 머신 (Ubuntu18.04)을 시작하고 하나의 머신에서 다른 VM에 node.js를 자동으로 설치합니다.

    이미지는 이런 느낌입니다.

    早速やっていきましょう!

    전제 조건

    前提条件は以下を想定しております。

    • ローカルPCはMacOSであること

    Windowsの方でも本手順は行えますが、vagrant 周りでエラーが発生する可能性があるかもしれません。
    その際は GUI画面からVirtualBoxアプリを開き、仮想環境を2台手動で立ち上げるなどの方法でも問題ありません。

    VirtualBox + Vagrant를 Mac에 설치

    本環境を作成するにあたり必要なソフトウェアのインストールを行います。

    • VirtualBox
    • vagrant

    VirtualBoxは仮想マシンを作成するために必要なもので、vagrant はVirtualBoxをコードレベルで操作するものと覚えて頂いて問題ありません。

    インストール方法ですが、以下の記事が大変わかりやすいです。

    「2. VirtualBox を公式サイトからインストール」まで実行してください。

    환경 시작 및 Ansible 설치

    インストールが完了したら仮想マシンの立ち上げから行います。

    Vagrantfileを作成し、中を全削除後以下のように書き換えてください

    $ vagrant init
    $ ls
    Vagrantfile
    $ vim Vagrantfile
    
    Vagrant.configure(2) do |config|
     config.vm.define "AnsibleServer" do |node|
        node.vm.box = "bento/ubuntu-18.04"
        node.vm.hostname = "AnsibleServer"
        node.vm.network :private_network, ip:"192.168.7.7"
        node.vm.provider "virtualbox" do |vb|
          vb.customize ["modifyvm", :id, "--memory", "1024"]
        end
        node.vm.provider "virtualbox" do |vb|
          vb.gui = false
        end
      end
     config.vm.define "AnsibleClient" do |node|
        node.vm.box = "bento/ubuntu-18.04"
        node.vm.hostname = "AnsibleClient"
        node.vm.network :private_network, ip:"192.168.8.8"
        node.vm.provider "virtualbox" do |vb|
          vb.customize ["modifyvm", :id, "--memory", "1024"]
        end
        node.vm.provider "virtualbox" do |vb|
          vb.gui = false
        end
      end  
    end
    

    ファイルの作成完了後、Vagrantfileがあるディレクトリで以下コマンドを実行します。
    実行完了後、2台の仮想マシンが立ち上がっています。

    $ vagrant up
    

    無事作成が完了したら、1度Server側となる仮想マシンにログインしてみましょう。

    $ vagrant ssh AnsibleServer
    vagrant@AnsibleServer:~$ 
    

    無事ログインできましたね!
    早速Server側にAnsibleのインストールを行いましょう。

    vagrant@AnsibleServer:~$ sudo apt update
    vagrant@AnsibleServer:~$ sudo apt install software-properties-common
    vagrant@AnsibleServer:~$ sudo apt-add-repository ppa:ansible/ansible
    vagrant@AnsibleServer:~$ sudo apt update
    vagrant@AnsibleServer:~$ sudo apt install ansible
    vagrant@AnsibleServer:~$ ansible --version
    ansible 2.8.5
    

    version 2.8.5 のansibleインストールが完了です!

    Ansible 코드 작성

    次に、Ansilbeのコードを確認します。
    Server側の仮想マシンにログインしたまま以下の手順を実行してください。
    今回のデモで使用するAnsibleのディレクトリ構造は以下のようになります。

    .
    ├── ansible.cfg
    ├── hosts
    ├── playbook.yml
    └── roles
        └── node
            └── tasks
                └── main.yml
    
    • ansible.cfg
      • 設定ファイルのようなもの。Clientへの初回接続SSHエラーが出ないように設定している
    • hosts
      • 接続先を定義します
    • playbook.yml
      • 実行するRoleを定義します。
    • roles
      • Roleの定義を行います。

    まずは上記のディレクトリ構成を実現するため、Homeディレクトリでファイルとディレクトリの作成から行います。

    vagrant@AnsibleServer:~$ touch hosts playbook.yml ansible.cfg
    vagrant@AnsibleServer:~$ mkdir -p roles/node/tasks/
    vagrant@AnsibleServer:~$ touch roles/node/tasks/main.yml
    

    各ファイルの中身を以下のように編集してください。

    vagrant@AnsibleServer:~$ vim hosts
    
    [AnsibleClient]
    192.168.8.8
    
    vagrant@AnsibleServer:~$ vim playbook.yml
    
    ---
    - hosts: AnsibleClient
      become: no
      roles:
        - {role: 'node', tags: ’node’}
    
    vagrant@AnsibleServer:~$ vim ansible.cfg
    
    [ssh_connection]
    ssh_args = -o ControlMaster=auto -o ControlPersist=60s -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null
    
    vagrant@AnsibleServer:~$ vim roles/node/tasks/main.yml
    
    - name: remove node.js
      become: yes
      apt:
        name: node.js
        state: absent
        purge: yes
    
    - name: add repository of node.js
      become: yes
      shell: curl -sL https://deb.nodesource.com/setup_10.x | sudo bash -
    
    - name: apt-get update
      become: yes
      apt:
        update_cache: yes
    
    - name: install latest node.js
      become: yes
      apt:
        name: nodejs
    

    以上で準備完了です。
    あと一息です!!

    Ansible 실행

    いよいよAnsibleの実行です。

    いきなり実行する前にClientの状態を確認しておきましょう。
    今回の目標はClientにNode.jsをインストールすることだったので、事前に入っていないか確認します。
    (ServerとClientを行き来するのでiTerm2を使用している方は2画面でやると良いです。)

    vagrant@AnsibleServer:~$ exit
    $ vagrant ssh AnsibleClient
    vagrant@AnsibleClient:~$ node -v
    -bash: node: command not found
    

    入っていないことが確認できました!

    ではもう一度Server側にログインします。

    vagrant@AnsibleClient:~$ exit
    $ vagrant ssh AnsibleServer
    vagrant@AnsibleServer:~$
    

    確認が取れたので改めてAnsibleの実行を行います。
    以下コマンドをサーバ側で実行してください。
    パスワードを求められるので、 vagrant と入力してください。

    vagrant@AnsibleServer:~$ ansible-playbook -i hosts playbook.yml -u vagrant -k
    SSH password:
    
    PLAY [AnsibleClient] *************************************************************************************************************
    TASK [Gathering Facts] ***********************************************************************************************************
    ok: [192.168.8.8]
    .
    .
    192.168.8.8                : ok=5    changed=3    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0
    

    Ansibleの実行は完了しましたでしょうか?
    無事成功すると、ok=5とレスポンスがあると思います。
    ではClietにログインし、Node.jsがインストールされているか確認してみましょう。

    vagrant@AnsibleServer:~$ exit
    $ vagrant ssh AnsibleClient
    vagrant@AnsibleClient:~$ node -v
    v10.16.3
    

    無事インストールされていまね!
    今回はNode.jsのみのインストールでしたが、他にも自分の使いたいものや実行したいものをタスク化しておけばコマンド1回叩くだけで自動で行ってくれます。

    결론

    最後までみて頂きありがとうございます。
    長い道のりでしたが、Ansibleのことについて少しでも理解して頂けたでしょうか。
    今回はテストを手動で行いましたが、
    業務で使用されるのであれば自動テストツールである ServerSpec も同時に学習すると良いと思います。
    Ansibleを活用し、皆さんの作業が少しでも楽になれば幸いです!

    ServerSpec에 대해 간단히 정리했습니다. htps : // 코 m / 히로 아구 / ms / 아 c7f4336 에 266 아 2208288
  • 좋은 웹페이지 즐겨찾기