Bagikan melalui


Mengonfigurasi gambar kontainer untuk menjalankan penyebaran dengan Terraform

Dalam artikel ini, Anda mempelajari cara membuat gambar kontainer Terraform kustom untuk menyebarkan definisi lingkungan Anda di Azure Deployment Environments (ADE). Anda mempelajari cara mengonfigurasi gambar kustom untuk menyediakan infrastruktur menggunakan kerangka kerja Terraform Infrastructure-as-Code (IaC).

Definisi lingkungan terdiri dari setidaknya dua file: file templat, seperti main.tf, dan file manifes bernama environment.yaml. Anda menggunakan kontainer untuk menyebarkan definisi lingkungan yang menggunakan Terraform.

Model ekstensibilitas ADE memungkinkan Anda membuat gambar kontainer kustom untuk digunakan dengan definisi lingkungan Anda. Dengan menggunakan model ekstensibilitas, Anda dapat membuat gambar kontainer kustom Anda sendiri, dan menyimpannya dalam registri kontainer seperti DockerHub. Anda kemudian dapat mereferensikan gambar-gambar ini dalam definisi lingkungan Anda untuk menyebarkan lingkungan Anda.

Prasyarat

Membuat gambar kontainer Terraform kustom

Membuat gambar kontainer kustom memungkinkan Anda menyesuaikan penyebaran agar sesuai dengan kebutuhan Anda.

Setelah menyelesaikan kustomisasi gambar, Anda harus membangun gambar dan mendorongnya ke registri kontainer Anda.

Membuat dan menyesuaikan gambar kontainer dengan Docker

Dalam contoh ini, Anda mempelajari cara membuat gambar Docker untuk menggunakan penyebaran ADE dan mengakses ADE CLI, mendasarkan gambar Anda pada salah satu gambar yang ditulis ADE.

ADE CLI adalah alat yang memungkinkan Anda membuat gambar kustom dengan menggunakan gambar dasar ADE. Anda dapat menggunakan ADE CLI untuk menyesuaikan penyebaran dan penghapusan agar sesuai dengan alur kerja Anda. ADE CLI telah diinstal sebelumnya pada gambar sampel. Untuk mempelajari selengkapnya tentang CLI ADE, lihat referensi Gambar Runner Kustom CLI.

Untuk membuat gambar yang dikonfigurasi untuk ADE, ikuti langkah-langkah berikut:

  1. Dasarkan gambar Anda pada gambar sampel yang ditulis ADE atau gambar pilihan Anda dengan menggunakan pernyataan FROM.
  2. Instal paket yang diperlukan untuk gambar Anda dengan menggunakan pernyataan RUN.
  3. Buat folder skrip pada tingkat yang sama dengan Dockerfile Anda, simpan file deploy.sh dan delete.sh Anda di dalamnya, dan pastikan skrip tersebut dapat ditemukan dan dapat dieksekusi di dalam kontainer yang Anda buat. Langkah ini diperlukan agar penyebaran Anda berfungsi menggunakan gambar inti ADE.

Pilih gambar kontainer sampel dengan menggunakan pernyataan FROM

Sertakan pernyataan FROM dalam DockerFile yang dibuat untuk gambar baru Anda yang menunjuk ke gambar sampel yang dihosting di Registri Artefak Microsoft.

Berikut adalah contoh pernyataan FROM, yang merujuk gambar inti sampel:

FROM mcr.microsoft.com/deployment-environments/runners/core:latest

Pernyataan ini menarik gambar inti yang terakhir diterbitkan, dan menjadikannya dasar untuk gambar kustom Anda.

Menginstal Terraform di Dockerfile

Anda dapat menginstal Terraform CLI ke lokasi yang dapat dieksekusi sehingga dapat digunakan dalam skrip penyebaran dan penghapusan Anda.

Berikut adalah contoh proses tersebut, menginstal versi 1.7.5 dari Terraform CLI:

