Slide 1

Slide 1 text

Infrastructure as Code によるインフラ構築の 自動化により、オペレーションミスを防ぐ仕組みづくり RAKUS Meetup Osaka #9 株式会社ラクス 山村祐太

Slide 2

Slide 2 text

自己紹介 • 所属・氏名 • 株式会社ラクス 開発本部 大阪インフラ開発課 • 山村祐太(やまむらゆうた) • 業務内容 • 2018年4月より自社サービス「ChatDealer」の運用保守を担当

Slide 3

Slide 3 text

ChatDealerとは • 「チャットディーラー」は、Webサイトや社内ポータルなど にチャットウィンドウを設置して、問い合わせ対応を 行うことの出来るWebチャットツールです。

Slide 4

Slide 4 text

話すこと • 私自身の経験を元にインフラエンジニアとしての 技術的負債を考え、Infrastructure as Codeによる インフラ環境の構築・運用の自動化にたどり着き 解決に至るまでの工程をご紹介致します。

Slide 5

Slide 5 text

インフラエンジニアとしての 技術的負債について考えてみた

Slide 6

Slide 6 text

• コーディングレベルの負債 • バージョンアップするべき言語やライブラリなどの負債 • 負荷が考えられていない実装による負債 • トレンドが変わって乗り換える必要が出てきた場合の負債 • 共有不足で実装内容のブラックボックス化による負債 (https://www.orangeitems.com/entry/2018/03/23/121457より引用) そもそも、インフラの技術的負債って何?

Slide 7

Slide 7 text

共有不足で実装内容のブラック ボックス化による負債を考える

Slide 8

Slide 8 text

私自身にあてはめて考えてみた • 担当商材で、過去にDocumentの更新漏れにより サーバ構築の途中でエラーが出て、原因調査特定に 時間を要したことがあった

Slide 9

Slide 9 text

Documentの更新漏れを 防ぐには?

Slide 10

Slide 10 text

タスク管理システムとして Redmineを活用してみた!

Slide 11

Slide 11 text

• Redmineプロジェクト管理ができるオープンソフトウェア • やるべき作業を記録・管理して社内で情報共有が出来る • チームでプロジェクトを進める場合に誰がいつまでに 何をやるのか?現在どのくらい進んでいるのか進捗状況を 計画通りに進むよう支援してくれるツールとなります。 Redmineとは (画像:https://redmine.jp/overview/より引用)

Slide 12

Slide 12 text

• Documentなどの更新漏れが発生しないようにチーム 運用として、Redmineを活用した以下の運用を行った - 本番環境に変更を加える際の作業手順などは課内で レビューを実施!この時にDocumentの更新が必要か どうか判断を行い必要であれば、taskとしてチケット作成 - 週次でMTGを開催、ガントチャートによる全体 スケジュールの確認を行い、各自taskの進捗を 報告及び、相談を実施! Documentの更新漏れを防ぐ仕組み作り(1/2)

Slide 13

Slide 13 text

• 以上の結果、タスク管理システムのRedmineを活用して、 Documentの更新漏れを防ぐ仕組みを実現! 合わせて、taskの見える化、業務成果、リードタイム なども明確化された! Documentの更新漏れを防ぐ仕組み作り(2/2)

Slide 14

Slide 14 text

オペレーションミスが原因で、 サーバの構築が上手くいかない 問題が発生!

Slide 15

Slide 15 text

• Documentを元に手動で、サーバ構築を行っていたが、 これを構成管理ツールなどを活用して、作業の自動化を 行えば、オペレーションミスによる問題が防げる ※ただ、構成管理ツールを使うことで、手順をコード化する ことにより対応できるメンバーが限定され、属人化に ならないように合わせて部内で、構成管理ツールに対して のスキル向上の推進も行う必要がある 手動作業部分の自動化を考える

Slide 16

Slide 16 text

• サーバ、ミドルウェア、バージョン情報などの 構成管理を補助してくれるソフトウェアのこと 構成管理ツールとは?

Slide 17

Slide 17 text

• サーバのセットアップなど、手動でのコマンド操作などを 自動化することが出来る • サーバの設定情報などを一元管理が出来る • 1度の操作で、同時に複数台のサーバ構築や設定が出来る • コード作成時に冪等性(べきとうせい)を考慮出来る 構成管理ツールで出来ること

Slide 18

Slide 18 text

• 冪等性(べきとうせい)とは、ある操作を一回行っても 複数回行っても、同じ結果を得られるということ 冪等性(べきとうせい)について

Slide 19

Slide 19 text

• 以下理由を元に、「Ansible」の選定に至る。 - エージェントレスのアーキテクチャ - モジュールによる拡張性の高さ - 課内では、既に構成管理ツールとして、Ansibleを採用 していることもあり、Ansibleに対してのノウハウも 蓄積されていた 構成管理ツールの選定

Slide 20

Slide 20 text

• Red Hatが開発するオープンソースの構成管理ツール • PlayBookというYAML形式のテキストファイルに定型業務を タスクとして、記載して、それを元にAnsibleを実行させる ことにより、様々な処理を実現出来る Ansibleとは 構築手順 (Document) YAML形式で PlayBook作成 (コード化) Ansible実行! Management Server

Slide 21

Slide 21 text

• 手作業部分のコード化を行うことで、作業自動化が進み オペレーションミスを防ぐ仕組みを作ることができる • サーバに設定されている情報などを構成管理できる • クラスタなどの大規模サーバを構築する際、Ansibleを 活用して、サーバを並列で構築することにより、 作業時間が大幅に短縮される Ansible導入の目的

Slide 22

Slide 22 text

Ansibleを活用! 手動オペレーションのコード化を実施

Slide 23

Slide 23 text

• 以下の手動オペレーション作業をPlayBookに落とし込む - ディレクトリの作成 - ファイルを配置 - パーミッション権限の設定 - シンボリックリンクの設定 - パッケージのアンインストール及び、インストール - アプリケーションの設定情報反映など PlayBookの作成

Slide 24

Slide 24 text

ディレクトリ構成イメージ • ディレクトリ構成などは、Ansible Best Practiceを元に作成 (参考URL:https://docs.ansible.com/ansible/2.9_ja/user_guide/playbooks_best_practices.html)

Slide 25

Slide 25 text

Ansible導入での生産性 向上について

Slide 26

Slide 26 text

• Documentを元に、1クラスタ辺り、十数台のサーバを 手動オペレーションで構築した際の工数とAnsibleを活用して、 手動オペレーション時と同様のサーバ台数を構築した際の工数比較 生産性向上の効果 600分 60分 手動オペレーション Ansible クラスタ構築作業工数 作業工数90%削減達成!

Slide 27

Slide 27 text

Serverspecでテスト自動化を 行えば、さらに生産性向上! ※今後実装予定

Slide 28

Slide 28 text

• オープンソースの自動テストツール • サーバの状態をテストするためのフレームワーク • Serverspecを利用することで、意図した設定がサーバに 反映されているか確認することができる Serverspecとは?

Slide 29

Slide 29 text

• 以下の手動で実施していたテスト項目などをServerspecを 活用し、テスト自動化を行う - 各サービスの起動状態 - 指定ポートがListenしているか - 作成したユーザ/グループが存在するか - ディレクトリのオーナーとパーミッションが正しいか - 指定したパッケージがインストールされているか - 指定したミドルウェアバージョンがインストールされて いるか・・・etc Serverspecでテスト自動化

Slide 30

Slide 30 text

まとめ

Slide 31

Slide 31 text

まとめ • 以下の対応を行うことで、Infrastructure as Codeによる インフラ環境の構築・運用自動化を推進することが出来た - タスク管理システムのRedmineを活用して、Documentの 更新漏れを防ぐ仕組みを実現!結果として、taskの見える化、 業務成果、リードタイムなども明確化された - オペレーションミスを防ぐために、手順の自動化を構成管理ツール 「Ansible」を活用して、生産性の向上が実現! ※合わせて属人化にならないよう部内で、Ansibleに 対してのスキル向上の推進も行った - Serverspecなどで、テスト自動化を行えばさらに 生産性の向上が見込める!

Slide 32

Slide 32 text

ご清聴ありがとう ございました