Implantar uma aplicação Web de contêiner no Amazon Lightsail

GUIA DE CONCEITOS BÁSICOS

Módulo 3: Implantar um contêiner

Neste módulo, implantaremos nosso contêiner na nuvem

Introdução

Agora que seu Amazon Lightsail Container Service está pronto, a próxima etapa é implantar o contêiner.

O Amazon Lightsail é capaz de implantar contêineres de repositórios de imagem de contêiner públicos, como o Docker Hub, Amazon ECR Public Gallery ou sua máquina local.

Neste guia, implantaremos diretamente desde seu computador local.

O que você aprenderá

  • Enviar por push a imagem de contêiner para o Amazon Lightsail
  • Implantar uma versão da sua imagem de contêiner em um serviço de contêiner

 Tempo para a conclusão

10 minutos

 Pré-requisitos do módulo

  • Conta da AWS com acesso de administrador**
  • Navegador recomendado: versão mais recente do Chrome ou Firefox

[**]Talvez as contas criadas nas últimas 24 horas ainda não tenham acesso aos serviços necessários para este tutorial.

Implementação

Envie por push uma imagem de contêiner local

A primeira etapa para implantar um contêiner é enviar uma imagem do contêiner para o Amazon Lightsail

Abra um terminal no diretório em que você criou seu contêiner e digite o comando abaixo. Certifique-se de usar a mesma região em que criou seu serviço de contêiner do Lightsail.

aws lightsail push-container-image    \
    --region eu-west-3                \
    --service-name signup-application \
    --label latest                    \
    --image demo-flask-signup:latest

# the command outputs the following lines
f017a6ddb209: Pushed 
b94dee417b5e: Pushed 
37d77b23a488: Pushed 
8e77a3b871e7: Pushed 
4bc5d67b6427: Pushed 
ce8ffb5c560e: Pushed 
4226d5d0360f: Pushed 
9d1af766c818: Pushed 
d97733c0a3b6: Pushed 
c553c6ba5f13: Pushed 
48b4a40de359: Pushed 
ace9ed9bcfaf: Pushed 
764055ebc9a7: Pushed 
Digest: sha256:128f84907d30a1fb47c1888720485fa8050cc99bc1034e0cfd1f46d3b6e57e19
Image "demo-flask-signup:latest" registered.
Refer to this image as ":signup-application.latest.1" in deployments.    

O comando invoca o push do docker para transferir sua imagem para o Amazon Lightsail. Essa operação poderá levar alguns minutos para ser concluída dependendo da largura de banda da sua rede.

A última linha da saída fornece o nome interno do seu contêiner. No nosso caso, signup-application.latest.1. Anote-o, pois precisaremos desse nome para implantar o contêiner no serviço de contêiner. Caso queira acessar o nome do contêiner posteriormente, você poderá digitar o seguinte comando:

aws lightsail get-container-images    \
    --region eu-west-3                \
    --service-name signup-application

# the command outputs the following lines
{
    "containerImages": [
        {
            "image": ":signup-application.latest.1",
            "digest": "sha256:128f84907d30a1fb47c1888720485fa8050cc99bc1034e0cfd1f46d3b6e57e19",
            "createdAt": "2021-07-17T15:11:49+02:00"
        }
    ]
}  

Envie por push uma imagem do contêiner local para o LightSail

Agora que a imagem do contêiner está armazenada no Amazon Lightsail, podemos implantar essa imagem no serviço de contêiner.

O Lightsail requer as seguintes informações para criar uma implantação:

  • O nome da imagem do contêiner a ser implantado (:signup-application.latest.1, conforme retornado pelo comando anterior)
  • A porta de rede exposta pelo contêiner (conforme descrito na configuração do Dockerfile)
  • (opcional) Detalhes de um endpoint de rede acessível publicamente: um número de porta TCP e protocolo, o IP será atribuído automaticamente.

Todas essas informações são armazenadas em um arquivo JSON que você precisa criar antes da implantação.

Crie um arquivo JSON denominado lc.json. Se estiver trabalhando com o código baixado, você modificará o arquivo lc.json existente, que está no mesmo diretório do seu contêiner. Copie o seguinte json no arquivo:

{
    "serviceName": "signup-application",
    "containers": {
        "signup-app-container": {
            "image": ":signup-application.latest.1",
            "ports": {
                "80": "HTTP"
            }
        }
    },
    "publicEndpoint": {
        "containerName": "signup-app-container",
        "containerPort": 80
    }
}

Em seguida, implante o contêiner digitando o seguinte comando:

aws lightsail create-container-service-deployment \
    --region eu-west-3                            \
    --cli-input-json file://lc.json

# the command outputs the following 

{
    "containerService": {
        "containerServiceName": "signup-application",
        "arn": "arn:aws:lightsail:eu-west-3:012345678901:ContainerService/528a0bcf-fd14-42d4-a09a-943a241adc51",
        "createdAt": "2021-07-17T13:38:40+02:00",
        "location": {
            "availabilityZone": "all",
            "regionName": "eu-west-3"
        },
        "resourceType": "ContainerService",
        "tags": [],
        "power": "nano",
        "powerId": "nano-1",
        "state": "DEPLOYING",
        "scale": 2,
        "nextDeployment": {
            "version": 1,
            "state": "ACTIVATING",
            "containers": {
                "signup-app-container": {
                    "image": ":signup-application.latest.1",
                    "command": [],
                    "environment": {},
                    "ports": {
                        "80": "HTTP"
                    }
                }
            },
            "publicEndpoint": {
                "containerName": "signup-app-container",
                "containerPort": 80,
                "healthCheck": {
                    "healthyThreshold": 2,
                    "unhealthyThreshold": 2,
                    "timeoutSeconds": 2,
                    "intervalSeconds": 5,
                    "path": "/",
                    "successCodes": "200-499"
                }
            },
            "createdAt": "2021-07-17T15:31:01+02:00"
        },
        "isDisabled": false,
        "principalArn": "arn:aws:iam::577312533299:role/amazon/lightsail/eu-west-3/containers/signup-application/1jetjd21p8qshe57seuh71tnrnn29ps77lnno20sbgl2ghbuc0r0",
        "privateDomainName": "signup-application.service.local",
        "url": "https://signup-application.me04fvc6dbk4e.eu-west-3.cs.amazonlightsail.com/"
    }
}

Observe o status "state": "DEPLOYING" ("estado": "IMPLANTANDO"). Após um momento, o estado se tornará ACTIVE (ATIVO). A implantação demora alguns minutos para ser concluída. Você pode verificar o estado de sua implantação usando o seguinte comando:

# while deploying
aws lightsail get-container-services      \
    --region eu-west-3                    \
    --query "containerServices[].nextDeployment.state"

# once deployed
aws lightsail get-container-services      \
    --region eu-west-3                    \
    --query "containerServices[].currentDeployment.state" 

Teste sua implantação

Para testar sua implantação, primeiro recupere o URL que o Lightsail criou para você. Abra um terminal e digite o seguinte comando:

aws lightsail get-container-services        \
    --region eu-west-3                      \
    --query "containerServices[].url" 

# the command outputs something like the below 
[
    "https://signup-application.me04fvc6dbk4e.eu-west-3.cs.amazonlightsail.com/"
]

Abra seu navegador favorito e aponte-o para seu URL de implantação.

Como alternativa, você pode usar cURL para testar o endpoint na linha de comando:

curl -I https://signup-application.me04fvc6dbk4e.eu-west-3.cs.amazonlightsail.com/

HTTP/2 200 
date: Sat, 17 Jul 2021 13:38:04 GMT
content-type: text/html; charset=utf-8
content-length: 4579
server: nginx/1.21.1

Parabéns, seu contêiner agora está implantado no Amazon Lightsail.

Conclusão

Neste guia, você aprendeu a implantar um contêiner no Amazon Lightsail. No próximo módulo, você aprenderá a atualizar seu contêiner.

A seguir: Atualizar contêiner

Envie seus comentários.