Aracılığıyla paylaş


ARM ve Bicep ile dağıtımları yürütmek için kapsayıcı görüntüsünü yapılandırma

Bu makalede, azure dağıtım ortamlarında (ADE) ortam tanımlarınızı dağıtmak için özel Azure Resource Manager (ARM) ve Bicep kapsayıcı görüntüleri oluşturmayı öğreneceksiniz.

Ortam tanımı en az iki dosyadan oluşur: azuredeploy.json veya main.bicep gibi bir şablon dosyası ve environment.yaml adlı bir bildirim dosyası. ADE, ortam tanımlarını dağıtmak için kapsayıcıları kullanır ve ARM ve Bicep IaC çerçevelerini yerel olarak destekler.

ADE genişletilebilirlik modeli, ortam tanımlarınızla birlikte kullanmak üzere özel kapsayıcı görüntüleri oluşturmanıza olanak tanır. Genişletilebilirlik modelini kullanarak kendi özel kapsayıcı görüntülerinizi oluşturabilir ve DockerHub gibi bir kapsayıcı kayıt defterinde depolayabilirsiniz. Ardından ortam tanımlarınızda bu görüntülere başvurarak ortamlarınızı dağıtabilirsiniz.

ADE ekibi, başlangıç için çekirdek görüntü ve Azure Resource Manager (ARM)/Bicep görüntüsü dahil olmak üzere çeşitli görüntüler sağlar. Bu örnek görüntülere Runner-Images klasöründen erişebilirsiniz.

Önkoşullar

ADE ile kapsayıcı görüntülerini kullanma

ADE ile kapsayıcı görüntülerini kullanmak için aşağıdaki yaklaşımlardan birini kullanabilirsiniz:

  • Standart kapsayıcı görüntüsünü kullanın: Basit senaryolar için ADE tarafından sağlanan standart Bicep kapsayıcı görüntüsünü kullanın.
  • Özel kapsayıcı görüntüsü oluşturma: Daha karmaşık senaryolar için, özel gereksinimlerinizi karşılayan bir özel kapsayıcı görüntüsü oluşturun.

Hangi yaklaşımı seçerseniz seçin, Azure kaynaklarınızı dağıtmak için ortam tanımınızda kapsayıcı görüntüsünü belirtmeniz gerekir.

Standart Bicep kapsayıcı görüntüsünü kullanma

ADE, Bicep'i yerel olarak desteklediğinden, şablon dosyalarını (azuredeploy.json ve environment.yaml) kataloğunuza ekleyerek dağıtım ortamı için Azure kaynaklarını dağıtan bir ortam tanımı yapılandırabilirsiniz. Ardından ADE, dağıtım ortamını oluşturmak için standart Bicep kapsayıcı görüntüsünü kullanır.

environment.yaml dosyasında runner özelliği, kullanmak istediğiniz kapsayıcı görüntüsünün konumunu belirtir. Microsoft Yapıt Kayıt Defteri yayımlanan örnek görüntüyü kullanmak için, aşağıdaki tabloda listelendiği gibi ilgili tanımlayıcı çalıştırıcısını kullanın.

Aşağıdaki örnekte, örnek Bicep kapsayıcı görüntüsüne başvuran bir çalıştırıcı gösterilmektedir:

    name: WebApp
    version: 1.0.0
    summary: Azure Web App Environment
    description: Deploys a web app in Azure without a datastore
    runner: Bicep
    templatePath: azuredeploy.json

STANDART Bicep kapsayıcı görüntüsünü ARM-Bicep görüntüsünün Runner-Images klasörünün altındaki ADE örnek deposunda görebilirsiniz.

Azure kaynaklarınızı dağıtmak için ADE kapsayıcı görüntülerini kullanan ortam tanımları oluşturma hakkında daha fazla bilgi için bkz . Ortam tanımı ekleme ve yapılandırma.

Özel bicep kapsayıcı görüntüsü oluşturma

Özel kapsayıcı görüntüsü oluşturmak, dağıtımlarınızı gereksinimlerinize uyacak şekilde özelleştirmenize olanak tanır. ADE standart kapsayıcı görüntülerini temel alan özel görüntüler oluşturabilirsiniz.

Görüntü özelleştirmeyi tamamladıktan sonra görüntüyü derlemeniz ve kapsayıcı kayıt defterinize göndermeniz gerekir.

Docker ile kapsayıcı görüntüsü oluşturma ve özelleştirme

Bu örnekte, ADE dağıtımlarını kullanmak ve ADE CLI'ya erişmek için bir Docker görüntüsü oluşturmayı ve görüntünüzü ADE tarafından yazılan görüntülerden birini temel alan bir görüntü oluşturmayı öğreneceksiniz.

