Esta versión de GitHub Enterprise se discontinuó el 2021-09-23. No se realizarán lanzamientos de patch, ni siquiera para problemas de seguridad críticos. Para obtener un mejor desempeño, más seguridad y nuevas características, actualiza a la última versión de GitHub Enterprise. Para obtener ayuda con la actualización, contacta al soporte de GitHub Enterprise.

Desplegar hacia Amazon Elastic Container Service

Puedes hacer despliegues para Amazon Elastic Container Service (ECS) como parte de tus flujos de trabajo de despliegue contínuo (DC).

Nota: GitHub Actions estuvo disponible para GitHub Enterprise Server 2.22 como un beta limitado. El beta terminó. GitHub Actions está ahora disponible habitualmente en GitHub Enterprise Server 3.0 o superior. Para obtener más información, consulta la sección de notas de lanzamiento para GitHub Enterprise Server 3.0.


Nota: Los ejecutores hospedados en GitHub no son compatibles con GitHub Enterprise Server actualmente. Puedes encontrar más información sobre el soporte que se tiene planeado en el futuro en el Itinerario público de GitHub.

Introducción

This guide explains how to use GitHub Actions to build a containerized application, push it to Amazon Elastic Container Registry (ECR), and deploy it to Amazon Elastic Container Service (ECS) when a release is created.

En cada lanzamiento nuevo de tu repositorio de GitHub, el flujo de trabajo de GitHub Actions crea y sube una imagen de contenedor nueva en Amazon ECR, y luego despliega una tarea nueva de definición en Amazon ECS.

Prerrequisitos

Antes de que crees tu flujo de trabajo de GitHub Actions, primero necesitas completar los siguientes pasos de configuración para Amazon ECR y ECS:

  1. Crea un repositorio de Amazon ECR para almacenar tus imágenes.

    Por ejemplo, utiliza el CLI de AWS:

    Shell
    aws ecr create-repository \ --repository-name MY_ECR_REPOSITORY \ --region MY_AWS_REGION

    Asegúrate de que utilizas el mismo nombre de repositorio para amazon ECR (que se representa aquí como MY_ECR_REPOSITORY) para la variable ECR_REPOSITORY en el flujo de trabajo a continuación.

    Asegúrate de que utilizas el mismo valor de región de AWS para la variable AWS_REGION (que se representa aquí como MY_AWS_REGION) en el flujo de trabajo a continuación.

  2. Crea un servicio, agrupamiento y definición de tarea de Amazon ECS.

    Para obtener más detalles, sigue la sección Asistente de inicio para la consola de Amazon ECS, o la Guía de inicio en la documentación de Amazon ECS.

    Asegúrate de anotar los nombres que configuraste para el servicio y agrupamiento de Amazon ECS y utilízalos para las variables ECS_SERVICE y ECS_CLUSTER en el flujo de trabajo a continuación.

  3. Almacena tu definición de tarea de Amazon ECS como un archivo JSON en tu repositorio de GitHub.

    El formato del archivo debe ser el mismo que la salida que genera:

    Shell
    aws ecs register-task-definition --generate-cli-skeleton

    Asegúrate de configurar la variable ECS_TASK_DEFINITION en el flujo de trabajo a continuación como la ruta al archivo JSON.

    Asegúrate de configurar la variable CONTAINER_NAME en el flujo de trabajo a continuación como el nombre de contenedor en la sección containerDefinitions de la definición de tarea.

  4. Crea los secretos de GitHub Actions con los nombres AWS_ACCESS_KEY_ID y AWS_SECRET_ACCESS_KEY para almacenar los valores de tu llave de acceso de Amazon IAM.

    Para obtener más información sobre cómo crear los secretos para GitHub Actions, consulta la sección "Secretos cifrados".

    Consulta la documentación para cada acción que se utiliza a continuación para las políticas recomendadas de IAM para el usuario de IAM y los métodos para manejar las credenciales de las llaves de acceso.

  5. Optionally, configure a deployment environment. Environments are used to describe a general deployment target like production, staging, or development. When a GitHub Actions workflow deploys to an environment, the environment is displayed on the main page of the repository. You can use environments to require approval for a job to proceed, restrict which branches can trigger a workflow, or limit access to secrets. For more information about creating environments, see "Using environments for deployment."

