Lock in $30 Savings on PRO—Offer Ends Soon! ⏳

第99回 雲勉【オンライン:初心者向け】Infrastructure as Code (IaC...

第99回 雲勉【オンライン:初心者向け】Infrastructure as Code (IaC) 入門 〜TerraformとAnsibleを使ってみよう〜

Y.Sumikura

March 17, 2023
Tweet

More Decks by Y.Sumikura

Other Decks in Technology

Transcript

  1. 0.講師⾃⼰紹介 2 n ⼩林 拓未 • クラウドインテグレーション事業部 構築第5セクション 第3グループ •

    新卒⼊社し、2023年4⽉で3年⽬ • 私もまだまだIaCについて勉強中の⾝です^^; • 今回⼀緒に学習していただけて、⼤変嬉しいです。
  2. アジェンダ 3 0.⾃⼰紹介 1.Infrastructure as Code (IaC)とは︖ (19:05~19:15) 2.Terraformとは︖ (19:15~19:25)

    3.Ansibleとは︖ (19:25~19:35) 4.TerraformとAnsibleの違いについて(19:35~19:45) 5.まとめ (19:45~19:50) 6.質疑応答(19:50~20:00) ※ 時間の都合上、実際のリソース構築は、今回割愛させていただきます。
  3. 1. Infrastructure as Code (IaC) とは、どのようなものか 5 n Infrastructure as

    Code (IaC)とは︖ • Infrastructure as Codeとは、サーバーやネットワークなどのシステムインフラ構成をコードを⽤い て構築・管理していく⼿法。 • パブリッククラウドの登場やシステムインフラ構成の複雑化・増⼤化に伴い、さらに注⽬されるよう になっている。 • 宣⾔型や命令型(⼿続き型)の⽅式の違いや得意な分野などの違いがあるため、実施したい内容に沿っ て、適切なツールを選ぶことも⼤切になってくる。
  4. 1. Infrastructure as Code (IaC) 導⼊の背景 6 n サーバー上で特定のサービス機能を提供するにあたり、必要になってくること •

    ネットワークの設定 • ミドルウェアのインストール • ユーザーアカウントの作成 • その他各種設定 それらの作業を構築⼿順書をもとに全て⼿作業で実施していると、作業ミスの可能性があるうえ、 作業時間が⼤幅にかかってしまう。 ⼤規模なシステムの場合には複雑になり、それらのリスクはさらに⾼まってしまう。 そういった問題などを解決するために、 Infrastructure as Code (IaC) の活⽤は有効な⼿段となる。
  5. 1. Infrastructure as Code (IaC) のメリット・デメリット 7 n メリット •

    ⼿作業をやめられ、インフラ構築の⾃動化が可能になり、作業⼈数や作業時間を削減できる。 • インフラのあるべき状態を管理できるため、⼈的作業ミスなく何度でも構築できる。 • コードを使⽤していくため、バージョン管理や他環境での再利⽤が可能になる。 n デメリット • ⼿順書の内容をコード化する必要があり、導⼊初期では時間がかかる場合がある。 • 些細な設定変更でもコードの修正となり、⼿作業よりも時間を要する場合がある。 • 使⽤しているツールの知⾒がないメンバー場合には、学習コストがかかる。 短期的なメリットだけでなく、⻑期的なメリットを考えて、導⼊を検討することを推奨。 なお、今回代表的なものとして、TerraformとAnsibleを取り上げる。
  6. 2. Terraformとは、どのようなものか 9 n Terraformとは︖ • Terraformとは、インフラ構築、変更、バージョン管理を効率的に⾃動化する構成管理ツール (※1)。 • Go⾔語で開発され、HashiCorp社から提供されており、オープンソースとしても公開している。

    • HashiCorp Configuration Language(HCL)と呼ばれる独⾃のドメイン特化⾔語(DSL , Domain-Specific Language)で、設定を記述する(JSONも利⽤可能)。 ※1 構成管理ツールとは、機器のあるべき姿(構成)をファイルで管理するためのツールのこと。
  7. 2. Terraformのメリット・デメリット 10 n メリット • リソース間の依存関係を⾃動で解決しながら、構築してくれる。 • 誰が構築しても同⼀のインフラ構成となるため、開発の⼀貫性を保てるうえ、コードの再利⽤で作業 時間を削減できる。

    • 様々なクラウドベンダーに対応しており、特定のベンダーに依存していない。 n デメリット • バージョン変更などによって、今までの仕様や形式などの破壊的変更が起こりうる。 • ミドルウェア層の構成管理に関しては、得意ではない。
  8. 2. Terraformを使うにあたって、必要なもの 11 n 事前準備(AWSの場合) • AWS CLIのインストール。 • AWS

    クレデンシャル情報の登録。 • terraformのインストール(バージョン管理できるようにすることを推奨)。 n Terraformで構築を⾏う際の基本的なコマンド • terraform init︓ワークスペースを初期化やtfファイル内のプラグイン(aws provider など)のダ ウンロード処理などを実⾏するコマンド。初めに必ず実⾏する必要がある。 • terraform plan︓Terraform による実⾏計画を参照するコマンド。tfファイルに情報を元に、どの ようなリソースが 作成/修正/削除 されるかを参照可能できるため、apply前後での実⾏推奨。 • terraform apply︓tfファイルに記載された情報を元にリソースを作成するコマンド。リソースが作 成後、 terraform.tfstate に、作成されたリソースに関連する情報が保存される。
  9. 2. Terraformのディレクトリ構成 12 Terraformのファイル内容は基本的にxxx.tfという拡張⼦をつけた、tfファイルで定義された 情報に従って各種リソースを構築する。以下では代表的なものを挙げていく。 ※単⼀ファイルにすべてを定義することも可能ではあるが、分離することが⼀般的になっている。 ファイルの種類 役割 providers.tf 実⾏するTerraformのバージョンを指定したり、プロバイ

    ダ(AWSなど)を指定する。 main.tf Terraformを使って、構築するリソース情報を定義する。 variables.tf 変数情報をmain.tf等から分離し、まとめたファイル。 terraform.tfstate Terraformで管理しているリソースの状態を表すファイル。 ※terraform applyを実⾏すると、⾃動で⽣成される。 terraform providers.tf main.tf variables.tf terraform.tfstate
  10. 3. Ansibleとは、どのようなものか 14 n Ansibleとは︖ • Ansibleとは、システム設定やソフトウェアの導⼊(インストール)などを⾃動化、効率化する構成管 理ツール。 • Pythonで作られており、現在はRed

    Hat社から提供されており、オープンソースソフトウェアとして も公開している。 • ソフトウェアパッケージの導⼊やOSの設定変更、ユーザーアカウントの管理などの設定を、playbook と呼ばれる設定ファイルに基づいて⾃動的に処理するものになっている。 • playbookには操作や⼿順を直接記述せずとも、システムの個々の要素があるべき姿を書き⼊れれば、 これを元に最適な操作をAnsibleが判断して実⾏する。
  11. 3. Ansibleのメリット・デメリット 15 n メリット • 学習コストの低いYAML形式で記述できる。(Chefであれば、Rubyの理解が必要。) • エージェントレスとなっており、⽐較的導⼊がしやすい。(ただし、Pythonは必要。) •

    Ansibleは豊富なモジュールがあるうえ、バージョン管理ツールなどとも連携がしやすい。 n デメリット • GUIによる制御や組織での運⽤は、得意ではない。 • Windowsの管理は、得意ではない。 • インフラの構成管理に関しては、得意ではない。
  12. 3.Ansibleの仕組み 16 Ansibleでは、サーバーのことをノードと呼び、役割により2種類に分けられる。 ノードの種類 役割 コントロールノード 構成を管理するノード(Ansibleをセットアップする環 境)。YAML形式のファイルに管理対象の環境情報を 設定し、実⾏するものになる。 管理対象ノード

    構成を管理される対象のノード(Ansibleのインストー ルは不要)。コントロールノードからの命令を実⾏さ れた際に、アプリケーションや設定を管理される対象 になる。 コントロールノード 管理対象ノード
  13. 3.Ansibleのディレクトリ構成 17 Ansibleのファイル内容は⼤きく3種類に分けられる。 ファイルの種類 役割 インベントリファイル(hosts) 構成管理を⾏う管理対象ノードの接続情報を管理する ファイルになる。※ファイル名のデフォルトは hosts 。

    設定ファイル(ansible.cfg) Ansibleの設定を⾏うファイルで、機能のON/OFFなど を設定するものになる。 playbook 管理対象ノードの構成情報を設定するファイル(YAML 形式で記述)。rolesディレクトリ以下に機能単位で YAMLファイルを作成していく。※1 ※1 ⼀般的なファイルの管理⽅法は、作成したロールをsite.ymlに設定していく。 ansible インベントリファイル(hosts) 設定ファイル(ansible.cfg) playbook(site.yml) roles role1 tasks playbook(main.yml)
  14. 4. TerraformとAnsibleの違いについて 19 n Terraformの得意なこと • インフラ層の構成管理。 • 宣⾔型の⽅式のため、リソースの状態管理を⾃動化することが得意。(冪等性が⾼い。) n

    Ansibleが得意なこと • OS・ミドルウェア層の構成管理。 • 命令型(⼿続き型)の⽅式のため、⼿順を⾃動化することが得意。 得意な部分を補完し合いながら、使⽤していくと良い。
  15. 4.冪等性について 20 n 冪等性とは︖ • 前のスライド出た「冪等性」という⾔葉は、対象がどんな状態であっても、誰が実⾏しても、何回実 ⾏しても、必ず同じ状態(品質)になることを保証するという概念である。 • 構成管理ツールでは、機器のあるべき姿(名前やIPアドレスなど)をあらかじめファイルに定義して おき、その定義内容と差分がある場合は、本来あるべき姿へと設定変更を⾏っていく。(⾃動で実⾏

    済みかを確認して、実⾏していなければ実⾏し、実⾏済みであれば何もしない。) • この結果、同じ⼿順を何回実⾏しても、⼿順の実⾏後は常に同じ結果になるように設計することがで き、冪等性を保てるようになっている。 構成管理ツールを導⼊していくなかで、冪等性の考え⽅(同じ状態を保証できていることなど)は重要 になってくるので、今後学習していく⽅は意識していただけると幸いです。
  16. 5.まとめ 22 n Infrastructure as Code (IaC) • サーバーやネットワークなどのシステムインフラ構成をコードを⽤いて構築・管理していく⼿法で、実 施したい内容に沿って、適切なツールを選ぶことが重要になってくる。

    n Terraform • Terraformとは、インフラ構築、変更、バージョン管理を効率的に⾃動化する構成管理ツールで、イン フラ層の構成管理が得意。 n Ansible • Ansibleとは、システム設定やソフトウェアの導⼊(インストール)などを⾃動化、効率化する構成管理 ツールで、 OS・ミドルウェア層の構成管理が得意。 得意な部分を補完し合いながら、使⽤していくと良い。 また、すべてをコード化するのが良いわけではなく、⻑期的なメリットを考えて導⼊を検討&決定すべき。