Compartilhar via


Configurar uma imagem de contêiner para executar implantações

O ADE (Ambientes de Implantação do Azure) dá suporte a um modelo de extensibilidade que permite configurar sua definição de ambiente com sua estrutura de modelo de IaC preferida. É possível armazenar imagens personalizadas em um registro de contêiner, como o Registro de Contêiner do Azure (ACR) ou o Docker Hub e, em seguida, referenciá-las em suas definições de ambiente para implantar ambientes.

Nesse artigo, você aprenderá a criar imagens de contêiner Bicep personalizadas para implantar suas definições de ambiente no ADE. Você aprenderá a usar uma imagem padrão fornecida pela Microsoft ou como configurar uma infraestrutura de fornecimento de imagem personalizada usando a Infraestrutura como Código (IaC) Bicep.

Neste artigo, você aprenderá a criar imagens de contêiner Terraform personalizadas para criar ambientes de implantação com o ADE (Ambientes de Implantação Azure). Você aprenderá a configurar uma imagem personalizada para provisionar a infraestrutura usando a estrutura IaC (Infraestrutura como Código) do Terraform.

Neste artigo, você aprenderá a utilizar o Pulumi para implantações no ADE. Você aprenderá a usar uma imagem padrão fornecida pelo Pulumi ou como configurar uma imagem personalizada para provisionar a infraestrutura usando a Infraestrutura como Código (IaC) Pulumi.

Pré-requisitos

Usar imagens de contêiner com a ADE

Você pode adotar uma das seguintes abordagens para usar imagens de contêiner com o ADE:

  • Use uma imagem de contêiner padrão: Para cenários simples, use a imagem de contêiner ARM-Bicep padrão fornecida pelo ADE.
  • Crie uma imagem de contêiner personalizada Para cenários mais complexos, crie uma imagem de contêiner personalizada que atenda aos seus requisitos específicos.

Usar uma imagem de contêiner padrão

O ADE dá suporte ao ARM (Azure Resource Manager) e ao Bicep sem a necessidade de nenhuma configuração extra. Você pode criar uma definição de ambiente que implante recursos do Azure para um ambiente de implantação adicionando os arquivos de modelo (como azuredeploy.json e environment.yaml) ao seu catálogo. Em seguida, o ADE usa a imagem de contêiner ARM-Bicep padrão para criar o ambiente de implantação.

No arquivo environment.yaml, a propriedade runner especifica o local da imagem do contêiner que você deseja usar. Para usar a imagem padrão publicada no Registro de Artefato da Microsoft, use os respectivos identificadores runner.

O exemplo a seguir mostra um runner que faz referência à imagem do contêiner ARM-Bicep padrão:

    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

Pode visualizar a imagem do contentor Bicep padrão no repositório padrão do ADE na pasta Runner-Images para a imagem ARM-Bicep.

Para obter mais informações sobre como criar definições de ambiente que usam as imagens de contêiner do ADE para implantar seus recursos do Azure, consulte Adicionar e configurar uma definição de ambiente.

Criar uma imagem de contêiner personalizada

Criar uma imagem de contêiner personalizada usando um script

A criação de uma imagem de contêiner personalizada permite que você personalize suas implantações para atender às suas necessidades. Você pode criar e compilar uma imagem com base na imagem padrão do ADE e enviá-la por push para o registro de contêiner usando um script de início rápido fornecido pela Microsoft. Você pode encontrar o script no repositório Ambientes de Implantação. Para usar o script de início rápido, bifurque o repositório e execute o script localmente.

O script compila uma imagem e a envia por push para um ACR (Registro de Contêiner do Azure) especificado no repositório "ade" e na marca "latest". Esse script requer o nome e o diretório do registro da sua imagem personalizada, ter a CLI do Azure e o Docker Desktop instalados e em suas variáveis PATH e exigir que você tenha permissões para enviar por push para o registro especificado.

