🫥

# Azure App Service をTerraformで作成する

2024/07/30に公開

(精査、誤植調整〜編集中)

Microsoft Azure App Serviceは、ウェブアプリケーション、モバイルアプリケーション、APIアプリケーションのホスティングプラットフォームです。高可用性とスケーラビリティを提供し、開発者はインフラ管理を気にせずにアプリケーションの開発とデプロイに集中できます。主要なプログラミング言語やフレームワークをサポートし、継続的デリバリや自動スケール機能も備えています。セキュリティ面でも、Azure Active Directoryとの統合やSSL証明書の簡単な管理が可能で、ビジネスに必要な高い信頼性とパフォーマンスを提供します。
(GPT4o)

Azure App Serviceとは何か

Azure App Serviceは、内部にAzure Web Appsと Azure Functionを内包できる、コンピュート部分であり、ドッカーのホスト部分と考えるとほとんど合致している。マネージドの汎用コンテナサービスであると考えると正しいかもしれない。内部にWebAppを内包することができ、PythonやNode.jsを選択できる。一つのAppServiceに複数のWebAppを配置することもできることは、さながらVPSに導入したDockerサービスに複数のコンテナを配置して動かすイメージに近いが、AppService内部に配置するWebAppsは独自にURLを持っており、Azure共通のSSLとURLが標準で利用可能。なお独自ドメインを当てて使うこともできる。


*配置App数に制限はある

公開方法は3種類

Azure App Serviceでは、コード/コンテナ/静的ファイルの公開タイプを選択できるようになっており、どれを選んでも裏でDockerコンテナが稼働している。コードを選べばコンテナ部分までAzureが調整してくれるが、コンテナ自体を操作したい欲求にも応えてくれるといった具合。

3つの公開タイプによる違い

■コード
AzureDevOpsやGitHubからのGitを用いたインテグレートを利用でき、.Net,Java,Node.js、PHP、Pythonの選択が可能。

■コンテナ
OSにLinuxとWindowsを選択できることから活用の幅はとても広いDaaS環境としての利用も可能になっている。

■静的ファイル
htmlファイルなどを配置するのみの仕組みに最適な構成が設定される。

PaaSの特徴でもあるが、どのタイプを選んでもかなり手放しで面倒を見てくれるものとなっている。

*なお、本編ではPaaSを主題としているためコンテナに踏み込むことは行わないが、コンテナの選択はPaaSより一歩深い部分のミドルウェアまでをユーザの責任範疇を利用者に求めるものとなっており、そこは大いに楽しめる部分でもある。

Portal上のUI

Azure Portal上のUIには以下のように設定項目が存在している。

Terraformで作ることもできる

App Serviceを作成するTCL

Terraformにすると次のようになる。

provider "azurerm" {
  features {}
}

# リソースグループの作成
resource "azurerm_resource_group" "example" {
  name     = "example-resources"
  location = "Japna East"
}

# App Serviceプランの作成
resource "azurerm_app_service_plan" "example" {
  name                = "example-appservice-plan"
  location            = azurerm_resource_group.example.location
  resource_group_name = azurerm_resource_group.example.name
  sku {
    tier = "Standard"
    size = "S1"
  }
}

# App Serviceの作成
resource "azurerm_app_service" "example" {
  name                = "example-appservice"
  location            = azurerm_resource_group.example.location
  resource_group_name = azurerm_resource_group.example.name
  app_service_plan_id = azurerm_app_service_plan.example.id

  app_settings = {
    "WEBSITE_RUN_FROM_PACKAGE" = "1"
  }
}

*TCLはTerraform Configuration Language

Discussion