Implementación de una aplicación web de contenedor en Amazon Lightsail

GUÍA DE INTRODUCCIÓN

Módulo 3: Implementar un contenedor

En este módulo, implementaremos nuestro contenedor en la nube.

Introducción

Ahora que el servicio de contenedor de Amazon Lightsail está listo, el siguiente paso es implementar el contenedor.

Amazon Lightsail puede implementar contenedores desde repositorios públicos de imágenes de contenedores como Docker Hub, Amazon ECR Public Gallery o su máquina local.

En esta guía, realizaremos la implementación directamente en su equipo local.

Lo que aprenderá

  • Cómo enviar una imagen de contenedor local a Amazon Lightsail
  • Cómo implementar una versión de su imagen de contenedor en un servicio de contenedor

 Tiempo de realización

10 minutos

 Requisitos previos del módulo

  • Una cuenta de AWS con acceso de nivel de administrador**
  • Navegador recomendado: la última versión de Chrome o Firefox

[**] Es posible que las cuentas creadas en las últimas 24 horas aún no tengan acceso a los servicios necesarios para este tutorial.

Implementación

Enviar una imagen de contenedor local

El primer paso para implementar un contenedor es enviar una imagen de contenedor a Amazon Lightsail.

Abra un terminal en el directorio en el que creó el contenedor y escriba el siguiente comando: Asegúrese de utilizar la misma región en la que creó el servicio de contenedor de 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.    

El comando invoca docker push para cargar la imagen en Amazon Lightsail. En función de la banda ancha de la red, es posible que tarde unos minutos en completarse.

La última línea de la salida es el nombre interno del contenedor; en nuestro caso, :signup-application.latest.1. Anótelo, ya que lo necesitaremos para implementar el contenedor en el servicio de contenedor. En caso de que desee acceder al nombre del contenedor en una etapa posterior, puede escribir el siguiente 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"
        }
    ]
}  

Enviar una imagen de contenedor local a LightSail

Ahora que la imagen de contenedor está almacenada en Amazon Lightsail, podemos implementarla en el servicio de contenedor.

Lightsail requiere la siguiente información para crear una implementación:

  • El nombre de la imagen de contenedor que se implementará (:signup-application.latest.1 como lo devuelve el comando anterior).
  • El puerto de red que expone el contenedor (como se describe en la configuración de Dockerfile).
  • (opcional) Detalles de un punto de enlace de red de acceso público: un número de puerto TCP y un protocolo; la IP se asignará automáticamente.

Toda esta información se almacena en un archivo JSON que debe crear antes de la implementación.

Cree un archivo JSON llamado lc.json. Si está trabajando con el código descargado, modificará el archivo lc.json existente que está en el mismo directorio que el contenedor. Copie el siguiente json en el archivo:

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

Luego, para implementar el contenedor escriba el siguiente 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 el estado: estado DEPLOYING (IMPLEMENTACIÓN EN CURSO). Después de un tiempo, el estado pasa a ACTIVE (ACTIVO). La implementación tarda unos minutos en completarse. Para verificar el estado de la implementación, utilice el siguiente 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" 

Probar la implementación

Para probar la implementación, primero recupere la URL que Lightsail creó para usted. Abra un terminal y escriba el siguiente 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 su navegador favorito y diríjase a la URL de implementación.

gsg-build-lightsail-3

Como alternativa, puede usar cURL para probar el punto de enlace con la línea de comandos:

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

Felicitaciones. El contenedor ya está implementado en Amazon Lightsail.

Conclusión

En esta guía, aprendió a implementar un contenedor en Amazon Lightsail. En el siguiente módulo, aprenderá a actualizarlo.

Siguiente: actualizar el contenedor

Háganos saber su opinión.

Agradecemos sus comentarios
Nos alegra que esta página le haya ayudado. ¿Le gustaría compartir detalles adicionales para ayudarnos a seguir mejorando?
Cerrar
Agradecemos sus comentarios
Lamentamos que esta página no le haya ayudado. ¿Le gustaría compartir detalles adicionales para ayudarnos a seguir mejorando?
Cerrar