使用Terraform的服务主体,创建Web应用程序Azure.

首先

1-1 问候

初次见面,我是井村。
我使用Terraform的服务主体创建了Web Apps。
这篇文章主要介绍了如何创建服务主体以及Terraform的详细描述,并用于记录笔记。

1. 读者目标
2. 针对读者

    • Azureに興味がある

 

    Terrafomに興味がある

1-3 创建成果物的前提条件

Azureアカウントがある。

Azure CLIとTerraformがインストール済み。
※Azure CLIとTerraformの初期セットアップ

1-4 项成果

    • Terraform用のサービスプリンシパル

 

    下図のとおりリソースグループ、Azure App Service Plans、Web Appsを作成。(FreeプランのAzure App Service Plansです。)
SystemConfiguration.png

1-5 重塑目录结构

.
├── env
│   └── dev
│       ├── main.tf
│       ├── outputs.tf
│       ├── provider.tf
│       ├── terraform.tfvars
│       └── variable.tf
└── modules
    ├── app
    │   ├── main.tf
    │   ├── outputs.tf
    │   └── variables.tf
    ├── asp
    │   ├── main.tf
    │   ├── outputs.tf
    │   └── variables.tf
    └── rg
        ├── main.tf
        ├── outputs.tf
        └── variables.tf

源代码可以在GitHub上找到。
https://github.com/hawk0722/Azure_Terraform_03_webapp

2. 建立

创建2-1服务主体。

我将创建名为”sp-terra”的服务主体。
适用范围是订阅,权限将被设定为共同创建者。

执行以下命令以确认订阅ID。

az account show

记录下输出结果的订阅ID。

{
  "environmentName": 省略,
  "homeTenantId": 省略,
  "id": "<azure_subscription_id>",
  "isDefault": 省略,
  "managedByTenants": [],
  "name": 省略,
  "state": 省略,
  "tenantId": 省略,
  "user": {
    "name": 省略,
    "type": 省略
  }

用下面的命令创建服务主体。
※az ad sp create-for-rbac参考网址

az ad sp create-for-rbac --role Contributor --scopes "/subscriptions/<azure_subscription_id>" --name "sp-terra"

记住应用程序(客户端)的输出结果ID、目录(租户)ID和密码。

{
  "appId": "<azure_subscription_tenant_id>",
  "displayName": "sp-terra",
  "password": "<service_principal_password>",
  "tenant": "<service_principal_appid>"
}

为了将上述服务主体反映到Terraform中,需要下载所需的资源。

mkidir work
cd work
git clone https://github.com/hawk0722/Azure_Terraform_03_webapp.git

准备工作已经完成。

修正 terraform.tfvars 的 2-2 项。

本資料只修改“Azure_Terraform_03_webapp/env/dev/terraform.tfvars”文件。
根据第2-1步得到的每个ID和所需变量进行适当修改。

# azure service principal info
subscription_id = "<azure_subscription_id>"
tenant_id       = "<azure_subscription_tenant_id>"
client_id       = "<service_principal_appid>"
client_secret   = "<service_principal_password>"

# common
location = "japaneast"
env      = "dev"
code     = "hawk"

# App Service Plan
asp_os_type  = "Linux"
asp_sku_name = "F1"

# App Service
python_version = "3.9"

部署2-3个Azure资源。

执行以下命令以创建Azure资源。

# ルートモジュールへ移動
cd Azure_Terraform_03_webapp/env/dev

# ワークスペースを初期化する
terraform init

# 実行計画の参照
terraform plan

# リソースのデプロイ
terraform apply

确认行动2至4

我們將確認已部署的 Web Apps 的運作。
將以下的 URL 複製到本地端的瀏覽器中。

https://<app_name>.azurewebsites.net
※<app_name>はWeb Appsサービスの名前
webapp.png

3. 补充

关于3-1的服务主体

按照下图所示,Azure采用了层级结构。在订阅层下创建并授予Terraform所需的服务主体,就可以创建下属的资源组和Azure资源。

layer.png

Azure 订阅,管理组,资源概述

您可以在Azure门户中通过从“Azure Active Directory”到“应用注册”来查看服务主体。

app-reg.png

3-2 环境/开发/输出.tf

在这个文件中,我们将描述想要在终端上输出的内容。本次我们将输出部署的 Azure 服务的名称。

# Output to terminal screen.
output "rg_name" {
  value = module.rg.rg_name
}

output "app_name" {
  value = module.app.app_name
}

output "asp_name" {
  value = module.asp.asp_name
}

# リソースのデプロイ
terraform apply

~ 省略 ~

Apply complete! Resources: 3 added, 0 changed, 0 destroyed.

Outputs:

app_name = "app-dev-hawk"
asp_name = "asp-dev-hawk"
rg_name = "rg-dev-hawk"

有关每个文件中的变量传递的3-3的问题。

在我之前发布的文章(或者说是那篇文章相关的参考文章)中有提到。

4. 结束时

非常感谢您阅读本篇文章直到最后。
最近我在GitHub上分享了我自己创建的成果物。原因是我参与的项目在GitLab上进行文件版本管理。以前我没有接触过Git,但是因为项目中有一位对Git很熟悉的成员,所以我的工作并没有受到太大影响。现在Git已成为必备技能,所以我个人会利用个人时间进行练习。

在修复成果物时,创建一个分支、修复代码、推送并合并,这真是一件有趣的事情。

5. 参考文献

    • az ad sp create-for-rbac

 

    • Azure Terraform error: Service returned an error. Status= when creating an Azure Web App

 

    • terraform-provider-azurerm/examples/app-service/linux-basic/main.tf

 

    azurerm_linux_web_app
广告
将在 10 秒后关闭
bannerAds