View a markdown version of this page

Crea una nuova versione di una ricetta contenitore - EC2 Image Builder

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

Crea una nuova versione di una ricetta contenitore

Questa sezione mostra come creare una ricetta contenitore o una nuova versione di una ricetta esistente. Una ricetta contenitore definisce tre elementi chiave: l'immagine di base, i componenti di compilazione e il repository di destinazione. Usa questa ricetta per produrre immagini di Docker contenitori che Image Builder archivia in Amazon ECR.

Crea una nuova versione della ricetta del contenitore con la console

Creare una nuova versione di una ricetta contenitore equivale praticamente a creare una nuova ricetta. La differenza è che alcuni dettagli sono preselezionati in modo che corrispondano alla ricetta base, nella maggior parte dei casi. L'elenco seguente descrive le differenze tra la creazione di una nuova ricetta e la creazione di una nuova versione di una ricetta esistente.

Dettagli della ricetta
  • Nome: non modificabile.

  • Versione: obbligatoria. Questo dettaglio non è precompilato con la versione corrente o con alcun tipo di sequenza. Inserisci il numero di versione che desideri creare nel formato major.minor.patch. Se la versione esiste già, Image Builder restituisce un errore.

Immagine di base
  • Seleziona l'opzione immagine — Pre-selected, ma modificabile. Se modifichi la scelta della fonte dell'immagine di base, potresti perdere altri dettagli che dipendono dall'opzione originale scelta.

    Per le immagini dei Docker contenitori, puoi scegliere tra immagini pubbliche ospitate suDockerHub, immagini di contenitori esistenti in Amazon ECR o immagini di Amazon-managed contenitori. Per visualizzare i dettagli associati alla selezione delle immagini di base, scegli la scheda corrispondente alla selezione.

    Managed images
    • Sistema operativo dell'immagine (OS): non modificabile.

    • Nome dell'immagine: Pre-selected basato sulla combinazione delle immagini di base scelte per la ricetta esistente. Tuttavia, se si modifica l'opzione Seleziona immagine, si perde il nome dell'immagine preselezionato.

    • Auto-versioning opzioni: non corrisponde alla tua ricetta base. Auto-versioning options è impostato di default sull'opzione Usa la versione del sistema operativo selezionata.

      Importante

      Se utilizzi il controllo semantico delle versioni per avviare la creazione della pipeline, assicurati di modificare questo valore in Usa l'ultima versione del sistema operativo disponibile. Per ulteriori informazioni sul controllo semantico delle versioni per le risorse di Image Builder, consulta. Versionamento semantico in Image Builder

    ECR image
    • Image Operating System (OS) —Pre-selected, ma modificabile.

    • Versione del sistema operativo — Pre-selected, ma modificabile.

    • ID immagine ECR — Pre-filled, ma modificabile.

    Docker Hub image
    • Sistema operativo dell'immagine (OS): non modificabile.

    • Versione del sistema operativo: Pre-selected ma modificabile.

    • DockerID dell'immagine — Pre-filled, ma modificabile.

Configurazione dell’istanza
  • Fonte AMI (obbligatorio): identifica un'AMI personalizzata da utilizzare come immagine di base per la compilazione e l'istanza di test del contenitore. Può essere un ID AMI o un parametro AWS Systems Manager (SSM) Parameter Store che contiene un ID AMI.

    • ID AMI: questa impostazione non è precompilata con la voce originale. Inserisci l'ID AMI per la tua immagine di base. Esempio: ami-1234567890abcdef1.

    • Parametro SSM: inserisci il nome o l'ARN del parametro SSM Parameter Store che contiene l'ID AMI per l'immagine di base. Esempio: /ib/test/param o arn:aws:ssm:us-east-1:111122223333:parameter/ib/test/param.

  • Storage (volumi)

    Volume EBS 1 (radice AMI) —. Pre-filled Non è possibile modificare il nome del dispositivo, l'istantanea o le selezioni IOPS del volume root. Tuttavia, puoi modificare tutte le impostazioni rimanenti, ad esempio la Dimensione. Puoi anche aggiungere nuovi volumi.

    Nota

    Se hai specificato un'AMI di base condivisa con te da un altro account, anche le istantanee di tutti i volumi secondari specificati devono essere condivise con il tuo account.

Directory di lavoro
  • Percorso della cartella di lavoro — Pre-filled, ma modificabile.

