Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.
Creación de una nueva versión de una receta de contenedor
En esta sección se muestra cómo crear una receta de contenedor o una nueva versión de una receta existente. Una receta de contenedor define tres elementos clave: la imagen base, los componentes de compilación y el repositorio de destino. Utilice esta receta para producir imágenes de Docker contenedor que Image Builder almacena en Amazon ECR.
Contenido
Creación de una nueva versión de una receta de contenedor con la consola
Crear una nueva versión de una receta de contenedor es prácticamente lo mismo que crear una nueva receta. La diferencia es que, en la mayoría de los casos, ciertos detalles están preseleccionados para que coincidan con la receta base. La siguiente lista describe las diferencias entre crear una receta nueva y crear una nueva versión de una receta existente.
Detalles de la receta
-
Nombre: no se puede editar.
-
versión: obligatoria. Este detalle no viene precargado con la versión actual ni con ningún tipo de secuencia. Ingrese el número de versión que desee crear en el formato major.minor.patch. Si la versión ya existe, Image Builder devuelve un error.
Imagen base
-
Seleccione la opción de imagen: Pre-selected, pero editable. Si cambia la elección para la fuente de su imagen base, es posible que pierda otros detalles que dependen de la opción original que haya elegido.
En el caso de las imágenes de Docker contenedor, puede elegir entre imágenes públicas alojadasDockerHub, imágenes de contenedor existentes en Amazon ECR o imágenes de Amazon-managed contenedor. Para ver los detalles asociados con la selección de su imagen base, elija la pestaña que coincida con su selección.
Configuración de la instancia
-
Origen de la AMI (obligatorio): identifique una AMI personalizada para utilizarla como imagen base para la instancia de creación y prueba del contenedor. Puede ser un ID de AMI o un parámetro de almacén de parámetros AWS Systems Manager (SSM) que contenga un ID de AMI.
-
ID de AMI: esta configuración no viene rellenada previamente con la entrada original. Introduzca el ID de AMI de la imagen base. Ejemplo:
.ami-1234567890abcdef1 -
Parámetro SSM: introduzca el nombre o el ARN del parámetro del almacén de parámetros de SSM que contiene el ID de AMI de la imagen base. Ejemplo:
o/ib/test/paramarn:aws:ssm:.us-east-1:111122223333:parameter/ib/test/param
-
-
Almacenamiento (volúmenes)
Volumen 1 de EBS (raíz de AMI) —. Pre-filled No puede editar las selecciones de nombre de dispositivo, Instantánea o IOPS del volumen raíz. Sin embargo, puede cambiar todos los ajustes restantes, como el tamaño. También puede agregar nuevos volúmenes.
nota
Si especificó una AMI base compartida con usted desde otra cuenta, las instantáneas de los volúmenes secundarios que se especifiquen también se deben compartir con su cuenta.
Directorio de trabajo
-
Ruta del directorio de trabajo: Pre-filled, pero editable.
Componentes
Componentes: los componentes que ya están incluidos en la receta se muestran en la sección Componentes seleccionados al final de cada una de las listas de componentes (compilación y prueba). Puede eliminar o reordenar los componentes seleccionados para adaptarlos a sus necesidades.
Los componentes de endurecimiento del CIS no siguen las reglas de ordenación de componentes estándar de las recetas de Generador de Imágenes. Los componentes de endurecimiento del CIS siempre se ejecutan en último lugar para garantizar que las pruebas de referencia se ejecuten con la imagen de salida.
nota
Las listas de componentes de compilación y prueba muestran los componentes disponibles según el tipo de propietario del componente. Para agregar un componente, elija Agregar componentes de compilación y seleccione el filtro de propiedad que se aplica. Por ejemplo, para agregar un componente de compilación asociado a un AWS Marketplace producto, selecciona
AWS Marketplace. Esto abre un panel de selección en el lado derecho de la interfaz de la consola en el que se enumeran AWS Marketplace los componentes.Para el componente CIS, seleccione
Third party managed.Puede configurar las siguientes opciones para su componente seleccionado:
-
Opciones de control de versiones: Pre-selected, pero puede cambiarlas. Le recomendamos que elija la opción Usar la última versión del componente disponible para asegurarse de que las compilaciones de imágenes siempre incluyan la última versión del componente. Si necesita usar una versión de componente específica en su receta, puede elegir Especificar la versión del componente e introducir la versión en el cuadro versión del componente que aparece.
-
Parámetros de entrada: muestra los parámetros de entrada que acepta el componente. El valor está precargado con el valor de la versión anterior de la receta. Si utiliza este componente por primera vez en esta receta y se definió un valor predeterminado para el parámetro de entrada, el valor predeterminado aparece en el cuadro Valor con el texto atenuado. Si no se especifica ningún otro valor, Generador de imágenes utiliza el valor predeterminado.
Si se requiere un parámetro de entrada, pero no tiene un valor predeterminado definido en el componente, debe proporcionar un valor. Generador de imágenes no creará la versión de la receta si falta algún parámetro obligatorio y no tiene definido un valor predeterminado.
importante
Los parámetros del componente son valores de texto sin formato y se registran en AWS CloudTrail. Le recomendamos que utilice AWS Secrets Manager el AWS Systems Manager Parameter Store para almacenar sus secretos. Para obtener más información sobre Secrets Manager, consulte ¿Qué es Secrets Manager? en la Guía del usuario de AWS Secrets Manager . Para obtener más información acerca del almacén de parámetros de AWS Systems Manager , consulte Almacén de parámetros de AWS Systems Manager en la Guía del usuario de AWS Systems Manager .
Para ampliar la configuración de las opciones de control de versiones o los parámetros de entrada, puede seleccionar la flecha junto al nombre de la configuración. Para ampliar todos los ajustes de todos los componentes seleccionados, puede activar y desactivar el interruptor Expandir todo.
-
Plantilla de Dockerfile
-
Plantilla de Dockerfile Pre-filled, pero editable. Puede especificar cualquiera de las siguientes variables contextuales que Generador de imágenes reemplaza por información de compilación en tiempo de ejecución.
- parentImage (obligatorio)
-
En el momento de la compilación, esta variable se convierte en la imagen base de la receta.
Ejemplo:
FROM {{{ imagebuilder:parentImage }}} - entornos (obligatorio si se especifican los componentes)
-
En el momento de la compilación, esta variable se resuelve en las directivas de Dockerfile que organizan los componentes en el contexto de la compilación. Estas directivas copian los scripts de los componentes en la imagen y establecen las variables de entorno que utilizan esos scripts. Prepara el entorno, pero no ejecuta los componentes que usted especifique. Coloque esta variable antes de la
componentsvariable.Ejemplo:
{{{ imagebuilder:environments }}} - componentes (opcional)
-
En el momento de la compilación, esta variable se convierte en el comando que ejecuta los scripts de los componentes de compilación y prueba para los componentes que incluye la receta del contenedor y, a continuación, elimina esos scripts de la imagen. Esta es la variable que ejecuta los componentes. Colóquela después de la
environmentsvariable.Ejemplo:
{{{ imagebuilder:components }}}
Repositorio de destino
-
Nombre del repositorio de destino: el repositorio de Amazon ECR donde se almacena la imagen de salida si no hay otro repositorio especificado en la configuración de distribución de la canalización para la región donde se ejecuta la canalización (región 1).
Para crear una nueva versión de una receta de contenedor:
-
En la página de detalles de la receta del contenedor, selecciona Crear nueva versión en la parte superior de la página. La consola abre la página de creación de recetas para recetas de contenedores.
-
Para crear la nueva versión, realice los cambios y, a continuación, elija Crear receta.
Para obtener más información sobre cómo crear una receta de contenedor al crear una canalización de imágenes, consulte Paso 2: elegir receta la sección Introducción de esta guía.
Crea una receta para contenedores con AWS CLI
Para crear una receta de contenedor de Image Builder con el imagebuilder
create-container-recipe comando del AWS CLI, sigue estos pasos:
Requisitos previos
Antes de ejecutar los comandos de Image Builder de esta sección para crear una receta de contenedor con el AWS CLI, debe crear los componentes que utilizará la receta. El ejemplo de receta de contenedor en el siguiente paso hace referencia a los componentes de ejemplo que se crean en la sección Cree un componente personalizado a partir del AWS CLI de esta guía.
Después de crear los componentes, o si utiliza componentes existentes, anote los ARN que desea incluir en la receta.
-
Creación de un archivo JSON de entrada de la CLI
Puede proporcionar todas las entradas para el comando create-container-recipe con parámetros de comando en línea. Sin embargo, el comando resultante puede ser bastante largo. Para simplificar el comando, puede proporcionar un archivo JSON que contenga todas las configuraciones de la receta de contenedor.
nota
La convención de nomenclatura para los valores de datos del archivo JSON sigue el patrón que se especifica para los parámetros de solicitud de operación de la API de Image Builder. Para revisar los parámetros de solicitud de operación de la API, consulte el CreateContainerRecipe comando en la referencia de la API de EC2 Image Builder.
Para proporcionar los valores de los datos como parámetros de la línea de comandos, consulte los nombres de los parámetros especificados en la referencia de comandos de la AWS CLI .
Este es un resumen de los parámetros de este ejemplo:
-
componentes (matriz de objetos, opcional): contiene una matriz de
ComponentConfigurationobjetos. Los componentes son opcionales para las recetas de contenedores. Puedes personalizar la imagen de salida con componentes BUILD, con las instrucciones de tu plantilla de Dockerfile (por ejemplo,RUNo conCOPYinstrucciones), o con ambas opciones. Los componentes TEST validan la imagen pero no la modifican.nota
Generador de Imágenes instala los componentes en el orden en que se especificaron en la receta. Sin embargo, los componentes de refuerzo del CIS siempre se ejecutan en último lugar para garantizar que las pruebas de referencia se ejecutan con su imagen de salida.
-
ComponentARN (cadena, obligatorio): el ARN del componente.
sugerencia
Para usar el ejemplo para crear su propia receta de contenedor, sustituya los ARN de ejemplo por los ARN de los componentes que utiliza en la receta. Estos incluyen la Región de AWS, el nombre y el número de versión de cada uno.
Parámetros (matriz de objetos): contiene una matriz de objetos
ComponentParameter. Si se requiere un parámetro de entrada, pero no tiene un valor predeterminado definido en el componente, debe proporcionar un valor. Generador de imágenes no creará la versión de la receta si falta algún parámetro obligatorio y no tiene definido un valor predeterminado.importante
Los parámetros del componente son valores de texto sin formato y se registran en AWS CloudTrail. Le recomendamos que utilice AWS Secrets Manager el almacén de AWS Systems Manager parámetros para almacenar sus secretos. Para obtener más información sobre Secrets Manager, consulte ¿Qué es Secrets Manager? en la Guía del usuario de AWS Secrets Manager . Para obtener más información acerca del almacén de parámetros de AWS Systems Manager , consulte Almacén de parámetros de AWS Systems Manager en la Guía del usuario de AWS Systems Manager .
-
Nombre (cadena, obligatorio): el nombre del parámetro del componente que se va a establecer.
-
valor (matriz de cadenas, obligatorio): contiene una matriz de cadenas para establecer el valor del parámetro de componente nombrado. Si hay un valor predeterminado definido para el componente y no se proporciona ningún otro valor, TOE de AWS utiliza el valor predeterminado.
-
-
-
containerType (cadena, obligatorio): el tipo de contenedor que se va a crear. Los valores válidos incluyen
DOCKER. -
dockerfile TemplateData (string): la plantilla de Dockerfile en línea para crear tu imagen. Los datos en línea están limitados a 16 000 caracteres. Debe especificar
dockerfileTemplateDataodockerfileTemplateUri, pero no ambos.La plantilla de Dockerfile puede incluir variables contextuales (marcadores de posición que Image Builder reemplaza por información de compilación durante el tiempo de ejecución). Incluye al menos la variable.
parentImageSi la receta incluye componentes, incluya también laenvironmentsvariable y lacomponentsvariable.- parentImage (obligatorio)
-
En el momento de la compilación, esta variable se convierte en la imagen base de la receta.
Ejemplo:
FROM {{{ imagebuilder:parentImage }}} - entornos (obligatorio si se especifican los componentes)
-
En el momento de la compilación, esta variable se resuelve según las directivas de Dockerfile que organizan los componentes en el contexto de la compilación. Estas directivas copian los scripts de los componentes en la imagen y establecen las variables de entorno que utilizan esos scripts. Prepara el entorno, pero no ejecuta los componentes que usted especifique. Coloque esta variable antes de la
componentsvariable.Ejemplo:
{{{ imagebuilder:environments }}} - componentes (opcional)
-
En el momento de la compilación, esta variable se convierte en el comando que ejecuta los scripts de los componentes de compilación y prueba para los componentes que incluye la receta del contenedor y, a continuación, elimina esos scripts de la imagen. Esta es la variable que ejecuta los componentes. Colóquela después de la
environmentsvariable.Ejemplo:
{{{ imagebuilder:components }}}
Para almacenar la plantilla en Amazon S3, utilice el TemplateUri parámetro dockerfile con un URI de Amazon S3 válido (por ejemplo,
s3://).my-bucket/templates/Dockerfile -
Nombre (cadena, obligatorio): nombre de la receta de contenedor.
-
Descripción (cadena): descripción de la receta de contenedor.
-
parentImage (cadena, obligatoria): la imagen del Docker contenedor que se utilizará en la receta del contenedor como base para la imagen personalizada.
-
Imágenes públicas alojadas en DockerHub
-
Imágenes de contenedores existentes en Amazon ECR
-
Amazon-managed imágenes de contenedores
-
-
platformOverride (cadena): especifica la plataforma del sistema operativo cuando se utiliza una imagen base personalizada. Le recomendamos que establezca este valor cuando utilice una imagen Docker Hub o una imagen de Amazon ECR. Si lo omite, Image Builder intentará detectar la plataforma a partir del manifiesto del contenedor, que puede no estar siempre disponible. No puedes especificar
platformOverridecuándo tu imagen principal es un ARN de imagen de Image Builder. Los valores válidos sonLinuxyWindows. Las recetas de contenedores no son compatibles con la plataforma macOS. -
semanticVersion (cadena, obligatorio): la versión semántica de la receta de contenedor especificada en el siguiente formato, con valores numéricos en cada posición para indicar una versión específica: <major>.<minor>.<patch>. Un ejemplo sería
1.0.0. Para obtener más información sobre el control de versiones semántico para los recursos de Generador de Imágenes, consulte Control de versiones semántico en Generador de imágenes. -
Etiquetas (mapa de cadenas): etiquetas que se adjuntan a la receta de contenedor.
-
instanceConfiguration (objeto): un grupo de opciones que se pueden usar para configurar una instancia para compilar y probar las imágenes de contenedor.
-
image (string): la imagen base de una instancia de creación y prueba de contenedores. Puede contener un identificador de AMI o puede especificar un parámetro del almacén de parámetros AWS Systems Manager (SSM) con el prefijo y seguido del nombre del parámetro o ARN.
ssm:Si utiliza un parámetro SSM, el valor del parámetro debe contener un ID de AMI. Si no especifica una imagen base, Image Builder utiliza la AMI optimizada para Amazon ECS adecuada como imagen base. -
bloque DeviceMappings (matriz de objetos): define los dispositivos de bloque que se deben adjuntar para crear una instancia a partir de la AMI de Image Builder especificada en el image parámetro.
-
deviceName (cadena): el dispositivo al que se aplican estas asignaciones.
-
ebs (objeto): se utiliza para administrar la configuración específica de Amazon EBS para esta asignación.
-
eliminar OnTermination (booleano): se utiliza para configurar la eliminación al finalizar el dispositivo asociado.
-
cifrado (Booleano): se utiliza para configurar el cifrado del dispositivo.
-
volumeSize (entero): se utiliza para anular el tamaño de volumen del dispositivo.
-
volumeType (cadena): se utiliza para anular el tipo de volumen del dispositivo.
-
-
-
-
targetRepository (objeto, obligatorio): el repositorio de destino de la imagen de contenedor si no hay ningún otro repositorio especificado en la configuración de distribución de la canalización para la región donde se ejecuta la canalización (región 1).
-
repositoryName (cadena, obligatorio): el nombre del repositorio de contenedor donde se almacena la imagen del contenedor de salida. Este nombre está precedido por la ubicación del repositorio.
-
servicio (cadena, obligatorio): especifica el servicio de repositorio que almacena la imagen de salida. El valor válido es
ECR. El repositorio de destino ya debe existir.
-
-
workingDirectory (cadena): directorio de trabajo que se utilizará durante los flujos de trabajo de compilación y prueba.
El siguiente ejemplo muestra un archivo de entrada de recetas de contenedor completo que define un Docker contenedor Linux con componentes de compilación. Guárdalo como
create-container-recipe.jsony úsalo en el create-container-recipe comando.{ "components": [ { "componentArn": "arn:aws:imagebuilder:us-west-2:111122223333:component/helloworldal2/x.x.x" } ], "containerType": "DOCKER", "description": "My Linux Docker container image", "dockerfileTemplateData": "FROM {{{ imagebuilder:parentImage }}}\n{{{ imagebuilder:environments }}}\n{{{ imagebuilder:components }}}", "name": "amazonlinux-container-recipe", "parentImage": "amazonlinux:latest", "platformOverride": "Linux", "semanticVersion": "1.0.2", "tags": { "sometag" : "Tag detail" }, "instanceConfiguration": { "image": "ami-1234567890abcdef1", "blockDeviceMappings": [ { "deviceName": "/dev/xvda", "ebs": { "deleteOnTermination": true, "encrypted": false, "volumeSize": 8, "volumeType": "gp2" } } ] }, "targetRepository": { "repositoryName": "myrepo", "service": "ECR" }, "workingDirectory": "/tmp" } -
-
Creación de la receta
Utilice el siguiente comando para crear la receta. Introduzca el nombre del archivo JSON que creó en el paso anterior en el parámetro
--cli-input-json:aws imagebuilder create-container-recipe --cli-input-json file://create-container-recipe.jsonnota
-
Debe incluir la notación
file://al principio de la ruta del archivo JSON. -
La ruta del archivo JSON debe seguir la convención apropiada para el sistema operativo base donde se está ejecutando el comando. Por ejemplo, Windows utiliza la barra diagonal inversa (\) para referirse a la ruta de directorios, mientras que Linux y macOS usan la barra diagonal (/).
El siguiente ejemplo de salida muestra el ARN de la receta de contenedor recién creada, junto con el identificador de solicitud y el token de cliente de la solicitud.
{ "requestId": "a1b2c3d4-5678-90ab-cdef-EXAMPLE11111", "clientToken": "a1b2c3d4-5678-90ab-cdef-EXAMPLE22222", "containerRecipeArn": "arn:aws:imagebuilder:us-west-2:123456789012:container-recipe/my-container-recipe/1.0.2" } -
Restricciones en la receta del
Revise las siguientes restricciones antes de crear una receta de contenedor:
-
Debe especificar un repositorio Amazon ECR de destino que ya exista.
-
AWS Marketplace los componentes no son compatibles con las recetas de contenedores.
-
Los componentes son opcionales. Puedes personalizar la imagen de salida con componentes BUILD, con las instrucciones de tu plantilla de Dockerfile (por ejemplo,
RUNo conCOPYinstrucciones), o con ambas opciones. Los componentes TEST validan la imagen pero no la modifican. -
Las recetas de contenedores no son compatibles con la plataforma macOS.
-
Para la plantilla de Dockerfile, proporciona datos en línea (hasta 16 000 caracteres) o una URI de Amazon S3. No puede especificar ambas cosas.
-
El tamaño acumulado de la receta no puede superar los 25 KB. Si recibe un error de tamaño, reduzca la cantidad de parámetros de los componentes o acorte los valores de los parámetros. Este límite es independiente de los límites de tamaño de la plantilla de Dockerfile.
-
Cuando lo
platformOverridedefinaWindows, también debe especificarlo.imageOsVersionOverrideEsto se aplica a cualquier imagen principal que no sea de Image Builder, como una imagen o una Docker Hub imagen de Amazon ECR.
Errores comunes y solución de problemas
En la siguiente tabla se enumeran los errores comunes que se pueden encontrar al crear una receta de contenedor y se indica cómo resolverlos.
| Error | Causa | Resolución |
|---|---|---|
| «Las recetas de contenedores no deben contener componentes del mercado» | Un AWS Marketplace componente de una receta de envase. | Utilice únicamente productos que no sean AWS Marketplace componentes. |
| «Las recetas de contenedores no son compatibles actualmente con la plataforma macOS» | platformOverrideestá configurado en macOS. |
Utilice Linux o Windows. |
| «Debe especificar un dockerfile TemplateData o un dockerfile» TemplateUri | Has especificado ambos o ninguno. | Proporcione exactamente uno. |
| «URI S3 no válida» | Una ruta de acceso de Amazon S3 incorrecta. dockerfileTemplateUri |
Utilice el formato s3://. |
| «No puede especificar una anulación de plataforma cuando utiliza una imagen de Image Builder como imagen principal» | platformOverridecon un ARN de imagen de Image Builder. |
Remove platformOverride. Image Builder detecta la plataforma a partir de los metadatos de la imagen principal. |
| «Debe especificar una OsVersion anulación de imagen cuando utilice los repositorios ECR como imagen principal para la plataforma Windows» | Una versión de Windows platformOverride sin sistema operativo. |
Añada el imageOsVersionOverride campo. |