RUN wget -O terraform.zip https://releases.hashicorp.com/terraform/1.7.5/terraform_1.7.5_linux_amd64.zip
RUN unzip terraform.zip && rm terraform.zip
RUN mv terraform /usr/bin/terraform

Tip

Anda bisa mendapatkan URL unduhan untuk versi CLI Terraform pilihan Anda dari rilis Hashicorp.

Gambar sampel ADE didasarkan pada gambar Azure CLI, dan memiliki paket ADE CLI dan JQ yang telah diinstal sebelumnya. Anda dapat mempelajari selengkapnya tentang Azure CLI, dan paket JQ.

Untuk menginstal paket lain yang Anda butuhkan dalam gambar Anda, gunakan pernyataan RUN.

Menjalankan skrip shell operasi

Dalam gambar sampel, operasi ditentukan dan dijalankan berdasarkan nama operasi. Saat ini, dua nama operasi yang didukung disebarkan dan dihapus.

Untuk menyiapkan gambar kustom Anda untuk menggunakan struktur ini, tentukan folder di tingkat skrip bernama Dockerfile Anda, dan tentukan dua file, deploy.sh, dan delete.sh. Skrip shell penyebaran berjalan saat lingkungan Anda dibuat atau disebarkan ulang, dan skrip shell penghapusan berjalan saat lingkungan Anda dihapus. Anda dapat melihat contoh skrip shell di repositori di bawah folder Runner-Images untuk gambar ARM-Bicep .

Untuk memastikan skrip shell ini dapat dieksekusi, tambahkan baris berikut ke Dockerfile Anda:

COPY scripts/* /scripts/
RUN find /scripts/ -type f -iname "*.sh" -exec dos2unix '{}' '+'
RUN find /scripts/ -type f -iname "*.sh" -exec chmod +x {} \;

Skrip shell operasi penulis untuk menggunakan Terraform CLI

Ada tiga langkah untuk menyebarkan infrastruktur melalui Terraform:

  1. terraform init - menginisialisasi Terraform CLI untuk melakukan tindakan dalam direktori kerja
  2. terraform plan- mengembangkan rencana berdasarkan file dan variabel infrastruktur Terraform yang masuk, dan file status yang ada, dan mengembangkan langkah-langkah yang diperlukan untuk membuat atau memperbarui infrastruktur yang ditentukan dalam file .tf
  3. terraform apply - menerapkan rencana untuk membuat infrastruktur baru atau memperbarui infrastruktur yang sudah ada di Azure

Selama titik masuk gambar inti, file status yang ada ditarik ke dalam kontainer dan direktori yang disimpan di bawah variabel $ADE_STORAGElingkungan . Selain itu, parameter apa pun yang diatur untuk lingkungan saat ini yang disimpan di bawah variabel $ADE_OPERATION_PARAMETERS. Untuk mengakses file status yang ada, dan mengatur variabel Anda dalam file .tfvars.json , jalankan perintah berikut:

EnvironmentState="$ADE_STORAGE/environment.tfstate"
EnvironmentPlan="/environment.tfplan"
EnvironmentVars="/environment.tfvars.json"

echo "$ADE_OPERATION_PARAMETERS" > $EnvironmentVars

Selain itu, untuk menggunakan hak istimewa ADE untuk menyebarkan infrastruktur di dalam langganan Anda, skrip Anda perlu menggunakan Identitas Layanan Terkelola (MSI) saat menyediakan infrastruktur dengan menggunakan penyedia Terraform AzureRM. Jika penyebaran Anda memerlukan izin khusus untuk menyelesaikan penyebaran Anda, seperti peran tertentu, tetapkan izin tersebut ke identitas jenis lingkungan proyek yang digunakan untuk penyebaran lingkungan Anda. ADE mengatur variabel lingkungan yang relevan, seperti KLIEN, penyewa, dan ID langganan dalam titik masuk gambar inti, jadi jalankan perintah berikut untuk memastikan penyedia menggunakan ADE MSI:

export ARM_USE_MSI=true
export ARM_CLIENT_ID=$ADE_CLIENT_ID
export ARM_TENANT_ID=$ADE_TENANT_ID
export ARM_SUBSCRIPTION_ID=$ADE_SUBSCRIPTION_ID

Jika Anda memiliki variabel lain untuk dirujuk dalam templat Anda yang tidak ditentukan dalam parameter lingkungan Anda, atur variabel lingkungan menggunakan awalan TF_VAR. Daftar variabel lingkungan ADE yang disediakan disediakan referensi variabel CLI Lingkungan Penyebaran Azure. Contoh perintah tersebut bisa saja;

export TF_VAR_resource_group_name=$ADE_RESOURCE_GROUP_NAME
export TF_VAR_ade_env_name=$ADE_ENVIRONMENT_NAME
export TF_VAR_env_name=$ADE_ENVIRONMENT_NAME
export TF_VAR_ade_subscription=$ADE_SUBSCRIPTION_ID
export TF_VAR_ade_location=$ADE_ENVIRONMENT_LOCATION
export TF_VAR_ade_environment_type=$ADE_ENVIRONMENT_TYPE

Sekarang, Anda dapat menjalankan langkah-langkah yang tercantum sebelumnya untuk menginisialisasi Terraform CLI, menghasilkan rencana untuk penyediaan infrastruktur, dan menerapkan rencana selama skrip penyebaran Anda:

terraform init
terraform plan -no-color -compact-warnings -refresh=true -lock=true -state=$EnvironmentState -out=$EnvironmentPlan -var-file="$EnvironmentVars"
terraform apply -no-color -compact-warnings -auto-approve -lock=true -state=$EnvironmentState $EnvironmentPlan

Selama skrip penghapusan, Anda dapat menambahkan destroy bendera ke pembuatan paket untuk menghapus sumber daya yang ada, seperti yang ditunjukkan dalam contoh berikut:

terraform init
terraform plan -no-color -compact-warnings -destroy -refresh=true -lock=true -state=$EnvironmentState -out=$EnvironmentPlan -var-file="$EnvironmentVars"
terraform apply -no-color -compact-warnings -auto-approve -lock=true -state=$EnvironmentState $EnvironmentPlan

Terakhir, untuk membuat output penyebaran Anda diunggah dan dapat diakses saat mengakses lingkungan Anda melalui Azure CLI, ubah objek output dari Terraform ke format yang ditentukan ADE melalui paket JQ. Atur nilai ke variabel lingkungan $ADE_OUTPUTS, seperti yang ditunjukkan dalam contoh berikut:

tfOutputs=$(terraform output -state=$EnvironmentState -json)
# Convert Terraform output format to ADE format.
tfOutputs=$(jq 'walk(if type == "object" then 
            if .type == "bool" then .type = "boolean" 
            elif .type == "list" then .type = "array" 
            elif .type == "map" then .type = "object" 
            elif .type == "set" then .type = "array" 
            elif (.type | type) == "array" then 
                if .type[0] == "tuple" then .type = "array" 
                elif .type[0] == "object" then .type = "object" 
                elif .type[0] == "set" then .type = "array" 
                else . 
                end 
            else . 
            end 
        else . 
        end)' <<< "$tfOutputs")

echo "{\"outputs\": $tfOutputs}" > $ADE_OUTPUTS

Membuat gambar kustom dapat diakses oleh ADE

Anda harus membangun gambar Docker dan mendorongnya ke registri kontainer Anda untuk membuatnya tersedia untuk digunakan dalam ADE. Anda dapat membuat gambar menggunakan Docker CLI, atau dengan menggunakan skrip yang disediakan oleh ADE.

Pilih tab yang sesuai untuk mempelajari selengkapnya tentang setiap pendekatan.

Sebelum Anda membuat gambar untuk didorong ke registri Anda, pastikan Mesin Docker diinstal di komputer Anda. Kemudian, navigasikan ke direktori Dockerfile Anda, dan jalankan perintah berikut:

docker build . -t {YOUR_REGISTRY}.azurecr.io/{YOUR_REPOSITORY}:{YOUR_TAG}

Misalnya, jika Anda ingin menyimpan gambar Anda di bawah repositori dalam registri Anda bernama customImage, dan unggah dengan versi 1.0.0tag , Anda akan menjalankan:

docker build . -t {YOUR_REGISTRY}.azurecr.io/customImage:1.0.0

Mendorong gambar Docker ke registri

Untuk menggunakan gambar kustom, Anda perlu menyiapkan registri gambar yang dapat diakses publik dengan penarikan gambar anonim diaktifkan. Dengan cara ini, Lingkungan Penyebaran Azure dapat mengakses gambar kustom Anda untuk dijalankan dalam kontainer kami.

Azure Container Registry adalah penawaran Azure yang menyimpan gambar kontainer dan artefak serupa.

Untuk membuat registri, yang dapat dilakukan melalui Azure CLI, perintah portal Azure, PowerShell, dan lainnya, ikuti salah satu mulai cepat.

Untuk menyiapkan registri Anda agar penarikan gambar anonim diaktifkan, jalankan perintah berikut di Azure CLI:

az login
az acr login -n {YOUR_REGISTRY}
az acr update -n {YOUR_REGISTRY} --public-network-enabled true
az acr update -n {YOUR_REGISTRY} --anonymous-pull-enabled true

Saat Anda siap untuk mendorong gambar ke registri, jalankan perintah berikut:

docker push {YOUR_REGISTRY}.azurecr.io/{YOUR_IMAGE_LOCATION}:{YOUR_TAG}

Koneksi gambar ke definisi lingkungan Anda

Saat menulis definisi lingkungan untuk menggunakan gambar kustom Anda dalam penyebarannya, edit runner properti pada file manifes (environment.yaml atau manifest.yaml).

runner: "{YOUR_REGISTRY}.azurecr.io/{YOUR_REPOSITORY}:{YOUR_TAG}"

Mengakses log operasi dan detail kesalahan

ADE menyimpan detail kesalahan untuk penyebaran yang gagal dalam file $ADE_ERROR_LOG dalam kontainer.

Untuk memecahkan masalah penyebaran yang gagal:

  1. Masuk ke Portal Pengembang.

  2. Identifikasi lingkungan yang gagal disebarkan, dan pilih Lihat detail.

    Cuplikan layar memperlihatkan detail kesalahan penyebaran yang gagal, khususnya nama yang tidak valid untuk akun penyimpanan.

  3. Tinjau detail kesalahan di bagian Detail Kesalahan.

    Cuplikan layar memperlihatkan penyebaran lingkungan yang gagal dengan tombol Lihat Detail ditampilkan.

Selain itu, Anda dapat menggunakan Azure CLI untuk melihat detail kesalahan lingkungan menggunakan perintah berikut:

az devcenter dev environment show --environment-name {YOUR_ENVIRONMENT_NAME} --project {YOUR_PROJECT_NAME}

Untuk melihat log operasi untuk penyebaran atau penghapusan lingkungan, gunakan Azure CLI untuk mengambil operasi terbaru untuk lingkungan Anda, lalu lihat log untuk ID operasi tersebut.

# Get list of operations on the environment, choose the latest operation
az devcenter dev environment list-operation --environment-name {YOUR_ENVIRONMENT_NAME} --project {YOUR_PROJECT_NAME}
# Using the latest operation ID, view the operation logs
az devcenter dev environment show-logs-by-operation --environment-name {YOUR_ENVIRONMENT_NAME} --project {YOUR_PROJECT_NAME} --operation-id {LATEST_OPERATION_ID}