Componenti
  • Componenti: i componenti già inclusi nella ricetta vengono visualizzati nella sezione Componenti selezionati alla fine di ciascuno degli elenchi dei componenti (build e test). È possibile rimuovere o riordinare i componenti selezionati in base alle proprie esigenze.

    I componenti di rafforzamento CIS non seguono le regole di ordinamento dei componenti standard nelle ricette di Image Builder. I componenti di rafforzamento CIS vengono sempre eseguiti per ultimi per garantire che i test di benchmark vengano eseguiti rispetto all'immagine di output.

    Nota

    Gli elenchi dei componenti di compilazione e test visualizzano i componenti disponibili in base al tipo di proprietario del componente. Per aggiungere un componente, scegli Aggiungi componenti di costruzione e seleziona il filtro di proprietà applicabile. Ad esempio, per aggiungere un componente di costruzione associato a un AWS Marketplace prodotto, selezionaAWS Marketplace. Si apre un pannello di selezione sul lato destro dell'interfaccia della console che elenca AWS Marketplace i componenti.

    Per il componente CIS, selezionareThird party managed.

    È possibile configurare le seguenti impostazioni per il componente selezionato:

    • Opzioni di controllo delle versioni: Pre-selected, ma è possibile modificarle. Ti consigliamo di scegliere l'opzione Usa l'ultima versione disponibile del componente per assicurarti che le build delle tue immagini utilizzino sempre la versione più recente del componente. Se devi utilizzare una versione specifica del componente nella tua ricetta, puoi scegliere Specifica la versione del componente e inserire la versione nella casella Versione del componente che appare.

    • Parametri di input: visualizza i parametri di input accettati dal componente. Il valore è precompilato con il valore della versione precedente della ricetta. Se utilizzate questo componente per la prima volta in questa ricetta ed è stato definito un valore predefinito per il parametro di input, il valore predefinito viene visualizzato nella casella Valore con testo in grigio. Se non viene immesso nessun altro valore, Image Builder utilizza il valore predefinito.

      Se è richiesto un parametro di input, ma non è definito un valore predefinito nel componente, è necessario fornire un valore. Image Builder non creerà la versione della ricetta se mancano dei parametri obbligatori e non è definito un valore predefinito.

      Importante

      I parametri dei componenti sono valori di testo semplice e vengono registrati. AWS CloudTrail Ti consigliamo di utilizzare AWS Secrets Manager il nostro AWS Systems Manager Parameter Store per archiviare i tuoi segreti. Per ulteriori informazioni su Secrets Manager, vedi Cos'è Secrets Manager? nella Guida AWS Secrets Manager per l'utente. Per ulteriori informazioni su AWS Systems Manager Parameter Store, vedere AWS Systems Manager Parameter Store nella Guida AWS Systems Manager per l'utente.

    Per espandere le impostazioni relative alle opzioni di controllo delle versioni o ai parametri di input, potete scegliere la freccia accanto al nome dell'impostazione. Per espandere tutte le impostazioni per tutti i componenti selezionati, puoi attivare e disattivare l'opzione Espandi tutto.

Modello Dockerfile
  • Modello Dockerfile — Pre-filled, ma modificabile. È possibile specificare una delle seguenti variabili contestuali che Image Builder sostituisce con le informazioni di compilazione in fase di esecuzione.

     

    ParentImage (obbligatorio)

    In fase di compilazione, questa variabile si risolve nell'immagine di base per la ricetta.

    Esempio:

    FROM {{{ imagebuilder:parentImage }}}
    ambienti (obbligatorio se vengono specificati i componenti)

    In fase di compilazione, questa variabile si risolve nelle direttive Dockerfile che inseriscono i componenti nel contesto di compilazione. Queste direttive copiano gli script dei componenti nell'immagine e impostano le variabili di ambiente utilizzate da tali script. Prepara l'ambiente ma non esegue i componenti specificati. Posiziona questa variabile prima della components variabile.

    Esempio:

    {{{ imagebuilder:environments }}}
    componenti (opzionali)

    In fase di compilazione, questa variabile si risolve nel comando che esegue gli script dei componenti di compilazione e test per i componenti inclusi nella ricetta del contenitore, quindi rimuove tali script dall'immagine. Questa è la variabile che esegue i componenti. Posizionala dopo la environments variabile.

    Esempio:

    {{{ imagebuilder:components }}}
Repository di destinazione
  • Nome del repository di destinazione: il repository Amazon ECR in cui è archiviata l'immagine di output se non è specificato nessun altro repository nella configurazione di distribuzione della pipeline per la regione in cui viene eseguita la pipeline (Regione 1).

