Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Infrastructure as Code

Infrastructure as Code

2017年4~5月開催「ブートキャンプ特別講座」の資料になります。

Recruit Technologies

June 02, 2017
Tweet

More Decks by Recruit Technologies

Other Decks in Technology

Transcript

  1. ✦ $ sudo systemctl stop nginx.service # nginxを止めてみる $ sudo

    vi /etc/nginx/nginx.conf # configを書き換えてみる $ sudo chmod 600 /var/log/nginx/access.log # permissionを変えてみる $ sudo vi /usr/share/nginx/html/index.html # DocumentRootを変えてみる
  2. ✦ $ sudo ansible-playbook -i production site.yml --check --diff (略)

    TASK [nginx : replace index.html] ********************************************** --- before: /usr/share/nginx/html/index.html +++ after: dynamically generated @@ -1,2 +1 @@ hello, production ansible -hogehoge 書き換えたところが戻る ・・・これだけ? オプションで dry-runが可能
  3. $ sudo ansible-playbook -i production site.yml (略) TASK [nginx :

    replace index.html] ********************************************** --- before: /usr/share/nginx/html/index.html +++ after: dynamically generated @@ -1,2 +1 @@ hello, production ansible -hogehoge
  4. ✦ ✦ # VM上で実行してください $ ansible-playbook -i inventory playbook.yml PLAY

    [webservers] ************************************************************** TASK [setup] ******************************************************************* ok: [localhost] PLAY RECAP ********************************************************************* localhost : ok=1 changed=0 unreachable=0 failed=0 何もない
  5. ✦ ✦ ✦ . ├── inventory ├── playbook.yml └── roles

    └── nodejs ├── meta │ └── main.yml └── tasks └── main.yml インベントリ : 操作対象ホストの全部の一覧 プレイブック : 全体の設計(どのホストに、どんな処理をするか) タスク : 具体的な処理の詳細
  6. ✦ ✦ # playbook.yml --- - hosts: webservers become: yes

    connection: local roles: - nodejs webserversっていうホスト群に対して操作 sudo実行する nodejsっていうroleを実行する
  7. ✦ ✦ ✦ ✦ ├── defaults │ └── main.yml ├──

    files ├── handlers │ └── main.yml ├── meta │ └── main.yml ├── README.md ├── tasks │ └── main.yml ├── templates ├── tests │ ├── inventory │ └── test.yml └── vars └── main.yml 本当はもっと構成が複雑
  8. ✦ ✦ --- # tasks file for nginx - name:

    install nginx yum: name: nginx state: installed - name: replace index.html template: src: index.html.j2 dest: /usr/share/nginx/html/index.html - name: nginx start service: name: nginx state: started enabled: yes
  9. ✦ ✦ ✦ ✦ $ forever list info: Forever processes

    running data: uid command script forever pid id logfile uptime data: [0] todo /usr/bin/node /usr/local/src/todo-manager/app.js 30755 30767 /home/vagrant/.forever/todo.log 0:0:1:6.134 data: [1] todo /usr/bin/node /usr/local/src/todo-manager/app.js 31036 31048 /home/vagrant/.forever/todo.log STOPPED STOPPEDの行が増えている
  10. ✦ $ ansible localhost -m setup localhost | SUCCESS =>

    { "ansible_facts": { "ansible_all_ipv4_addresses": [ "192.168.33.10", "10.0.2.15" ], "ansible_all_ipv6_addresses": [ "fe80::a00:27ff:fe36:11ec", "fe80::5054:ff:fe88:15b6" ], (すごいいっぱいでてくる)
  11. ✦ ✦ describe server(:app) do describe http('http://app') do it "responds

    content including 'This is app server'" do expect(response.body).to include('This is app server') end end End これもわかりやすい
  12. ✦ ✦ [vagrant@demo ~]$ exit # VMから抜ける $ vagrant halt

    # VMを止める場合 $ vagrant destroy # VMを消す場合
  13. $ cd ~ $ git clone https://github.com/tkit/docker-todo-manager.git $ cd docker-todo-manager

    $ vim Dockerfile # Dockerfileに手順を書く $ docker build -t todo-manager . # ビルド $ docker run <options> --name todo-manager todo-manager # あとはアクセス! ✦ ✦
  14. Image Container Dockerfile # イメージビルド $ docker build -t todo-manager

    . # Dockerfile修正 ``` FROM ベースイメージ RUN ... CMD ... ``` # コンテナ起動 $ docker run ... ✦ ✦ ✦ ✦
  15. ✦ # コンテナを消す $ docker container ls # コンテナの一覧を調べる $

    docker stop <container名> $ docker container rm -f <container名> # 特定のコンテナを消す # イメージを消す $ docker image ls # イメージの一覧を調べる $ docker image rm <image名> # 特定のイメージを消す # 全体的に使っていないものをきれいにする $ docker container prune $ docker image prune