ADE CLI, ADE temel görüntülerini kullanarak özel görüntüler oluşturmanıza olanak tanıyan bir araçtır. Dağıtımlarınızı ve silme işlemlerinizi iş akışınıza uyacak şekilde özelleştirmek için ADE CLI'yi kullanabilirsiniz. ADE CLI, örnek görüntülere önceden yüklenmiştir. ADE CLI hakkında daha fazla bilgi edinmek için bkz . CLI Özel Çalıştırıcı Görüntüsü başvurusu.

ADE için yapılandırılmış bir görüntü oluşturmak için şu adımları izleyin:

  1. FROM deyimini kullanarak resminizi ADE tarafından yazılmış bir örnek görüntüye veya istediğiniz görüntüye dayandırın.
  2. RUN deyimini kullanarak görüntünüz için gerekli paketleri yükleyin.
  3. Dockerfile'ınız ile aynı düzeyde bir betik klasörü oluşturun, deploy.sh ve delete.sh dosyalarınızı içinde depolayın ve bu betiklerin oluşturduğunuz kapsayıcıda bulunabilir ve yürütülebilir olduğundan emin olun. Bu adım, dağıtımınızın ADE çekirdek görüntüsünü kullanarak çalışması için gereklidir.

FROM deyimini kullanarak örnek bir kapsayıcı görüntüsü seçin

Yeni görüntünüz için oluşturulan bir DockerFile içine, Microsoft Yapıt Kayıt Defteri üzerinde barındırılan örnek görüntüyü gösteren bir FROM deyimi ekleyin.

Örnek çekirdek görüntüye başvuran bir FROM deyimi örneği aşağıda verilmişti:

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

Bu deyim, en son yayımlanan çekirdek görüntüyü çeker ve özel görüntünüz için temel oluşturur.

Bicep'i Dockerfile'a yükleme

Aşağıdaki örnekte gösterildiği gibi RUN deyimini kullanarak Azure CLI ile Bicep paketini yükleyebilirsiniz:

RUN az bicep install

ADE örnek görüntüleri Azure CLI görüntüsünü temel alır ve ADE CLI ve JQ paketlerinin önceden yüklenmiş olması gerekir. Azure CLI ve JQ paketi hakkında daha fazla bilgi edinebilirsiniz.

Görüntünüze ihtiyacınız olan diğer paketleri yüklemek için RUN deyimini kullanın.

İşlem kabuğu betiklerini yürütme

Örnek görüntülerde işlemler, işlem adına göre belirlenir ve yürütülür. Şu anda, desteklenen iki işlem adı dağıtılır ve silinir.

Özel görüntünüzü bu yapıyı kullanacak şekilde ayarlamak için Betikler adlı Dockerfile dosyanızın düzeyinde bir klasör belirtin ve deploy.sh ve delete.sh olmak üzere iki dosya belirtin. Dağıtım kabuğu betiği, ortamınız oluşturulduğunda veya yeniden dağıtıldığında ve sil kabuk betiği ortamınız silindiğinde çalıştırıldığında çalışır. ARM-Bicep görüntüsünün Runner-Images klasörünün altındaki depoda kabuk betiklerinin örneklerini görebilirsiniz.

Bu kabuk betiklerinin yürütülebilir olduğundan emin olmak için Dockerfile dosyanıza aşağıdaki satırları ekleyin:

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

ARM veya Bicep şablonlarını dağıtmak için işlem kabuğu betikleri yazma

ARM veya Bicep altyapısını ADE aracılığıyla başarıyla dağıtabileceğinizden emin olmak için şunları yapmalısınız:

  • ADE parametrelerini ARM tarafından kabul edilebilir parametrelere dönüştürme
  • Bağlı şablonlar dağıtımda kullanılıyorsa çözümleyin
  • Dağıtımı gerçekleştirmek için ayrıcalıklı yönetilen kimlik kullanma

Çekirdek görüntünün giriş noktası sırasında, geçerli ortam için ayarlanan tüm parametreler değişkeni $ADE_OPERATION_PARAMETERSaltında depolanır. Bunları ARM tarafından kabul edilebilir parametrelere dönüştürmek için JQ kullanarak aşağıdaki komutu çalıştırabilirsiniz:

# format the parameters as arm parameters
deploymentParameters=$(echo "$ADE_OPERATION_PARAMETERS" | jq --compact-output '{ "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentParameters.json#", "contentVersion": "1.0.0.0", "parameters": (to_entries | if length == 0 then {} else (map( { (.key): { "value": .value } } ) | add) end) }' )

