Tutorial: Implantação de um aplicativo ASP.NET Core com o Elastic Beanstalk - AWS Elastic Beanstalk

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

Tutorial: Implantação de um aplicativo ASP.NET Core com o Elastic Beanstalk

Neste tutorial, você percorrerá o processo de criação de um novo aplicativo ASP.NET Core e sua implantação no. AWS Elastic Beanstalk

Primeiramente, você usará a ferramenta de linha de comando dotnet do .NET Core SDK para gerar um aplicativo de linha de comando do .NET Core básico, instalar dependências, compilar código e executar aplicativos localmente. Em seguida, você modificará a classe Program.cs padrão e adicionará uma classe Startup.cs do ASP.NET e arquivos de configuração para criar um aplicativo que atenda às solicitações HTTP com ASP.NET e IIS.

Por fim, o Elastic Beanstalk usará um manifesto de implantação para configurar as implantações de aplicações .NET Core, aplicações personalizadas e várias aplicações .NET Core ou MSBuild em um único servidor. Para implantar um aplicativo .NET Core em um ambiente Windows Server, adicione um arquivo do site a um pacote de origem do aplicativo com um manifesto de implantação. O comando dotnet publish gera classes e dependências compiladas que você pode combinar a um arquivo web.config para criar o arquivo do site. O manifesto de implantação informa para o Elastic Beanstalk o caminho em que o site deve ser executado e pode ser usado para configurar grupos de aplicações e executar várias aplicações em caminhos diferentes.

O código-fonte está disponível aqui: dotnet-core-windows-tutorial.zip

Pré-requisitos

Este tutorial usa o .NET Core SDK para gerar um aplicativo .NET Core básico, executá-lo localmente e criar um pacote implantável.

Requisitos
  • .NET Core (x64) 1.0.1, 2.0.0 ou mais recente

Como instalar o .NET Core SDK
  1. Faça download do instalador em microsoft.com/net/core. Selecione Windows. Escolha Baixar o .NET SDK.

  2. Execute o instalador e siga as instruções.

Este tutorial usa um utilitário ZIP de linha de comando para criar um pacote de origem que você pode implantar no Elastic Beanstalk. Para usar o comando zip no Windows, você pode instalar o UnxUtils, uma coleção simples de utilitários de linha de comando úteis, como zip e ls. Se preferir, você pode usar o Windows Explorer ou qualquer outro utilitário ZIP para criar arquivos de pacote de origem.

Para instalar UnxUtils
  1. Baixar UnxUtils.

  2. Extraia o arquivo em um diretório local. Por exemplo, C:\Program Files (x86).

  3. Adicione o caminho aos binários para sua variável de usuário PATH do Windows. Por exemplo, C:\Program Files (x86)\UnxUtils\usr\local\wbin.

    1. Pressione a tecla Windows e insira environment variables.

    2. Escolha Edit environment variables for your account.

    3. Selecione PATH e, em seguida, Edit (Editar).

    4. Adicione caminhos ao campo Variable value, separados por ponto e vírgula. Por exemplo: C:\item1\path;C:\item2\path

    5. Selecione OK duas vezes para aplicar as novas configurações.

    6. Feche todas as janelas do prompt de comando em execução e abra novamente uma janela do prompt de comando.

  4. Abra uma nova janela de solicitação de comando e execute o comando zip para verificar se ele funciona.

    > zip -h Copyright (C) 1990-1999 Info-ZIP Type 'zip "-L"' for software license. ...

Gerar um projeto .NET Core

Use a ferramenta de linha de comando dotnet para gerar um novo projeto .NET Core em C# e executá-lo localmente. O aplicativo .NET Core padrão é um utilitário de linha de comando que imprime Hello World! e depois é encerrado.

