Implantar uma aplicação Web no Amazon EC2
GUIA DE CONCEITOS BÁSICOS
Módulo 2: Automatizar a configuração
Neste módulo, você aprenderá a usar dados de usuários para configurar uma instância do EC2 e instalar pacotes de software nela
Introdução
Ao executar uma instância no Amazon EC2, você tem a opção de transmitir dados de usuários para ela e usá-los para realizar tarefas comuns de configuração automatizada e até mesmo executar scripts após a execução da instância. Use esse recurso para simplificar a implantação da aplicação especificando o software que será instalado e configurado na primeira execução e copie a aplicação de exemplo para a instância. Este módulo mostra como criar e adicionar dados de usuários à instância do EC2 criada no módulo anterior.
O que você aprenderá
- Adicionar dados de usuários à instância do EC2
- Criar os dados de usuários para instalar e configurar todos os pacotes necessários no sistema operacional
- Implantar a aplicação Web copiando-a para a instância
Tempo para a conclusão
5 minutos
Pré-requisitos do módulo
- Conta da AWS com acesso em nível de administrador**
- Navegador recomendado: versão mais recente do Chrome ou Firefox
[**]É possível que as contas criadas nas últimas 24 horas ainda não tenham acesso aos serviços necessários para este tutorial.
Implementação
Adicionar dados de usuários à instância do EC2
A aplicação Web de exemplo encontrada na pasta SampleApp é uma aplicação Python que será implantada. Ela precisa do Nginx e do uWSGI para ser executada. Para instalar os componentes, é preciso seguir uma série de etapas. Primeiro, instale todos os pacotes do sistema operacional, configure o nginx e o uwsgi, verifique se eles estão em execução e copie a aplicação de exemplo para a instância. Consulte o arquivo de script que mostra todas as etapas de configuração: SampleApp/configure_amz_linux_sample_app.sh. Confira as etapas para saber mais sobre a configuração da instância.
Para implantar a aplicação Web, adicione um código ao CDK para copiar os arquivos e scripts de configuração e a aplicação de exemplo ao S3. Ajuste os scripts de configuração. Para fazer isso, adicione o seguinte código em ec2-cdk-stack.ts abaixo do código anterior:
// Use an asset to allow uploading files to S3, and then download it to the EC2 instance as part of the user data
// --- Sample App ---
// Upload the sample app to S3
const sampleAppAsset = new s3assets.Asset(this, "SampleAppAsset", {
path: path.join(__dirname, "../../SampleApp"),
});
// Allow EC2 instance to read the file
sampleAppAsset.grantRead(role);
// Download the file from S3, and store the full location and filename as a variable
const sampleAppFilePath = ec2Instance.userData.addS3DownloadCommand({
bucket: sampleAppAsset.bucket,
bucketKey: sampleAppAsset.s3ObjectKey,
});
// --- Sample App ---
// --- Configuration Script ---
// Upload the configuration file to S3
const configScriptAsset = new s3assets.Asset(this, "ConfigScriptAsset", {
path: path.join(__dirname, "../../SampleApp/configure_amz_linux_sample_app.sh"),
});
// Allow EC2 instance to read the file
configScriptAsset.grantRead(ec2Instance.role);
// Download the file from S3, and store the full location and filename as a variable
const configScriptFilePath = ec2Instance.userData.addS3DownloadCommand({
bucket: configScriptAsset.bucket,
bucketKey: configScriptAsset.s3ObjectKey,
});
// Add a line to the user data to executy the downloaded file
ec2Instance.userData.addExecuteFileCommand({
filePath: configScriptFilePath,
arguments: sampleAppFilePath,
});
// --- Configuration Script ---
Todas as etapas serão adicionadas ao script de dados de usuários da instância e realizadas quando você executá-la. Antes de implantar tudo, siga mais uma etapa: adicione a saída da pilha do CDK para facilitar a conexão SSH à instância. Na infraestrutura acima, você criou uma chave SSH, que é armazenada no AWS Secrets Manager. Para baixá-la para a estação de trabalho, é preciso recuperá-la. Você também precisará do IP público da instância e do comando SSH a ser executado.
Adicione o seguinte código à pilha na parte inferior:
// Create outputs for connecting
// Output the public IP address of the EC2 instance
new cdk.CfnOutput(this, "IP Address", {
value: ec2Instance.instancePublicIp,
});
// Command to download the SSH key
new cdk.CfnOutput(this, "Download Key Command", {
value:
"aws secretsmanager get-secret-value --secret-id ec2-ssh-key/cdk-keypair/private --query SecretString --output text > cdk-key.pem && chmod 400 cdk-key.pem",
});
// Command to access the EC2 instance using SSH
new cdk.CfnOutput(this, "ssh command", {
value:
"ssh -i cdk-key.pem -o IdentitiesOnly=yes ec2-user@" +
ec2Instance.instancePublicIp,
});
As três saídas exibirão o seguinte:
- Como baixar a chave SSH para acessar a instância
- O IP público da instância
- Um comando SSH para acessar a instância.
Agora você já pode implantar a pilha.
Conclusão
Neste módulo, você aprendeu a adicionar dados de usuários a uma instância do EC2 para configurá-la ao executá-la pela primeira vez. Você os usou para instalar todas as dependências, configurar o nginx e o uwsgi e implantar a aplicação de exemplo. No próximo módulo, você implantará a pilha e a aplicação de exemplo.
A seguir: Implantar a pilha do CDK