Ardından, ARM JSON tabanlı bir şablonda kullanılan bağlantılı şablonları çözmek için, birçok Bicep modülünde kullanılan tüm yerel altyapı dosyalarını çözümleyen ana şablon dosyasının kodunu çözebilirsiniz. Ardından, ana ARM şablonuna iç içe yerleştirilmiş şablonlar olarak eklenmiş bağlantılı şablonlarla bu modülleri tek bir ARM şablonuna yeniden derleyin. Bu adım yalnızca dağıtım işlemi sırasında gereklidir. Ana şablon dosyası, çekirdek görüntünün giriş noktası sırasında kümesi kullanılarak $ADE_TEMPLATE_FILE belirtilebilir ve bu değişkeni yeniden derlenmiş şablon dosyasıyla sıfırlamanız gerekir. Aşağıdaki örneğe bakın:

if [[ $ADE_TEMPLATE_FILE == *.json ]]; then

    hasRelativePath=$( cat $ADE_TEMPLATE_FILE | jq '[.. | objects | select(has("templateLink") and (.templateLink | has("relativePath")))] | any' )

    if [ "$hasRelativePath" = "true" ]; then
        echo "Resolving linked ARM templates"

        bicepTemplate="${ADE_TEMPLATE_FILE/.json/.bicep}"
        generatedTemplate="${ADE_TEMPLATE_FILE/.json/.generated.json}"

        az bicep decompile --file "$ADE_TEMPLATE_FILE"
        az bicep build --file "$bicepTemplate" --outfile "$generatedTemplate"

        # Correctly reassign ADE_TEMPLATE_FILE without the $ prefix during assignment
        ADE_TEMPLATE_FILE="$generatedTemplate"
    fi
fi

Bir dağıtımın abonelik içindeki kaynakların dağıtımını ve silinmesini yürütmesi için gereken izinleri sağlamak için ADE proje ortamı türüyle ilişkili ayrıcalıklı yönetilen kimliği kullanın. Dağıtımınızın tamamlanması için belirli roller gibi özel izinler gerekiyorsa, bu rolleri proje ortamı türünün kimliğine atayın. Bazen kapsayıcıya girerken yönetilen kimlik hemen kullanılamaz; oturum açma başarılı olana kadar yeniden deneyebilirsiniz.

echo "Signing into Azure using MSI"
while true; do
    # managed identity isn't available immediately
    # we need to do retry after a short nap
    az login --identity --allow-no-subscriptions --only-show-errors --output none && {
        echo "Successfully signed into Azure"
        break
    } || sleep 5
done

ARM veya Bicep şablonlarının dağıtımına başlamak için komutunu çalıştırın az deployment group create . Bu komutu kapsayıcı içinde çalıştırırken, geçmiş dağıtımları geçersiz kılmayan bir dağıtım adı seçin ve aşağıdaki örnekte gösterildiği gibi dağıtımın --no-prompt true hiçbir uyarıda başarısız olmamasını veya kullanıcı girişini beklemeyi beklememesini sağlamak için ve --only-show-errors bayraklarını kullanın:

deploymentName=$(date +"%Y-%m-%d-%H%M%S")
az deployment group create --subscription $ADE_SUBSCRIPTION_ID \
    --resource-group "$ADE_RESOURCE_GROUP_NAME" \
    --name "$deploymentName" \
    --no-prompt true --no-wait \
    --template-file "$ADE_TEMPLATE_FILE" \
    --parameters "$deploymentParameters" \
    --only-show-errors

Bir ortamı silmek için, complete modu dağıtımı gerçekleştirin ve aşağıdaki örnekte gösterildiği gibi belirtilen ADE kaynak grubu içindeki tüm kaynakları kaldıran boş bir ARM şablonu sağlayın:

deploymentName=$(date +"%Y-%m-%d-%H%M%S")
az deployment group create --resource-group "$ADE_RESOURCE_GROUP_NAME" \
    --name "$deploymentName" \
    --no-prompt true --no-wait --mode Complete \
    --only-show-errors \
    --template-file "$DIR/empty.json"

Aşağıdaki komutları çalıştırarak sağlama durumunu ve ayrıntılarını de kontrol edebilirsiniz. ADE, Runner-Images klasöründe bulabileceğiniz sağlama ayrıntılarına göre daha fazla bağlam okumak ve daha fazla bağlam sağlamak için bazı özel işlevler kullanır. Basit bir uygulama aşağıdaki gibi olabilir:

if [ $? -eq 0 ]; then # deployment successfully created
    while true; do

        sleep 1

        ProvisioningState=$(az deployment group show --resource-group "$ADE_RESOURCE_GROUP_NAME" --name "$deploymentName" --query "properties.provisioningState" -o tsv)
        ProvisioningDetails=$(az deployment operation group list --resource-group "$ADE_RESOURCE_GROUP_NAME" --name "$deploymentName")

        echo "$ProvisioningDetails"

        if [[ "CANCELED|FAILED|SUCCEEDED" == *"${ProvisioningState^^}"* ]]; then

            echo -e "\nDeployment $deploymentName: $ProvisioningState"

            if [[ "CANCELED|FAILED" == *"${ProvisioningState^^}"* ]]; then
                exit 11
            else
                break
            fi
        fi
    done