Para usar o script de início rápido para criar e enviar por push rapidamente essa imagem de exemplo para um Registro de Contêiner do Azure, você precisará:

  • Bifurque esse repositório em sua conta pessoal.
  • Verifique se a CLI do Azure e o aplicativo Docker Desktop estão instalados em seu computador e em suas variáveis PATH.
  • Verifique se você tem permissões para enviar imagens por push para o Registro de Contêiner do Azure selecionado.

Você pode chamar o script usando o seguinte comando no PowerShell:

.\quickstart-image-build.ps1 -Registry '{YOUR_REGISTRY}' -Directory '{DIRECTORY_TO_YOUR_IMAGE}'

Além disso, se você quiser enviar por push para um repositório específico e um nome de marca, poderá executar:

.\quickstart-image.build.ps1 -Registry '{YOUR_REGISTRY}' -Directory '{DIRECTORY_TO_YOUR_IMAGE}' -Repository '{YOUR_REPOSITORY}' -Tag '{YOUR_TAG}'

Para usar a imagem em suas implantações de ambiente, você precisa adicionar o local da imagem ao arquivo de manifesto, conectar a imagem à definição de ambiente e talvez seja necessário configurar permissões para que o ACR disponibilize a imagem personalizada para o ADE.

Usar imagens de contêiner com a ADE

Você pode adotar uma das seguintes abordagens para usar imagens de contêiner com o ADE:

  • Criar uma imagem de contêiner personalizada usando um script: use o script publicado para criar uma imagem específica do Terraform.
  • Criar uma imagem de contêiner personalizada aproveitando um fluxo de trabalho do GitHub: use o fluxo de trabalho publicado do GitHub no repositório Usar o modelo de extensibilidade do ADE com o Terraform.
  • Criar uma imagem de contêiner personalizada manualmente: crie uma imagem específica do Terraform personalizada manualmente

Criar uma imagem de contêiner personalizada

Criar uma imagem de contêiner personalizada usando um script

A criação de uma imagem de contêiner personalizada permite que você personalize suas implantações para atender às suas necessidades. Você pode compilar uma imagem com base na imagem padrão do ADE e enviá-la por push para o registro de contêiner usando um script de início rápido fornecido pela Microsoft. Você pode encontrar o script no repositório Ambientes de Implantação com o Terraform. Para usar o script de início rápido, bifurque o repositório e execute o script localmente.

Para usar o script de início rápido para criar e enviar por push rapidamente essa imagem de exemplo para um Registro de Contêiner do Azure, você precisará:

  • Bifurque esse repositório em sua conta pessoal.
  • Verifique se a CLI do Azure e o aplicativo Docker Desktop estão instalados em seu computador e em suas variáveis PATH.
  • Verifique se você tem permissões para enviar imagens por push para o Registro de Contêiner do Azure selecionado.

O script compila uma imagem e a envia por push para um ACR (Registro de Contêiner do Azure) especificado no repositório "ade" e na marca "latest". Esse script requer o nome e o diretório do registro da sua imagem personalizada, ter a CLI do Azure e o Docker Desktop instalados e em suas variáveis PATH e exigir que você tenha permissões para enviar por push para o registro especificado. Você pode chamar o script usando o seguinte comando no PowerShell:

.\quickstart-image-build.ps1 -Registry '{YOUR_REGISTRY}' -Directory '{DIRECTORY_TO_YOUR_IMAGE}'

Além disso, se você quiser enviar por push para um repositório específico e um nome de marca, poderá executar:

.\quickstart-image.build.ps1 -Registry '{YOUR_REGISTRY}' -Directory '{DIRECTORY_TO_YOUR_IMAGE}' -Repository '{YOUR_REPOSITORY}' -Tag '{YOUR_TAG}'

Para usar a imagem em suas implantações de ambiente, você precisa adicionar o local da imagem ao arquivo de manifesto, conectar a imagem à definição de ambiente e talvez seja necessário configurar permissões para que o ACR disponibilize a imagem personalizada para o ADE.

Usar uma imagem de contêiner padrão fornecida pelo Pulumi

A equipe Pulumi fornece uma imagem predefinida para você começar, o que você pode ver na pasta Runner-Image. Esta imagem está disponível publicamente no Docker Hub do Pulumi como pulumi/azure-deployment-environments, para que você possa usá-la diretamente nas definições de ambiente do ADE.

