Uso del Generador de imágenes de EC2 para crear AMI personalizadas optimizadas para Amazon ECS - Amazon Elastic Container Service

Uso del Generador de imágenes de EC2 para crear AMI personalizadas optimizadas para Amazon ECS

AWS recomienda utilizar las AMI optimizadas para Amazon ECS, ya que están preconfiguradas con estos requisitos y recomendaciones para ejecutar sus cargas de trabajo de contenedor. Es posible que en ocasiones necesite personalizar la AMI para agregar software adicional. Puede utilizar el Generador de imágenes de EC2 para la creación, administración e implementación de sus imágenes de servidor. Retiene la propiedad de las imágenes personalizadas creadas en su cuenta. Puede utilizar las canalizaciones del Generador de imágenes de EC2 para automatizar las actualizaciones y los parches del sistema para sus imágenes o puede utilizar un comando independiente para crear una imagen con los recursos de configuración definidos.

Usted crea una receta para su imagen. La receta incluye una imagen principal y cualquier componente adicional. También crea una canalización que distribuye su AMI personalizada.

Usted crea una receta para su imagen. Una receta de imagen de Generador de Imágenes es un documento que define la imagen base y los componentes que se aplicarán a la imagen base para producir la configuración deseada de la imagen AMI de salida. También crea una canalización que distribuye su AMI personalizada. Para obtener más información, consulte How EC2 Image Builder works en la Guía del usuario del Generador de imágenes de EC2.

Se recomienda que utilice una de las siguientes AMI optimizadas para Amazon ECS como “imagen principal” en el Generador de imágenes de EC2:

  • Linux

    • AL2023 x86 optimizada para Amazon ECS

    • AMI de Amazon Linux 2023 (arm64) optimizada para Amazon ECS

    • AMI de Amazon Linux 2 con kernel 5 optimizada para Amazon ECS

    • AMI de Amazon Linux 2 x86 optimizada para Amazon ECS

  • Windows

    • AMI de Windows 2022 Full x86 optimizada para Amazon ECS

    • AMI de Windows 2022 Core x86 optimizada para Amazon ECS

    • AMI de Windows 2019 Full x86 optimizada para Amazon ECS

    • AMI de Windows 2019 Core x86 optimizada para Amazon ECS

    • AMI de Windows 2016 Full x86 optimizada para Amazon ECS

Se recomienda que seleccione la opción “Usar la versión más reciente disponible del SO”. La canalización utilizará el control de versiones semántico para la imagen principal, lo que ayuda a detectar las actualizaciones de dependencias en los trabajos programados automáticamente. Para más información, consulte Semantic versioning en la Guía de usuario del Generador de imágenes de EC2.

AWS actualiza periódicamente las imágenes de AMI optimizadas para Amazon ECS con parches de seguridad y la nueva versión del agente de contenedores. Cuando utiliza un ID de AMI como imagen principal en la receta de la imagen, debe comprobar periódicamente si hay actualizaciones en la imagen principal. Si las hay, debe crear una nueva versión de su receta con la AMI actualizada. Esto garantiza que las imágenes personalizadas incorporen la última versión de la imagen principal. Para obtener información sobre cómo crear un flujo de trabajo para actualizar automáticamente las instancias de EC2 de su clúster de Amazon ECS con las AMI recién creadas, consulte How to create an AMI hardening pipeline and automate updates to your ECS instance fleet.

También puede especificar el nombre de recurso de Amazon (ARN) de una imagen principal que se publique mediante una canalización administrada del Generador de imágenes de EC2. Amazon publica de forma habitual imágenes AMI optimizadas para Amazon ECS a través de canalizaciones administradas. Estas imágenes son de acceso público. Debe tener los permisos correctos para acceder a la imagen. Cuando utiliza un ARN de imagen en lugar de una AMI en su receta del Generador de imágenes, su canalización utiliza automáticamente la versión más reciente de la imagen principal cada vez que se ejecuta. Este enfoque elimina la necesidad de crear manualmente nuevas versiones de recetas para cada actualización.

Uso del ARN de imagen con la infraestructura como código (IaC)

Puede configurar la receta mediante la consola del Generador de imágenes de EC2 o infraestructura como código (por ejemplo, AWS CloudFormation) o el AWS SDK. Al especificar una imagen principal en la receta, puede especificar un ID de AMI de EC2, un ARN de imagen del Generador de imágenes, un ID de producto de AWS Marketplace o una imagen de contenedor. AWS publica los ID de AMI y los ARN de imagen del Generador de imágenes de las AMI optimizadas para Amazon ECS públicamente. El siguiente es el formato del ARN para la imagen:

arn:${Partition}:imagebuilder:${Region}:${Account}:image/${ImageName}/${ImageVersion}

La ImageVersion tiene el siguiente formato. Sustituya los valores principal, secundario y parche por los valores más recientes.

<major>.<minor>.<patch>

Puede reemplazar los valores major, minor y patch con valores específicos o puede utilizar el ARN sin versión de una imagen para que su canalización permanezca actualizada con la última versión de la imagen principal. Un ARN sin versiones utiliza el formato comodín “x.x.x” para representar la versión de la imagen. Este enfoque permite que el servicio del Generador de imágenes se resuelva automáticamente en la versión más reciente de la imagen. El uso de un ARN sin versiones garantiza que su referencia siempre apunte a la imagen más reciente disponible, lo que agiliza el proceso de mantener las imágenes actualizadas en su implementación. Al crear una receta con la consola, el Generador de imágenes de EC2 identifica automáticamente el ARN de la imagen principal. Cuando utilice IaC para crear la receta, debe identificar el ARN y seleccionar la versión de imagen deseada o utilizar el ARN sin versión para indicar la última imagen disponible. Se recomienda que cree un script automático para filtrar y mostrar solo las imágenes que se ajusten a sus criterios. El siguiente script de Python muestra cómo se puede recuperar una lista de AMI optimizadas para Amazon ECS.