Como gerar um novo projeto .NET Core
  1. Abra uma nova janela de prompt de comando e navegue até a pasta do usuário.

    > cd %USERPROFILE%
  2. Use o comando dotnet new para gerar um novo projeto .NET Core.

    C:\Users\username> dotnet new console -o dotnet-core-tutorial Content generation time: 65.0152 ms The template "Console Application" created successfully. C:\Users\username> cd dotnet-core-tutorial
  3. Use o comando dotnet restore para instalar dependências.

    C:\Users\username\dotnet-core-tutorial> dotnet restore Restoring packages for C:\Users\username\dotnet-core-tutorial\dotnet-core-tutorial.csproj... Generating MSBuild file C:\Users\username\dotnet-core-tutorial\obj\dotnet-core-tutorial.csproj.nuget.g.props. Generating MSBuild file C:\Users\username\dotnet-core-tutorial\obj\dotnet-core-tutorial.csproj.nuget.g.targets. Writing lock file to disk. Path: C:\Users\username\dotnet-core-tutorial\obj\project.assets.json Restore completed in 1.25 sec for C:\Users\username\dotnet-core-tutorial\dotnet-core-tutorial.csproj. NuGet Config files used: C:\Users\username\AppData\Roaming\NuGet\NuGet.Config C:\Program Files (x86)\NuGet\Config\Microsoft.VisualStudio.Offline.config Feeds used: https://api.nuget.org/v3/index.json C:\Program Files (x86)\Microsoft SDKs\NuGetPackages\
  4. Use o comando dotnet run para criar e executar o aplicativo localmente.

    C:\Users\username\dotnet-core-tutorial> dotnet run Hello World!

Iniciar um ambiente do Elastic Beanstalk

Use o console do Elastic Beanstalk para iniciar um ambiente do Elastic Beanstalk. Para este exemplo, você o iniciará com uma plataforma .NET. Após iniciar e configurar seu ambiente, você poderá implantar um novo código-fonte a qualquer momento.

Para iniciar um ambiente (console)
  1. Abra o console do Elastic Beanstalk usando este link pré-configurado: console.aws.amazon.com/elasticbeanstalk/home#/ newApplication?applicationName=Tutorials &EnvironmentType= LoadBalanced

  2. Em Platform (Plataforma), selecione a plataforma e a ramificação da plataforma que correspondem à linguagem usada pelo seu aplicativo.

  3. Para Application code, escolha Sample application.

  4. Selecione Review and launch.

  5. Examine as opções disponíveis. Escolha a opção disponível que deseja usar e, quando estiver pronto, escolha Create app (Criar aplicativo).

A criação do ambiente leva cerca de 10 minutos. Durante esse período, você pode atualizar seu código-fonte.

Atualizar o código-fonte

Modifique o aplicativo padrão para um aplicativo web que usa ASP.NET e IIS.

  • ASP.NET é a framework de site para .NET.

  • O IIS é o servidor Web que executa a aplicação nas instâncias do Amazon EC2 no ambiente do Elastic Beanstalk.

Os exemplos de código-fonte a seguir estão disponíveis aqui: dotnet-core-tutorial-source.zip

nota

O procedimento a seguir mostra como converter o código do projeto em um aplicativo web. Para simplificar o processo, é possível gerar o projeto como um aplicativo web desde o início. Na seção anterior Gerar um projeto .NET Core, modifique o comando da etapa dotnet new pelo comando a seguir.

C:\Users\username> dotnet new web -o dotnet-core-tutorial -n WindowsSampleApp
Para adicionar suporte para ASP.NET e IIS ao seu código
  1. Copie Program.cs para o diretório do aplicativo para ser executado como um construtor de host da web.

    exemplo c:\users\username\dotnet-core-tutorial\ Program.cs
    namespace Microsoft.AspNetCore.Hosting; using WindowsSampleApp; public static class Program { public static void Main(string[] args) { CreateWebHostBuilder(args).Build().Run(); } public static IWebHostBuilder CreateWebHostBuilder(string[] args) => WebHost.CreateDefaultBuilder(args).UseStartup<Startup>(); }
  2. Adicione Startup.cs para executar um site ASP.NET.

    exemplo c:\users\username\dotnet-core-tutorial\ Startup.cs
    namespace WindowsSampleApp { public class Startup { public void Configure(IApplicationBuilder app) { app.UseRouting(); app.UseEndpoints(endpoints => { endpoints.MapGet("/", () => "Hello World from Elastic Beanstalk"); }); } } }
  3. Adicione WindowsSampleApp.csproj, que inclui o middleware IIS e o arquivo web.config da saída de dotnet publish.

    nota

    O exemplo a seguir foi desenvolvido usando o .NET Core Runtime 2.2.1. Pode ser necessário modificar os valores de atributos TargetFramework ou Version nos elementos PackageReference para corresponder à versão do .NET Core Runtime que está sendo usado nos projetos personalizados.

    exemplo c:\users\username\dotnet-core-tutorial\ WindowsSampleApp .csproj
    <Project Sdk="Microsoft.NET.Sdk.Web"> <PropertyGroup> <TargetFramework>net6.0</TargetFramework> <RollForward>LatestMajor</RollForward> <Nullable>enable</Nullable> <ImplicitUsings>enable</ImplicitUsings> <RootNamespace>WindowsSampleApp</RootNamespace> </PropertyGroup> </Project>