Per creare una nuova versione della ricetta del contenitore:
  1. Nella pagina dei dettagli della ricetta del contenitore, scegli Crea nuova versione nella parte superiore della pagina. La console apre la pagina Crea ricetta per le ricette in contenitori.

  2. Per creare la nuova versione, apporta le modifiche, quindi scegli Crea ricetta.

Per ulteriori informazioni sulla creazione di una composizione contenitore quando si crea una pipeline di immagini, Fase 2: Scegli la ricetta consultate la sezione Guida introduttiva di questa guida.

Crea una ricetta per un contenitore con AWS CLI

Per creare una ricetta di contenitori Image Builder con il imagebuilder create-container-recipe comando in AWS CLI, segui questi passaggi:

Prerequisiti

Prima di eseguire i comandi di Image Builder in questa sezione per creare una ricetta contenitore con il AWS CLI, è necessario creare i componenti che la ricetta utilizzerà. L'esempio di ricetta del contenitore nel passaggio seguente si riferisce ai componenti di esempio creati nella Creare un componente personalizzato dal AWS CLI sezione di questa guida.

Dopo aver creato i componenti, o se stai utilizzando componenti esistenti, annota gli ARN che desideri includere nella ricetta.

  1. Creazione di un file JSON di input nella CLI

    È possibile fornire tutti gli input per il create-container-recipe comando con parametri di comando in linea. Tuttavia, il comando risultante può essere piuttosto lungo. Per semplificare il comando, puoi invece fornire un file JSON che contiene tutte le impostazioni della ricetta del contenitore

    Nota

    La convenzione di denominazione per i valori dei dati nel file JSON segue lo schema specificato per i parametri di richiesta di operazione dell'API Image Builder. Per esaminare i parametri della richiesta di operazione API, consulta il CreateContainerRecipe comando nell'API Reference di EC2 Image Builder.

    Per fornire i valori dei dati come parametri della riga di comando, fate riferimento ai nomi dei parametri specificati nel AWS CLI Command Reference.

    Ecco un riepilogo dei parametri di questo esempio:

    • componenti (matrice di oggetti, opzionale): contiene una serie di ComponentConfiguration oggetti. I componenti sono opzionali per le ricette in contenitori. Puoi personalizzare l'immagine di output con i componenti BUILD, con le istruzioni nel tuo modello Dockerfile (ad esempio, RUN o COPY istruzioni) o entrambi. I componenti TEST convalidano l'immagine ma non la modificano.

      Nota

      Image Builder installa i componenti nell'ordine in cui li hai specificati nella ricetta. Tuttavia, i componenti CIS hardening vengono sempre eseguiti per ultimi per garantire che i test di benchmark vengano eseguiti sull'immagine di output.

      • componentArn (string, obbligatorio) — L'ARN del componente.

        Suggerimento

        Per utilizzare l'esempio per creare una ricetta di contenitore personalizzata, sostituite gli ARN di esempio con gli ARN dei componenti che state utilizzando per la ricetta,. Questi includono il Regione AWS nome e il numero di versione di ciascuno.

      • parametri (matrice di oggetti): contiene una matrice di ComponentParameter oggetti. Se è richiesto un parametro di input, ma non è definito un valore predefinito nel componente, è necessario fornire un valore. Image Builder non creerà la versione della ricetta se mancano dei parametri obbligatori e non è definito un valore predefinito.

        Importante

        I parametri dei componenti sono valori di testo semplice e vengono registrati. AWS CloudTrail Ti consigliamo di utilizzare AWS Secrets Manager il nostro AWS Systems Manager Parameter Store per archiviare i tuoi segreti. Per ulteriori informazioni su Secrets Manager, vedi Cos'è Secrets Manager? nella Guida AWS Secrets Manager per l'utente. Per ulteriori informazioni su AWS Systems Manager Parameter Store, vedere AWS Systems Manager Parameter Store nella Guida AWS Systems Manager per l'utente.

        • name (string, obbligatorio) — Il nome del parametro del componente da impostare.

        • value (matrice di stringhe, obbligatorio) — Contiene una matrice di stringhe per impostare il valore del parametro del componente denominato. Se è definito un valore predefinito per il componente e non viene fornito nessun altro valore, AWSTOE utilizza il valore predefinito.

    • containerType (string, required) — Il tipo di contenitore da creare. I valori validi includono. DOCKER

    • dockerfile TemplateData (string) — Il modello Dockerfile in linea per la creazione dell'immagine. I dati in linea sono limitati a 16.000 caratteri. È necessario specificare dockerfileTemplateData o dockerfileTemplateUri, ma non entrambi.

      Il modello Dockerfile può includere variabili contestuali (segnaposto che Image Builder sostituisce con le informazioni di compilazione in fase di esecuzione). Includi almeno la variabile. parentImage Se la ricetta include dei componenti, includi anche la environments variabile e la components variabile.

      ParentImage (obbligatorio)

      In fase di compilazione, questa variabile si risolve nell'immagine di base per la tua ricetta.

      Esempio:

      FROM {{{ imagebuilder:parentImage }}}
      ambienti (obbligatorio se vengono specificati i componenti)

      In fase di compilazione, questa variabile si risolve nelle direttive Dockerfile che inseriscono i componenti nel contesto di compilazione. Queste direttive copiano gli script dei componenti nell'immagine e impostano le variabili di ambiente utilizzate da tali script. Prepara l'ambiente ma non esegue i componenti specificati. Posiziona questa variabile prima della components variabile.

      Esempio:

      {{{ imagebuilder:environments }}}
      componenti (opzionali)

      In fase di compilazione, questa variabile si risolve nel comando che esegue gli script dei componenti di compilazione e test per i componenti inclusi nella ricetta del contenitore, quindi rimuove tali script dall'immagine. Questa è la variabile che esegue i componenti. Posizionala dopo la environments variabile.

      Esempio:

      {{{ imagebuilder:components }}}

      Per archiviare il modello in Amazon S3, utilizza invece il TemplateUri parametro dockerfile con un URI Amazon S3 valido (ad esempio,). s3://my-bucket/templates/Dockerfile

    • name (string, required) — Il nome della ricetta del contenitore.

    • description (string) — La descrizione della ricetta del contenitore.

    • parentImage (string, required) — L'immagine del Docker contenitore da utilizzare nella ricetta del contenitore come base per l'immagine personalizzata.

      • Immagini pubbliche ospitate su DockerHub

      • Immagini dei contenitori esistenti in Amazon ECR

      • Amazon-managed immagini dei contenitori

    • platformOverride (string) — Specifica la piattaforma del sistema operativo quando si utilizza un'immagine di base personalizzata. Ti consigliamo di impostare questo valore quando usi un'immagine Docker Hub o Amazon ECR. Se lo ometti, Image Builder tenta di rilevare la piattaforma dal manifest del contenitore, che potrebbe non essere sempre disponibile. Non è possibile specificare platformOverride quando l'immagine principale è un'immagine ARN di Image Builder. I valori validi sono Linux e Windows. Le ricette in contenitori non supportano la piattaforma macOS.

    • <major>semanticVersion (string, required) — La versione semantica della ricetta del contenitore specificata nel seguente formato, con valori numerici in ogni posizione per indicare una versione specifica:. <minor>. <patch>. Ad esempio, sarebbe 1.0.0. Per ulteriori informazioni sul controllo semantico delle versioni per le risorse di Image Builder, vedere. Versionamento semantico in Image Builder

    • tags (string map) — Tag allegati alla ricetta del contenitore.

    • instanceConfiguration (object) — Un gruppo di opzioni che possono essere utilizzate per configurare un'istanza per la creazione e il test delle immagini dei contenitori.

      • image (string) — L'immagine di base per un'istanza di compilazione e test di un contenitore. Può contenere un ID AMI oppure può specificare un parametro AWS Systems Manager (SSM) Parameter Store, preceduto e seguito dal ssm: nome del parametro o dall'ARN. Se si utilizza un parametro SSM, il valore del parametro deve contenere un ID AMI. Se non specifichi un'immagine di base, Image Builder utilizza l'AMI ottimizzata per Amazon ECS appropriata come immagine di base.

      • block DeviceMappings (array of objects): definisce i dispositivi a blocchi da collegare per creare un'istanza dall'AMI Image Builder specificata nel image parametro.

        • deviceName (string) — Il dispositivo a cui si applicano queste mappature.

        • ebs (object) — Utilizzato per gestire la configurazione specifica di Amazon EBS per questa mappatura.

          • delete OnTermination (Boolean): utilizzato per configurare l'eliminazione alla chiusura del dispositivo associato.

          • crittografato (booleano): utilizzato per configurare la crittografia del dispositivo.

          • volumeSize (numero intero): utilizzato per sovrascrivere le dimensioni del volume del dispositivo.

          • volumeType (string): utilizzato per sovrascrivere il tipo di volume del dispositivo.

    • targetRepository (object, required) — Il repository di destinazione per l'immagine del contenitore se non è specificato nessun altro repository nella configurazione di distribuzione della pipeline per la regione in cui viene eseguita la pipeline (Regione 1).

      • repositoryName (string, obbligatorio) — Il nome del repository del contenitore in cui è archiviata l'immagine del contenitore di output. Questo nome ha come prefisso la posizione del repository.

      • service (string, required) — Specifica il servizio di repository che memorizza l'immagine di output. Il valore valido è ECR. Il repository di destinazione deve già esistere.

    • workingDirectory (string): la directory di lavoro da utilizzare durante i flussi di lavoro di compilazione e test.

    L'esempio seguente mostra un file di input completo della ricetta del contenitore che definisce un Docker contenitore Linux con componenti di compilazione. Salvalo create-container-recipe.json con nome e usalo nel 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" }
  2. Crea la ricetta

    Usate il comando seguente per creare la ricetta. Fornisci il nome del file JSON che hai creato nel passaggio precedente nel --cli-input-json parametro:

    aws imagebuilder create-container-recipe --cli-input-json file://create-container-recipe.json
    Nota
    • È necessario includere l'annotazione file:// all'inizio del percorso del file JSON.

    • Il percorso del file JSON deve seguire la convenzione appropriata per il sistema operativo di base in cui si esegue il comando. Ad esempio, Windows utilizza la barra rovesciata (\) per fare riferimento al percorso della directory, mentre Linux e macOS utilizzano la barra rovesciata (/).

    L'output di esempio seguente mostra l'ARN della ricetta del contenitore appena creata, insieme all'ID della richiesta e al token client per la richiesta.

    { "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" }

