IaCの検討事項と、Terraform CloudとGitHubを組み合わせた構成のポイント
IaCを導入する際、重要なのはツールや言語の選定ですが、最も大切なのはデプロイとコード管理の「合理化」と「自動化」を実現することです。IaCでは、複数のツールを組み合わせてプロセスを構築します。それぞれが異なる役割を担い、全体でインフラ管理の効率を高めます。今回はその中でも、Terraform CloudとGitHubを使った構成をご紹介しながら、ツールの役割やその利点をご紹介します。
目次[非表示]
- 1.IaCの検討事項
- 1.1.「合理化と自動化」を実現するための検討事項
- 1.2.IaCで使用するツールの一例
- 2.Terraform Cloudについて
- 2.1.特長① リモート状態管理
- 2.2.特長② コラボレーションとワークフロー
- 2.3.特長③ 自動化されたワークフロー
- 2.4.特長④ ポリシーの適用
- 2.5.特長⑤ コスト管理
- 2.6.特長⑥ スケーラビリティとセキュリティ
- 3.IaCパイプラインのケース紹介
- 3.1.ワークフロー
- 3.2.それぞれのツールの役割
- 3.2.1.GitHub Actions
- 3.2.2.GitHub
- 3.2.3.Terraform Cloud
- 4.Terraform CloudとGitHubを組み合わせることの利点
- 4.1.一貫性
- 4.2.バージョン管理
- 4.3.自動化されたワークフロー
- 4.4.手作業の削減
- 4.5.アクセス制御
- 4.6.監査ログ
- 4.7.No-Code Provisioning
- 4.8.プライベートリポジトリ
IaCの検討事項
IaC(Infrastructure as Code)には、考慮するべき事項がいくつかあります。具体的なツールや言語の検討ももちろん大事ですが、そのために、どのような要素があるのか知る必要があります。
「合理化と自動化」を実現するための検討事項
IaCを導入することによって、実現できることは「デプロイメントとコード管理の合理化と自動化」です。そのため、以下の観点から、導入する組織においてどのようなポイントを重視したいかによって、選ぶツールも変わってきます。
構成要素 |
内容 |
---|---|
バージョン管理/GitOps |
コードリポジトリ、laCスタックとインフラストラクチャのバージョン管理 |
状態管理 |
リソースの状態維持 |
レジストリ / テンプレート |
レジストリのアドオン、コードの作成方法、読み取り方法、インテグレーション方法、再利用可能なコード作成方法 |
FinOps |
コスト監視、見積もりの自動化 |
laCパイプライン / ワークフロー |
一般的なタスクや反復的なタスクの自動化、パイプラインを作成してデプロイメント全体を自動化する方法 |
IaCで使用するツールの一例
ひとことで「IaC」といっても、いくつかのツールを組み合わせることが多く、それぞれのツールで役割が異なります。
- CI/CD:Terraform Cloud、GitHub Actions、CircleCIなど
- バージョン管理:GitHub、GitLab、Bitbucketなど
- コード/ツール:Terraform Cloud、AWS CloudFormation、AWS CDK(Cloud Development Kit)など
- クラウドプラットフォーム:AWS、Google Cloud、Microsoft Azureなど
ここで挙げたのは一例であり、それぞれのツールの詳細の説明はここでは省きますが、これらのツールを組み合わせることによって、IaCプロセスを実現しています。
Terraform Cloudについて
ここからは、IaCで最も普及されているツールの一つであるTerraform Cloudについて見ていきたいと思います。
Terraform Cloud は HashiCorp が提供するマネージド サービスで、インフラストラクチャをコードとして管理する作業を簡素化および合理化するのに役立ちます。チームがインフラストラクチャを一貫性のある自動化された方法で計画および適用するための共同プラットフォーム/ワークスペースを提供することで、Terraform の機能を拡張します。
特長① リモート状態管理
Terraform Cloud はインフラストラクチャの状態を安全に保存および管理し、一貫性を確保して競合を防止します。また、Stateファイルを保存できるため、チームとの共有が容易になります。
特長② コラボレーションとワークフロー
ワークスペース、バージョン管理の統合、チーム管理などのコラボレーション機能を提供し、複数のユーザーが効率的に共同作業できるようにします。作業するデプロイメントごとにワークスペースを作成できるため、簡単に共同作業ができ、内容を共有して、何が起こっているかを確認することができます。
特長③ 自動化されたワークフロー
Terraform Cloud は、インフラストラクチャ コードの変更に応じて Terraform の計画と適用を自動的に実行し、GitHub などのバージョン管理システムとシームレスに統合します。
特長④ ポリシーの適用
HashiCorp Sentinel を使用してポリシーを定義および適用し、インフラストラクチャの変更が組織の標準とベスト プラクティスに準拠するようにできます。
各ワークスペースに会社のベスト プラクティスのルールを適用したり、本番アカウントでは、適用をする前に承認プロセスを設けることも可能です。たとえば、ジュニア エンジニアは適用されたもの自体を作成できますが、シニア エンジニアが承認しないと実行されません。
特長⑤ コスト管理
Terraform Cloud には、FinOpsのための機能として、インフラストラクチャの変更を適用する前に、そのコスト面での影響を把握するのに役立つコスト見積もり機能があります。
特長⑥ スケーラビリティとセキュリティ
マネージド サービスである Terraform Cloud は、ニーズに合わせて拡張できるように設計されています。また、インフラストラクチャとデータを保護するための堅牢なセキュリティ機能も標準で提供されています。
IaCパイプラインのケース紹介
今回は、1つのケースとして、主にTerraform Cloudを使用してAWSにデプロイし、自動デプロイプラットフォームを構築した事例をご紹介します。GitHubとGitHub Actionsとともに活用しています。
ワークフロー
- productionリポジトリをpull
- featureブランチを作成
- コードをアップデート
- featureブランチをpush
- pull request (PR) を作成(GitHubは、Terraform Cloud をトリガーしてプランを実行することで PR を検証)
- PR を承認してmergeを実行
- Terraform Cloud は自動的にapplyを実行(承認は必要)
インフラストラクチャで何かを変更したい場合、masterブランチまたはfeatureブランチをpullして、コードを変更するためのfeatureブランチを作成し、それを GitHub にpushして PR を作成します。
PR を作成すると、GitHub は自動的にトリガーし、Terraform Cloud でplanを作成して 検証を行うので、GitHub では、これをデプロイしたり、Terraform に適用して実行したりするときにエラーになるかどうかを確認できます。
PR を承認してmergeすると、自動的に環境に直接適用します。もちろん、マネージャーからの承認が必要な場合は、そのプロセスを組み込むことができます。その場合は、PR をmergeしたときに、自動的に直接デプロイはされません。
GitHub Actionsは Terraform CloudでGitHubを連携する際に役立ちます。たとえば、新しいアカウントがある場合、Terraform Cloud にワークスペースを自動的に作成し、そのアカウントの GitHub リポジトリとブランチと統合する GitHub Actionsがあります。実行後、そのブランチにpushするだけで、クラウドの環境に自動的に適用されます。
それぞれのツールの役割
ツールごとの役割をまとめると次のようになります。
GitHub Actions
- ワークフローのトリガー
GitHub Actions は、プル リクエストの作成やブランチのmergeなど、特定のイベントが発生したときにワークフローを開始する役割を担います。 - 検証の実行
pull requestが作成されると、Terraform Cloud をトリガーして検証のplanを実行します。
GitHub
- リポジトリ管理
GitHub は、本番リポジトリと機能ブランチをホストします。 - pull request (PR)の処理
GitHub は、PRの作成、レビュー、承認、mergeを容易にします。 - Terraform Cloud との統合
GitHub は Terraform Cloud と統合して、インフラストラクチャの変更の検証と適用を自動化します。
Terraform Cloud
- plan実行
GitHub Actions によってトリガーされると、Terraform Cloud はPRで提案された変更を検証するためのplanを実行します。 - 適用実行
PRが承認されてmergeされると、Terraform Cloud は自動的に適用コマンドを実行して変更を実装します。このステップを続行するには、明示的な承認が必要です。
Terraform CloudとGitHubを組み合わせることの利点
一貫性
Terraform CloudとGitHubを組み合わせることの最大の利点は、一貫性が非常に優れていることです。何が起こっているかを簡単に確認でき、状態を全員と共有できるため、全員が同じワークスペースで作業し、簡単に追跡できます。
Terraform stateファイルを一元的に保存することで、Terraform Cloud はすべてのチーム メンバーが同じ状態で作業していることを保証し、競合や不整合のリスクを軽減します。
バージョン管理
GitHub との統合により、pull request (PR)を通じて変更を確認、検証、mergeできるため、シームレスなコラボレーションが可能になります。
自動化されたワークフロー
Terraform Cloud は、インフラストラクチャ コードの変更に応じて Terraform プランと適用を自動的にトリガーし、CI/CD パイプラインとシームレスに統合します。
手作業の削減
自動化により、手動プロセスの必要性が減り、展開が高速化され、人的エラーが最小限に抑えられます。
また、承認プロセスを追加できるため、その点でも人的エラーを最小限に抑えることができます。特に、全員が適用できるようにしたくない本番環境では、承認プロセスを追加するだけで済みます。
アクセス制御
Terraform Cloud と GitHub は堅牢なアクセス制御を提供し、インフラストラクチャで特定のアクションを実行できるユーザーを定義できます。
監査ログ
詳細な監査ログにより、Terraform Cloud と GitHub 内で実行されたすべてのアクションが追跡され、透明性と説明責任が確保されます。
どのアカウントのリソースがどのワークスペースにログインして、誰が何をしたか、いつ発生し始めたかを確認できます。つまり、バックシフト トラブルシューティングが可能で、非常に便利です。
No-Code Provisioning
他にも、Terraform Cloudには便利な機能がいくつか用意されています。No-Code Provisioningは、TF Word ファイルを手動で記述する代わりに、GUI画面上で、プルダウンリストからコードを作成することができる機能です。コードの作成に慣れていない人にとって、非常に便利です。
プライベートリポジトリ
また、非常に便利なのは、組織内でモジュールを共有できるプライベート リポジトリがあることです。モジュールをダウンロードしたり自分で作成したりする代わりに、モジュール ソースを Terraform Cloud のプライベート リポジトリに変更するだけで、モジュールを直接使用できるようになるため、コード管理の方法の幅が広がります。
今回のご紹介はここまでになります。ぜひIaCの活用の参考にしてみてください。