Em seguida, instale as novas dependências e execute o site ASP.NET localmente.

Para executar o site localmente
  1. Use o comando dotnet restore para instalar dependências.

  2. Use o comando dotnet run para criar e executar o aplicativo localmente.

  3. Abra localhost:5000 para visualizar o site.

Para executar o aplicativo em um servidor Web, você precisa empacotar o código-fonte compilado com um arquivo de configuração web.config e dependências de runtime. A ferramenta dotnet oferece um comando publish que reúne esses arquivos em um diretório de acordo com a configuração em dotnet-core-tutorial.csproj.

Para criar seu site
  • Use o comando dotnet publish para gerar o código compilado e as dependências em uma pasta denominada site.

    C:\users\username\dotnet-core-tutorial> dotnet publish -o site

Para implantar a aplicação no Elastic Beanstalk, combine o arquivo do site com um manifesto de implantação. Isso informa o Elastic Beanstalk como executá-lo.

Para criar um pacote de origem
  1. Adicione os arquivos na pasta do site a um arquivo ZIP.

    nota

    Se você usar um utilitário ZIP diferente, certifique-se de adicionar todos os arquivos à pasta raiz do arquivo ZIP resultante. Isso é necessário para uma implantação bem-sucedida da aplicação no ambiente do Elastic Beanstalk.

    C:\users\username\dotnet-core-tutorial> cd site C:\users\username\dotnet-core-tutorial\site> zip ../site.zip * adding: dotnet-core-tutorial.deps.json (164 bytes security) (deflated 84%) adding: dotnet-core-tutorial.dll (164 bytes security) (deflated 59%) adding: dotnet-core-tutorial.pdb (164 bytes security) (deflated 28%) adding: dotnet-core-tutorial.runtimeconfig.json (164 bytes security) (deflated 26%) adding: Microsoft.AspNetCore.Authentication.Abstractions.dll (164 bytes security) (deflated 49%) adding: Microsoft.AspNetCore.Authentication.Core.dll (164 bytes security) (deflated 57%) adding: Microsoft.AspNetCore.Connections.Abstractions.dll (164 bytes security) (deflated 51%) adding: Microsoft.AspNetCore.Hosting.Abstractions.dll (164 bytes security) (deflated 49%) adding: Microsoft.AspNetCore.Hosting.dll (164 bytes security) (deflated 60%) adding: Microsoft.AspNetCore.Hosting.Server.Abstractions.dll (164 bytes security) (deflated 44%) adding: Microsoft.AspNetCore.Http.Abstractions.dll (164 bytes security) (deflated 54%) adding: Microsoft.AspNetCore.Http.dll (164 bytes security) (deflated 55%) adding: Microsoft.AspNetCore.Http.Extensions.dll (164 bytes security) (deflated 50%) adding: Microsoft.AspNetCore.Http.Features.dll (164 bytes security) (deflated 50%) adding: Microsoft.AspNetCore.HttpOverrides.dll (164 bytes security) (deflated 49%) adding: Microsoft.AspNetCore.Server.IISIntegration.dll (164 bytes security) (deflated 46%) adding: Microsoft.AspNetCore.Server.Kestrel.Core.dll (164 bytes security) (deflated 63%) adding: Microsoft.AspNetCore.Server.Kestrel.dll (164 bytes security) (deflated 46%) adding: Microsoft.AspNetCore.Server.Kestrel.Https.dll (164 bytes security) (deflated 44%) adding: Microsoft.AspNetCore.Server.Kestrel.Transport.Abstractions.dll (164 bytes security) (deflated 56%) adding: Microsoft.AspNetCore.Server.Kestrel.Transport.Sockets.dll (164 bytes security) (deflated 51%) adding: Microsoft.AspNetCore.WebUtilities.dll (164 bytes security) (deflated 55%) adding: Microsoft.Extensions.Configuration.Abstractions.dll (164 bytes security) (deflated 48%) adding: Microsoft.Extensions.Configuration.Binder.dll (164 bytes security) (deflated 47%) adding: Microsoft.Extensions.Configuration.dll (164 bytes security) (deflated 46%) adding: Microsoft.Extensions.Configuration.EnvironmentVariables.dll (164 bytes security) (deflated 46%) adding: Microsoft.Extensions.Configuration.FileExtensions.dll (164 bytes security) (deflated 47%) adding: Microsoft.Extensions.DependencyInjection.Abstractions.dll (164 bytes security) (deflated 54%) adding: Microsoft.Extensions.DependencyInjection.dll (164 bytes security) (deflated 53%) adding: Microsoft.Extensions.FileProviders.Abstractions.dll (164 bytes security) (deflated 46%) adding: Microsoft.Extensions.FileProviders.Physical.dll (164 bytes security) (deflated 47%) adding: Microsoft.Extensions.FileSystemGlobbing.dll (164 bytes security) (deflated 49%) adding: Microsoft.Extensions.Hosting.Abstractions.dll (164 bytes security) (deflated 47%) adding: Microsoft.Extensions.Logging.Abstractions.dll (164 bytes security) (deflated 54%) adding: Microsoft.Extensions.Logging.dll (164 bytes security) (deflated 48%) adding: Microsoft.Extensions.ObjectPool.dll (164 bytes security) (deflated 45%) adding: Microsoft.Extensions.Options.dll (164 bytes security) (deflated 53%) adding: Microsoft.Extensions.Primitives.dll (164 bytes security) (deflated 50%) adding: Microsoft.Net.Http.Headers.dll (164 bytes security) (deflated 53%) adding: System.IO.Pipelines.dll (164 bytes security) (deflated 50%) adding: System.Runtime.CompilerServices.Unsafe.dll (164 bytes security) (deflated 43%) adding: System.Text.Encodings.Web.dll (164 bytes security) (deflated 57%) adding: web.config (164 bytes security) (deflated 39%) C:\users\username\dotnet-core-tutorial\site> cd ../
  2. Adicione um manifesto de implantação que aponta para o arquivo do site.

    exemplo c:\users\username\dotnet-core-tutorial\ aws-windows-deployment-manifest .json
    { "manifestVersion": 1, "deployments": { "aspNetCoreWeb": [ { "name": "test-dotnet-core", "parameters": { "appBundle": "site.zip", "iisPath": "/", "iisWebSite": "Default Web Site" } } ] } }
  3. Use o comando zip para criar um pacote de origem denominado dotnet-core-tutorial.zip.

    C:\users\username\dotnet-core-tutorial> zip dotnet-core-tutorial.zip site.zip aws-windows-deployment-manifest.json adding: site.zip (164 bytes security) (stored 0%) adding: aws-windows-deployment-manifest.json (164 bytes security) (deflated 50%)

