Oracle Cloud Hangout Cafe Season7 #2「IaC のベストプラクティス」(2023年7月5日開催)

2024年1月18日(木)
川村 修平
第2弾の連載第2回では、2023年7月5日に開催された 「Oracle Cloud Hangout Cafe Season7 #2『IaC のベストプラクティス』」の発表内容に基づいて紹介していきます。

はじめに

Oracle Cloud Hangout Cafe」(通称「おちゃかふぇ」/以降、OCHaCafe)は、日本オラクルが主催するコミュニティの1つです。定期的に、開発者・エンジニアに向けたクラウドネイティブな時代に身につけておくべきテクノロジーを深堀する勉強会を開催しています。

連載第2回の今回は、2023年7月5日に開催された「Oracle Cloud Hangout Cafe Season7 #2 『IaC のベストプラクティス』」の発表内容に基づいて紹介していきます。

アジェンダ

今回は、以下のアジェンダの流れに従って、順に解説します。

  • Infrastructure as Code(IaC)
  • Terraform
  • Pulumi

発表資料と動画については、下記のリンクを参照してください。
資料リンク
動画リンク

Infrastructure as Code(IaC)

本連載では、Infrastructure as Code(以下、IaC) を実現するツールとして、TerraformPulumiを紹介しますが、その前にそもそもIaCとは何か、IaCを導入することで得られるメリットは何かについて解説します。

Infrastructure as Code(IaC)とは

IaCとは、Infrastructure as Codeの略称であるように、広義にはインフラストラクチャを定義、展開、更新、破棄するためのコードを書き、それを実行することと言えます。これを実現するツールは、以下の通り数多く存在します。

  • アドホックなスクリプト
    • Bash、Ruby、Python、etc.
  • 構成管理ツール
    • Chef、Puppet、Ansible、etc.
  • サーバーテンプレートツール
    • Docker、Packer、Vagrant、etc.
  • オーケストレーションツール
    • Kubernetes、Docker Swarm、Nomad、etc.
  • プロビジョニングツール
    • Terraform、Pulumi、etc.

いずれのツールも目的は同様で、従来手動で実施してきた作業をコードに変換する先行投資と引き換えに、ソフトウェアのデリバリーを効率化することと言えるでしょう。

IaC が提供する価値

IaCを導入することで得られる価値を深掘りしてみると、以下のような観点があると思います。

  • セルフサービス
  • スピードと安全性
  • ドキュメンテーション
  • バージョン管理
  • 検証
  • 再利用性

セルフサービス
アプリケーションのデプロイでは、主に以下3つのことを実施していたと思います。

  1. ソフトウェアの開発者がアプリケーションコードを実装する
  2. コードの内容を実行可能な形式にまとめたもの(WAR、JAR、etc.)をインフラの担当者へ渡す
  3. インフラの担当者が動作環境を作成し、渡されたファイルを決められた形で配備する

特に動作環境の作成はソフトウェアの開発者にとっては遠い存在でしたが、インフラをコードとして表現するとインフラ担当者に頼らずとも環境を構築できます。

スピードと安全性
インフラをコードとして表現することのもう1つのメリットとして、自動化に取り組みやすいことが挙げられます。インフラ構築に関わる一連のタスクを自動化すると、人手を介さないことによる人的ミスの削減やデプロイメントの高速化が期待できます。

ドキュメンテーション
環境を作成した際に作ったインフラの設計書と実環境の設計書をメンテナンスしなかったことにより、差分が発生した経験はないでしょうか。インフラを構築するコードで環境構築を行うようにすれば、常にそのコードが最新のインフラを表すドキュメントとして機能します。また、目的別に特化した言語(DSL)は文法や構造が一般目的言語(GPL)と比較しても単純なため、可読性にも富む傾向があります。

バージョン管理
Git等のバージョン管理ツールと組み合わせてインフラ操作の履歴をコミットログとして記録することで、変更履歴の追跡やロールバック等の管理ができるのも1つのメリットと言えるでしょう。

検証
コードとして表現することで、コード・レビューのプロセスや自動テスト、静的解析ツールを活用できます。それを実現するツールも数多くありますので、後半でいくつかピックアップして紹介します。

再利用性
ソフトウェア開発では、よく同じような処理を関数やメソッドという単位に切り出して効率的に実装すると思いますが、IaCでも同様に再利用可能なモジュールにパッケージ化することで効率的にインフラの定義を行うことができます。

Terraform

ここからは、IaCツールの代表例であるTerraformについて紹介していきます。

Demo: OKE(+周辺リソース)のプロビジョニング

当日のセッションでは、まずTerraformでどのようなことができるのかを見てもらうためにデモを実施しました(実際のデモはこちらから視聴できます)。

Demo: OKE(+周辺リソース)のプロビジョニング

上図にある通り、Terraformを用いてOKE*1と、それを配置するためのネットワークをプロビジョニングしています。ここでは、Terraformでこのようなことができるというイメージを持っていただければ十分で、以降でデモの内容が理解できるように基本的なところから解説します。