El script acepta dos argumentos opcionales: owner y platform, con los valores predeterminados de “Amazon” y “Windows”, respectivamente. Los valores válidos para el argumento propietario son: Self, Shared, Amazon y ThirdParty. Los valores válidos para el argumento plataforma son Windows y Linux. Por ejemplo, si ejecuta el script con el argumento owner establecido en Amazon y platform establecido en Linux, el script genera una lista de imágenes publicadas por Amazon, que incluye las imágenes optimizadas para Amazon ECS.

import boto3 import argparse def list_images(owner, platform): # Create a Boto3 session session = boto3.Session() # Create an EC2 Image Builder client client = session.client('imagebuilder') # Define the initial request parameters request_params = { 'owner': owner, 'filters': [ { 'name': 'platform', 'values': [platform] } ] } # Initialize the results list all_images = [] # Get the initial response with the first page of results response = client.list_images(**request_params) # Extract images from the response all_images.extend(response['imageVersionList']) # While 'nextToken' is present, continue paginating while 'nextToken' in response and response['nextToken']: # Update the token for the next request request_params['nextToken'] = response['nextToken'] # Get the next page of results response = client.list_images(**request_params) # Extract images from the response all_images.extend(response['imageVersionList']) return all_images def main(): # Initialize the parser parser = argparse.ArgumentParser(description="List AWS images based on owner and platform") # Add the parameters/arguments parser.add_argument("--owner", default="Amazon", help="The owner of the images. Default is 'Amazon'.") parser.add_argument("--platform", default="Windows", help="The platform type of the images. Default is 'Windows'.") # Parse the arguments args = parser.parse_args() # Retrieve all images based on the provided owner and platform images = list_images(args.owner, args.platform) # Print the details of the images for image in images: print(f"Name: {image['name']}, Version: {image['version']}, ARN: {image['arn']}") if __name__ == "__main__": main()

Uso del ARN de la imagen con AWS CloudFormation

Una receta de imagen del Generador de imágenes es un esquema que especifica la imagen principal y los componentes necesarios para lograr la configuración deseada de la imagen de salida. Usted utiliza el recurso AWS::ImageBuilder::ImageRecipe. Establezca el valor ParentImage en el ARN de la imagen. Utilice el ARN sin versiones de la imagen que desee para asegurarse de que su canalización utilice siempre la versión más reciente de la imagen. Por ejemplo, arn:aws:imagebuilder:us-east-1:aws:image/amazon-linux-2023-ecs-optimized-x86/x.x.x. La siguiente definición de recurso AWS::ImageBuilder::ImageRecipe utiliza un ARN de imagen administrada por Amazon:

ECSRecipe: Type: AWS::ImageBuilder::ImageRecipe Properties: Name: MyRecipe Version: '1.0.0' Components: - ComponentArn: [<The component arns of the image recipe>] ParentImage: "arn:aws:imagebuilder:us-east-1:aws:image/amazon-linux-2023-ecs-optimized-x86/x.x.x"

Para más información sobre el recurso AWS::ImageBuilder::ImageRecipe, consulte la Guía del usuario de AWS CloudFormation.

Puede automatizar la creación de nuevas imágenes en su canalización configurando la propiedad Schedule del recurso AWS::ImageBuilder::ImagePipeline. La programación incluye una condición de inicio y una expresión cron. Para obtener más información, consulte AWS::ImageBuilder::ImagePipeline en la Guía del usuario de AWS CloudFormation.

En el siguiente ejemplo de AWS::ImageBuilder::ImagePipeline, la canalización ejecuta una compilación todos los días a las 10:00 h, Hora Universal Coordinada (UTC). Defina los siguientes valores de Schedule:

  • Establece PipelineExecutionStartCondition en EXPRESSION_MATCH_AND_DEPENDENCY_UPDATES_AVAILABLE. La compilación se inicia solo si se actualizan los recursos dependientes, como la imagen principal o los componentes, que utilizan el comodín “x” en sus versiones semánticas. Esto garantiza que la compilación incorpore las actualizaciones más recientes de esos recursos.

  • Establezca ScheduleExpression en la expresión cron (0 10 * * ? *).

ECSPipeline: Type: AWS::ImageBuilder::ImagePipeline Properties: Name: my-pipeline ImageRecipeArn: <arn of the recipe you created in previous step> InfrastructureConfigurationArn: <ARN of the infrastructure configuration associated with this image pipeline> Schedule: PipelineExecutionStartCondition: EXPRESSION_MATCH_AND_DEPENDENCY_UPDATES_AVAILABLE ScheduleExpression: 'cron(0 10 * * ? *)'

Uso del ARN de la imagen con Terraform

El enfoque para especificar la imagen principal y la programación de su canalización en Terraform se alinea con las de AWS CloudFormation. Usted utiliza el recurso aws_imagebuilder_image_recipe. Establezca el valor parent_image en el ARN de la imagen. Utilice el ARN sin versiones de la imagen que desee para asegurarse de que su canalización utilice siempre la versión más reciente de la imagen. Para más información, consulte aws_imagebuilder_image_recipe en la documentación de Terraform.

En el bloque de configuración de programación de la aws_imagebuilder_image_pipeline resource, establezca el valor del argumento schedule_expression en una expresión cron de su elección para especificar la frecuencia con la que se ejecuta la canalización y establezca pipeline_execution_start_condition en EXPRESSION_MATCH_AND_DEPENDENCY_UPDATES_AVAILABLE. Para más información, consulte aws_imagebuilder_image_pipeline en la documentación de Terraform.