AzureのPaaSインフラをTerraformで構築

2024/07/28に公開

Terraformを用いたAzure環境をPaaSで構築できるようになりましょう。
PaaSの中にはSaaSも混じり、オンプレ経験者ほどわかりにくいとされるAzure基盤構築を、
オンプレも少し経験した経験を交え、Azure Terrafomrだとどう作るのか?
これから基盤を作っていく人のために記載していこうと思い、記載を始めました。
完成にはおよそ1年くらいかかる見込みです。

全体を通じて、以下の構成図を実現させていきます。

図中①〜③の通信経路について

① FrontDoorの後ろにApplicationGatewayを置く場合
② TrafficManagerの後ろにApplicationGatewayを置く場合
③ FrontDoorから直接PrivateEndpointにアクセスする場合

*コストと安定を気に留めない場合、③が最もわかりやすいかと思います。
現実の安定度を考えれば①か②の構造が理想です。
本編では①の構造を元にしてTerraformの構築を進めていきます。

terraform

Terraformは、インフラストラクチャをコードとして管理するためのオープンソースのツールです。HashiCorpによって開発され、クラウドサービスプロバイダー(AWS、Azure、Google Cloudなど)やオンプレミス環境におけるインフラのプロビジョニング、管理、自動化を容易にします。Terraformは、宣言的な構成ファイルを使用し、これによりインフラの状態をコードで定義し、一貫性と再現性を確保します。また、リソースの依存関係を自動的に処理し、変更の計画と実行を効率的に行います。
(*GPT4o記載)

インフラのオーケストレーションツールではありますので、クラウドに限った話でもないのですが、
本編ではAzureを用いたPaaS環境を構築していきますので、必然とクラウドに限られた記載となっていきます。

クラウド

クラウド市場の成長は著しく、近年大幅に拡大しています。例えば、2023年の世界のパブリッククラウドサービス市場のエンドユーザー支出は約5973億ドルに達すると予測されています。これは2022年の4910億ドルから21.7%の成長を示しています​。さらに、クラウド市場の主要セグメントであるSaaS(ソフトウェア・アズ・ア・サービス)は、2023年に約1973億ドルの市場規模に達するとされています。また、IaaS(インフラストラクチャ・アズ・ア・サービス)は、特に高い成長を見せており、2023年には前年比30.9%増加して約1503億ドルに達すると予測されています​。このような成長は、デジタルトランスフォーメーションの推進や新しいテクノロジー(例えば生成AI)の導入によって促進されており、多くの企業がクラウドを戦略的プラットフォームとして採用していることが背景にあります​
https://www.gartner.com/en/newsroom/press-releases/2022-06-02-gartner-says-worldwide-iaas-public-cloud-services-market-grew-41-percent-in-2021
(*GPT4o記載)

クラウドについて様々な示唆がある中でも、クラウド市場が2年で倍増となっていることは特筆しておくべき事象かと思います。 ここでチャラい言葉を使いますと、乗らなきゃビッグウェーブ と言ったところでしょうか。

2年で倍増したクラウド市場規模

https://www.gartner.com/en/newsroom/press-releases/2023-04-19-gartner-forecasts-worldwide-public-cloud-end-user-spending-to-reach-nearly-600-billion-in-2023

Azureの市場規模

クラウド市場全体が2年で倍となる勢いを持ちながら、AWSの成長が年35%、Azureの成長が年 51%となっていることからも、全般にAzureへの関心が高いことが伺えます。これはOpenAIの採用があったことも大きく寄与していると考えられますが、大企業を中心にDXが本格化し、内政部門の拡大も耳にするようになった昨今においての潮流であるものと考えられます。ですので、こちらの記事はAWSよりもMicrosoftを採用したい方、おそらく一定の規模を持つ開発に対してのものとなってくるかと思います。

利用環境の内訳ではPaaSが目立ち、YonY23%増

クラウドを利用開始するにあたり、おそらくオンプレからの移行が多いのではないかと思いますので、基本はIaaSをまず検討されるはずです。割合としてもIaaSが目立ちますが、ネットワークや物理基盤だけでなくミドルウェア構造までをクラウドに任せてしまうことができるPaaSが23%を占めていることから、クラウドによりPaaSが選ばれやすくなっているのだと思います。

