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

Ansible TowerでCICDの検証をしてみた話

sky_joker
February 13, 2020

Ansible TowerでCICDの検証をしてみた話

sky_joker

February 13, 2020
Tweet

More Decks by sky_joker

Other Decks in Technology

Transcript

  1. Ansible TowerでCICDの検証を
    やってみた話
    Ansible ディベロッパー部 2020.02

    View Slide

  2. 今日話す事
    01. 背景
    02. 課題
    03. 検証、デモ(動画)
    04. まとめ、今後の課題

    View Slide

  3. 自己紹介
    3
    ---
    - 名前: 大嶋 健容
    Twitter: @sky_jokerxx
    GitHub: sky-joker
    仕事: 自動化エンジニア
    コントリビュート:
    ansible:
    - Zabbix
    - VMware
    - etc
    今欲しいもの:
    - 第10世代 NUC
    - AMD Ryzen 3990X
    @sky_jokerxx
    得意:
    - ansible
    - VMware(vSphere, NSX)
    - vSphere/NSX APIを使った開発
    - OSSとVMwareの組み合わせ
    興味:
    - 自動化
    - コンテナ(k8s, OpenShift)
    - CICD
    趣味:
    - 自宅ラックで検証
    - Ansibleモジュール開発
    ナナチスキ

    View Slide

  4. 背景
    4

    View Slide

  5. そもそものきっかけ
    5
    今までにいくつかのクラウドサービスの立ち上げから設計、構築、運用、自動
    化というのを一通りやってきたなかで、Ansible Towerを使ったCICDが必要と感
    じたきっかけは…
    からでした!
    サービスの拡大による運用申請が増えたこと

    View Slide

  6. 6
    サービス立ち上げ時 サービスが拡大してくると
    しばらく時間が空くので開発や振り返りや自身のサービ
    ス拡張に時間が充てられる
    了解〜
    Aサービスの申請よろしく!
    了解〜
    コード修正、push、launch
    Bサービスの申請よろしく!
    Aサービスの申請よろしく!
    了解〜
    Bサービスの申請よろしく!
    Cサービスの申請よろしく!
    あ、Aサービスの申請追加で!
    あ、Bサービスの申請追加で!
    ふえぇ〜〜

    View Slide

  7. 7
    まぁ、一つのサービス
    なら
    よし、終わったから
    自分の仕事しよう
    Aサービスの申請お願い
    Bサービスの申請お願い
    またか
    つらたん
    Cサービスの申請お願い
    本当の仕事
    自分の仕事
    終わった
    Aサービスの申請お願い
    Bサービスの申請お願い
    終わったから今度こそ
    自分の仕事やるぞ
    申請の悪循環
    またか

    View Slide

  8. 8

    さて、どうしたものか

    View Slide

  9. 9
    ∧∧∧∧∧
    ∧∧∧∧∧



    ∧∧











    ∧ ∧∧∧
    自動化2.0
    の予感!!
    ボタン
    ボタン
    ボタン
    自動化ボタン作るよ!
    連携するよ!
    Aサービスの申請よろしく!
    自動化ボタンあるから
    自分でやってね!
    自分の仕事に集中
    するよ!
    担当がいなくてもボタン
    があれば誰でもできる
    から帰るよ!
    スピードUP!
    Ansible Towerの
    UIを使うよ!

    View Slide

  10. 課題
    10

    View Slide

  11. 自動化2.0の課題
    11
    • 誰でも出来るように操作はシンプルにし入力パラメーター標準化をしたい
    • 操作範囲や影響範囲は最小限にしたい
    • 今まで通りCIをやりたい(心理的安全性を確保したい)
    • Gitでパラメーターを管理しているので変更後マージしたい
    Ansible TowerのWebUIで操作
    Ansible Towerのロールで制御、SURVEYの使用
    moleculeを使ったPlaybook(テンプレート)を作成して
    ワークフローテンプレートに組み込む
    Git更新用のPlaybook(テンプレート)を作成してワーク
    フローテンプレートに組み込む

    View Slide

  12. 検証
    12

    View Slide

  13. 検証環境コンポーネント
    13
    項目 コンポーネント バージョン 備考
    基盤 ESXi 6.7.0
    vCenter 6.7.0
    自動化ツール Ansible Tower 3.6.2
    Ansible 2.9.3 venvを使用
    テスト molecule 2.22
    M/W bind 9.11.4-9.P2
    今回は自動化はbindの設定を対象にしてみます

    View Slide

  14. 操作性のシンプルと入力パラメーターの標準化
    14
    レコード追加
    add_records:
    - name: www
    rdclass: IN
    rdtype: A
    rdata: 192.168.0.1
    レコード更新
    update_records:
    - name: www
    rdclass: IN
    rdtype: A
    rdata: 192.168.0.1
    レコード削除
    delete_records:
    - name: www
    rdclass: IN
    rdtype: A
    rdata: 192.168.0.1
    add_records
    - name: www
    rdclass: IN
    rdtype: A
    rdata: 192.168.0.1
    :
    ボタンを押す

    View Slide

  15. 影響範囲の制御(SURVEY)
    15
    番号 説明 操作対象
    ① 設定を変更する必要なnamed.confのみ選択可能に
    した
    ×
    ② 設定を変更する必要なゾーンのみ選択可能にした ○
    ③ Gitにpushする時のパスワード(標準埋込) ×
    ④ 使用するbindのロールを入力(標準埋込) ×
    ⑤ bind設定を保存するリポジトリ名(標準埋込) ×
    ⑥ コミットメッセージを入力する ○






    View Slide

  16. moleculeで躓いた課題
    16
    検証開始
    _人人人人人人人人人人人人人人人人人_
    > ドライバーが無い事による突然の死 <
     ̄Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^ ̄

    View Slide

  17. 無いなら作ればええやん!
    17

    その前にPR見とこう
    作るぞ!!
    あるやん!
    コメントを読み進めると
    既にドライバーが沢山あるし、ほとんどの人は
    VagrantやDockerで済むし
    需要あるか分からない
    コメント

    ちーん

    View Slide

  18. 標準ドライバーを使わずテスト用インスタンスを
    生成する方法
    18
    • Delegatedドライバーを使う
    • 標準ドライバーで対応出来ない場合、Delegatedドライバを使う
    事でテスト用インスタンスを自由に作ることができます
    このドライバを使う場合は以下のPlaybookを作成する必要があ
    ります
    • create.yml
    • テスト用インスタンスを作成するPlaybook
    • destroy.yml
    • 作成したテスト用インスタンスを削除するPlaybook

    View Slide

  19. 作成したワークフロー
    19
    開始 BIND設定正常性テスト BINDレコード更新 リポジトリの設定ファイル更新

    View Slide

  20. BIND設定正常性テストの処理
    20
    開始 BIND設定正常性テスト BINDレコード更新 リポジトリの設定ファイル更新
    bind-role
    bind-config
    CI TEST
    更新
    設定
    • 構文チェック(yamllint)
    (略)
    • instance作成(create)
    • 事前準備(prepare)
    • 新設定の流し込み(converge)
    (略)
    • Instance削除(destroy)
    moleculeテスト項目
    設定

    View Slide

  21. BIND設定正常性テストの処理
    21
    開始 BIND設定正常性テスト BINDレコード更新 リポジトリの設定ファイル更新
    bind-role
    bind-config
    CI TEST
    • 構文チェック(yamllint)
    (略)
    • instance作成(create)
    • 事前準備(prepare)
    • 新設定の流し込み(converge)
    (略)
    • Instance削除(destroy)
    moleculeテスト項目
    ESXi
    template instance
    リンククローン
    更新
    設定
    設定
    templateのシステムディスクを共有する
    リンククローンを使うことでinstance作成
    の高速化を図る
    Read
    Only
    差分のみ
    システム
    ディスク

    View Slide

  22. BIND設定正常性テストの処理
    22
    開始 BIND設定正常性テスト BINDレコード更新 リポジトリの設定ファイル更新
    bind-role
    bind-config
    CI TEST
    • 構文チェック(yamllint)
    (略)
    • instance作成(create)
    • 事前準備(prepare)
    • 新設定の流し込み(converge)
    (略)
    • Instance削除(destroy)
    moleculeテスト項目
    ESXi
    instance
    更新
    設定
    設定
    • bind-roleでbindの設定を入れる
    • bindの起動
    設定

    View Slide

  23. BIND設定正常性テストの処理
    23
    開始 BIND設定正常性テスト BINDレコード更新 リポジトリの設定ファイル更新
    bind-role
    bind-config
    CI TEST
    • 構文チェック(yamllint)
    (略)
    • instance作成(create)
    • 事前準備(prepare)
    • 新設定の流し込み(converge)
    (略)
    • Instance削除(destroy)
    moleculeテスト項目
    ESXi
    instance
    更新
    設定
    設定
    • bind-roleでbindの更新設定を入れる
    • bindのリロード
    設定
    更新
    設定

    View Slide

  24. BIND設定正常性テストの処理
    24
    開始 BIND設定正常性テスト BINDレコード更新 リポジトリの設定ファイル更新
    bind-role
    bind-config
    CI TEST
    • 構文チェック(yamllint)
    (略)
    • instance作成(create)
    • 事前準備(prepare)
    • 新設定の流し込み(converge)
    (略)
    • Instance削除(destroy)
    moleculeテスト項目
    ESXi
    instance
    更新
    設定
    設定
    • 問題なく設定が更新できたらinstance
    を削除する

    View Slide

  25. BINDレコード更新の処理
    25
    開始 BIND設定正常性テスト BINDレコード更新 リポジトリの設定ファイル更新
    bind-role
    bind-config
    main
    ESXi
    • 本番環境にbind-roleでbindの更新設
    定を入れる
    • bindのリロード
    bind
    設定
    設定
    更新
    設定

    View Slide

  26. BINDレコード更新の処理
    26
    開始 BIND設定正常性テスト BINDレコード更新 リポジトリの設定ファイル更新
    bind-role
    bind-config
    更新
    設定
    更新
    設定
    up
    date
    設定

    View Slide

  27. デモ
    27
    https://vimeo.com/390750827

    View Slide

  28. まとめ、今後の課題
    28

    View Slide

  29. まとめ
    29
    他の人でも対応できるように意識する(自動化2.0など)
    サービスが拡大することを意識して自動化する必要がある
    ただし、ワークフローを作るのは結構手間なので既存のCIツールの置き換えに
    はならないと思う
    Ansible Tower(AWX)を使えば簡易CICDの実装ができそう
    Ansible Tower(AWX)で操作をシンプルにすることができた
    操作できる範囲や入力内容を最小限にしてシンプルにすることで初めての人
    でも対応できそう

    View Slide

  30. 今後の課題
    30
    今回は設定ファイルの構文チェックとプロセスのリロードまでしか確認して
    いないため、反映後のレコードチェック(digなどで)が必要があると思う
    CIや本番への設定反映後のテストを作る必要
    本番に設定を反映する時に失敗することも考慮する必要があるため、失敗し
    た時の自動切り戻しもワークフローに入れる必要があると思う
    設定を反映した後に失敗した時の自動切り戻しが必要

    View Slide

  31. Thank you For listening
    https://twitter.com/sky_jokerxx
    https://qiita.com/sky_jokerxx
    https://sky-joker.tech
    https://github.com/sky-joker
    @sky_jokerxx

    View Slide