As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.
Criar uma nova versão de fórmula de contêiner
Esta seção mostra como criar uma receita de contêiner ou uma nova versão de uma receita existente. Uma receita de contêiner define três elementos principais: a imagem base, os componentes de construção e o repositório de destino. Use essa receita para produzir imagens de Docker contêiner que o Image Builder armazena no Amazon ECR.
Conteúdo
Crie uma nova versão de fórmula de contêiner com o console
Criar uma nova versão de uma fórmula do contêiner é praticamente o mesmo que criar uma nova fórmula. A diferença é que certos detalhes são pré-selecionados para corresponder à fórmula de base, na maioria dos casos. A lista a seguir descreve as diferenças entre criar uma nova fórmula e criar uma nova versão de uma fórmula existente.
Detalhes da fórmula
-
Nome: não editável.
-
Versão: obrigatória. Esse detalhe não é pré-preenchido com a versão atual nem com qualquer tipo de sequência. Insira o número da versão que você deseja criar no formato major.minor.patch. Se a versão já existir, o Image Builder retornará um erro.
Imagem base
-
Selecione a opção de imagem — Pre-selected, mas editável. Se você alterar sua escolha para a fonte da imagem de base, você poderá perder outros detalhes que dependem da opção original escolhida por você.
Para imagens de Docker contêiner, você pode escolher entre imagens públicas hospedadas emDockerHub, imagens de contêiner existentes no Amazon ECR ou imagens de Amazon-managed contêiner. Para ver detalhes associados à seleção imagem base, escolha a guia que corresponde à sua seleção.
Configuração da instância
-
Origem da AMI (obrigatório) — identifique uma AMI personalizada para usar como imagem base para sua instância de criação e teste de contêiner. Isso pode ser um ID de AMI ou um parâmetro de armazenamento de parâmetros AWS Systems Manager (SSM) que contém um ID de AMI.
-
ID da AMI — Essa configuração não está pré-preenchida com sua entrada original. Insira o ID da AMI para sua imagem base. Exemplo:
.ami-1234567890abcdef1 -
Parâmetro SSM — insira o nome ou o ARN do parâmetro SSM Parameter Store que contém o ID da AMI para sua imagem base. Exemplo:
ou/ib/test/paramarn:aws:ssm:.us-east-1:111122223333:parameter/ib/test/param
-
-
Armazenamento (volumes)
Volume 1 do EBS (raiz da AMI) — Pre-filled. As seleções Nome do dispositivo, Snapshot e IOPS do volume raiz não podem ser editados. No entanto, você pode alterar todas as demais configurações, como o Tamanho. Você também pode adicionar novos volumes.
nota
Se você especificar uma AMI base compartilhada de outra conta com você, os snapshots de qualquer volume secundário especificado também devem ser compartilhados com sua conta.
Diretório de trabalho
-
Caminho do diretório de trabalho — Pre-filled, mas editável.
Componentes
Componentes: os componentes que já estão incluídos na fórmula são exibidos na seção Componentes selecionados no final de cada uma das listas de componentes (compilação e teste). Você pode remover ou reordenar os componentes selecionados para atender às suas necessidades.
Os componentes de endurecimento do CIS não seguem as regras padrão de ordenação de componentes nas fórmulas do Image Builder. Os componentes de endurecimento do CIS sempre são executados por último para garantir que os testes de benchmark sejam executados em relação à sua imagem de saída.
nota
As listas de componentes de compilação e teste exibem os componentes disponíveis com base no tipo de proprietário do componente. Para adicionar um componente, escolha Adicionar componentes de compilação e selecione o filtro de propriedade que se aplica. Por exemplo, para adicionar um componente de construção associado a um AWS Marketplace produto, selecione
AWS Marketplace. Isso abre um painel de seleção no lado direito da interface do console que lista AWS Marketplace os componentes.Para o componente CIS, selecione
Third party managed.Você pode definir as seguintes configurações para seu componente selecionado:
-
Opções de controle de versão — Pre-selected, mas você pode alterá-las. Recomendamos que você escolha a opção Usar a versão mais recente disponível do componente para garantir que suas compilações de imagem sempre usem a versão mais recente do componente. Se precisar usar uma versão específica do componente em sua fórmula, você pode escolher Especificar versão do componente e inserir a versão na caixa Versão do componente que aparece.
-
Parâmetros de entrada: exibe os parâmetros de entrada que o componente aceita. O Valor é pré-preenchido com o valor da versão anterior da fórmula. Se você estiver usando esse componente pela primeira vez nessa fórmula e um valor padrão tiver sido definido para o parâmetro de entrada, o valor padrão aparecerá na caixa Valor com texto acinzentado. Se nenhum outro valor for inserido, o Image Builder usará o valor padrão.
Se um parâmetro de entrada for necessário, mas não tiver um valor padrão definido no componente, você deverá fornecer um valor. O Image Builder não criará a versão da fórmula se algum parâmetro obrigatório estiver faltando e não houver um valor padrão definido.
Importante
Os parâmetros do componente são valores de texto simples e estão logados em AWS CloudTrail. Recomendamos que você use AWS Secrets Manager o AWS Systems Manager Parameter Store para armazenar seus segredos. Para obter mais informações sobre o Secrets Manager, consulte O que é o Secrets Manager? no AWS Secrets Manager Guia do usuário. Para obter mais informações sobre o AWS Systems Manager Parameter Store, consulte AWS Systems Manager Parameter Store no AWS Systems Manager Guia do usuário.
Para expandir as configurações das opções de versionamento ou dos parâmetros de entrada, você pode escolher a seta ao lado do nome da configuração. Para expandir todas as configurações de todos os componentes selecionados, você pode ativar e desativar a opção Expandir tudo.
-
Modelo do Dockerfile
-
Modelo Dockerfile — Pre-filled, mas editável. Você pode especificar qualquer uma das variáveis contextuais a seguir que o Image Builder substitui por informações de compilação no runtime.
- parentImage (obrigatória)
-
No momento da compilação, esta variável é resolvida na imagem de base da sua fórmula.
Exemplo:
FROM {{{ imagebuilder:parentImage }}} - environments (necessários se os componentes forem especificados)
-
No momento da construção, essa variável é resolvida para as diretivas do Dockerfile que colocam seus componentes no contexto de construção. Essas diretivas copiam os scripts do componente na imagem e definem as variáveis de ambiente que esses scripts usam. Ele prepara o ambiente, mas não executa os componentes que você especifica. Coloque essa variável antes da
componentsvariável.Exemplo:
{{{ imagebuilder:environments }}} - components (opcional)
-
No momento da compilação, essa variável é resolvida para o comando que executa os scripts dos componentes de construção e teste dos componentes que a receita do contêiner inclui e, em seguida, remove esses scripts da imagem. Essa é a variável que executa seus componentes. Coloque-o depois da
environmentsvariável.Exemplo:
{{{ imagebuilder:components }}}
Repositório de destino
-
Nome do repositório de destino: o repositório Amazon ECR onde sua imagem de saída está armazenada se não houver outro repositório especificado na configuração de distribuição do seu pipeline para a região onde o pipeline é executado (Região 1).
Para criar uma nova fórmula de contêiner:
-
Na página de detalhes da receita do contêiner, escolha Criar nova versão na parte superior da página. O console abre a página Criar receita para receitas de contêineres.
-
Para criar a nova versão, faça suas alterações e depois escolha Criar fórmula.
Para obter mais informações sobre como criar uma receita de contêiner ao criar um funil Etapa 2: Escolher fórmula de imagens, consulte a seção Introdução deste guia.
Crie uma receita de contêiner com o AWS CLI
Para criar uma receita de contêiner do Image Builder com o imagebuilder
create-container-recipe comando no AWS CLI, siga estas etapas:
Pré-requisitos
Antes de executar os comandos do Image Builder nesta seção para criar uma receita de contêiner com o AWS CLI, você deve criar os componentes que a receita usará. O exemplo de fórmula de contêiner na etapa a seguir se refere a exemplos de componentes que são criados na seção Crie um componente personalizado a partir do AWS CLI deste guia.
Depois de criar seus componentes, ou se você estiver usando componentes existentes, anote os ARNs que você deseja incluir na fórmula.
-
Criar um arquivo JSON de entrada da CLI
Você pode fornecer toda a entrada para o comando create-container-recipe com parâmetros de comando embutidos. No entanto, o comando resultante pode ser bastante longo. Para simplificar o comando, você pode fornecer um arquivo JSON que contenha todas as configurações da fórmula do contêiner
nota
A convenção de nomenclatura para os valores de dados no arquivo JSON segue o padrão especificado para os parâmetros de solicitação de operação da API Image Builder. Para revisar os parâmetros da solicitação de operação da API, consulte o CreateContainerRecipe comando na Referência da API do EC2 Image Builder.
Para fornecer os valores dos dados como parâmetros da linha de comando, consulte os nomes dos parâmetros especificados na AWS CLI Referência de comando.
Aqui está um resumo dos parâmetros neste exemplo:
-
componentes (matriz de objetos, opcional) — Contém uma matriz de
ComponentConfigurationobjetos. Os componentes são opcionais para receitas de contêineres. Você pode personalizar a imagem de saída com componentes BUILD, com instruções em seu modelo Dockerfile (por exemplo,RUNouCOPYdeclarações), ou ambos. Os componentes TEST validam a imagem, mas não a modificam.nota
O Image Builder instala os componentes na ordem em que você os especificou na fórmula. No entanto, os componentes de fortalecimento do CIS sempre são executados por último para garantir que os testes de benchmark sejam executados em relação à sua imagem de saída.
-
componentARN (string, obrigatório): o ARN do componente.
dica
Para usar o exemplo para criar sua própria fórmula de contêiner, substitua os ARNs de exemplo pelos ARNs dos componentes que você está usando para sua fórmula. Isso inclui o Região da AWS, nome, e o número da versão de cada um.
parameters (matriz de objetos): contém uma variedade de objetos
ComponentParameter. Se um parâmetro de entrada for necessário, mas não tiver um valor padrão definido no componente, você deverá fornecer um valor. O Image Builder não criará a versão da fórmula se algum parâmetro obrigatório estiver faltando e não houver um valor padrão definido.Importante
Os parâmetros do componente são valores de texto simples e estão logados em AWS CloudTrail. Recomendamos que você use AWS Secrets Manager o AWS Systems Manager Parameter Store para armazenar seus segredos. Para obter mais informações sobre o Secrets Manager, consulte O que é o Secrets Manager? no AWS Secrets Manager Guia do usuário. Para obter mais informações sobre o AWS Systems Manager Parameter Store, consulte AWS Systems Manager Parameter Store no AWS Systems Manager Guia do usuário.
-
nome (string, obrigatório): o nome do parâmetro do componente a ser definido.
-
value (matriz de strings, obrigatório): contém uma matriz de strings para definir o valor do parâmetro do componente nomeado. Se houver um valor padrão definido para o componente e nenhum outro valor for fornecido, AWSTOE usará o valor padrão.
-
-
-
ContainerType (string, obrigatório): o tipo de contêiner a ser criado. Os valores válidos são:
DOCKER. -
dockerfile TemplateData (string) — O modelo embutido do Dockerfile para criar sua imagem. Os dados embutidos são limitados a 16.000 caracteres. Você precisa especificar o
dockerfileTemplateDataou odockerfileTemplateUri, mas não os dois.Seu modelo do Dockerfile pode incluir variáveis contextuais (espaços reservados que o Image Builder substitui por informações de compilação em tempo de execução). Inclua pelo menos a
parentImagevariável. Se sua receita incluir componentes, inclua também aenvironmentsvariável e acomponentsvariável.- parentImage (obrigatória)
-
No momento da compilação, esta variável é resolvida na imagem de base da sua fórmula.
Exemplo:
FROM {{{ imagebuilder:parentImage }}} - environments (necessários se os componentes forem especificados)
-
No momento da construção, essa variável é resolvida para as diretivas do Dockerfile que colocam seus componentes no contexto de construção. Essas diretivas copiam os scripts do componente na imagem e definem as variáveis de ambiente que esses scripts usam. Ele prepara o ambiente, mas não executa os componentes que você especifica. Coloque essa variável antes da
componentsvariável.Exemplo:
{{{ imagebuilder:environments }}} - components (opcional)
-
No momento da compilação, essa variável é resolvida para o comando que executa os scripts dos componentes de construção e teste dos componentes que a receita do contêiner inclui e, em seguida, remove esses scripts da imagem. Essa é a variável que executa seus componentes. Coloque-o depois da
environmentsvariável.Exemplo:
{{{ imagebuilder:components }}}
Em vez disso, para armazenar o modelo no Amazon S3, use o TemplateUri parâmetro dockerfile com um URI válido do Amazon S3 (por exemplo,).
s3://my-bucket/templates/Dockerfile -
name (string, obrigatório): o nome da fórmula do contêiner.
-
description (string): a descrição da fórmula do contêiner.
-
parentImage (string, required) — A imagem do Docker contêiner a ser usada na receita do contêiner como linha de base para sua imagem personalizada.
-
Imagens públicas hospedadas em DockerHub
-
Imagens de contêiner existentes no Amazon ECR
-
Amazon-managed imagens de contêiner
-
-
platformOverride (string) - Especifica a plataforma do sistema operacional quando você usa uma imagem base personalizada. Recomendamos que você defina esse valor ao usar uma Docker Hub imagem do Amazon ECR. Se você omiti-lo, o Image Builder tentará detectar a plataforma a partir do manifesto do contêiner, que talvez nem sempre esteja disponível. Você não pode especificar
platformOverridequando sua imagem principal é um ARN de imagem do Image Builder. Os valores válidos sãoLinuxeWindows. As receitas de contêiner não são compatíveis com a plataforma macOS. -
SemanticVersion (string, obrigatório): a versão semântica da fórmula do contêiner especificada no formato a seguir, com valores numéricos em cada posição para indicar uma versão específica: <major>,<minor>,<patch> . Um exemplo seria
1.0.0. Para saber mais sobre o versionamento semântico dos recursos do Image Builder, consulte Versionamento semântico no Image Builder. -
tags (string map) - Tags que estão anexadas à fórmula do contêiner.
-
instanceConfiguration (objeto) - Um grupo de opções que pode ser utilizado para configurar uma instância para compilar e testar imagens de contêiner.
-
image (string) — A imagem base para uma instância de construção e teste de contêiner. Isso pode conter um ID de AMI ou especificar um parâmetro de armazenamento de parâmetros AWS Systems Manager (SSM), prefixado por
ssm:, seguido pelo nome do parâmetro ou ARN. Se você usar um parâmetro SSM, o valor do parâmetro deverá conter um ID de AMI. Se você não especificar uma imagem base, o Image Builder usa a AMI otimizada apropriada do Amazon ECS como imagem base. -
bloco DeviceMappings (matriz de objetos) — Define os dispositivos de bloco a serem anexados para criar uma instância a partir da AMI do Image Builder especificada no image parâmetro.
-
deviceName (string): o dispositivo ao qual esses mapeamentos se aplicam.
-
ebs (objeto) - Use para gerenciar a configuração específica do Amazon EBS para esse mapeamento.
-
delete OnTermination (Boolean) — Usado para configurar a exclusão no encerramento do dispositivo associado.
-
encrypted (booleano): usado para configurar a criptografia do dispositivo.
-
volumeSize (inteiro): usado para substituir o tamanho do volume do dispositivo.
-
volumeSize (string): usado para substituir o tipo do volume do dispositivo.
-
-
-
-
targetRepository (objeto, obrigatório): o repositório de destino da imagem do contêiner, se não houver outro repositório especificado na configuração de distribuição do pipeline para a região onde o pipeline é executado (Região 1).
-
repositoryName (string, obrigatório) - O nome do repositório de contêiner onde a imagem do contêiner de saída é armazenada. Este nome é prefixado pelo local do repositório.
-
service (string, required) — Especifica o serviço de repositório que armazena a imagem de saída. O valor válido é
ECR. O repositório de destino já deve existir.
-
-
workingDirectory (string) - O diretório de trabalho a ser usado durante os fluxos de trabalho de compilação e teste.
O exemplo a seguir mostra um arquivo de entrada de receita de contêiner completo que define um Docker contêiner Linux com componentes de compilação. Salve-o como
create-container-recipe.jsone use-o no 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" } -
-
Criar a fórmula
Use o comando a seguir para criar a fórmula. Forneça o nome do arquivo JSON que você criou na etapa anterior no parâmetro
--cli-input-json:aws imagebuilder create-container-recipe --cli-input-json file://create-container-recipe.jsonnota
-
É necessário incluir a notação
file://no início do caminho do arquivo JSON. -
O caminho para o arquivo JSON deve seguir a convenção apropriada para o sistema operacional de base no qual você está executando o comando. Por exemplo, o Windows usa a barra invertida (\) para se referir ao caminho do diretório, enquanto o Linux e o macOS usam a barra (/).
O exemplo de saída a seguir mostra o ARN da receita de contêiner recém-criada, junto com o ID da solicitação e o token do cliente para a solicitação.
{ "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" } -
Restrições de receita de contêiner
Analise as seguintes restrições antes de criar uma receita de contêiner:
-
Você deve especificar um repositório de destino do Amazon ECR que já exista.
-
AWS Marketplace componentes não são suportados em receitas de contêineres.
-
Os componentes são opcionais. Você pode personalizar a imagem de saída com componentes BUILD, com instruções em seu modelo Dockerfile (por exemplo,
RUNouCOPYdeclarações), ou ambos. Os componentes TEST validam a imagem, mas não a modificam. -
As receitas de contêineres não são compatíveis com a plataforma macOS.
-
Para o modelo Dockerfile, forneça dados em linha (até 16.000 caracteres) ou um URI do Amazon S3. Você não pode especificar os dois.
-
O tamanho cumulativo da receita não pode exceder 25 KB. Se você receber um erro de tamanho, reduza o número de parâmetros do componente ou encurte os valores dos parâmetros. Esse limite é separado dos limites de tamanho do modelo Dockerfile.
-
Ao
platformOverridedefinir comoWindows, você também deve especificarimageOsVersionOverride. Isso se aplica a qualquer imagem principal que não seja do Image Builder, como uma imagem do Amazon ECR ou uma Docker Hub imagem.
Erros Comuns e Solução de Problemas
A tabela a seguir lista os erros comuns que você pode encontrar ao criar uma receita de contêiner, além de como resolvê-los.
| Erro | Causa | Resolução |
|---|---|---|
| “As receitas de contêineres não devem conter componentes de mercado” | Um AWS Marketplace componente em uma receita de contêiner. | Use somente AWS Marketplace componentes que não sejam. |
| “Atualmente, as receitas de contêineres não são compatíveis com a plataforma macOS” | platformOverrideestá configurado para macOS. |
Use Linux ou Windows. |
| “Você deve especificar dockerfile TemplateData ou dockerfile” TemplateUri | Você especificou os dois ou nenhum deles. | Forneça exatamente um. |
| “URI S3 inválido” | Um caminho de entrada malformado do Amazon S3. dockerfileTemplateUri |
Use o formato s3://. |
| “Você não pode especificar uma substituição de plataforma ao usar uma imagem do Image Builder como sua mãe” | platformOverridecom um ARN de imagem do Image Builder. |
Remova platformOverride. O Image Builder detecta a plataforma a partir dos metadados da imagem principal. |
| “Você deve especificar uma OsVersion substituição de imagem ao usar os repositórios ECR como sua imagem principal para a plataforma Windows” | Um Windows platformOverride sem uma versão do sistema operacional. |
Adicione o imageOsVersionOverride campo. |