SaaS(ソフトウェア・アズ・ア・サービス): 33.0%
IaaS(インフラストラクチャ・アズ・ア・サービス): 25.2%
PaaS(プラットフォーム・アズ・ア・サービス): 23.3%
BPaaS(ビジネスプロセス・アズ・ア・サービス): 10.9%
DaaS(デスクトップ・アズ・ア・サービス): 0.5%
管理およびセキュリティサービス: 7.1%

https://www.gartner.com/en/newsroom/press-releases/2022-06-02-gartner-says-worldwide-iaas-public-cloud-services-market-grew-41-percent-in-2021

PaaSとIaaSの違い

特徴 PaaS (Platform as a Service) IaaS (Infrastructure as a Service)
管理レベル アプリケーションとデータの管理を提供 インフラストラクチャ(サーバー、ストレージ、ネットワーク)の管理を提供
主な提供内容 アプリケーションホスティング、データベース、開発ツール 仮想マシン、ストレージ、ネットワーク
開発者向け機能 開発者ツール、API、統合開発環境 (IDE) 高度なカスタマイズと制御
利用者の主な責任範囲 アプリケーションの開発、デプロイ、管理 オペレーティングシステム、ミドルウェア、ランタイム、データの管理
スケーラビリティ 自動スケーリング、負荷分散 手動または自動スケーリング
Azure App Service, Google App Engine AWS EC2, Google Compute Engine
(*GPT4o記載)

構築環境

AzureでPaaS環境を整える。

本編では、時間をかけて、以下の知識を揃えていきます。

Azure App Service
Azure SQL Database
Azure Storage Account
Azure Network Watcher
Azure Private Endpoint
Azure Virtual Network
Azure Monitor
Azure Traffic Manager
Azure LoadTest
Azure Key Vault
Azure Function
Azure FrontDoor
Azure TrafficManager
Azure Application Gateway
Azure PrivateDNS
Azure Application Insights
Azure DevOps

利用するTerraformのバージョンや環境

環境:Mac MacOS13以上
Terrformバージョン:1.9.0

Terraformの利用方式
terraform workspaceを用い、特定環境に特化したmodule構造を実現させます

  • 過去のベストプラクティスとは異なりますのでご注意ください
  • 流派や宗教からは良いところだけ考慮します
  • 複数プロダクトでの流用を考えたものではありません。
  • 1プロダクトを複数環境に展開する構造を意識した作りになります。
  • azurermのみを利用し、azapiの利用は行いません。
  • 本編では試行錯誤や変遷をなるべく省き、回答のみを記載します。
  • 要望は随時精査の後、追加していきます。
  • Terraformに主眼をおき、アプリケーションのCIやCDは本編の対象外とします。
    その他注意事項は(随時追加)

本編で実現したいインフラ構成

アプリケーションには、Python/Node.js を用います → Azure App Service
データストアには SQLを用います → Azure SQL Database
DBへのアクセスキーは隠蔽します → Azure Key Vault
ネットワークはプライベートIPを用います → Azure Virtual Network
通信は終端〜若干の分散を行います → Application Gateway
アプリケーションの監視を行います → Azure Monitor
アプリケーションの負荷テストを行います → Azure Loadtest

服編で作成するアプリケーション

本編ではTerraformを用いた環境を構築することが目的となりますが、
服編では、本編で制作した環境を用いたアプリケーション構築について触れていきます。
Aiを用いることが多い昨今でもあり、服編ではAiを用いたWebアプリケーションを構築していく予定です。
GitHubかAzureDevOpsRepositoryからのインテグレーションとZipデプロイを紹介します。
紹介は本編記載完了後になる予定です。

記載の目的

いくらかのAzureを用いたPaaSインフラを構築してきました。オンプレをかじっていたからこその苦労のほか、先に知っていたら良かったという情報が多くありました。それら落とし穴を踏み抜き、穴埋めを体験して現在に至ります。落とし穴から抜け出した経験が実力になるものと思いますが、現実のビジネスはそれほど猶予がないもの。これからAzureを用いたPaaS環境を検討する方が落とし穴を迂回でき、構築の指針になることを目的として記載していきます。

Discussion