Vincoli relativi alla ricetta del contenitore

Rivedi i seguenti vincoli prima di creare una ricetta per un contenitore:

  • È necessario specificare un repository Amazon ECR di destinazione già esistente.

  • AWS Marketplace i componenti non sono supportati nelle ricette dei contenitori.

  • I componenti sono opzionali. Puoi personalizzare l'immagine di output con i componenti BUILD, con le istruzioni nel tuo modello Dockerfile (ad esempio, RUN o COPY istruzioni) o entrambi. I componenti TEST convalidano l'immagine ma non la modificano.

  • Le ricette in contenitori non supportano la piattaforma macOS.

  • Per il modello Dockerfile, fornisci dati in linea (fino a 16.000 caratteri) o un URI Amazon S3. Non puoi specificare entrambi.

  • La dimensione cumulativa della ricetta non può superare i 25 KB. Se ricevete un errore di dimensione, riducete il numero di parametri dei componenti o abbreviate i valori dei parametri. Questo limite è separato dai limiti di dimensione del modello Dockerfile.

  • Quando lo platformOverride impostiWindows, devi anche specificare. imageOsVersionOverride Questo vale per qualsiasi immagine principale non Image Builder, come un'immagine Amazon ECR o un'Docker Hubimmagine.

Errori e risoluzione dei problemi comuni