Implantar o aplicativo

Implante o pacote de origem no ambiente do Elastic Beanstalk criado por você.

Você pode baixar o pacote de origem aqui: .zip dotnet-core-tutorial-bundle

Para implantar um pacote de origem
  1. Abra o console do Elastic Beanstalk e, na lista Regiões, selecione sua. Região da AWS

  2. No painel de navegação, selecione Ambientes e selecione o nome do ambiente na lista.

    nota

    Se você tiver muitos ambientes, use a barra de pesquisa para filtrar a lista de ambientes.

  3. Na página de visão geral do ambiente, escolha Upload and deploy (Fazer upload e implantar).

  4. Use a caixa de diálogo na tela para carregar o pacote de origem.

  5. Escolha Deploy (Implantar).

  6. Quando a implantação for concluída, é possível escolher o URL do site para abri-lo em uma nova guia.

O aplicativo simplesmente grava Hello from ASP.NET Core! na resposta e é retornado.

Ao iniciar um ambiente, os seguintes recursos são criados:

  • Instância do EC2: uma máquina virtual do Amazon Elastic Compute Cloud (Amazon EC2) configurada para executar aplicações Web na plataforma escolhida.

    Cada plataforma executa um conjunto específico de software, arquivos de configuração e scripts para oferecer suporte a uma versão de linguagem, framework, contêiner da web específicos ou a uma combinação deles. A maioria das plataformas usa o Apache ou o NGINX como um proxy reverso que fica na frente da aplicação Web, encaminha solicitações para ela, atende ativos estáticos e gera logs de acesso e de erro.

  • Grupo de segurança de instância: um grupo de segurança do Amazon EC2 configurado para permitir tráfego de entrada na porta 80. Esse recurso permite que o tráfego HTTP do load balancer chegue à instância do EC2 que executa seu aplicativo Web. Por padrão, o tráfego não é permitido em outras portas.

  • Balanceador de carga: um balanceador de carga do Elastic Load Balancing configurado para distribuir solicitações para as instâncias que executam a aplicação. Um load balancer também elimina a necessidade de expor suas instâncias diretamente à Internet.

  • Grupo de segurança do balanceador de carga: um grupo de segurança do Amazon EC2 configurado para permitir tráfego de entrada na porta 80. Esse recurso permite que o tráfego HTTP da Internet acesse o load balancer. Por padrão, o tráfego não é permitido em outras portas.

  • Grupo de Auto Scaling: grupo de Auto Scaling configurado para substituir uma instância se ela for encerrada ou ficar indisponível.

  • Bucket do Amazon S3: um local de armazenamento do seu código-fonte, logs e outros artefatos criados quando o Elastic Beanstalk é utilizado.

  • CloudWatch Alarmes da Amazon — Dois CloudWatch alarmes que monitoram a carga nas instâncias em seu ambiente e que são acionados se a carga for muito alta ou muito baixa. Quando um alarme é acionado, o seu grupo de Auto Scaling pode aumentar ou diminuir.

  • AWS CloudFormation stack — O Elastic AWS CloudFormation Beanstalk usa para lançar os recursos em seu ambiente e propagar as alterações de configuração. Os recursos são definidos em um modelo que você pode visualizar no console doAWS CloudFormation.

  • Nome de domínio: um nome de domínio que encaminha para a aplicação Web no formato subdomínio.região.elasticbeanstalk.com.

    nota

    Para aumentar a segurança de suas aplicações do Elastic Beanstalk, o domínio elasticbeanstalk.com é registrado na Lista Pública de Sufixos (PSL). Para maior segurança, recomendamos que você use cookies com um prefixo __Host- se precisar definir cookies confidenciais no nome de domínio padrão para suas aplicações do Elastic Beanstalk. Essa prática ajudará a defender seu domínio contra tentativas de falsificação de solicitação entre sites (CSRF). Para obter mais informações, consulte a página Set-Cookie na Mozilla Developer Network.

