Cvičení – zřízení prostředků Azure
V tomto cvičení nakonfigurujete pracovní postup automatizace pro zřízení prostředků Terraformu.
Přístup k ukázkové aplikaci
V tomto cvičení vytvoříte úložiště GitHub ze šablony, která obsahuje veškerý kód pro zřizování Terraformu.
Na GitHubu přejděte na hlavní stránku úložiště:
https://github.com/MicrosoftDocs/mslearn-java-petclinic-simplified
Nad seznamem souborů vyberte Použít tuto šablonu a pak vyberte Vytvořit nové úložiště.
Do pole Název úložiště zadejte jedinečný název úložiště. Nezapomeňte dodržovat zásady vytváření názvů pro úložiště GitHub.
Ujistěte se, že je vybraná možnost Soukromé , a pak vyberte Vytvořit úložiště.
Workflow
V adresáři projektu pro úložiště, které jste vytvořili, uvidíte adresář s názvem terraform a v něm soubor s názvem main.tf.
Podívejme se na několik částí, které můžete použít k definování konfigurace modulu:
- Zprostředkovatel: Konfigurační soubor Terraformu začíná specifikací poskytovatele. Při použití Azure zadáte poskytovatele Azure (
azurerm
) v bloku zprostředkovatele. - Terraform: Verze Terraformu, se kterou pracujete.
- Data: Získává data z existujících služeb.
- Místní hodnoty: Generuje nové proměnné pomocí funkcí a výrazů.
- Prostředek: Popisuje prostředky a závislosti.
- Modul: Reusability and complexity abstraction.
Abychom zřídili naši aplikaci a databázi, budeme muset zahrnout jenom oddíly Poskytovatel a Prostředek .
Dále otevřete soubor main.tf a prohlédněte si osnovu a komentáře:
provider "azurerm" {
version = "=2.20.0"
features {}
}
# Creates a resource group
resource "azurerm_resource_group" "main" {
name = var.resource_group
location = var.location
tags = {
"Terraform" = "true"
}
}
resource "random_password" "password" {
length = 32
special = true
override_special = "_%@"
}
# Creates a MySQL server
resource "azurerm_mysql_server" "main" {
name = "${azurerm_resource_group.main.name}-mysql-server"
location = azurerm_resource_group.main.location
resource_group_name = azurerm_resource_group.main.name
administrator_login = "petclinic"
administrator_login_password = random_password.password.result
sku_name = "B_Gen5_1"
storage_mb = 5120
version = "5.7"
auto_grow_enabled = true
backup_retention_days = 7
geo_redundant_backup_enabled = false
infrastructure_encryption_enabled = false
public_network_access_enabled = true
ssl_enforcement_enabled = true
ssl_minimal_tls_version_enforced = "TLS1_2"
}
# The database that your application will use
resource "azurerm_mysql_database" "main" {
name = "${azurerm_resource_group.main.name}_mysql_db"
resource_group_name = azurerm_resource_group.main.name
server_name = azurerm_mysql_server.main.name
charset = "utf8"
collation = "utf8_unicode_ci"
}
# Enables the 'Allow access to Azure services' check box
resource "azurerm_mysql_firewall_rule" "main" {
name = "${azurerm_resource_group.main.name}-mysql-firewall"
resource_group_name = azurerm_resource_group.main.name
server_name = azurerm_mysql_server.main.name
start_ip_address = "0.0.0.0"
end_ip_address = "0.0.0.0"
}
# Creates the plan that the service uses
resource "azurerm_app_service_plan" "main" {
name = "${var.application_name}-plan"
location = azurerm_resource_group.main.location
resource_group_name = azurerm_resource_group.main.name
kind = "Linux"
reserved = true
sku {
tier = "PremiumV2"
size = "P1v2"
}
}
# Creates the service definition
resource "azurerm_app_service" "main" {
name = var.application_name
location = azurerm_resource_group.main.location
resource_group_name = azurerm_resource_group.main.name
app_service_plan_id = azurerm_app_service_plan.main.id
https_only = true
site_config {
always_on = true
linux_fx_version = "JAVA|8-jre8"
}
# Contains application-specific environment variables
app_settings = {
"WEBSITES_ENABLE_APP_SERVICE_STORAGE" = "false"
"SPRING_PROFILES_ACTIVE" = "mysql"
"SPRING_DATASOURCE_URL" = "jdbc:mysql://${azurerm_mysql_server.main.fqdn}:3306/${azurerm_mysql_database.main.name}?useUnicode=true&characterEncoding=utf8&useSSL=true&useLegacyDatetimeCode=false&serverTimezone=UTC"
"SPRING_DATASOURCE_USERNAME" = "${azurerm_mysql_server.main.administrator_login}@${azurerm_mysql_server.main.name}"
"SPRING_DATASOURCE_PASSWORD" = azurerm_mysql_server.main.administrator_login_password
}
}
Nastavení pracovního postupu GitHub Actions pomocí Terraformu
Pojďme poskytnout přístup k vašemu účtu Azure pracovnímu postupu GitHubu.
V Azure CLI vytvořte instanční objekt spuštěním následujícího příkazu:
Důležité
Nahraďte <yourServicePrincipalName> názvem instančního objektu, který chcete použít.
az ad sp create-for-rbac --name "<yourServicePrincipalName>" --role contributor --scopes /subscriptions/<subscriptionId> --sdk-auth
Předchozí příkaz vrátí následující kód JSON. Zkopírujte ho pro použití v dalším kroku:
{
"clientId": "XXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXXX",
"clientSecret": "XXXXXXXXXXXXXXXXXXXXXXXXXXXXX",
"subscriptionId": "XXXXXXXXX-XXXXX-XXXX-XXXX-XXXXXXXXXXXXX",
"tenantId": "XXXXXXXX-XXXXX-XXXX-XXXX-XXXXXXXXXXX",
...
}
Tajné kódy GitHubu
Úložiště GitHub má funkci nazvanou Tajné kódy, ve které můžete ukládat citlivé informace, které Terraform používá k ověření v Azure.
Po vytvoření požadovaných ID a tajného kódu v předchozím kroku je dalším krokem v této lekci jejich přidání do úložiště tajných kódů v projektu GitHub.
V tomto cvičení je potřeba uložit následující tajné kódy:
AZURE_CLIENT_ID
AZURE_CLIENT_SECRET
AZURE_SUBSCRIPTION_ID
AZURE_TENANT_ID
Pokud chcete tajné kódy uložit, přejděte do svého forku úložiště GitHub, vyberte Nastavení a pak vyberte Tajné kódy a proměnné a pak v levém podokně vyberte Akce .
Vytvořte čtyři tajné kódy pomocí hodnot vrácených při vytváření instančního objektu.
Nezapomeňte uložit tajné kódy bez uvozovek (" ), jak je znázorněno na následujícím snímku obrazovky:
Soubor pracovního postupu
V adresáři projektu je adresář s názvem .github/workflows a v něm soubor s názvem main.yml.
Soubor main.yml je pracovní postup GitHubu. Používá tajný klíč, který jste nakonfigurovali k nasazení aplikace do předplatného Azure.
V souboru pracovního postupu main.yml najdete následující obsah:
name: TERRAFORM
on:
push:
branches: [ main ]
paths:
- 'terraform/**'
pull_request:
branches: [ main ]
paths:
- 'terraform/**'
workflow_dispatch:
jobs:
terraform:
runs-on: ubuntu-latest
env:
ARM_CLIENT_ID: ${{ secrets.AZURE_CLIENT_ID }}
ARM_CLIENT_SECRET: ${{secrets.AZURE_CLIENT_SECRET}}
ARM_SUBSCRIPTION_ID: ${{ secrets.AZURE_SUBSCRIPTION_ID }}
ARM_TENANT_ID: ${{ secrets.AZURE_TENANT_ID }}
defaults:
run:
working-directory: ./terraform
steps:
- uses: actions/checkout@v2
- name: Setup Terraform
uses: hashicorp/setup-terraform@v1
- name: Terraform Init
run: terraform init
- name: Terraform Plan
run: terraform plan
- name: Terraform Apply
run: terraform apply -auto-approve
Tento pracovní postup provede následující akce:
- Zkontroluje, jestli je konfigurace správně naformátovaná.
- Vygeneruje plán pro každou žádost o přijetí změn.
- Aktivuje konfiguraci při aktualizaci souborů v adresáři terraformu.
Poznámka:
Pracovní postup GitHub Actions můžete aktivovat také tak, že přejdete na Akce, vyberete pracovní postup Terraformu a vyberete Znovu spustit existující úlohy.
Aktivace pracovního postupu
V dalším kroku v úložišti aktivujte akci GitHubu:
V integrovaném textovém editoru GitHubu nebo v editoru podle vašeho výběru upravte terraform/variables.tf následujícím způsobem:
a. Změňte
"CHANGE_ME_RESOURCE_GROUP"
název požadované skupiny prostředků.
b. Změňte"CHANGE_ME_APP_NAME"
název požadované aplikace. Ujistěte se, že je název vaší aplikace jedinečný.variable "resource_group" { description = "The resource group" default = "CHANGE_ME_RESOURCE_GROUP" } variable "application_name" { description = "The Spring Boot application name" default = "CHANGE_ME_APP_NAME" } variable "location" { description = "The Azure location where all resources in this example should be created" default = "westeurope" }
Potvrďte provedené změny.
Ověření sestavení GitHub Actions
V úložišti vyberte Akce a pak v levém podokně vyberte pracovní postup TERRAFORMu .
V seznamu kroků ověřte, že se aktivovaly příkazy Terraform Init, Terraform Plan a Terraform Validate .
V seznamu kroků rozbalte Terraform Použít a ověřte, že:
Terraform vytvořil prostředky a zobrazí adresu URL instance Azure.
Vaše instance aplikace Azure je veřejně dostupná.
Další kroky
V dalším cvičení použijete GitHub Actions k nasazení ukázkové aplikace Spring Boot.
Nastavení názvu aplikace a skupiny prostředků Azure
V úložišti GitHub upravte názvy prostředků Azure následujícím způsobem:
V integrovaném textovém editoru GitHubu nebo v editoru podle vašeho výběru upravte terraform/variables.tf následujícím způsobem:
a. Změňte
"<CHANGE_ME_RESOURCE_GROUP>"
název požadované skupiny prostředků.
b. Změňte"<CHANGE_ME_APP_NAME>"
název požadované aplikace. Ujistěte se, že je název vaší aplikace jedinečný.variable "resource_group" { description = "The resource group" default = "<CHANGE_ME_RESOURCE_GROUP>" } variable "application_name" { description = "The Spring Boot application name" default = "CHANGE_ME_APP_NAME" } variable "location" { description = "The Azure location where all resources in this example should be created" default = "westeurope" }
Potvrzení změn
Vytvoření kanálu Azure pro zřízení prostředků Terraformu
V našem projektu Azure DevOps vytvoříme dva samostatné kanály pro zřizování a sestavení a nasazení. Kanál zřizování vytvoří prostředky Azure, které se uvolní prostřednictvím kanálu build-and-deploy v pozdějším bodě.
Pojďme vytvořit první kanál zřizování:
Zvolte svoji organizaci a pak vyberte Nový projekt.
Zadejte následující parametry.
Parametr Popis Název projektu Požadováno Popis Volitelné Viditelnost Zvolit soukromou Rozšířený Správa verzí Volba GITu Proces pracovní položky Zvolit základní Výběrem možnosti Vytvořit projekt vytvořte projekt a otevřete úvodní stránku.
Nastavení připojení ke službě Azure Pipeline Service
Pojďme vašemu účtu Azure udělit přístup ke svému účtu Azure.
V Azure DevOps otevřete stránku Připojení služby ze stránky nastavení projektu.
Zvolte Vytvořit připojení služby a vyberte Azure Resource Manager a pak vyberte Další.
Vyberte Instanční objekt (automatický) a pak vyberte Další.
Zadejte následující parametry.
Parametr Popis Úroveň oboru Výběr předplatného Azure Předplatné Výběr stávajícího předplatného Azure Skupina prostředků Pokud chcete uživatelům povolit přístup ke všem prostředkům definovaným v rámci předplatného, nechte prázdné. Název připojení Povinný: Název, který použijete k odkazu na toto připojení služby ve vlastnostech úlohy. Tento název není názvem vašeho předplatného Azure. Připojení vytvořte výběrem tlačítka Uložit.
Vytvoření kanálu zřizování
Důležité
Požadavky tohoto modulu vyžadují instalaci rozšíření Terraform Azure Pipelines. Pokud jste ho nenainstalovali, váš kanál se nespustí.
Po nastavení projektu a připojení k Azure budete muset vytvořit kanál Azure pro zřízení prostředků terraformu.
V Azure DevOps přejděte na svůj projekt, v nabídce vlevo vyberte Kanály a pak vyberte Vytvořit kanál.
- Na kartě Připojit vyberte GitHub (soubor YAML).
- Pokud se zobrazí výzva k autorizaci přístupu k GitHubu, zadejte své přihlašovací údaje GitHubu a schvalte přístup ke službě Azure Pipelines s požadovanými oprávněními.
- Na kartě Vybrat vyberte úložiště GitHub obsahující vaši šablonu.
- Na kartě Inventář vyberte Konfigurovat kanál.
- Na kartě Konfigurovat vyberte, jestli chcete použít existující soubor YAML služby Azure Pipelines.
- V cestě vyberte /azuredevops/provision.yml.
- Výběrem možnosti Pokračovat přejděte na kartu Revize a zkontrolujte kanál.
Na obrazovce Kontrola kanálu YAML zkontrolujeme soubor Yaml, který použijeme k vytvoření kanálu.
name: Provision Resources
trigger: none
pool:
vmImage: 'ubuntu-latest'
steps:
# Initialize the Terraform environment and bind to your Service Connection
- task: TerraformTaskV1@0
inputs:
provider: 'azurerm'
command: 'init'
workingDirectory: $(Build.Repository.LocalPath)/terraform
backendServiceArm: $(serviceConnection)
backendAzureRmResourceGroupName: $(serviceConnection)
backendAzureRmStorageAccountName: $(serviceConnection)
backendAzureRmContainerName: 'tfstate'
backendAzureRmKey: 'tf/terraform.tfstate'
# Apply the Terraform config and deploy to Azure
- task: TerraformTaskV1@0
inputs:
provider: 'azurerm'
command: 'apply'
workingDirectory: $(Build.Repository.LocalPath)/terraform
backendAzureRmContainerName: 'tfstate'
backendAzureRmKey: 'tf/terraform.tfstate'
environmentServiceNameAzureRM: $(serviceConnection)
Pojďme se podívat na některá pole, která používáme v konfiguraci:
- serviceConnection: Připojení služby Azure PipeLine, které jste předtím nastavili
- command: Your Terraform workflow command: init or apply
- backendAzure: Požadovaná pole potřebná v týmovém prostředí pro ukládání sdíleného stavu.\
Než kanál uložíte a spustíte, musíme přidat proměnnou, která vytvoří vazbu k vašemu připojení ke službě:
- Vyberte Proměnné (vpravo nahoře) a přidejte proměnnou s názvem "serviceConnection" s hodnotou jako názvem připojení služby.
- Výběrem tlačítka OK (pravý dolní roh) uložte proměnnou.
Nakonec výběrem možnosti Spustit (v pravém horním rohu) kanál uložte a spusťte.
Sledování spuštěného kanálu
V části Úlohy trasujte proces sestavení jednotlivými kroky.
Při spuštění kanálu sledujte jako první inicializační fázi Terraformu a pak druhou fázi použití přejděte z modré (spuštěné) na zelenou (dokončenou). Můžete vybrat fáze, které chcete sledovat kanál v akci.
Tip
Zkontrolujte si e-mail. Možná jste již obdrželi oznámení o sestavení s výsledky spuštění. Pomocí těchto oznámení můžete zjistit, jestli každé sestavení projde nebo selže.
Další kroky
V dalším cvičení použijete Azure Pipelines k sestavení a nasazení ukázkové aplikace Spring Boot.