Creating the workflow

Once you've completed the prerequisites, you can proceed with creating the workflow.

El siguiente flujo de trabajo de ejemplo demuestra cómo construir una imagen de contenedor y subirla a Amazon ECR. Posteriormente, ésta actualiza la definición de la tarea con una ID de imagen nueva y despliega la definición de tarea a Amazon ECS.

Asegúrate de que proporcionas tus propios valores para todas las variables en la clave env del flujo de trabajo.

If you configured a deployment environment, change the value of environment to be the name of your environment. If you did not configure an environment, delete the environment key.

YAML
# This workflow uses actions that are not certified by GitHub.
# Estas las proporcionan entidades terceras y las gobiernan
# condiciones de servicio, políticas de privacidad y documentación de soporte
# documentación.

name: Deploy to Amazon ECS

on:
  release:
    types: [ created ]

env:
  AWS_REGION: MY_AWS_REGION                   # set this to your preferred AWS region, e.g. us-west-1
  ECR_REPOSITORY: MY_ECR_REPOSITORY           # set this to your Amazon ECR repository name
  ECS_SERVICE: MY_ECS_SERVICE                 # set this to your Amazon ECS service name
  ECS_CLUSTER: MY_ECS_CLUSTER                 # set this to your Amazon ECS cluster name
  ECS_TASK_DEFINITION: MY_ECS_TASK_DEFINITION # set this to the path to your Amazon ECS task definition
                                               # file, e.g. .aws/task-definition.json
  CONTAINER_NAME: MY_CONTAINER_NAME           # set this to the name of the container in the
                                               # containerDefinitions section of your task definition

jobs:
  deploy:
    name: Deploy
    runs-on: ubuntu-latest
    environment: production

    steps:
      - name: Checkout
        uses: actions/checkout@v2

      - name: Configure AWS credentials
        uses: aws-actions/configure-aws-credentials@13d241b293754004c80624b5567555c4a39ffbe3
        with:
          aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
          aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
          aws-region: ${{ env.AWS_REGION }}

      - name: Login to Amazon ECR
        id: login-ecr
        uses: aws-actions/amazon-ecr-login@aaf69d68aa3fb14c1d5a6be9ac61fe15b48453a2

      - name: Build, tag, and push image to Amazon ECR
        id: build-image
        env:
          ECR_REGISTRY: ${{ steps.login-ecr.outputs.registry }}
          IMAGE_TAG: ${{ github.sha }}
        run: |
          # Build a docker container and
          # push it to ECR so that it can
          # be deployed to ECS.
          docker build -t $ECR_REGISTRY/$ECR_REPOSITORY:$IMAGE_TAG .
          docker push $ECR_REGISTRY/$ECR_REPOSITORY:$IMAGE_TAG
          echo "::set-output name=image::$ECR_REGISTRY/$ECR_REPOSITORY:$IMAGE_TAG"

      - name: Fill in the new image ID in the Amazon ECS task definition
        id: task-def
        uses: aws-actions/amazon-ecs-render-task-definition@97587c9d45a4930bf0e3da8dd2feb2a463cf4a3a
        with:
          task-definition: ${{ env.ECS_TASK_DEFINITION }}
          container-name: ${{ env.CONTAINER_NAME }}
          image: ${{ steps.build-image.outputs.image }}

      - name: Deploy Amazon ECS task definition
        uses: aws-actions/amazon-ecs-deploy-task-definition@de0132cf8cdedb79975c6d42b77eb7ea193cf28e
        with:
          task-definition: ${{ steps.task-def.outputs.task-definition }}
          service: ${{ env.ECS_SERVICE }}
          cluster: ${{ env.ECS_CLUSTER }}
          wait-for-service-stability: true

Recursos adicionales

For the original starter workflow, see aws.yml in the GitHub Actions starter-workflows repository.

Para obtener más información sobre los servicios que se utilizan en estos ejemplos, consulta la siguiente documentación: