使用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です。)
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サービスの名前
3. 补充
关于3-1的服务主体
按照下图所示,Azure采用了层级结构。在订阅层下创建并授予Terraform所需的服务主体,就可以创建下属的资源组和Azure资源。
Azure 订阅,管理组,资源概述
您可以在Azure门户中通过从“Azure Active Directory”到“应用注册”来查看服务主体。
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