Aqui está um exemplo de arquivo environment.yaml que utiliza a imagem pré-criada:

name: SampleDefinition
version: 1.0.0
summary: First Pulumi-Enabled Environment
description: Deploys a Storage Account with Pulumi
runner: pulumi/azure-deployment-environments:0.1.0
templatePath: Pulumi.yaml

Você pode encontrar algumas definições de ambiente de exemplo na pasta Ambientes.

Criar uma imagem personalizada

A criação de uma imagem de contêiner personalizada permite que você personalize suas implantações para atender às suas necessidades. É possível criar imagens personalizadas com base nas imagens padrão do Pulumi e personalizá-las para atender às suas necessidades. Depois de concluir a personalização da imagem, você deve compilar a imagem e efetuá-la por push para o registro de contêiner.

Para criar uma imagem configurada para o ADE, siga estas etapas:

  1. Crie uma imagem personalizada com base em uma imagem padrão.
  2. Instale os pacotes desejados.
  3. Configurar scripts de shell de operação.
  4. Crie scripts de shell de operação que usem o Pulumi CLI.

1. Criar uma imagem personalizada com base em uma imagem padrão

Crie um DockerFile que inclua uma instrução FROM apontando para uma imagem padrão hospedada no Registro de Artefato da Microsoft.

Aqui está um exemplo de instrução FROM, referenciando a imagem principal padrão:

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

Essa declaração extrai a imagem principal publicada mais recentemente e a torna uma base para sua imagem personalizada.

2. Instalar pacotes necessários

Você pode instalar a CLI Pulumi em um local executável para que ela possa ser usada em seus scripts de implantação e exclusão.

Aqui está um exemplo desse processo, instalando a versão mais recente da CLI Pulumi:

RUN apk add curl
RUN curl -fsSL https://get.pulumi.com | sh
ENV PATH="${PATH}:/root/.pulumi/bin"

Dependendo da linguagem de programação que você pretende usar para os programas Pulumi, pode ser necessário instalar um ou mais tempos de execução correspondentes. O runtime do Python já está disponível na imagem base.

Aqui está um exemplo de instalação Node.js e TypeScript:

# install node.js, npm, and typescript
RUN apk add nodejs npm
RUN npm install typescript -g

As imagens padrão do ADE são baseadas na imagem da CLI do Azure e têm os pacotes da CLI do ADE e JQ pré-instalados. Você pode aprender mais sobre o CLI do Azure e o pacote JQ.

Para instalar mais pacotes necessários em sua imagem, use a instrução RUN.

Há quatro etapas para implantar a infraestrutura por meio do Pulumi:

  1. pulumi login – conectar-se ao armazenamento de estado, no sistema de arquivos local ou no Pulumi Cloud
  2. pulumi stack select – criar ou selecionar a pilha a ser usada para o ambiente específico
  3. pulumi config set – passar parâmetros de implantação como valores de configuração do Pulumi
  4. pulumi up – executar a implantação para criar uma infraestrutura nova ou atualizar a infraestrutura existente no Azure

Durante o ponto de entrada da imagem principal, todos os arquivos de estado local existentes são extraídos para o contêiner e o diretório salvo na variável de ambiente $ADE_STORAGE. Para acessar o arquivo de estado existente, execute os seguintes comandos:

mkdir -p $ADE_STORAGE
export PULUMI_CONFIG_PASSPHRASE=
pulumi login file://$ADE_STORAGE

Para fazer login no Pulumi Cloud, defina seu token de acesso Pulumi como uma variável de ambiente e execute os seguintes comandos:

export PULUMI_ACCESS_TOKEN=YOUR_PULUMI_ACCESS_TOKEN
pulumi login

Todos os parâmetros definidos para o ambiente atual são armazenados na variável $ADE_OPERATION_PARAMETERS. Além disso, a região do Azure selecionada e o nome do grupo de recursos são passados em ADE_ENVIRONMENT_LOCATION e ADE_RESOURCE_GROUP_NAME, respectivamente. Para definir a configuração da pilha do Pulumi, execute os seguintes comandos:

# Create or select the stack for the current environment
pulumi stack select $ADE_ENVIRONMENT_NAME --create

# Store configuration values in durable storage
export PULUMI_CONFIG_FILE=$ADE_STORAGE/Pulumi.$ADE_ENVIRONMENT_NAME.yaml

# Set the Pulumi stack config
pulumi config set azure-native:location $ADE_ENVIRONMENT_LOCATION --config-file $PULUMI_CONFIG_FILE
pulumi config set resource-group-name $ADE_RESOURCE_GROUP_NAME --config-file $PULUMI_CONFIG_FILE
echo "$ADE_OPERATION_PARAMETERS" | jq -r 'to_entries|.[]|[.key, .value] | @tsv' |
  while IFS=$'\t' read -r key value; do
    pulumi config set $key $value --config-file $PULUMI_CONFIG_FILE
  done

Além disso, para utilizar privilégios do ADE para implantar a infraestrutura dentro de sua assinatura, seu script precisa usar a Identidade de Serviço Gerenciado (MSI) do ADE ao provisionar a infraestrutura usando o provedor Pulumi Azure Native ou Azure Classic. Se a sua implantação precisar de permissões especiais para ser concluída, como funções específicas, atribua essas permissões à identidade do tipo de ambiente do projeto que está sendo usada para a implantação do ambiente. O ADE define as variáveis de ambiente relevantes, como o cliente, o locatário e as IDs de assinatura dentro do ponto de entrada da imagem principal; portanto, execute os seguintes comandos para garantir que o provedor use a MSI do ADE:

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

Agora, você pode executar o comando pulumi up para executar a implantação:

pulumi up --refresh --yes --config-file $PULUMI_CONFIG_FILE

Durante o script de exclusão, você pode executar o comando destroy, conforme mostrado no exemplo a seguir:

pulumi destroy --refresh --yes --config-file $PULUMI_CONFIG_FILE

Por fim, para tornar as saídas de sua implantação carregadas e acessíveis ao acessar seu ambiente por meio da CLI do Azure, transforme o objeto de saída do Pulumi para o formato especificado pelo ADE por meio do pacote JQ. Defina o valor como a variável de ambiente $ADE_OUTPUTS, conforme mostrado no exemplo a seguir:

stackout=$(pulumi stack output --json | jq -r 'to_entries|.[]|{(.key): {type: "string", value: (.value)}}')
echo "{\"outputs\": ${stackout:-{\}}}" > $ADE_OUTPUTS

Criar a imagem personalizada

Você pode criar sua imagem usando o Docker CLI. Certifique-se de que o Docker Engine esteja instalado no seu computador. Em seguida, navegue até o diretório do seu Dockerfile e execute o seguinte comando:

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

Por exemplo, se você quiser salvar sua imagem em um repositório dentro do seu registro chamado customImagee fazer upload com a tag version de1.0.0, você executaria:

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

Disponibilizar a imagem personalizada para o ADE

Para usar imagens personalizadas, é necessário armazená-las em um registro de contêiner. Você pode usar um registro de contêineres público ou um registro de contêineres privado. O Registro de Contêiner do Azure (ACR) é altamente recomendado, pois, devido à sua forte integração com o ADE, a imagem pode ser publicada sem permitir acesso público anônimo. Você deve criar sua imagem de contêiner personalizada e enviá-la para um registro de contêiner para disponibilizá-la para uso no ADE.

Também é possível armazenar a imagem em um registro de contêiner diferente, como o Docker Hub, mas, nesse caso, ela precisa ser acessível publicamente.

Cuidado

Armazenar sua imagem de contêiner em um registro com acesso de pull anônimo (não autenticado) torna-a publicamente acessível. Não faça isso se a imagem contiver informações confidenciais. Em vez disso, armazena-a no Registro de Contêiner do Azure (ACR) com acesso de pull anônimo desabilitado.

Para usar uma imagem personalizada armazenada no ACR, é necessário garantir que o ADE tenha as permissões adequadas para acessar a imagem. Ao criar uma instância do ACR, ela é segura por padrão e só permite o acesso de usuários autenticados.