La tabella seguente elenca gli errori più comuni che potresti riscontrare durante la creazione di una ricetta per contenitori, insieme a come risolverli.

Errore Causa Risoluzione
«Le ricette dei contenitori non devono contenere componenti del marketplace» Un AWS Marketplace componente di una ricetta in un contenitore. Usare solo componenti non AWS Marketplace componenti.
«Le ricette in contenitori attualmente non supportano la piattaforma macOS» platformOverrideè impostato su macOS. Utilizza Linux o Windows.
«È necessario specificare un dockerfile o un dockerfileTemplateData » TemplateUri Hai specificato entrambi o nessuno dei due. Forniscine esattamente uno.
«URI S3 non valido» Un percorso Amazon S3 non valido in. dockerfileTemplateUri Utilizzare il formato s3://bucket/key.
«Non è possibile specificare un override della piattaforma quando si utilizza un'immagine Image Builder come immagine principale» platformOverridecon un ARN di immagini di Image Builder. Remove platformOverride. Image Builder rileva la piattaforma dai metadati dell'immagine principale.
«È necessario specificare una sostituzione dell'immagine OsVersion quando si utilizzano i repository ECR come immagine principale per la piattaforma Windows» Una versione Windows platformOverride senza sistema operativo. Aggiungi il imageOsVersionOverride campo.