Módulo 2: ferramentas para o desenvolvedor de contêineres .NET na AWS
MÓDULO DE APRENDIZADO
A AWS fornece ferramentas gratuitas e kits de ferramentas de ambientes de desenvolvimento integrados que ajudam a criar e implantar aplicações .NET e .NET Framework em contêineres no Amazon ECS, Amazon ECR e AWS Fargate. Além do Console de Gerenciamento da AWS, as integrações com o Visual Studio, o JetBrains Rider, o Visual Studio Code e dotnet CLI oferecem flexibilidade para escolher as ferramentas certas para atender aos requisitos de desenvolvimento, integração e implantação contínuas (CI/CD).
Neste módulo, você aprenderá a trabalhar com o Amazon ECS, o AWS Fargate e o Amazon ECR usando o kit de ferramentas da AWS para Visual Studio e com a linha de comando usando as extensões dotnet CLI.
Tempo para a conclusão
60 minutos
Implantação de aplicações .NET em contêineres na AWS com o Visual Studio
O kit de ferramentas da AWS para Visual Studio é uma extensão gratuita para o Visual Studio no Windows (não é compatível com o Visual Studio para Mac). O kit de ferramentas fornece uma janela do explorador para vários serviços da AWS, incluindo serviços de contêineres e assistentes que ajudam a criar e publicar aplicações na Nuvem AWS. Esses assistentes são compatíveis com a implantação de aplicações .NET e .NET Framework no AWS Elastic Beanstalk, Amazon ECS e ECR, AWS Fargate e AWS App Runner do Visual Studio (este curso se concentra na implantação no ECS/ECR e Fargate).
Instale o kit de ferramentas do marketplace do Visual Studio, https://marketplace.visualstudio.com/vs. Duas versões compatíveis estão disponíveis para o Visual Studio em execução no Windows:
O kit de ferramentas pode ser instalado no Visual Studio em execução em seu computador de desenvolvimento local e também nas imagens do Visual Studio incluídas na licença fornecidas pelo Amazon Elastic Compute Cloud (EC2). Essas imagens são uma solução ideal para cenários de desenvolvimento que exigem o uso ocasional do Visual Studio sem a necessidade de compromissos de licenciamento de longo prazo.
Depois de instalar o kit de ferramentas, ele precisa de um conjunto de credenciais para permitir o acesso aos serviços da AWS em seu nome. Esses perfis são chamados de perfis de credenciais, e o kit de ferramentas o guiará pelo processo, caso seja necessário criá-los. No entanto, se você já tiver usado ferramentas como a AWS CLI ou as ferramentas da AWS para PowerShell em seu computador, o kit de ferramentas detectará automaticamente os perfis de credenciais usados com eles e os listará no menu suspenso Perfil: na parte superior da janela da ferramenta AWS Explorer.
Se essa janela não estiver visível, use o item AWS Explorer no menu Visualizar do IDE para exibi-la. Selecione um perfil de credencial (ou crie um) e, em seguida, selecione uma região da AWS no controle suspenso Região: na janela do explorador para começar.
Como trabalhar com o Amazon ECS e o Amazon ECR na visualização do AWS Explorer
Depois de selecionar um perfil de credencial e uma região no explorador, você pode acessar seus recursos no Amazon ECS e no Amazon ECR no Visual Studio. Na janela do AWS Explorer, depois de expandir o item Amazon Elastic Container Service no explorador e seus dois subitens, Clusters e Repositórios, você poderá trabalhar com clusters e repositórios existentes no registro privado do ECR que pertencem à região selecionada. O kit de ferramentas não é compatível com o trabalho com o seu registro público do ECR.
Analise cada item abaixo para saber mais sobre a funcionalidade disponível nos menus de contexto do grupo Clusters, de cada cluster, do grupo Repositórios e de cada repositório mostrado na visualização do Explorador.
Menu de contexto de clusters
O menu de contexto no grupo Clusters fornece as seguintes opções:
- Atualizar: atualiza a coleção de clusters mostrada no Explorador.
Menu de contexto de clusters
O menu de contexto em cada cluster implantado mostrado no Explorador oferece opções para:
- Visualizar os detalhes do cluster (abre uma nova janela do documento).
- Excluir o cluster.
Um cluster não pode ser excluído enquanto estiver executando tarefas. As tarefas podem ser drenadas de um cluster usando primeiro a opção de menu Visualizar para abrir a visualização de detalhes de um cluster, depois ao selecionar Editar na visualização e ao definir o valor de Tarefas desejadas como 0. Depois que todas as tarefas em execução tiverem sido drenadas, exclua o cluster usando o botão Excluir na visualização ou a entrada do menu de contexto. A visualização dos detalhes do cluster é mostrada abaixo:
Menu de contexto dos repositórios
O menu de contexto no grupo Repositórios oferece opções para:
- Criar repositório: abre uma janela de diálogo para inserir o nome do novo repositório. Observe que novos repositórios só podem ser criados em seu registro privado.
- Atualizar: atualiza a coleção de repositórios mostrada no Explorador.
Menu de contexto dos repositórios
O menu de contexto em um repositório listado no grupo Repositórios fornece opções para:
- Visualizar: abre uma nova janela do documento listando as imagens contidas no repositório. Os comandos específicos necessários para inserir imagens neste repositório também podem ser visualizados aqui
- Excluir: abre uma janela de diálogo para confirmar a exclusão do repositório. O kit de ferramentas pode, opcionalmente, excluir todas as imagens contidas no repositório, antes de excluir o próprio repositório (repositórios não vazios não podem ser excluídos).
Implantação no Amazon ECS e no Amazon ECR no Visual Studio
Além de trabalhar com clusters e repositórios no AWS Explorer, o kit de ferramentas oferece duas opções de implantação para ajudar você a implantar suas aplicações e imagens de contêineres no Amazon ECS, no AWS Fargate e no Amazon ECR. Ambas as opções estão disponíveis no menu de contexto do seu projeto de aplicação no Explorador de Soluções: Publicar na AWS e Publicar contêiner na AWS (herdado).
As seções abaixo descrevem cada uma dessas opções e quando você pode optar por usá-las.
Publicar na AWS
A opção Publicar na AWS é compatível com a implantação de aplicações .NET no Amazon ECS com o AWS Fargate, o AWS App Runner e máquinas virtuais no AWS Elastic Beanstalk. Também pode ser usada para publicar imagens de contêineres no Amazon ECR. Além de oferecer implantação em vários serviços, de um único portal IDE, a opção Publicar na AWS também oferece:
- A capacidade de criar projetos de implantação personalizados para uma aplicação. Os projetos de implantação personalizados permitem a construção de recursos adicionais da AWS durante a implantação e configurações personalizadas de UX de implantação. Ao verificar o projeto de implantação no controle de origem, juntamente com a aplicação, todas as equipes de desenvolvimento têm acesso às mesmas configurações personalizadas e recursos de implantação aplicáveis à aplicação ao implantá-la do Visual Studio.
- Uma experiência da linha de comando dotnet, disponível após a instalação do pacote AWS.Deploy.Tools do NuGet. A experiência de linha de comando apresenta as mesmas opções, incluindo aquelas adicionadas usando projetos de implantação personalizados. O uso da ferramenta da linha de comando é discutido mais diante nesta seção. Ao implantar nos serviços de contêiner da AWS, as aplicações não precisam ter um Dockerfile preexistente; um Dockerfile é gerado, se necessário.
Observação: a opção Publicar na AWS é compatível apenas com aplicações .NET; ela não é compatível com a implantação de aplicações que usam o .NET Framework.
Observação: a implantação no AWS App Runner é discutida em um curso separado, Workloads .NET no AWS App Runner.
A opção Publicar na AWS tem algumas instalações de pré-requisito e solicitará se alguma delas estiver faltando. O kit de implantação em nuvem (CDK) da AWS é usado para fornecer e configurar os recursos da AWS para comportar a implantação da aplicação. O CDK exige que o Node.js esteja instalado. Abra um navegador em https://nodejs.org/en/ e instale a versão mais recente com suporte de longo prazo (LTS) ou a versão atual do Node.js. Depois que o Node.js estiver instalado, abra um shell de comando e execute o comando npm install -g aws-cdk para instalar o CDK. Depois que esses dois pré-requisitos forem instalados, as implantações usando a opção Publicar na AWS poderão ser realizadas.
Inicie a opção Publicar na AWS no menu de contexto do projeto da aplicação no Explorador de Soluções. A aplicação é analisada e várias opções de implantação, denominadas fórmulas, são exibidas. Para aplicações já configuradas com um Dockerfile, as fórmulas para implantar a aplicação no Amazon ECS com o AWS Fargate ou para inserir uma imagem de contêiner no Amazon ECR são exibidas primeiro. Para aplicações ainda não configuradas com um Dockerfile, essas opções são exibidas para aplicações da Web e de API da Web do ASP.NET Core (incluindo o Blazor Server) e aplicações de console.
Observação: se a aplicação já tiver sido implantada (em qualquer serviço), a UI de publicação oferecerá primeiro a reimplantação nos destinos existentes. Se isso ocorrer, selecione a opção da guia Publicar em novo destino para realizar uma nova implantação, em vez de uma reimplantação.
A captura de tela abaixo mostra as fórmulas disponíveis, no momento em que este artigo foi escrito, para uma aplicação da Web ASP.NET Core 6. Se houver projetos de implantação personalizados disponíveis para a aplicação, eles serão listados acima das fórmulas fornecidas pela AWS. Na captura de tela, a fórmula para publicar no Amazon ECS usando o AWS Fargate está selecionada. O painel do lado direito mostra as opções de implantação padrão para essa fórmula.
É necessário, no mínimo, um nome de aplicação; o nome do projeto é usado por padrão. Dependendo da aplicação, pode ser possível selecionar o botão Publicar e iniciar a implantação imediatamente. No entanto, se a aplicação realizar chamadas para os serviços da AWS, será necessário fornecer uma função personalizada com permissões que permitam que a aplicação acesse os serviços e as APIs de serviço. Selecione o botão Editar configurações para especificar, se necessário, uma função para a aplicação e quaisquer alterações de infraestrutura desejadas antes da implantação. Por exemplo, podem ser feitas alterações na memória e na CPU da tarefa, na configuração da rede, no balanceamento de carga e nos requisitos de escalabilidade. A captura de tela abaixo mostra algumas das opções disponíveis para a fórmula selecionada. As categorias à esquerda (computação, permissões, VPC etc.) ilustram a variedade de opções que podem ser especificadas para a implantação.
Os contêineres do Windows no Fargate podem executar aplicações .NET Framework e .NET. Atualmente, o Fargate é compatível com duas versões do Windows Server para aplicações: Windows Server 2019 Full e Windows Server 2019 Core. Seja qual for a versão usada, a AWS gerencia as licenças do sistema operacional Windows para você.
Quando as opções necessárias estiverem definidas, selecione o botão Publicar para iniciar a implantação.
Para a amostra da aplicação da Web do ASP.NET Core mostrada acima, a opção Publicar na AWS passará por várias etapas que podem ser seguidas na saída do log de implantação:
- A imagem do contêiner é criada, usando um Dockerfile existente ou um Dockerfile gerado automaticamente.
- A autenticação é realizada no registro privado do Amazon ECR e a imagem é enviada para um repositório. Por padrão, é usado um repositório com o mesmo nome da implantação da aplicação, mas é possível selecionar outro repositório antes de iniciar a publicação, editando as configurações de implantação (o nome do repositório pode ser encontrado nas configurações da categoria Construção do projeto).
- Um projeto CDK temporário é gerado, definindo os recursos necessários para comportar a implantação, por exemplo, a definição da tarefa, as configurações do cluster, a configuração da rede e outras configurações.
- Por fim, o projeto CDK é usado para implantar uma pilha do AWS CloudFormation para inicializar e configurar os recursos e a aplicação implantada nesses recursos.
Quando a implantação for concluída, as informações resumidas sobre a pilha do CloudFormation serão exibidas na janela, com um URL para a aplicação implantada (se tiver sido implantada como um serviço). Clicar no URL inicia um navegador na aplicação implantada.
Implantação de pipelines de CI/CD
A opção Publicar na AWS no Visual Studio foi projetada para que os desenvolvedores façam iterações em uma aplicação sem precisar sair do IDE. Para automação de CI/CD ou para uso por desenvolvedores que não trabalham em um sistema Windows, a AWS fornece uma versão de linha de comando que amplia o dotnet CLI. Essa ferramenta está disponível no NuGet, no pacote AWS.Deploy.Tools.
Para instalar, abra um shell de linha de comando e execute o comando:
dotnet tool install -g aws.deploy.tools
Depois de instalado, visualize as opções de comando de nível superior ao executar:
dotnet aws
Para iniciar uma implantação pasta que contém o projeto da aplicação, execute:
dotnet aws deploy
A ajuda adicional sobre a ferramenta e todos os seus comandos está disponível ao usar a opção --help.
Mais detalhes sobre a implantação de aplicações em contêineres na AWS usando a extensão AWS.Deploy.Tools dotnet CLI, incluindo seu uso na automação de CI/CD, serão discutidos mais adiante neste módulo, na seção intitulada Implantação de contêineres .NET na AWS na linha de comando.
Como excluir implantações de contêineres feitas com a opção Publicar na AWS
As implantações de aplicações feitas usando a opção Publicar na AWS são simplesmente pilhas do AWS CloudFormation. Você pode excluir uma implantação da seguinte forma:
- Navegar até o painel do CloudFormation no Console de Gerenciamento da AWS e excluir a pilha associada.
- No Visual Studio, expanda a entrada do AWS CloudFormation no AWS Explorer, selecione a pilha e escolha Excluir no menu de contexto da pilha.
- Em um shell de linha de comando, usando o pacote AWS.Tools.Deploy instalado, execute o comando dotnet aws delete-deployment.
Também de um shell de linha de comando, você pode usar o comando Remove-CFNStack das ferramentas da AWS para PowerShell ou o comando aws cloudformation delete-stack da AWS CLI para excluir pilhas que representam uma aplicação implantada baseada em contêineres.
Resumo
A opção Publicar na AWS oferece um mecanismo fácil de usar e extensível para a implantação de aplicações .NET adequadas para execução em um contêiner na AWS, sem a necessidade de conhecimento extenso da AWS ou mesmo de desenvolvimento em nuvem. As fórmulas incorporadas e personalizáveis permitem que os desenvolvedores implantem e reimplantem aplicações de forma conveniente durante o desenvolvimento no Visual Studio para o Amazon ECS com o AWS Fargate e outros serviços baseados em contêineres. A opção Publicar na AWS é a opção recomendada para implantar aplicações da Web e de API da Web do ASP.NET Core, incluindo o Blazor do lado do servidor, em contêineres na AWS.
Publicar contêiner na AWS
A opção Publicar contêiner na AWS é a abordagem original baseada em assistentes para implantar aplicações .NET em contêineres na AWS no Visual Studio. Agora considerada uma abordagem herdada, o assistente ainda era compatível com o Visual Studio no momento em que este artigo foi escrito, mas pode ser removido em uma versão futura.
Em comparação com a opção Publicar na AWS, a opção Publicar contêiner na AWS tem estes atributos e restrições:
- É compatível com a implantação somente no Amazon ECS (com ou sem o AWS Fargate). A opção Publicar na AWS também é compatível com o AWS App Runner e os serviços de máquinas virtuais, como o AWS Elastic Beanstalk.
- É compatível com a implantação de aplicações da Web e de API da Web do ASP.NET Core e de aplicações de console em contêineres. Isso é semelhante ao que é oferecido pela opção Publicar na AWS.
- Requer que um Dockerfile já exista na aplicação. Ao contrário da opção Publicar na AWS, um Dockerfile não é gerado automaticamente. Se o projeto da aplicação não contiver um Dockerfile, a opção de Publicar contêiner no ECS não será exibida no menu de contexto do projeto.
- Não depende do AWS Cloud Development Kit e do Node.js.
- A implantação não pode ser modificada além das configurações disponíveis no assistente. Projetos de implantação personalizados, como os oferecidos pela opção Publicar na AWS, não estão disponíveis.
- Pode ser usado com uma extensão de ferramenta CLI dotnet, Amazon.ECS.Tools, disponível no NuGet. Por meio de um arquivo de configuração simples no formato JSON, aws-ecs-tools-defaults.json, as definições de configuração escolhidas no assistente podem ser compartilhadas com uma experiência de linha de comando, iniciada pela execução do dotnet ecs em um shell de linha de comando. A opção de linha de comando é adequada para desenvolvedores que não podem usar o Visual Studio ou o kit de ferramentas da AWS, ou para implantações automatizadas em um sistema de CI/CD.
Observação: o assistente contém um banner recomendando a mudança para a nova experiência Publicar na AWS. Em algum momento futuro, o assistente legado será removido do kit de ferramentas.
O assistente preencherá previamente os campos Credenciais da AWS e Região com base nas seleções atuais na janela do AWS Explorer. Por padrão, a configuração da Liberação de um projeto é implantada em um repositório com o nome do projeto, que será criado quando necessário.
O menu suspenso Alvo da implantação, na parte inferior da página, contém quatro opções possíveis:
- O Serviço em um cluster do ECS é adequado para aplicações que precisam ser executadas 24 horas por dia, 7 dias por semana, por exemplo, uma aplicação da Web ou possivelmente uma API da Web.
- O Executar tarefa em um cluster do ECS é adequado para o código de aplicação que é executado uma vez e depois é encerrado, por exemplo, uma aplicação baseada em console. Depois que a tarefa for encerrada, ela poderá ser executada novamente de forma manual, conforme necessário.
- O Tarefa programada em um cluster do ECS é adequado para tarefas que são executadas periodicamente antes do encerramento. Os exemplos incluem processos em lote ou trabalhos ETL noturnos.
- O Inserir somente a imagem do Docker no Amazon Elastic Container Registry cria a imagem do contêiner para a aplicação, autentica-a em relação ao seu registro privado e a insere em um repositório no registro privado. Os repositórios no seu registro público não são compatíveis.
Depois de escolher o alvo apropriado, o botão Avançar vai para uma página na qual a configuração de inicialização é definida. Os dados selecionados aqui e nas páginas subsequentes são preenchidos em uma definição de tarefa para você.
A escolha de Criar um cluster vazio para o campo Cluster do ECS bloqueia o assistente para uma implantação usando o AWS Fargate. Para implantar no Amazon ECS sem usar o AWS Fargate, você deve primeiro criar os recursos de cluster necessários usando outras ferramentas, como o Console de Gerenciamento da AWS, e depois selecionar o cluster existente no assistente.
Se a opção Serviço em um cluster do ECS tiver sido selecionada no início do assistente, a página seguinte solicitará o número de tarefas, instâncias de contêineres, a serem executadas (o padrão é 1) e a porcentagem mínima e máxima de tarefas que o serviço deve manter. Para usar um serviço existente, selecione seu nome aqui ou defina o nome de um novo serviço a ser criado. Se a opção Tarefa em um cluster do ECS tiver sido selecionada, será solicitado que você defina o número de tarefas e dê um nome ao grupo de tarefas. A captura de tela abaixo mostra a opção de Serviço em um cluster do ECS ao implantar uma aplicação da Web.
Se o alvo da implantação for um serviço, a próxima página do assistente permite que um balanceador de carga de aplicações seja configurado, com uma página de verificação de integridade. Por padrão, nenhum balanceador de carga é configurado. Para os alvos de implantação baseados em tarefas, a página do balanceador de carga não é mostrada, pois os contêineres que compõem a tarefa são executados uma vez e são encerrados.
A página de configurações finais do assistente contém outras opções que serão incluídas na definição da tarefa, incluindo a opção de usar uma definição de tarefa existente ou criar uma nova. Aqui, também, selecione o perfil do IAM para o código da aplicação (perfil da tarefa) se a aplicação fizer chamadas para os serviços da AWS e o perfil de execução que será assumido pelo Amazon ECS, que concederá acesso às suas imagens de registro privadas e a outros recursos necessários para fornecer recursos durante a implantação. Por fim, especifique a porta do contêiner que deve ser exposta e quaisquer variáveis de ambiente adicionais.
Com todas as configurações concluídas, selecionar Publicar inicia a implantação. Semelhante à funcionalidade mais recente de Publicar na AWS, o kit de ferramentas percorrerá uma série de etapas para concluir a implantação. Essas etapas podem ser seguidas na saída de progresso do assistente ou no painel Amazon Web Services da Janela de saída do IDE.
- A aplicação será construída e a imagem do contêiner será criada.
- A autenticação é realizada no registro privado do Amazon ECR e a imagem é enviada para um repositório. O nome do repositório a ser usado foi especificado na primeira página do assistente, com o nome do projeto como padrão.
- O cluster e outros recursos apropriados para as configurações escolhidas no assistente são fornecidos e configurados.
Quando o provisionamento de recursos estiver concluído para o cluster, o kit de ferramentas abrirá uma visualização de Cluster. Aqui você pode monitorar o progresso das tarefas que começam a ser executadas para atender ao número especificado no assistente e, para os serviços, encontrar o URL para acessar a aplicação implantada se um balanceador de carga tiver sido selecionado durante o assistente.
Implantação em contêineres de pipelines de CI/CD
O assistente Publicar contêiner na AWS no Visual Studio foi projetado para desenvolvedores por meio de iterações em uma aplicação dentro do IDE. Para a automação de CI/CD ou para uso por desenvolvedores que não trabalham em um sistema Windows, a AWS fornece um pacote de ferramentas NuGet, Amazon.ECS.Tools, que estende o dotnet CLI. Para instalar essa ferramenta, abra um shell de linha de comando e execute o comando:
dotnet tool install -g Amazon.ECS.Tools.
Para começar após a instalação, para visualizar as opções de comando de nível superior, execute o comando:
dotnet ecs
Para iniciar uma implantação, de dentro da pasta do projeto da sua aplicação, execute:
dotnet ecs deploy
A ajuda adicional sobre a ferramenta e todos os seus comandos está disponível ao usar a opção --help.
Para aplicações que foram implantadas anteriormente usando o assistente no Visual Studio, as configurações selecionadas no assistente estão disponíveis por padrão em um arquivo de texto no formato JSON, aws-ecs-tols-defaults.json. Esse arquivo é encontrado no diretório do projeto da aplicação. Essas configurações serão lidas pela ferramenta de linha de comando e podem ser substituídas conforme necessário.
Mais informações sobre a implantação de aplicações em contêineres na AWS usando a extensão Amazon.ECS.Tools dotnet CLI, incluindo seu uso na automação de CI/CD, serão discutidas mais adiante neste módulo, na seção intitulada Implantação de contêineres .NET na AWS na linha de comando.
Exclusão de implantações feitas com a opção Publicar contêiner na AWS
Para excluir implantações feitas com o assistente Publicar contêiner na AWS, use um dos seguintes métodos:
- No Console de Gerenciamento da AWS, navegue até o painel do ECS, selecione o cluster na lista exibida e escolha Excluir cluster na visualização de detalhes do cluster.
- No Visual Studio, abra a visualização de clusters da aplicação implantada, selecione Editar e defina Contagem de tarefas desejadas como 0. Quando nenhuma tarefa estiver em execução, selecione Excluir na visualização de Clusters ou no menu de contexto da entrada do cluster na visualização do AWS Explorer para excluir o cluster.
- Depois que o cluster for excluído, talvez você também queira excluir o repositório que contém a(s) imagem(ns) usada(s) durante a implantação.
Depois que o cluster for excluído, talvez você também queira excluir o repositório que contém a(s) imagem(ns) usada(s) durante a implantação.
Observação: a extensão de linha de comando Amazon.ECS.Tools não é compatível com a exclusão de implantações.
Resumo
A opção Publicar contêiner na AWS oferece uma abordagem baseada em assistentes para a implantação de aplicações no Amazon ECS (com ou sem o AWS Fargate) e no Amazon ECR. Ao contrário da opção Publicar na AWS, a opção Publicar contêiner no ECS é compatível apenas com o Amazon ECS, o AWS Fargate e o Amazon ECR como destinos de implantação. Além disso, as opções de implantação são limitadas àquelas fornecidas no assistente ou no equivalente em linha de comando e não podem ser personalizadas. A opção Publicar na AWS é a ferramenta de substituição preferencial para implantação na AWS para aplicações .NET. No entanto, para as equipes que não conseguem adotar a nova experiência, o assistente mais antigo e a extensão de linha de comando ainda são compatíveis e estão disponíveis para uso.
Implantação de contêineres .NET na AWS na linha de comando
A AWS fornece duas ferramentas de linha de comando gratuitas para trabalhar com aplicações .NET em contêineres. Ambas são distribuídas no NuGet e ampliam a experiência do dotnet CLI com comandos adicionais que permitem a implantação de aplicações .NET no Amazon ECS, no AWS Fargate e no Amazon ECR. Essas extensões dotnet CLI não são compatíveis com a implantação de aplicações .NET Framework.
Observação: no momento em que este artigo é escrito, embora os projetos de implantação personalizados possam ser usados tanto na linha de comando quanto no Visual Studio, eles só podem ser criados usando a ferramenta de linha de comando.
AWS.Deploy.Tools
O pacote AWS.Deploy.Tools no NuGet é o equivalente em linha de comando da opção Publicar na AWS no Visual Studio no Windows. A versão de linha de comando, que pode ser usada nas plataformas Windows, macOS e Linux, apresenta as mesmas fórmulas de implantação disponíveis no Visual Studio. Isso inclui a capacidade de selecionar projetos de implantação personalizados definidos para uma aplicação. O pacote é mantido como um projeto de código aberto no GitHub.
Observação: no momento em que este artigo é escrito, embora os projetos de implantação personalizados possam ser usados tanto na linha de comando quanto no Visual Studio, eles só podem ser criados usando a ferramenta de linha de comando.
Para instalar o pacote, abra um shell de linha de comando e execute o comando:
dotnet tool install -g aws.deploy.tools
Novas versões são lançadas periodicamente. Para atualizar, execute o comando:
dotnet tool update -g aws.deploy.tools
Assim como a opção Publicar na AWS no Visual Studio, o pacote AWS.Deploy.Tools depende do Node.js e do kit de desenvolvimento em nuvem da AWS, portanto, certifique-se de instalá-los também.
Após a instalação, para verificar se a instalação foi bem-sucedida e ver as opções de comando de nível superior disponíveis, execute:
dotnet aws
Para iniciar uma implantação na linha de comando, na pasta que contém o arquivo do projeto da aplicação (arquivo .csproj), execute o comando:
dotnet aws deploy
A aplicação é analisada e um conjunto de fórmulas de implantação numeradas é exibido para seleção. Na captura de tela abaixo, a ferramenta concluiu a análise de uma aplicação que atualmente não possui um Dockerfile e está recomendando a implantação em máquinas virtuais no AWS Elastic Beanstalk. No entanto, isso pode ser alterado inserindo o número da fórmula desejada, neste caso, 3, para implantar como contêineres usando o AWS Fargate. Um Dockerfile será criado durante a implantação e adicionado ao projeto.
Depois que a fórmula tiver sido selecionada, uma série de prompts reunirá as informações necessárias, como o nome da implantação (cujo padrão é o nome do projeto, mas que pode ser alterado). Outras configurações opcionais são ajustáveis por meio de submenus numerados.
Na captura de tela acima, ao pressionar "4", seria possível selecionar um perfil do IAM personalizado para a aplicação a ser assumida durante a execução, em vez de a implantação criar um novo perfil vazio. Opções adicionais e avançadas para configurar a implantação estão disponíveis ao digitar “mais”.
Quando as configurações estiverem corretas, pressione a tecla Enter para iniciar a implantação. Nos cenários em que a aplicação não precisa de um perfil personalizado a ser especificado e os valores padrão propostos são aceitáveis, basta pressionar a tecla Enter duas vezes, uma para confirmar o nome padrão da implantação e outra para iniciar a implantação da aplicação.
Da mesma forma que a implantação no Visual Studio, se uma fórmula de contêiner tiver sido selecionada, um Dockerfile será gerado, se necessário, a imagem será criada e enviada para o Amazon ECR (a ferramenta autentica para você) e um projeto CDK será criado para fornecer a infraestrutura, que será então implantada no AWS CloudFormation. Os eventos e outras informações de status da implantação são transmitidos ao terminal. Por fim, o URL do endpoint da aplicação é gerado junto com outras informações resumidas, como os nomes do cluster e do serviço.
A reimplantação de aplicações também é compatível com a linha de comando. Quando a implantação do dotnet aws é executada na pasta de um projeto que foi implantado anteriormente, ela primeiro listará as implantações existentes para seleção, e em seguida haverá a opção de selecionar uma fórmula para uma nova implantação.
Implantação de contêineres de pipelines de CI/CD
O AWS.Deploy.Tools pode ser usado em pipelines de integração e entrega contínuas. No entanto, nesses cenários, os prompts podem ser problemáticos. Para desativar o prompt, adicione a opção --silent ao seu comando.
Com os prompts desativados, a ferramenta não consegue reunir as configurações de implantação quando é executada. Para fornecer todas as configurações necessárias e opcionais, especifique-as em um arquivo de texto no formato JSON e forneça o nome do arquivo, opcionalmente com um caminho, ao comando de implantação com a opção --apply:
dotnet aws deploy --apply settings.json –-silent
A criação de um arquivo de configurações está fora do escopo deste curso. Um link para a definição do arquivo no repositório do GitHub da ferramenta está disponível na seção intitulada Como criar um arquivo de configuração de implantação no repositório AWS .NET do GitHub.
Criação de projetos de implantação personalizados
Embora não seja o assunto deste curso nem seja discutido em mais detalhes, saiba que você pode criar projetos de implantação personalizados para suas aplicações .NET em contêineres. A criação de um projeto de implantação personalizado permite adicionar infraestrutura adicional ou outros ativos para comportar a aplicação implantada e personalizar o ambiente de runtime. Os projetos de implantação personalizados podem ser verificados no controle de origem, juntamente com sua aplicação, e compartilhados com toda a equipe de desenvolvimento, o que garante que todos façam a implantação com as mesmas configurações e personalizações, independentemente de estarem implantando no Visual Studio ou na linha de comando.
Consulte https://aws.github.io/aws-dotnet-deploy/docs/deployment-projects/cdk-project/ para obter mais informações sobre o uso de projetos de implantação personalizados com a opção Publicar na AWS no Visual Studio ou com o AWS.Deploy.Tools na linha de comando.
Exclusão de implantações de contêineres feitas com o AWS.Deploy.Tools
As implantações de aplicações realizadas usando o AWS.Deploy.Tools e a opção Publicar na AWS no Visual Studio podem ser facilmente excluídas quando se trabalha na linha de comando ao executar o comando:
dotnet aws delete-deployment deployment-name
Substitua deployment-name pelo nome da pilha do AWS CloudFormation que foi criada para a implantação.
Amazon.ECS.Tools
O pacote Amazon.ECS.Tools no NuGet é o equivalente em linha de comando da opção Publicar contêiner na AWS no Visual Studio. O pacote pode ser usado nas plataformas Windows, macOS e Linux e é mantido como um projeto de código aberto no GitHub. Esse repositório inclui duas outras extensões dotnet CLI usadas para a implantação no AWS Lambda e no AWS Elastic Beanstalk.
Para visualizar as opções de comando de nível superior, execute o comando:
dotnet ecs
Todos os comandos têm ajuda adicional, que pode ser acessada com a opção --help.
Para iniciar uma implantação, primeiro decida se você está implantando em um serviço (executado continuamente), uma tarefa (executada uma vez e encerrada) ou uma tarefa programada (executada periodicamente, encerrada após cada execução). Como alternativa, a imagem pode ser criada e enviada para um repositório em seu registro privado do Amazon ECR. Para o exemplo de site da Web usado neste curso, um serviço em execução contínua é a escolha adequada. Especificar o comando deploy-service com a opção --help lista todas as configurações que podem ser aplicadas.
Depois que a imagem for inserida, será solicitado que você forneça o tipo de inicialização, EC2 ou FARGATE. Para os tipos de inicialização do EC2, é necessário que você já tenha criado a infraestrutura de cluster necessária. O tipo de inicialização FARGATE não exige nenhum pré-provisionamento, mas requer a especificação da CPU e da memória para a tarefa. Consulte https://docs.aws.amazon.com/AmazonECS/latest/userguide/task_definition_parameters.html para verificar as últimas combinações válidas de valores, que diferem um pouco entre os tipos de contêineres do Linux e do Windows.
Na captura de tela abaixo, o FARGATE foi selecionado como o tipo de inicialização, com 512 MB de memória e uma CPU correspondente de 256 (0,25 vCPU). A ferramenta também solicitou valores para os nomes do cluster e do serviço, antes de concluir a implantação. Depois que esses valores são inseridos e validados, a implantação é solicitada e o comando é encerrado.
Observação: ao contrário da opção Publicar na AWS e do AWS.Deploy.Tools, discutidos anteriormente neste módulo, os comandos do Amazon.ECS.Tools não dependem da conclusão da implantação. Será necessário acessar o console de gerenciamento ou usar a visualização de Clusters no Visual Studio para obter dados como o URL da aplicação implantada.
O arquivo de configurações gravado por essa implantação é mostrado na captura de tela abaixo. É muito semelhante ao que seria gravado para uma implantação iniciada no Visual Studio (a versão do IDE grava um pouco mais de configurações). Esse arquivo pode ser verificado em um repositório de código-fonte, juntamente com o código da aplicação, e usado com o Visual Studio no Windows e com implantações de linha de comando no Windows, macOS e Linux. Um arquivo de configurações muito mais extenso pode ser criado manualmente para fornecer valores para todas as opções de linha de comando. Por conveniência, os nomes das opções correspondem às chaves no arquivo de configurações.
Implantação de contêineres de pipelines de CI/CD
O Amazon.ECS.Tools pode ser usado em pipelines de integração e entrega contínuas. No entanto, nesses cenários, os prompts podem ser problemáticos. Para desativar o prompt, adicione a opção --disable-interactive ao seu comando.
Com os prompts desativados, a ferramenta não consegue reunir as configurações de implantação quando é executada. Para fornecer todas as configurações necessárias e opcionais, especifique-as no arquivo de configurações no formato JSON e forneça o nome do arquivo, opcionalmente com um caminho, ao comando de implantação com a opção --config-file.
Exclusão de implantações de contêineres feitas com o Amazon.ECS.Tools
O Amazon.ECS .Tools não é compatível com a exclusão de aplicações de contêineres implantados na linha de comando. Para excluir uma implantação, use uma das seguintes opções.
- No Console de Gerenciamento da AWS, navegue até o painel do ECS, selecione o cluster na lista exibida e escolha Excluir cluster na visualização de detalhes do cluster.
- No Visual Studio, abra a visualização de clusters da aplicação implantada, selecione Editar e defina Contagem de tarefas desejadas como 0. Quando nenhuma tarefa estiver em execução, selecione Excluir na visualização de Clusters ou no menu de contexto da entrada do cluster na visualização do AWS Explorer para excluir o cluster.
Depois que o cluster for excluído, é possível que você também queira excluir o repositório que contém a(s) imagem(ns) usada(s) durante a implantação.
Implantação de contêineres .NET na AWS do Azure DevOps
Para implantar aplicações .NET no Amazon ECS e no AWS Fargate de pipelines de DevOps do Azure, existe a opção de usar as extensões AWS.Deploy.Tools ou Amazon.ECS.Tools dotnet CLI, que foram descritas anteriormente neste módulo. Em ambos os casos, instale a ferramenta conforme mostrado durante o pipeline e, em seguida, execute os comandos de implantação apropriados em uma tarefa de shell, usando arquivos de configuração de definições para fornecer as definições necessárias e opcionais, juntamente com as opções --silent (AWS.Deploy.Tools) ou -disable-interactive- (Amazon.ECS.Tools) para suprimir o prompt.
Como alternativa, para cenários em que a compilação precisa simplesmente inserir ou extrair imagens de um repositório no seu registro privado do Amazon ECR, a extensão AWS Tools para Azure DevOps contém duas tarefas que podem ser convenientes.
As ferramentas podem ser instaladas do marketplace do Azure DevOps. Depois de instalado e configurado com as credenciais de serviço, adicione as tarefas Amazon ECR Push ou Amazon ECR Pull ao seu pipeline de compilação. Abaixo está uma captura de tela das configurações disponíveis no comando push.
As tarefas tornam a configuração de uma operação de inserção ou extração de uma imagem criada anteriormente no pipeline simples e conveniente, cuidando do processo de autorização necessário no repositório para você. As ferramentas são mantidas como um projeto de código aberto no GitHub, e mais informações sobre a configuração pós-instalação e as tarefas individuais dentro das ferramentas podem ser encontradas no guia do usuário.
Verificação de conhecimento
Você concluiu o Módulo 2, Ferramentas para o desenvolvimento de contêineres .NET na AWS. O teste a seguir verificará o que você aprendeu até agora.
1. Em quais serviços a ferramenta Publicar na AWS publica? (selecione dois)
a. Lambda
b. ECS
c. EC2
d. ECR
2. Quais são os dois pré-requisitos necessários para usar a ferramenta Publicar na AWS?
a. C# e Node.js
b. CDK e Node.js
c. Python e CDK
d. Python e Node.js
3. Em quais sistemas operacionais o pacote AWS.Deploy.Tools pode ser usado?
a. Windows
b. macOS
c. Linux
d. Todas as opções acima
Respostas: 1-b e d, 2-b, 3-d