Esse guia dá o passo-a-passo para realizar um deploy serverless dessa aplicação, acessível via a internet. Usaremos:
- IAM
- AWS ECR
- AWS ECS Fargate
- VPC Pública
Esse guia assume que você esteja familiarizado com AWS, tenha criado um bucket S3 para testar a aplicação e tenha o AWS CLI instalado.
git clone https://github.com/SecurityForCloudBuilders/FileStorageDemoApp.git
ECR > Repositories > Create Repository
Escolha um nome. As configurações padrão são aceitáveis.
O repositório pode ser privado ou público. Para princípios desse guia, vamos seguir assumindo um repositório privado.
(Obs: Será necessário ter o AWS CLI instalado e configurado para esse passo.)
Na tela do repositório, clique em view push commands.
Siga as instruções na tela. Elas mostram como obter os tokens de autenticação para realizar o push da imagem para seu repositório ECR.
A imagem agora está pronta para uso.
O IAM Role ecsTaskExecutionRole gerenciado pela AWS provê as permissões que necessitamos. Ele utiliza uma única policy chamada AmazonECSTaskExecutionRolePolicy
Caso a role e/ou a policy não existam, siga esse guia para criar novos
Selecione Fargate - a infraestrutura subjacente é gerenciada pela AWS e podemos focar na aplicação.
Aqui é onde faremos a configuração propriamente dita.
- Em
Task RoleeTask execution roleadicione oecsTaskExecutionRole- Caso esse Role não exista, ou ocorra algum erro de permissões, verifique o passo 3
- Em
Task Sizeconfigure a memória e CPU necessários. 0.5GB e 0.25vCPUs serão suficientes para o Coffeeshop
- Container Name: Escolha um nome
- Image: Coloque a URI e tag do repositório que criamos no passo 1
- Port Mapping: Adicione um Port mapping com a porta
8080e protocolotcp - Em
Advanced container configuration > Environmentadicione as quatro variáveis de ambiente com seus respectivos valores, como no README.AWS_ACCESS_KEY_IDAWS_SECRET_ACCESS_KEYBUCKET_NAMEBUCKET_REGION- (!) IMPORANTE (!) Adicionar credenciais de acesso em texto-plano como feito aqui, é uma má-prática de segurança. Ela será utilizada por simplicidade e pela natureza dessa aplicação (testes/prova de conceito). Nunca faça isso em um contexto real.
ECS > Clusters > Create Cluster
- Em
TemplateSelecioneNetworking Only (Powered by AWS Fargate) - Adicione um nome para o Cluster.
- Você pode criar uma VPC pública se já não tiver uma.
Em ECS > Clusters Selecione o Cluster que você criou
Tasks > Run new Task
- Selecione o Launch Type como
Fargate - Selecione a Task definition que você configurou
- Selecione uma VPC e sub-net acessíveis publicamente. Selecione ou crie um Security Group que autorize tráfego TCP na porta 8080
- Libere auto-assign public-IP
- Se necessário, você pode alterar os valores das variáveis de ambiente em
Advanced Options > Container Overrides - Clique em
Run Task
Na Lista de Tasks, selecione a task recém-criada. Sob network, está o IP público do seu container. Acesse o container do seu browser. ip:8080
Na Lista de Tasks, selecione a task recém-criada. Clique em Stop