Terraform を使用して Azure デプロイ スロットでインフラストラクチャをプロビジョニングする
Terraform を使用すると、クラウド インフラストラクチャの定義、プレビュー、およびデプロイを行うことができます。 Terraform を使用する際は、HCL 構文を使って構成ファイルを作成します。 HCL 構文では、Azure などのクラウド プロバイダーと、クラウド インフラストラクチャを構成する要素を指定できます。 構成ファイルを作成したら、"実行プラン" を作成します。これにより、インフラストラクチャの変更をデプロイ前にプレビューすることができます。 変更を確認したら、実行プランを適用してインフラストラクチャをデプロイします。
Azure デプロイ スロットを使用し、アプリの異なるバージョン間をスワップできます。 この機能によって、デプロイ分断の影響が最小限に抑えられます。
この記事では、GitHub と Azure を使用して 2 つのアプリをデプロイする方法を説明しながら、デプロイ スロットの使用例を紹介します。 1 つのアプリが運用スロットでホストされています。 2 番目のアプリはステージング スロットでホストされています。 ("運用" と "ステージング" という名前は任意です。これらは、実際のシナリオに適したものにすることができます。) デプロイ スロットを構成したら、必要に応じて Terraform を使用して 2 つのスロット間をスワップします。
この記事では、次のことについて説明します。
- App Service を作成する
- App Service スロットを作成する
- サンプルのデプロイ スロットを入れ替える
1. 環境を構成する
- Azure サブスクリプション:Azure サブスクリプションをお持ちでない場合は、開始する前に無料アカウントを作成してください。
Terraform の構成: まだ行っていない場合は、次のいずれかのオプションを使用して Terraform を構成します。
- GitHub アカウント: テスト GitHub リポジトリをフォークして使用するには、GitHub アカウントが必要です。
2. Terraform プランを作成して適用する
Azure ポータルにアクセスします。
Azure Cloud Shell を開きます。 前に環境を選択しなかった場合、環境として Bash を選択します。
ディレクトリを
clouddrive
ディレクトリに変更します。cd clouddrive
deploy
という名前のディレクトリを作成します。mkdir deploy
swap
という名前のディレクトリを作成します。mkdir swap
ls
bash コマンドを使用し、両方のディレクトリが正常に作成されたことを確認します。ディレクトリを
deploy
ディレクトリに変更します。cd deploy
Cloud Shell で、
deploy.tf
という名前のファイルを作成します。code deploy.tf
次のコードをエディターに挿入します。
# Configure the Azure provider provider "azurerm" { # The "feature" block is required for AzureRM provider 2.x. # If you're using version 1.x, the "features" block is not allowed. version = "~>2.0" features {} } resource "azurerm_resource_group" "slotDemo" { name = "slotDemoResourceGroup" location = "westus2" } resource "azurerm_app_service_plan" "slotDemo" { name = "slotAppServicePlan" location = azurerm_resource_group.slotDemo.location resource_group_name = azurerm_resource_group.slotDemo.name sku { tier = "Standard" size = "S1" } } resource "azurerm_app_service" "slotDemo" { name = "slotAppService" location = azurerm_resource_group.slotDemo.location resource_group_name = azurerm_resource_group.slotDemo.name app_service_plan_id = azurerm_app_service_plan.slotDemo.id } resource "azurerm_app_service_slot" "slotDemo" { name = "slotAppServiceSlotOne" location = azurerm_resource_group.slotDemo.location resource_group_name = azurerm_resource_group.slotDemo.name app_service_plan_id = azurerm_app_service_plan.slotDemo.id app_service_name = azurerm_app_service.slotDemo.name }
ファイルを保存し (<Ctrl>S キー)、エディターを終了します (<Ctrl>Q キー)。
これでファイルが作成されたので、その内容を確認してください。
cat deploy.tf
Terraform を初期化します。
terraform init
Terraform プランを作成します。
terraform plan
deploy.tf
構成ファイルに定義されているリソースをプロビジョニングします。 (プロンプトにyes
と入力してアクションを確認します)。terraform apply
Cloud Shell ウィンドウを閉じます。
Azure Portal のメイン メニューで、[リソース グループ] を選択します。
[リソース グループ] タブで、[slotDemoResourceGroup] を選択します。
Terraform によって作成されたすべてのリソースが表示されます。
3. テスト プロジェクトをフォークする
デプロイ スロットの作成、スワップ イン、スワップ アウトをテストする前に、GitHub のテスト プロジェクトをフォークする必要があります。
GitHub 上にある awesome-terraform リポジトリにアクセスします。
awesome-terraform リポジトリをフォークします。
環境に合わせて、プロンプトに従ってフォークします。
4. GitHub からデプロイ スロットにデプロイする
テスト プロジェクト リポジトリをフォークしたら、次の手順でデプロイ スロットを構成します。
Azure Portal のメイン メニューで、[リソース グループ] を選択します。
[slotDemoResourceGroup] を選択します。
[slotAppService] を選択します。
[デプロイ オプション] を選択します。
[デプロイ オプション] タブで [ソースの選択] を選択し、[GitHub] を選択します。
Azure が接続し、すべてのオプションが表示されたら、[承認] を選択します。
[承認] タブで [承認] を選択し、Azure から GitHub アカウントにアクセスするために必要な資格情報を入力します。
Azure で GitHub の資格情報が検証されると、承認プロセスが完了したことを示すメッセージが表示されます。 [OK] を選択して [承認] タブを閉じます。
[組織の選択] を選択し、組織を選択します。
[プロジェクトの選択] を選択します。
[プロジェクトの選択] タブで awesome-terraform プロジェクトを選択します。
[ブランチの選択] を選択します。
[ブランチの選択] タブで [master] を選択します。
[デプロイ オプション] タブで [OK] を選択します。
この時点で、 運用スロットのデプロイが完了しました。 ステージング スロットをデプロイするには、次の変更を加えて前の手順を実行します。
手順 3 で、slotAppServiceSlotOne リソースを選択します。
手順 13 で、作業ブランチを選択します。
5. アプリのデプロイをテストする
前のセクションでは、GitHub の異なるブランチからデプロイするように slotAppService と slotAppServiceSlotOne の 2 つのスロットを設定しました。 Web アプリケーションをプレビューして、正常にデプロイされたことを確認しましょう。
Azure Portal のメイン メニューで、[リソース グループ] を選択します。
[slotDemoResourceGroup] を選択します。
[slotAppService] または [slotAppServiceSlotOne] を選択します。
[概要] ページで [URL] を選択します。
選択したアプリに応じて、次の結果が表示されます。
- slotAppService Web アプリ - ページ タイトルが Slot Demo App 1 という青色のページです。
- slotAppServiceSlotOne Web アプリ - ページ タイトルが Slot Demo App 2 という緑色のページです。
6. 2 つのデプロイ スロットを入れ替える
2 つのデプロイ スロットのスワップをテストするには、次の手順を実行します。
slotAppService (ページが青色のアプリケーション) を実行しているブラウザー タブに切り替えます。
別のタブで Azure Portal に戻ります。
Cloud Shell を開きます。
ディレクトリを clouddrive/swap ディレクトリに変更します。
cd clouddrive/swap
Cloud Shell で、
swap.tf
という名前のファイルを作成します。code swap.tf
次のコードをエディターに挿入します。
# Configure the Azure provider provider "azurerm" { # The "feature" block is required for AzureRM provider 2.x. # If you're using version 1.x, the "features" block is not allowed. version = "~>2.0" features {} } # Swap the production slot and the staging slot resource "azurerm_app_service_active_slot" "slotDemoActiveSlot" { resource_group_name = "slotDemoResourceGroup" app_service_name = "slotAppService" app_service_slot_name = "slotappServiceSlotOne" }
ファイルを保存し (<Ctrl>S キー)、エディターを終了します (<Ctrl>Q キー)。
Terraform を初期化します。
terraform init
Terraform プランを作成します。
terraform plan
swap.tf
構成ファイルに定義されているリソースをプロビジョニングします。 (プロンプトにyes
と入力してアクションを確認します)。terraform apply
Terraform がスロットをスワップしたら、ブラウザーに戻ります。 ページを更新します。
slotAppServiceSlotOne ステージング スロットの Web アプリは、production スロットとスワップされ、緑色にレンダリングされます。
アプリの元の production バージョンに戻るには、swap.tf
構成ファイルから作成した Terraform プランを再適用します。
terraform apply
アプリがスワップされると、元の構成が表示されます。
Azure での Terraform のトラブルシューティング
Azure で Terraform を使用する場合の一般的な問題のトラブルシューティング