Você pode usar o Pulumi para criar um Registro de Contêiner do Azure e publicar sua imagem nele. Confira o exemplo de Provisionamento/imagem personalizada para um projeto Pulumi autocontido que cria todos os recursos necessários em sua conta do Azure.

Selecione a guia apropriada para saber mais sobre cada abordagem.

Use um registro privado com acesso seguro

Por padrão, o acesso para efetuar pull ou push de conteúdo de um Registro de Contêiner do Azure só está disponível para usuários autenticados. Você pode proteger ainda mais o acesso ao ACR, limitando o acesso de determinadas redes e atribuindo funções específicas.

Para criar uma instância do ACR, o que pode ser feito por meio da CLI do Azure, do portal do Azure, de comandos do PowerShell e outros, siga um dos inícios rápidos.

Limitar o acesso à rede

Para proteger o acesso à rede do ACR, você pode limitar o acesso às suas próprias redes ou desabilitar totalmente o acesso à rede pública. Se você limitar o acesso à rede, deverá habilitar a exceção de firewall Permitir que serviços Microsoft confiáveis acessem esse registro de contêiner.

Para desabilitar o acesso de redes públicas:

  1. Crie uma instância do ACR ou use uma existente.

  2. No portal do Azure, acesse o ACR que você quer configurar.

  3. No menu à esquerda, em Configurações, selecione Rede.

  4. Na página Rede, na guia Acesso público, em Acesso público à rede, selecione Desabilitado.

    Captura de tela do portal do Azure, mostrando as configurações de rede do ACR, com Acesso público e Desabilitado realçados.

  5. Em Exceção de firewall, verifique se a opção Permitir que serviços Microsoft confiáveis acessem esse registro de contêiner está selecionada e, em seguida, selecione Salvar.

    Captura de tela das configurações de rede do ACR, com Permitir que serviços Microsoft confiáveis acessem esse registro de contêiner e Salvar realçados.

Atribuir a função AcrPull

A criação de ambientes por meio de imagens de contêiner usa a infraestrutura do ADE, incluindo projetos e tipos de ambiente. Cada projeto tem um ou mais tipos de ambiente de projeto, que precisam de acesso de leitura à imagem do contêiner que define o ambiente a ser implantado. Para acessar as imagens no ACR com segurança, atribua a função AcrPull a cada tipo de ambiente de projeto.

Para atribuir a função AcrPull ao tipo de ambiente do projeto:

  1. No portal do Azure, acesse o ACR que você quer configurar.

  2. No menu à esquerda, selecione Controle de Acesso (IAM).

  3. Selecione Adicionar>Adicionar atribuição de função.

  4. Atribua a função a seguir. Para ver as etapas detalhadas, confira Atribuir funções do Azure usando o portal do Azure.

    Configuração Valor
    Função Selecione AcrPull.
    Atribuir acesso a Selecione Usuário, grupo ou entidade de serviço.
    Membros Insira o nome do tipo de ambiente de projeto que precisa acessar a imagem no contêiner.

    O tipo de ambiente do projeto é exibido como no exemplo a seguir:

    Captura de tela do painel Selecionar membros, mostrando uma lista de tipos de ambiente de projeto com parte do nome realçada.

Nessa configuração, o ADE usa a Identidade Gerenciada para o PET, seja o sistema atribuído ou o usuário atribuído.

Dica

Essa atribuição de função deve ser feita para cada tipo de ambiente de projeto. Ela pode ser automatizado por meio da CLI do Azure.

Quando estiver pronto para enviar sua imagem para o registro, execute o seguinte comando:

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

Conecte a imagem à definição do seu ambiente

Ao criar definições de ambiente para usar sua imagem personalizada em sua implantação, edite a propriedade runner no arquivo de manifesto (environment.yaml ou manifest.yaml).

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

Para saber mais sobre como criar definições de ambiente que usam as imagens de contêiner do ADE para implantar seus recursos do Azure, consulte Adicionar e configurar uma definição de ambiente.