Todos esses recursos são gerenciados pelo Elastic Beanstalk. Quando você encerra o ambiente, o Elastic Beanstalk encerra todos os recursos dele.

nota

O bucket do Amazon S3 que o Elastic Beanstalk cria é compartilhado entre ambientes e não é excluído durante o encerramento do ambiente. Para obter mais informações, consulte Usar o Elastic Beanstalk com o Amazon S3.

Limpeza

Ao terminar de trabalhar com o Elastic Beanstalk, você pode encerrar o ambiente. O Elastic Beanstalk AWS encerra todos os recursos associados ao seu ambiente, como instâncias do Amazon EC2, instâncias de banco de dados, balanceadoresde carga, grupos de segurança e alarmes.

Como encerrar o ambiente do Elastic Beanstalk
  1. Abra o console do Elastic Beanstalk e, na lista Regiões, selecione sua. Região da AWS

  2. No painel de navegação, selecione Ambientes e selecione o nome do ambiente na lista.

    nota

    Se você tiver muitos ambientes, use a barra de pesquisa para filtrar a lista de ambientes.

  3. Escolha Actions (Ações) e depois Terminate Environment (Encerrar ambiente).

  4. Use a caixa de diálogo na tela para confirmar o encerramento do ambiente.

Com o Elastic Beanstalk, é possível criar facilmente um ambiente para a aplicação a qualquer momento.

Próximas etapas

À medida que você desenvolva a aplicação, provavelmente vai precisar gerenciar ambientes e implantá-la sem criar manualmente um arquivo .zip e carregá-la no console do Elastic Beanstalk. A interface de linha de comando do Elastic Beanstalk (EB CLI easy-to-use ) fornece comandos para criar, configurar e implantar aplicativos nos ambientes do Elastic Beanstalk a partir da linha de comando.

Se você usa o Visual Studio para desenvolver seu aplicativo, você também pode usar o AWS Toolkit for Visual Studio para implantar alterações, gerenciar seus ambientes do Elastic Beanstalk e gerenciar outros recursos. AWS Consulte A AWS Toolkit for Visual Studio para obter mais informações.

Para desenvolvimento e teste, convém usar a funcionalidade do Elastic Beanstalk para adicionar uma instância de banco de dados gerenciada diretamente ao seu ambiente. Para obter instruções sobre como configurar um banco de dados no ambiente, consulte Adição de um banco de dados ao seu ambiente do Elastic Beanstalk.

Por fim, se você planeja usar seu aplicativo em um ambiente de produção, configure um nome de domínio personalizado para o seu ambiente e habilite HTTPS para conexões seguras.