*1: Oracle Container Engine for Kubernetesの略称で、OCIが提供するマネージドKubernetesサービスのこと

Terraformとは

TerraformはHashiCorp社が開発する、主にクラウド・インフラ構築に焦点を当てたIaCツール(プロビジョニング)です。特徴的なのは、インフラのあるべき状態を宣言し、TerraformがパブリッククラウドなどのプロバイダーへのAPIリクエストをユーザーの代わりに行うことで、インフラのプロビジョニングを行う点です。インフラをプロビジョニングするために手続き的なコードを書く必要はなく、あるべき状態へ到達するために必要なAPIリクエストなどはTerraform側で計算されるため、実装者が現在の状態を意識しなくても良い、コードそのものがインフラの最終状態を表すドキュメントとして機能する、といったメリットがあります。

Terraformであるべき状態は、HashiCorp Configuration Language(以下、HCL)というJSON互換のDSL*2で宣言的に定義します。また、状態を記録するStateファイルを用いてTerraformのエンジンに必要なリソースを計算することで、複数回実行しても同じ結果となること(冪等性)を担保します。

*2: Domain Specific Language の略で、ある 1 種類のタスクを記述することに集中したプログラミング言語の総称

Terraformのアーキテクチャ

まずは、概要レベルで見ていきます。

Terraformのアーキテクチャの概要

前述した通り、プロバイダーから提供されているAPIをTerraformが代わりに実行することでインフラをプロビジョニングします。以下でTerraform Core、Terraform Plugins、Terraform Providersについて、もう少し補足を加えます。

Terraform Core
Terraform Coreは、どのプラットフォームでも使われるTerraformの基本機能や、共通のインターフェースを提供します。具体的には、CLI(init、plan、apply…)に関する機能やリソースやデータソース等から依存関係グラフを作成する機能、Stateファイルを読み書きするロジックなどです。HashiCorp社が所有し、GitHubリポジトリ(https://github.com/hashicorp/terraform)で管理されています。

Terraformアーキテクチャの概要 - Terraform Core

Terraform Plugins
Terraform CoreにはTerraformの基本機能しか含まれていないため、実際にプロバイダーから提供されているAPIを実行することはできません。そのため、各種プロバイダーのAPIをネットワーク(HTTP、etc.)を介して実行するための機能をプラグインとして提供し、それをTerraform Coreから実行することでインフラのプロビジョニングを可能にします。

Terraformアーキテクチャの概要 - Terraform Plugins

Terraform CoreのコードはHashiCorp社が管理していましたが、各プラグインのコードはそれぞれ個別のリポジトリで管理されています。

hashicorp/terraform-provider-aws
oracle/terraform-provider-oci

また、プラグイン開発やメンテナンスに用いる専用のフレームワークやSDKも存在します。

Terraform Providers(2023/12 執筆時点)
2023年12月現在、https://registry.terraform.io/browse/providersを見ると、Official、Partner、Communityを合わせて3,700以上のプロバイダーが登録されていることを確認できます。

Terraform Providers

日本オラクル株式会社

Oracle Groundbreaker Advocate
Cloud Solution Engineer

日本オラクルに入社後、ソリューション・アーキテクトとしてクラウドでのアプリケーション開発、クラウドネイティブ技術、ストリーム処理、全文検索、AI 等に関する技術支援や案件支援に従事。現在、クラウドネイティブ技術に関連するコミュニティの運営にも参加中。

Community:
Oracle Cloud Hangout Cafe メンバー (#ochacafe)
CloudNative Days - Observability チーム

連載バックナンバー

仮想化/コンテナ技術解説
第5回

Oracle Cloud Hangout Cafe Season4 #4「Observability 再入門」(2021年9月8日開催)

2024/4/23
第2弾の連載第5回では、2021年9月8日に開催された「Oracle Cloud Hangout Cafe Season4 #4『Observability 再入門』」の発表内容に基づいて紹介していきます。
仮想化/コンテナ技術解説
第4回

Oracle Cloud Hangout Cafe Season6 #4「Pythonで作るAPIサーバー」(2022年12月7日開催)

2024/3/21
第2弾の連載第4回では、2022年12月7日に開催された 「Oracle Cloud Hangout Cafe Season6 #4『Pythonで作るAPIサーバー』」の発表内容に基づいて紹介していきます。
仮想化/コンテナ技術解説
第3回

Oracle Cloud Hangout Cafe Season 4 #2「Kubernetesのネットワーク」(2021年5月12日開催)

2024/2/20
第2弾の連載第3回では、2021年5月12日に開催された 「Oracle Cloud Hangout Cafe Season4 #2『Kubernetesのネットワーク』」の発表内容に基づいて紹介していきます。

Think ITメルマガ会員登録受付中

Think ITでは、技術情報が詰まったメールマガジン「Think IT Weekly」の配信サービスを提供しています。メルマガ会員登録を済ませれば、メルマガだけでなく、さまざまな限定特典を入手できるようになります。

Think ITメルマガ会員のサービス内容を見る

他にもこの記事が読まれています