fi

Son olarak, dağıtımınızın çıkışlarını görüntülemek ve bunları Azure CLI aracılığıyla erişilebilir hale getirmek üzere ADE'ye geçirmek için aşağıdaki komutları çalıştırabilirsiniz:

deploymentOutput=$(az deployment group show -g "$ADE_RESOURCE_GROUP_NAME" -n "$deploymentName" --query properties.outputs)
if [ -z "$deploymentOutput" ]; then
    deploymentOutput="{}"
fi
echo "{\"outputs\": $deploymentOutput}" > $ADE_OUTPUTS

Özel görüntüyü ADE için erişilebilir hale getirme

Docker görüntünüzü oluşturmanız ve ADE'de kullanılabilir hale getirmek için kapsayıcı kayıt defterinize göndermeniz gerekir. Görüntünüzü Docker CLI kullanarak veya ADE tarafından sağlanan bir betik kullanarak oluşturabilirsiniz.

Her yaklaşım hakkında daha fazla bilgi edinmek için uygun sekmeyi seçin.

Kayıt defterinize göndermek üzere görüntüyü derlemeden önce Docker Altyapısı'nın bilgisayarınızda yüklü olduğundan emin olun. Ardından Dockerfile dizininize gidin ve aşağıdaki komutu çalıştırın:

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

Örneğin, görüntünüzü adlı customImagekayıt defterinizdeki bir deponun altına kaydetmek ve etiket sürümüyle 1.0.0karşıya yüklemek istiyorsanız şunu çalıştırabilirsiniz:

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

Docker görüntüsünü kayıt defterine gönderme

Özel görüntüleri kullanmak için anonim görüntü çekme özelliğinin etkinleştirildiği genel olarak erişilebilir bir görüntü kayıt defteri ayarlamanız gerekir. Bu şekilde, Azure Dağıtım Ortamları kapsayıcımızda yürütmek üzere özel görüntünüze erişebilir.

Azure Container Registry, kapsayıcı görüntülerini ve benzer yapıtları depolayan bir Azure teklifidir.

Azure CLI, Azure portalı, PowerShell komutları ve daha fazlası aracılığıyla gerçekleştirilebilecek bir kayıt defteri oluşturmak için hızlı başlangıçlardan birini izleyin.

Kayıt defterinizi anonim görüntü çekme özelliğinin etkinleştirildiği şekilde ayarlamak için Azure CLI'da aşağıdaki komutları çalıştırın:

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

Görüntünüzü kayıt defterinize göndermeye hazır olduğunuzda aşağıdaki komutu çalıştırın:

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

Görüntüyü ortam tanımınıza bağlama

Dağıtımlarında özel görüntünüzü kullanmak için ortam tanımları yazarken bildirim dosyasındaki (environment.yaml veya manifest.yaml) özelliğini düzenleyin runner .

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

Azure kaynaklarınızı dağıtmak için ADE kapsayıcı görüntülerini kullanan ortam tanımları oluşturma hakkında daha fazla bilgi edinmek için bkz . Ortam tanımı ekleme ve yapılandırma.

Erişim işlemi günlükleri ve hata ayrıntıları

ADE, başarısız bir dağıtımın hata ayrıntılarını kapsayıcı içindeki $ADE_ERROR_LOG dosyasında depolar.

Başarısız bir dağıtımın sorunlarını gidermek için:

  1. Geliştirici Portalı'nda oturum açın.

  2. Dağıtamayan ortamı belirleyin ve Ayrıntılara bakın'ı seçin.

    Başarısız dağıtım hata ayrıntılarını, özellikle de bir depolama hesabı için geçersiz bir adı gösteren ekran görüntüsü.

  3. Hata Ayrıntıları bölümündeki hata ayrıntılarını gözden geçirin.

    Ayrıntıları Görüntüle düğmesinin görüntülendiği bir ortamın başarısız dağıtımını gösteren ekran görüntüsü.

Ayrıca, aşağıdaki komutu kullanarak bir ortamın hata ayrıntılarını görüntülemek için Azure CLI'yı kullanabilirsiniz:

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

Bir ortam dağıtımı veya silme işleminin işlem günlüklerini görüntülemek için Azure CLI'yı kullanarak ortamınıza yönelik en son işlemi alın ve ardından bu işlem kimliğinin günlüklerini görüntüleyin.

# 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}