Implementar um Serviço de Funções de Trabalho no Azure
Neste artigo, você aprenderá como implantar um Serviço de Trabalho .NET no Azure. Com seu Worker em execução como uma Instância de Contêiner do Azure (ACI) do Registro de Contêiner do Azure (ACR), ele pode atuar como um microsserviço na nuvem. Há muitos casos de uso para serviços de longa duração, e o Serviço do Trabalhador existe por esse motivo.
Neste tutorial, irá aprender a:
- Crie um serviço de trabalho.
- Criar recurso de registro de contêiner.
- Envie uma imagem para o registro do contêiner.
- Implante como instância de contêiner.
- Verifique a funcionalidade do serviço de trabalho.
Gorjeta
Todo o código-fonte de exemplo "Workers in .NET" está disponível no Navegador de Amostras para download. Para obter mais informações, consulte Procurar exemplos de código: Trabalhadores no .NET.
Pré-requisitos
- O SDK do .NET 5.0 ou posterior.
- Docker Desktop (Windows ou Mac).
- Uma conta do Azure com uma subscrição ativa. Crie uma conta gratuitamente.
- Dependendo do ambiente de desenvolvedor escolhido:
Criar um novo projeto
Para criar um novo projeto do Serviço de Trabalho com o Visual Studio, selecione Arquivo>Novo>Projeto....Na caixa de diálogo Criar um novo projeto, procure por "Serviço de Trabalho" e selecione Modelo de Serviço de Trabalhador. Digite o nome do projeto desejado, selecione um local apropriado e selecione Avançar. Na página Informações adicionais, para o Target Framework, selecione .NET 5.0
e marque a opção Habilitar Docker para habilitar o suporte ao docker. Selecione o sistema operacional Docker desejado.
Para criar um novo projeto do Serviço de Trabalho com o Visual Studio Code, você pode executar comandos da CLI do .NET a partir do terminal integrado. Para obter mais informações, consulte Visual Studio Code: Integrated Terminal.
Abra o terminal integrado, execute o comando e substitua o dotnet new
<Project.Name>
pelo nome do projeto desejado.
dotnet new worker --name <Project.Name>
Para obter mais informações sobre o comando .NET CLI new worker service project, consulte dotnet new worker.
Para criar um novo projeto do Serviço de Trabalho com a CLI do .NET, abra seu terminal favorito em um diretório de trabalho. Execute o comando e substitua o dotnet new
pelo nome do <Project.Name>
projeto desejado.
dotnet new worker --name <Project.Name>
Para obter mais informações sobre o comando .NET CLI new worker service project, consulte dotnet new worker.
Crie o aplicativo para garantir que ele restaure os pacotes dependentes e compile sem erros.
Para criar o aplicativo a partir do Visual Studio, selecione F6 ou selecione a opção de menu Build>Build Solution.
Para criar o aplicativo a partir do Visual Studio Code, abra a janela do terminal integrado e execute o dotnet build
comando a partir do diretório de trabalho.
dotnet build
Para obter mais informações sobre o comando build da CLI do .NET, consulte dotnet build
.
Para criar o aplicativo a partir da CLI do .NET, execute o dotnet build
comando a partir do diretório de trabalho.
dotnet build <path/to/project.csproj>
Especifique seu <path/to/project.csproj>
valor, que é o caminho para o arquivo de projeto a ser compilado. Para obter mais informações sobre o comando build da CLI do .NET, consulte dotnet build
.
Adicionar suporte do Docker
Se você selecionou corretamente a caixa de seleção Habilitar Docker ao criar um novo projeto do Worker, pule para a etapa Criar a imagem do Docker.
Se você não selecionou essa opção, não se preocupe — você ainda pode adicioná-la agora. No Visual Studio, clique com o botão direito do mouse no nó do projeto no Gerenciador de Soluções e selecione Adicionar>Suporte ao Docker. Você será solicitado a selecionar um sistema operacional de destino, selecione OK com a seleção padrão do sistema operacional.
No Visual Studio Code, você precisa da extensão Docker e da extensão da Conta do Azure instaladas. Abra a Paleta de comandos e selecione a opção Docker: Adicionar arquivos do Docker ao espaço de trabalho . Se solicitado a Selecionar plataforma de aplicativo, escolha .NET: Core Console. Se solicitado a Selecionar projeto, escolha o projeto do Serviço de Trabalho que você criou. Quando solicitado a selecionar sistema operacional, escolha o primeiro sistema operacional listado. Quando solicitado a incluir ou não arquivos opcionais de composição do Docker, selecione Não.
O suporte ao Docker requer um Dockerfile. Este arquivo é um conjunto de instruções abrangentes para criar seu .NET Worker Service como uma imagem do Docker. O Dockerfile é um arquivo sem uma extensão de arquivo. O código a seguir é um exemplo de Dockerfile e deve existir no diretório raiz do arquivo de projeto.
Com a CLI, o Dockerfile não é criado para você. Copie seu conteúdo em um novo arquivo chamado Dockerfile no diretório raiz do projeto.
FROM mcr.microsoft.com/dotnet/runtime:8.0 AS base
WORKDIR /app
# Creates a non-root user with an explicit UID and adds permission to access the /app folder
# For more info, please refer to https://aka.ms/vscode-docker-dotnet-configure-containers
RUN adduser -u 5678 --disabled-password --gecos "" appuser && chown -R appuser /app
USER appuser
FROM mcr.microsoft.com/dotnet/sdk:8.0 AS build
WORKDIR /src
COPY ["App.CloudService.csproj", "./"]
RUN dotnet restore "App.CloudService.csproj"
COPY . .
WORKDIR "/src/."
RUN dotnet build "App.CloudService.csproj" -c Release -o /app/build
FROM build AS publish
RUN dotnet publish "App.CloudService.csproj" -c Release -o /app/publish
FROM base AS final
WORKDIR /app
COPY --from=publish /app/publish .
ENTRYPOINT ["dotnet", "App.CloudService.dll"]
Nota
Você precisa atualizar as várias linhas no Dockerfile que fazem referência a *App.CloudService—substitua isso pelo nome do seu projeto.
Para obter mais informações sobre as imagens oficiais do .NET, consulte Docker Hub: .NET Runtime e Docker Hub: .NET SDK.
Criar a imagem do Docker
Para criar a imagem do Docker, o mecanismo do Docker deve estar em execução.
Importante
Ao usar o Docker Desktop e o Visual Studio, para evitar erros relacionados ao compartilhamento de volume, verifique se ele está habilitado.
- Na tela Configurações do Docker Desktop, selecione Unidades compartilhadas.
- Selecione a(s) unidade(s) que contém seus arquivos de projeto.
Para obter mais informações, consulte Solucionar problemas de desenvolvimento do Visual Studio com o Docker.
Clique com o botão direito do mouse no Dockerfile no Gerenciador de Soluções e selecione Criar Imagem do Docker. A janela Saída é exibida, relatando o progresso do docker build
comando.
Clique com o botão direito do mouse no Dockerfile no Explorer e selecione Build Image. Quando solicitado a Marcar imagem como, digite appcloudservice:latest
. O terminal de saída da Tarefa do Docker é exibido, relatando o progresso do comando de compilação do Docker.
Nota
Se você não for solicitado a marcar a imagem, é possível que o Visual Studio Code esteja confiando em um tasks.json existente. Se a tag usada for indesejável, você poderá alterá-la atualizando o valor do docker-build
item de dockerBuild/tag
configuração na tasks
matriz. Considere o seguinte exemplo de seção de configuração:
{
"type": "docker-build",
"label": "docker-build: release",
"dependsOn": [
"build"
],
"dockerBuild": {
"tag": "appcloudservice:latest",
"dockerfile": "${workspaceFolder}/cloud-service/Dockerfile",
"context": "${workspaceFolder}",
"pull": true
},
"netCore": {
"appProject": "${workspaceFolder}/cloud-service/App.CloudService.csproj"
}
}
Abra uma janela de terminal no diretório raiz do Dockerfile e execute o seguinte comando docker:
docker build -t appcloudservice:latest -f Dockerfile .
À medida que o docker build
comando é executado, ele processa cada linha no Dockerfile como uma etapa de instrução. Este comando cria a imagem e cria um repositório local chamado appcloudservice que aponta para a imagem.
Gorjeta
O Dockerfile gerado difere entre ambientes de desenvolvimento. Por exemplo, se você Adicionar suporte ao Docker do Visual Studio, poderá ter problemas se tentar Criar a imagem do Docker a partir do Visual Studio Code, pois as etapas do Dockerfile variam. É melhor escolher um único ambiente de desenvolvimento e usá-lo ao longo deste tutorial.
Criar registo de contentor
Um recurso do Registro de Contêiner do Azure (ACR) permite criar, armazenar e gerenciar imagens e artefatos de contêiner em um registro privado. Para criar um registro de contêiner, você precisa criar um novo recurso no portal do Azure.
- Selecione a Assinatura e o grupo de Recursos correspondente (ou crie um novo).
- Insira um nome do Registro.
- Selecione uma Localização.
- Selecione uma SKU apropriada, por exemplo, Basic.
- Selecione Rever + criar.
- Depois de ver a Validação aprovada, selecione Criar.
Importante
Para usar esse registro de contêiner ao criar uma instância de contêiner, você deve habilitar o usuário Admin. Selecione Teclas de acesso e ative Usuário administrador.
Um recurso do Registro de Contêiner do Azure (ACR) permite criar, armazenar e gerenciar imagens e artefatos de contêiner em um registro privado. Abra uma janela de terminal no diretório raiz do Dockerfile e execute o seguinte comando da CLI do Azure:
Importante
Para interagir com os recursos do Azure a partir da CLI do Azure, você deve ser autenticado para sua sessão de terminal. Para autenticar, use o az login
comando:
az login
Depois de iniciar sessão, utilize o comando para especificar a az account set
sua subscrição quando tiver mais do que uma subscrição predefinida.
az account set --subscription <subscription name or id>
Depois de entrar na CLI do Azure, sua sessão pode interagir com os recursos de acordo.
Se você ainda não tiver um grupo de recursos ao qual gostaria de associar seu serviço de trabalho, crie um usando o az group create
comando:
az group create -n <resource group> -l <location>
Forneça o nome e o <resource group>
<location>
arquivo . Para criar um registro de contêiner, chame o az acr create
comando.
az acr create -n <registry name> -g <resource group> --sku <sku> --admin-enabled true
Substitua espaços reservados por seus próprios valores apropriados:
<registry name>
: o nome do registo.<resource group>
: o nome do grupo de recursos que você usou.<sku>
: valores aceitos, Básico, Clássico, Premium ou Padrão.
O comando anterior:
- Cria um Registro de Contêiner do Azure, com um nome de registro, no grupo de recursos especificado.
- Habilitado um usuário Admin — isso é necessário para Instâncias de Contêiner do Azure.
Para obter mais informações, consulte Guia de início rápido: criar um registro de contêiner do Azure.
Enviar imagem para o registro do contêiner
Com a imagem do .NET Docker criada e o recurso de registro de contêiner criado, agora você pode enviar a imagem para o registro de contêiner.
Clique com o botão direito do mouse no projeto no Gerenciador de Soluções e selecione Publicar. A caixa de diálogo Publicar é exibida. Para o Destino, selecione Azure e, em seguida, Avançar.
Para o Destino Específico, selecione Registro de Contêiner do Azure e Avançar.
Em seguida, para o Registro de Contêiner, selecione o Nome da Assinatura que você usou para criar o recurso ACR. Na área de seleção Registros de contêiner, selecione o registro de contêiner que você criou e selecione Concluir.
Isso cria um perfil de publicação, que pode ser usado para publicar a imagem no registro do contêiner. Selecione o botão Publicar para enviar a imagem para o registro do contêiner, a janela Saída relata o progresso da publicação e, quando ela for concluída com êxito, você verá uma mensagem "Publicado com êxito".
Selecione Docker na barra de atividades no Visual Studio Code. Expanda o painel de visualização em árvore IMAGENS, expanda o nó da imagem e clique com o appcloudservice
botão direito do rato na latest
etiqueta.
A janela do terminal integrado informa o docker push
progresso do comando para o registro do contêiner.
Para enviar uma imagem para o registro de contêiner, você precisa entrar no registro primeiro:
az acr login -n <registry name>
O az acr login
comando entra em um registro de contêiner por meio da CLI do Docker. Para enviar a imagem para o registro do contêiner, use o comando az acr build com o nome do registro do contêiner como :<registry name>
az acr build -r <registry name> -t appcloudservice .
O comando anterior:
- Empacota o código-fonte em um arquivo tar .
- Carrega-o para o registro do contêiner.
- O registro de contêiner descompacta o arquivo tar .
- Executa o
docker build
comando no recurso de registro de contêiner em relação ao Dockerfile. - Adiciona a imagem ao registro do contêiner.
Para verificar se a imagem foi enviada por push com êxito para o registro do contêiner, navegue até o portal do Azure. Abra o recurso de registro de contêiner, em Serviços, selecione Repositórios. Você deve ver a imagem.
Implantar como instância de contêiner
No Visual Studio Code, selecione Docker na barra de atividades. Expanda o nó REGISTROS e selecione Conectar Registro. Selecione Azure quando solicitado e entre se necessário.
Importante
A implantação como uma instância de contêiner do Visual Studio Code não funciona mais no Mac. Para obter mais informações, consulte GitHub: Sobre a extensão do Docker para Visual Studio Code.
Expanda o nó REGISTROS, selecione Azure, sua assinatura>, o contêiner, registre > a imagem e clique com o botão direito do mouse na tag. Selecione Implantar imagem em instâncias de contêiner do Azure.
Para criar uma instância de contêiner, primeiro crie um grupo de contêineres usando o az container create
comando.
az container create -g <resource group> \
--name <instance name> \
--image <registry name>.azurecr.io/<image name>:latest \
--registry-password <password>
Forneça os valores apropriados:
<resource group>
: o nome do grupo de recursos que você tem usado neste tutorial.<instance name>
: o nome da instância do contêiner.<registry name>
: o nome do registro do contêiner.<image name>
: o nome da imagem.<password>
: a senha para o registro de contêiner — você pode obtê-la no portal do Azure, Chaves de acesso de recurso >do Registro de Contêiner.
Para criar uma instância de contêiner, você também precisa criar um novo recurso no portal do Azure.
- Selecione a mesma Assinatura e o grupo de Recursos correspondente na seção anterior.
- Insira um nome de contêiner—
appcloudservice-container
. - Selecione uma Região que corresponda à seleção de Localização anterior.
- Para Fonte de imagem, selecione Registro de Contêiner do Azure.
- Selecione o Registro pelo nome fornecido na etapa anterior.
- Selecione a tag Imagem e Imagem.
- Selecione Rever + criar.
- Supondo que a Validação tenha sido aprovada, selecione Criar.
Pode levar um momento para que os recursos sejam criados, uma vez criados, selecione o botão Ir para o recurso .
Para obter mais informações, consulte Guia de início rápido: criar uma instância de contêiner do Azure.
Verificar a funcionalidade do serviço
Imediatamente após a instância do contêiner ser criada, ela começará a ser executada.
Para verificar se o serviço de trabalho está funcionando corretamente, navegue até o portal do Azure no recurso de instância de contêiner, selecione a opção Contêineres .
Você verá os contêineres e seu estado atual. Neste caso, está em execução. Selecione Logs para ver a saída do serviço de trabalho .NET.
Para verificar se o serviço de trabalho está funcionando corretamente, você pode exibir os logs do aplicativo em execução. Use o az container logs
comando:
az container logs -g <resource group> --name <instance name>
Forneça os valores apropriados:
<resource group>
: o nome do grupo de recursos que você tem usado neste tutorial.<instance name>
: o nome da instância do contêiner.
Você verá os logs de saída do serviço de trabalho .NET, o que significa que você implantou com êxito seu aplicativo em contêineres na ACI.