View a markdown version of this page

Usando registros de terceiros suportados pelo pull through cache - AWS HealthOmics

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á.

Usando registros de terceiros suportados pelo pull through cache

Você pode usar as regras de pull through cache do Amazon ECR para sincronizar repositórios em um registro upstream compatível com seus repositórios privados do Amazon ECR. Para obter mais informações, consulte Sincronizar um registro upstream na Guia do usuário do Amazon Elastic Container Registry.

Na primeira vez que uma imagem é extraída, o cache pull through cria o repositório de imagens em seu registro privado e o mantém sincronizado com a imagem upstream, desde que as tags de imagem do repositório permaneçam mutáveis.

HealthOmics suporta o cache de extração para os seguintes registros upstream:

  • Amazon ECR Public

  • Registro de imagens de contêiner Kubernetes

  • Quay

  • Docker Hub

  • Microsoft Azure Container Registry

  • GitHub Registro de contêiner

  • GitLab Registro de contêiner

Para registros que acessam o cache não suportam, HealthOmics copia as imagens em seus repositórios privados do Amazon ECR. Para obter mais informações, consulte O uso de registros de terceiros não é suportado pelo pull through cache.

Os benefícios de usar o cache pull through do Amazon ECR incluem:

  1. Você evita a necessidade de migrar manualmente imagens de contêiner para o Amazon ECR ou sincronizar atualizações do repositório de terceiros.

  2. Os fluxos de trabalho acessam as imagens sincronizadas do contêiner em seu repositório privado, o que é mais confiável do que baixar conteúdo em tempo de execução de um registro público.

  3. Como os caches pull through do Amazon ECR usam uma estrutura de URI previsível, você pode manter os URIs de imagem upstream em sua definição de fluxo de trabalho e adicionar um mapa de registro de contêineres que os resolva aos seus repositórios de cache. Para obter mais informações, consulte Etapa 4: Adicionar um mapa de registro de contêiner (se seu fluxo de trabalho usar URIs upstream).

Pré-requisitos

Se um registro upstream exigir autenticação, o AWS Secrets Manager segredo deve estar no mesmo Conta da AWS e Region como regra de extração de cache. Ao criar a regra, passe --credential-arn o ARN do segredo exatamente como o Secrets Manager o retorna, incluindo o sufixo que o Secrets Manager acrescenta ao nome. O gerente de segredos create-secret e describe-secret ambas as respostas o retornam. Os exemplos de ARNs neste tópico abreviam o nome secreto.

Registro upstream URL do registro O segredo do Secrets Manager é necessário

Amazon ECR Public

public.ecr.aws

Não

Registro de imagens de contêiner Kubernetes

registry.k8s.io

Não

Quay

quay.io

Não

Docker Hub

registry-1.docker.io

Sim

Microsoft Azure Container Registry

registry-name.azurecr.io

Sim

GitHub Registro de contêiner

ghcr.io

Sim

GitLab Registro de contêiner

registry.gitlab.com

Sim

O nome secreto deve começar com ecr-pullthroughcache/. Para os outros requisitos, consulte Armazenando suas credenciais de repositório upstream em um AWS Secrets Manager secreto na Guia do usuário do Amazon Elastic Container Registry.

Configurando o cache de extração

O Amazon ECR fornece um registro para seu Conta da AWS em cada região. Certifique-se de criar a configuração do Amazon ECR na mesma região em que planeja executar o fluxo de trabalho.

Conclua as seguintes tarefas de configuração em ordem. A etapa 4 se aplica somente se sua definição de fluxo de trabalho usar os URIs de imagem upstream.

Etapa 1: Criando uma regra de pull through cache

Crie uma regra de cache pull through do Amazon ECR para cada registro upstream que tenha imagens que você deseja armazenar em cache. Uma regra especifica um mapeamento entre um registro upstream e o repositório privado do Amazon ECR.

Para um registro upstream que exige autenticação, você fornece suas credenciais usando AWS Secrets Manager.

nota

Não altere uma regra de pull through cache enquanto uma execução ativa estiver usando o repositório privado. A execução pode falhar ou, mais importante ainda, fazer com que seu pipeline use imagens inesperadas.

Para obter mais informações, consulte Criando uma regra de pull through cache na Guia do usuário do Amazon Elastic Container Registry.

Criação de uma regra de pull through cache usando o console

Para configurar o cache de extração, siga estas etapas usando o console do Amazon ECR:

Parte 1: Escolhendo o registro upstream
  1. Abra o console do Amazon ECR.

  2. No painel de navegação, em Registro privado, expanda Características e configurações, em seguida, escolha Extraia o cache.

  3. Na Extraia o cache página, escolha Adicionar regra.

  4. Na Registro upstream painel, escolha o registro upstream para sincronizar com seu registro privado e escolha Próximo.

  5. Se o registro upstream exigir autenticação, na próxima página, especifique o segredo do Secrets Manager que contém suas credenciais. Escolha Próximo.

Parte 2: Especificando namespaces e criando a regra
  1. Abaixo Especificar namespaces, na Namespace de cache painel, escolha se deseja criar os repositórios privados usando um prefixo de repositório específico ou sem prefixo. Se você optar por usar um prefixo, especifique o nome do prefixo em Prefixo do repositório de cache.

  2. Na Namespace upstream painel, escolha se deseja extrair dos repositórios upstream usando um prefixo de repositório específico ou sem prefixo. Se você optar por usar um prefixo, especifique o nome do prefixo em Prefixo do repositório upstream.

    O Exemplo de namespace O painel mostra um exemplo de pull request, URL upstream e URL do repositório de cache criado.

  3. Escolha Próximo.

  4. Revise a configuração e escolha Criar para criar a regra.

Criação de uma regra de pull through cache usando o AWS CLI

Use o Amazon ECR create-pull-through-cache-rule comando para criar uma regra de pull through cache. Para registros upstream que exigem autenticação, armazene as credenciais em um segredo do Secrets Manager.

Os exemplos a seguir mostram como criar uma regra para cada registro upstream compatível.

Amazon ECR Public

O exemplo a seguir cria uma regra de cache de pull-through para o registro público do Amazon ECR. Ele especifica um prefixo de repositório de ecr-public, então cada repositório criado pela regra usa o esquema de nomenclatura ecr-public/upstream-repository-name.

aws ecr create-pull-through-cache-rule \ --ecr-repository-prefix ecr-public \ --upstream-registry-url public.ecr.aws \ --region us-east-1
Kubernetes container image registry

O exemplo a seguir cria uma regra de cache de pull-through para o registro público do Kubernetes. Ele especifica um prefixo de repositório de kubernetes, então cada repositório criado pela regra usa o esquema de nomenclatura kubernetes/upstream-repository-name.

aws ecr create-pull-through-cache-rule \ --ecr-repository-prefix kubernetes \ --upstream-registry-url registry.k8s.io \ --region us-east-1
Quay

O exemplo a seguir cria uma regra de cache de pull-through para o registro público do Quay. Ele especifica um prefixo de repositório de quay, então cada repositório criado pela regra usa o esquema de nomenclatura quay/upstream-repository-name.

aws ecr create-pull-through-cache-rule \ --ecr-repository-prefix quay \ --upstream-registry-url quay.io \ --region us-east-1
Docker Hub

O exemplo a seguir cria uma regra de cache de pull-through para o registro do Docker Hub. Ele especifica um prefixo de repositório de docker-hub, então cada repositório criado pela regra usa o esquema de nomenclatura docker-hub/upstream-repository-name. É necessário especificar o nome completo do Amazon Resource Name (ARN) do segredo que contém suas credenciais do Docker Hub.

aws ecr create-pull-through-cache-rule \ --ecr-repository-prefix docker-hub \ --upstream-registry-url registry-1.docker.io \ --credential-arn arn:aws:secretsmanager:us-east-1:111122223333:secret:ecr-pullthroughcache/example1234 \ --region us-east-1
GitHub Container Registry

O exemplo a seguir cria uma regra de extração de cache para o GitHub Registro de contêineres. Ele especifica um prefixo de repositório de github, então cada repositório criado pela regra usa o esquema de nomenclatura github/upstream-repository-name. Você deve especificar o nome de recurso da Amazon (ARN) completo do segredo contendo seu GitHub Credenciais do Container Registry.

aws ecr create-pull-through-cache-rule \ --ecr-repository-prefix github \ --upstream-registry-url ghcr.io \ --credential-arn arn:aws:secretsmanager:us-east-1:111122223333:secret:ecr-pullthroughcache/example1234 \ --region us-east-1
Microsoft Azure Container Registry

O exemplo a seguir cria uma regra de cache de pull-through para o Microsoft Azure Container Registry. Ele especifica um prefixo de repositório de azure, então cada repositório criado pela regra usa o esquema de nomenclatura azure/upstream-repository-name. É necessário especificar o nome completo do Amazon Resource Name (ARN) do segredo que contém suas credenciais do Docker Hub.

aws ecr create-pull-through-cache-rule \ --ecr-repository-prefix azure \ --upstream-registry-url myregistry.azurecr.io \ --credential-arn arn:aws:secretsmanager:us-east-1:111122223333:secret:ecr-pullthroughcache/example1234 \ --region us-east-1
GitLab Container Registry

O exemplo a seguir cria uma regra de extração de cache para o GitLab Registro de contêineres. Ele especifica um prefixo de repositório de gitlab, então cada repositório criado pela regra usa o esquema de nomenclatura gitlab/upstream-repository-name. Você deve especificar o nome de recurso da Amazon (ARN) completo do segredo contendo seu GitLab Credenciais do Container Registry.

aws ecr create-pull-through-cache-rule \ --ecr-repository-prefix gitlab \ --upstream-registry-url registry.gitlab.com \ --credential-arn arn:aws:secretsmanager:us-east-1:111122223333:secret:ecr-pullthroughcache/example1234 \ --region us-east-1

Você pode usar o get-run-task AWS CLI comando para recuperar informações sobre a imagem do contêiner usada para uma tarefa específica:

aws omics get-run-task --id run-id --task-id task-id

A saída inclui as seguintes informações sobre a imagem do contêiner:

"imageDetails": { "image": "string", "imageDigest": "string", "sourceImage": "string", ... }

Etapa 2: Configurando permissões para o registro upstream

Use as permissões do registro para permitir HealthOmics para usar o cache de extração e transferir as imagens do contêiner para o registro privado do Amazon ECR. Adicione uma política de registro do Amazon ECR ao registro que fornece os contêineres usados nas execuções.

A política a seguir concede permissão para HealthOmics serviço para criar repositórios com os prefixos de cache de extração especificados e para iniciar transferências upstream para esses repositórios.

Certifique-se Resource abrange todos os prefixos do repositório de cache que você criou e define a Região e o Conta da AWS em cada repositório ARN do registro que você está configurando, porque uma política de registro se aplica somente à sua própria região e conta.

  1. Abra o console do Amazon ECR.

  2. No painel de navegação, em Registro privado, expanda Permissões de registro, em seguida, escolha Gerar declaração.

  3. No canto superior direito, escolha JSON. Insira uma política semelhante à seguinte:

    JSON
    { "Version":"2012-10-17", "Statement": [ { "Sid": "AllowPTCinRegPermissions", "Effect": "Allow", "Principal": { "Service": "omics.amazonaws.com" }, "Action": [ "ecr:CreateRepository", "ecr:BatchImportUpstreamImage" ], "Resource": [ "arn:aws:ecr:us-east-1:123456789012:repository/ecr-public/*", "arn:aws:ecr:us-east-1:123456789012:repository/docker-hub/*" ] } ] }
  4. Salve a política.

Para anexar a política ao AWS CLI em vez disso, salve-o em um arquivo e use o Amazon ECR put-registry-policy comando:

aws ecr put-registry-policy \ --policy-text file://registry-policy-file.json \ --region region
Importante

put-registry-policy substitui toda a política de registro. Se seu registro já tiver uma política, recupere-a com get-registry-policy, adicione o HealthOmics declaração e devolva a política combinada.

Para obter mais informações sobre as políticas do cache pull through do Amazon ECR, consulte Políticas para o Amazon ECR pull through cache.

Etapa 3: Criação de modelos de repositório

Para usar o cache pull through in HealthOmics, o repositório Amazon ECR deve ter um modelo de criação de repositório. O modelo define as configurações para quando você ou o Amazon ECR criarem um repositório privado para um registro upstream.

Cada modelo contém um prefixo de namespace de repositório, que o Amazon ECR usa para associar novos repositórios a um modelo específico. Os modelos especificam a configuração de todas as configurações do repositório, incluindo políticas de acesso com base em recursos, imutabilidade de tags, criptografia e políticas de ciclo de vida.

Para obter mais informações, consulte Modelos de criação de repositórios na Guia do usuário do Amazon Elastic Container Registry.

nota

Crie o modelo antes da primeira execução que usa o prefixo. Um prefixo sem modelo próprio e sem ROOT modelo, não tem política de repositório, então HealthOmics não consigo extrair suas imagens em cache. Deixe a mutabilidade da tag em MUTABLE, para que o Amazon ECR possa atualizar uma imagem em cache quando a tag upstream for alterada. Para repositórios que já existem, consulte Atualização de repositórios criados antes do modelo.

Para criar um modelo de criação de repositório, siga estas etapas usando o console do Amazon ECR:

Parte 1: Definindo o modelo
  1. Abra o console do Amazon ECR.

  2. No painel de navegação, em Registro privado, expanda Características e configurações, em seguida, escolha Modelos de criação de repositórios.

  3. Selecione Criar modelo.

  4. Em Detalhes do modelo, escolha Extraia o cache.

  5. Escolha se deseja aplicar esse modelo a um prefixo específico ou a todos os repositórios que não correspondam a outro modelo.

    Se você escolher Um prefixo específico, insira o valor do prefixo do namespace em Prefixo. Você especificou esse prefixo ao criar a regra de pull through cache.

  6. Escolha Próximo.

Parte 2: Adicionando a configuração de criação do repositório
  1. Na Adicionar configuração de criação de repositório página, para Permissões do repositório, use um dos exemplos de declarações de política ou insira uma semelhante ao exemplo a seguir:

    JSON
    { "Version":"2012-10-17", "Statement": [ { "Sid": "PTCRepoCreationTemplate", "Effect": "Allow", "Principal": { "Service": "omics.amazonaws.com" }, "Action": [ "ecr:BatchGetImage", "ecr:GetDownloadUrlForLayer" ], "Resource": "*" } ] }
  2. (Opcional) Adicione configurações de repositório, como políticas de ciclo de vida e tags. O Amazon ECR aplica essas regras a todas as imagens de contêiner criadas para extração de cache que usam o prefixo especificado.

  3. Escolha Próximo.

  4. Revise a configuração e escolha Criar para criar o modelo.

Para criar o modelo com o AWS CLI em vez disso, salve a política do repositório do procedimento anterior em um arquivo e use o Amazon ECR create-repository-creation-template comando com --prefix defina como o prefixo do repositório de cache da sua regra de pull through cache. A descrição é opcional:

aws ecr create-repository-creation-template \ --prefix ecr-repository-prefix \ --applied-for PULL_THROUGH_CACHE \ --repository-policy file://repository-policy-file.json \ --image-tag-mutability MUTABLE \ --description "description" \ --region region

Se já existir um modelo para o prefixo, create-repository-creation-template falha com TemplateAlreadyExistsException. Em vez disso, atualize o modelo existente em vigor:

aws ecr update-repository-creation-template \ --prefix ecr-repository-prefix \ --applied-for PULL_THROUGH_CACHE \ --repository-policy file://repository-policy-file.json \ --image-tag-mutability MUTABLE \ --region region
Importante

update-repository-creation-template substitui cada valor que você passa, então --applied-for e --repository-policy sobrescreva a lista e a política existentes em vez de se fundir com elas. Recupere o modelo atual com describe-repository-creation-templates, mescle suas alterações e transmita os valores completos.

O Amazon ECR está configurado, mas o HealthOmics a configuração não está concluída. Se sua definição de fluxo de trabalho usa os URIs de imagem upstream, continue com Etapa 4: Adicionar um mapa de registro de contêiner (se seu fluxo de trabalho usar URIs upstream): sem um mapa de registro do contêiner, a execução falha após o início. Caso contrário, avance para Etapa 5: Verificar sua configuração de cache de extração.

Etapa 4: Adicionar um mapa de registro de contêiner (se seu fluxo de trabalho usar URIs upstream)

Os URIs de imagem em sua definição de fluxo de trabalho decidem se você precisa de um mapa de registro de contêiner:

URIs de imagem em sua definição de fluxo de trabalho Mapa de registro

Os URIs upstream, no formato upstream-registry-url/upstream-repository-name:tag

Adicione um mapa. O mapa diz HealthOmics qual prefixo do repositório de cache pertence a qual registro upstream, porque HealthOmics não lê suas regras de extração de cache.

Os URIs privados do Amazon ECR de seus repositórios de cache, no formato account-id.dkr.ecr.region.amazonaws.com/ecr-repository-prefix/upstream-repository-name:tag

Você não precisa de um mapa. HealthOmics usa cada URI conforme fornecido.

Um nome de imagem escrito sem um host de registro é um nome abreviado do Docker Hub, que conta como um URI upstream e precisa de um mapa.

Se sua definição usa os dois tipos de URI, adicione um mapa para as imagens que usam os URIs upstream.

Importante

Com os URIs upstream, StartRun é bem-sucedido mesmo se o mapa estiver ausente ou não tiver mapeamento para o registro upstream de uma imagem. HealthOmics valida cada imagem ao criar a tarefa que a usa, de modo que a execução falhe após o início. Ambos os casos fornecem o motivo da falha UR_ECR_IMAGE_URI INVÁLIDO, e a mensagem de status da execução os distingue. Em vez disso, um mapeamento que resolve uma imagem para um repositório de cache que não existe fornece ECR_REPOSITORY_NOT_FOUND.

Espelhe sua regra de pull through cache no mapeamento: set upstreamRegistryUrl para o URL de registro upstream da regra, ecrRepositoryPrefix para seu prefixo de repositório de cache, e upstreamRepositoryPrefix para seu prefixo de repositório upstream, se a regra usar um.

Se seus repositórios de cache estiverem em um local diferente Conta da AWS do fluxo de trabalho, defina ecrAccountId à conta que possui os repositórios de cache e adicione as políticas entre contas descritas em Políticas para acesso entre contas do Amazon ECR. ecrAccountId o padrão é a própria conta do fluxo de trabalho.

nota

Para Docker Hub, defina upstreamRegistryUrl para registry-1.docker.io, o valor em Pré-requisitos. HealthOmics guloseimas registry-1.docker.io e docker.io como o mesmo host, de modo que um mapeamento também cubra URIs de imagem escritos com docker.io.

HealthOmics também expande um nome curto do Docker Hub antes de corresponder ao mapeamento: ubuntu:22.04 torna-se docker.io/library/ubuntu:22.04, e myorg/image:tag torna-se docker.io/myorg/image:tag. HealthOmics inserções library/ somente quando o nome da imagem em sua definição não tem nenhuma barra. O nome expandido também determina o caminho do repositório de cache, então ubuntu:22.04 resolve para ecr-repository-prefix/library/ubuntu:22.04 em seu registro privado.

Você fornece o mapa ao criar o fluxo de trabalho ou a versão do fluxo de trabalho. Para saber o formato do mapa e as regras que decidem quais mapeamentos seu fluxo de trabalho precisa, consulte Mapeamentos de registro. Para mapeamentos de imagens, consulte Mapeamentos de imagens. Depois de adicionar o mapa, continue para Etapa 5: Verificar sua configuração de cache de extração.

Etapa 5: Verificar sua configuração de cache de extração

Execute o aws ecr comandos na conta que possui os repositórios de cache, porque get-registry-policy e describe-repository-creation-templates sempre leia o registro da conta chamadora e execute o aws omics comandos na conta proprietária do fluxo de trabalho. Use a região em que você executa seus fluxos de trabalho para ambos. As três verificações no procedimento a seguir são independentes, portanto, execute todas elas e colete todos os problemas antes de voltar para corrigi-los. A verificação do mapa de registro após o procedimento se aplica depois de criar o fluxo de trabalho ou a versão do fluxo de trabalho, conforme descrito em Adicionar contêineres privados ou de terceiros durante a criação do fluxo de trabalho. A verificação de ponta a ponta após ela também requer uma execução iniciada.

  1. Confirme se a regra de pull through cache existe e aponta para o registro upstream esperado:

    aws ecr describe-pull-through-cache-rules \ --region region

    Cada regra que você criou aparece com sua ecrRepositoryPrefix e upstreamRegistryUrl. Uma regra que define um prefixo de repositório upstream também mostra upstreamRepositoryPrefix, e uma regra que usa uma credencial também mostra credentialArn; O Amazon ECR omite cada um desses campos quando a regra não o define. Um vazio pullThroughCacheRules lista significa que não existe nenhuma regra nesta região. Voltar para Etapa 1: Criando uma regra de pull through cache.

    Se a regra usar uma credencial, confirme também se o Amazon ECR pode ler o segredo e fazer login no registro upstream:

    aws ecr validate-pull-through-cache-rule \ --ecr-repository-prefix ecr-repository-prefix \ --region region

    A saída inclui "isValid": true quando a autenticação for bem-sucedida e, caso contrário, nomeia o motivo em failure. Se o comando falhar com PullThroughCacheRuleNotFoundException, nenhuma regra usa esse prefixo. Um AccessDeniedException significa que seu chamador não tem o ecr:ValidatePullThroughCacheRule permissão, que as políticas somente para leitura nem sempre incluem, não que a regra esteja errada. Para obter mais informações, consulte Validando as regras de extração de cache na Guia do usuário do Amazon Elastic Container Registry.

  2. Confirme se a política de registro concede HealthOmics acesso:

    aws ecr get-registry-policy \ --region region

    O policyText valor na saída, que o Amazon ECR retorna JSON-escaped, deve conter a declaração de Etapa 2: Configurando permissões para o registro upstream, concedendo omics.amazonaws.com ambos ecr:CreateRepository e ecr:BatchImportUpstreamImage, individualmente ou por meio de um curinga, cobrindo cada prefixo de repositório de cache que você criou. Um prefixo é coberto por um Resource entrada que corresponde aos repositórios de cache abaixo dela, como um ARN de repositório terminando no prefixo seguido por /*, um ARN de repositório que termina em /* sozinho, ou um Resource do *. Um ARN que termina no próprio prefixo, sem /*, não cobre nada: o nome de um repositório de cache sempre tem um caminho abaixo do prefixo. Um ARN que nomeia uma região ou Conta da AWS além do próprio registro, também não cobre nada, conforme descrito em Etapa 2: Configurando permissões para o registro upstream. Se nenhuma instrução cobrir um prefixo, ou se o comando falhar com RegistryPolicyNotFoundException, voltar para Etapa 2: Configurando permissões para o registro upstream e certifique-se de que você salvou a política.

  3. Confirme se existe um modelo de criação de repositório para cada prefixo de repositório de cache. Passe todos os prefixos que você criou:

    aws ecr describe-repository-creation-templates \ --prefixes ecr-repository-prefix-1 ecr-repository-prefix-2 \ --region region

    Para cada prefixo, o modelo que o Amazon ECR aplica aos seus repositórios de cache — identificados no próximo parágrafo — deve ter PULL_THROUGH_CACHE em appliedFor e um repositoryPolicy que concede omics.amazonaws.com as ações de extração de Etapa 3: Criação de modelos de repositório, ecr:BatchGetImage e ecr:GetDownloadUrlForLayer. Uma política não vazia não é suficiente: confirme o principal e as ações.

    O Amazon ECR aplica o modelo cujo prefixo é a correspondência mais longa para o repositório, ou um ROOT modelo se nenhum prefixo corresponder. Execute o comando sem --prefixes para ver todos os modelos, porque --prefixes corresponde a cada prefixo exatamente em vez de por caminho, então nem um ROOT modelo nem um modelo em um prefixo mais longo aparecem na saída filtrada. Retorne a essa etapa para obter qualquer prefixo cujo modelo aplicável esteja ausente ou não cumpra qualquer um dos requisitos. imageTagMutability não afeta se HealthOmics pode extrair a imagem, mas um modelo que a define como algo diferente de MUTABLE impede que o Amazon ECR atualize uma imagem em cache quando a tag upstream se move, conforme descrito em Etapa 3: Criação de modelos de repositório.

    Se existiam repositórios de cache antes de você criar o modelo, confirme também a política do repositório em cada um deles, conforme descrito em Atualização de repositórios criados antes do modelo.

Se sua definição usa os URIs upstream, confirme o mapa de registro que você adicionou Etapa 4: Adicionar um mapa de registro de contêiner (se seu fluxo de trabalho usar URIs upstream). Um mapa pertence ao fluxo de trabalho ou à versão do fluxo de trabalho que você forneceu, então verifique a que suas execuções usam: a versão que você passa como --workflow-version-name para start-run, ou o fluxo de trabalho, se suas execuções não mencionarem uma. Para uma corrida que já existe, workflowVersionName na get-run a saída nomeia sua versão.

Para um fluxo de trabalho:

aws omics get-workflow \ --id workflow-id \ --region region

Para uma versão de fluxo de trabalho:

aws omics get-workflow-version \ --workflow-id workflow-id \ --version-name version-name \ --region region

Verifique o containerRegistryMap valor na saída. Se não tiver mapa, a resposta omite o campo. Confirme que status é ACTIVE: se ainda estiver CREATING, espere e tente novamente, e se for FAILED, o motivo está em statusMessage. Você não pode alterar um mapa no local, portanto, se ele estiver ausente ou errado, crie uma nova versão do fluxo de trabalho conforme descrito em Re-running a configuração.

Para confirmar de ponta a ponta que uma execução usou uma imagem em cache, leia o resultado de uma execução que usa o cache. Uma execução que já terminou funciona, incluindo uma que falhou, mas uma execução cancelada pode nunca ter resolvido suas imagens; inicie uma execução somente se você ainda não tiver uma:

aws omics get-run \ --id run-id \ --region region

O resourceDigests campo na saída, quando a execução relata uma, registra os recursos que a execução resolveu, incluindo suas imagens de contêiner. Uma entrada cuja chave é um URI privado do Amazon ECR sob o prefixo do seu repositório de cache, com um sha256 digest como seu valor, confirma que a execução resolveu essa imagem para seu cache. Essa é a verificação mais rápida e funciona até mesmo para uma execução que falhou por um motivo não relacionado.

Se a corrida parar sem sucesso, failureReason e statusMessage juntos informam se essa configuração está envolvida. Verifique essas opções antes de examinar as tarefas da execução, pois uma execução que falhe em uma imagem pode não criar nenhuma tarefa:

  • ECR_REPOSITORY_NOT_FOUND, ECR_IMAGE_NOT_FOUND ou ECR_PERMISSION_ERROR para um URI de imagem em um dos prefixos do seu repositório de cache — continue com Solução de problemas de extração de cache. Um desses motivos para um URI que não está sob um de seus prefixos é um problema do Amazon ECR com esse repositório, em vez de um problema de extração de cache, porque nenhuma regra de cache se aplica a ele. Para um repositório que você mesmo gerencia no Amazon ECR, forneça HealthOmics acesso com uma política de repositório, conforme descrito em Crie uma política de recursos para o repositório Amazon ECR.

  • UR_ECR_IMAGE_URI INVÁLIDO — o mapa de registro está ausente, ele não tem mapeamento para o registro upstream da imagem, seu upstreamRepositoryPrefix não cobre o caminho da imagem ou o URI da imagem não é válido. Leia a mensagem de status para diferenciá-las e verifique o URI antes de alterar o mapa. Consulte Etapa 4: Adicionar um mapa de registro de contêiner (se seu fluxo de trabalho usar URIs upstream).

  • NÃO É POSSÍVEL INICIAR_CONTAINER_ERROR ou FALHA_VERIFICAÇÃO_DE IMAGEM para um URI de imagem sob um de seus prefixos — a imagem chegou ao seu repositório de cache, mas a tarefa não conseguiu usá-la. Se você alterou ou recriou a regra de cache, uma imagem obsoleta em cache pode causar isso; consulte Alterando uma regra de cache enquanto uma execução está ativa. Caso contrário, a imagem em cache em si é o problema, e não essa configuração, e a imagem upstream ou a tarefa que a usa é onde procurar.

  • Qualquer outro motivo de falha, ou nenhum, conforme o relatório de uma execução cancelada — a execução foi interrompida por um motivo não relacionado a essa configuração. Para saber os status de execução e os outros motivos de falha, consulte Obtenha informações sobre a execução e Motivos de falha na execução.

Nem todos os relatórios de execução resourceDigests, e uma execução que ainda não resolveu suas imagens não tem entrada para elas. Se o campo ou a entrada estiverem ausentes, ou se você quiser confirmar qual imagem uma tarefa individual extraiu, liste as tarefas da execução:

aws omics list-run-tasks \ --id run-id \ --region region

Um vazio items lista em uma corrida que ainda está em andamento significa que HealthOmics ainda não criou as tarefas, então espere e liste-as novamente. Em uma execução que foi interrompida, isso significa que nenhuma tarefa foi criada: para uma execução com falha, os motivos de falha anteriores explicam o porquê, e uma execução cancelada antes de ser iniciada não tem nada a confirmar, então use uma execução diferente. Caso contrário, recupere os detalhes da imagem para uma das tarefas, usando um taskId da saída anterior:

aws omics get-run-task \ --id run-id \ --task-id task-id \ --region region \ --query imageDetails

Em imageDetails, sourceImage é o URI da imagem da sua definição de fluxo de trabalho e image é o URI privado do Amazon ECR que a tarefa extraiu. Um image valor sob o prefixo do repositório de cache, no formato URI privado mostrado em Etapa 4: Adicionar um mapa de registro de contêiner (se seu fluxo de trabalho usar URIs upstream) e, possivelmente, com um resumo de imagem anexado, confirma que a tarefa usou seu cache de extração. imageDetails pode estar vazio, para uma tarefa que ainda não obteve sua imagem e para algumas tarefas que já foram concluídas. Uma tarefa sem detalhes de imagem registrados também não tem nenhum no log do manifesto de execução, então marque outra tarefa da mesma execução. Se nenhuma tarefa em uma execução concluída as registrou, você ainda poderá confirmar se a imagem está armazenada em cache, conforme descrito em Resolvendo uma política de registro ausente ou incompleta. Isso confirma a configuração e não a imagem que uma tarefa específica extraiu, porque uma execução anterior pode ter preenchido o cache.

Depois que uma execução é concluída, seu log de manifesto de execução repete essas informações de imagem, para que você possa verificar as tarefas da execução de uma só vez em vez de chamar get-run-task para cada um. No registro de cada tarefa, o campo chamado originalImage corresponde a sourceImage aqui, e image tem o mesmo valor acima. Para saber onde encontrar o registro, consulte Monitoramento HealthOmics com CloudWatch Registrose para o restante do registro de uma tarefa, consulte Obtenha informações sobre a execução.

Depois de configurar o pull through cache, você pode criar um novo fluxo de trabalho ou versão do fluxo de trabalho para usar os contêineres dos registros configurados. Para obter mais informações, consulte Adicionar contêineres privados ou de terceiros durante a criação do fluxo de trabalho.

Re-running a configuração

Você pode repetir essas etapas, por exemplo, para adicionar um prefixo ou corrigir uma política. Os comandos create falham com um código de saída diferente de zero quando o recurso já existe, sem alterá-lo. put-registry-policy não falha, mas substitui toda a política de registro, conforme descrito em Etapa 2: Configurando permissões para o registro upstream.

  • Regra de ultrapassar o cache — create-pull-through-cache-rule falha com PullThroughCacheRuleAlreadyExistsException. Se o registro que você está adicionando precisar de autenticação, crie primeiro o segredo do Secrets Manager, conforme descrito em Pré-requisitos.

  • Política de permissões de registro — adicione um Resource entrada para cada novo prefixo do repositório de cache, conforme descrito em Etapa 2: Configurando permissões para o registro upstream; uma política que enumera prefixos individualmente não cobrirá um novo. Confirme a cobertura com get-registry-policy, conforme descrito em Etapa 5: Verificar sua configuração de cache de extração.

  • Modelo de criação de repositório — crie um modelo para um prefixo de repositório de cache que não tenha um e atualize o modelo existente para alterar um prefixo que já tenha um, conforme descrito em Etapa 3: Criação de modelos de repositório. Executar a atualização no modelo de outro prefixo substitui esse modelo. Para atualizar os repositórios que o Amazon ECR já criou, consulte Atualização de repositórios criados antes do modelo.

  • Mapa de registro de contêineres — você fornece o mapa ao criar um fluxo de trabalho ou uma versão do fluxo de trabalho e update-workflow e update-workflow-version não posso mudar isso. Antes de criar uma versão, tenha o mapa completo pronto: uma nova versão não herda o mapa da versão anterior, então liste todos os mapeamentos que o fluxo de trabalho ainda precisa, não apenas o novo. create-workflow-version usa a versão inteira em vez de apenas o mapa, então você também precisa da definição do fluxo de trabalho e dos outros parâmetros da versão, conforme descrito em Crie uma versão do fluxo de trabalho. Em seguida, crie a versão com o mapa atualizado, conforme descrito em Etapa 4: Adicionar um mapa de registro de contêiner (se seu fluxo de trabalho usar URIs upstream)e comece suas corridas com essa versão. Uma execução que não nomeia uma versão usa a versão padrão do fluxo de trabalho, que mantém o mapa com o qual foi criada e, portanto, falha da mesma forma que antes. Para obter mais informações, consulte Versão padrão do fluxo de trabalho.

Solução de problemas de extração de cache

Os problemas de configuração a seguir fazem com que uma execução falhe quando você usa contêineres do cache de extração. Se sua definição de fluxo de trabalho usar os URIs da imagem upstream e uma execução falhar com UR_ECR_IMAGE_URI INVÁLIDO, comece com o mapa do registro, conforme descrito em Etapa 4: Adicionar um mapa de registro de contêiner (se seu fluxo de trabalho usar URIs upstream). Para outros motivos de falha de execução, consulte Motivos de falha na execução.

Execute o aws ecr comandos nesta seção na mesma conta que em Etapa 5: Verificar sua configuração de cache de extração, ou passe --registry-id ecr-account-id. Use os nomes dos repositórios exatamente como describe-repositories os retorna: um nome de repositório de cache é o prefixo do repositório de cache seguido pelo caminho do repositório upstream, que, para um nome abreviado do Docker Hub, inclui o library/ segmento descrito em Etapa 4: Adicionar um mapa de registro de contêiner (se seu fluxo de trabalho usar URIs upstream).

Resolvendo uma política de registro ausente ou incompleta

Sintoma—A execução do URI da imagem falha com um dos seguintes motivos de falha:

  • ECR_REPOSITORY_NOT_FOUND — o repositório de cache não existe em seu registro privado.

  • ECR_IMAGE_NOT_FOUND — o repositório de cache existe, mas a imagem nunca foi importada para ele.

  • ECR_PERMISSION_ERROR — O Amazon ECR nega acesso.

Se o repositório de cache estiver ausente, o comando a seguir não retornará nenhum repositório para o prefixo:

aws ecr describe-repositories \ --region region \ --query "repositories[?starts_with(repositoryName, 'ecr-repository-prefix/')]"

Um resultado vazio para um prefixo do qual nada foi extraído ainda é esperado e não é um problema de configuração por si só. Quando a execução do URI da imagem falha, um repositório ausente geralmente significa que o Amazon ECR não conseguiu criá-lo. Se o repositório existir, confirme se a imagem chegou até ele:

aws ecr describe-images \ --repository-name cache-repository-name \ --image-ids imageTag=tag \ --region region

Uma imagem retornada significa que a tag está em cache. ImageNotFoundException significa que o repositório existe, mas essa tag não está nele, e RepositoryNotFoundException significa que o nome do repositório está errado ou que nada foi extraído do prefixo ainda. Passe --image-ids: sem ela, o comando relata cada tag no repositório, então a presença de outra tag pode parecer um sucesso para a tag que sua execução precisa.

Causa—A política de registro não concede HealthOmics o que ela precisa: não há política, a política está faltando uma ação ou sua Resource a lista não cobre esse prefixo de cache.

Solução—Adicione ou corrija a política de registro conforme descrito em Etapa 2: Configurando permissões para o registro upstreame confirme-o conforme descrito em Etapa 5: Verificar sua configuração de cache de extração. Se a política de registro já abranger o prefixo do repositório de cache, a política de registro não é o problema. Para ECR_IMAGE_NOT_FOUND, onde o repositório existe, mas a imagem nunca chegou, a importação upstream falhou: confirme a credencial da regra com validate-pull-through-cache-rule, conforme descrito em Etapa 5: Verificar sua configuração de cache de extração. Para ECR_PERMISSION_ERROR em um repositório existente, continue com Resolvendo um modelo de criação de repositório ou política de repositório ausente. Em seguida, inicie a corrida novamente.

Resolvendo um modelo de criação de repositório ou política de repositório ausente

Sintoma—O repositório de cache existe com a imagem importada e a execução ainda falha com ECR_PERMISSION_ERROR para o URI da imagem.

Causa—Nenhum modelo de criação de repositório corresponde ao prefixo do repositório de cache, o modelo não inclui PULL_THROUGH_CACHE em appliedFor, ou o modelo não tem política de repositório. O repositório, portanto, não tem uma política que permita HealthOmics retire-se disso.

Solução—Crie ou atualize o modelo conforme descrito em Etapa 3: Criação de modelos de repositório. Como os repositórios já existem, aplique também a política a eles, conforme descrito em Atualização de repositórios criados antes do modelo.

Atualização de repositórios criados antes do modelo

Sintoma—Você criou ou corrigiu o modelo de criação do repositório, describe-repository-creation-templates mostra que está correto, e uma execução ainda falha com um erro de acesso ao Amazon ECR para a mesma imagem. Confirme a política ausente em um repositório afetado:

aws ecr get-repository-policy \ --repository-name cache-repository-name \ --region region

O policyText valor deve ser concedido omics.amazonaws.com pelo menos as ações que a política de repositório do modelo concede. Se o repositório não tiver nenhuma política, o comando falhará com RepositoryPolicyNotFoundException. Se falhar com RepositoryNotFoundException, o nome do repositório está errado ou o repositório ainda não existe.

Causa—Um modelo se aplica somente quando o Amazon ECR cria um repositório, portanto, os repositórios criados antes de você adicionar o modelo não têm política de repositório para HealthOmics.

Solução—Atualize os repositórios existentes de uma das seguintes maneiras.

Atenção

A exclusão de um repositório também exclui todas as imagens em cache nele, e você não pode desfazê-las. Não exclua um repositório enquanto uma execução o estiver usando.

  • Defina a política diretamente em cada repositório existente. Salve a política de repositório do modelo em um arquivo e execute o seguinte comando para cada repositório afetado:

    aws ecr set-repository-policy \ --repository-name cache-repository-name \ --policy-text file://repository-policy-file.json \ --region region
  • Exclua cada repositório afetado. A extração do cache a recria a partir do modelo na próxima vez que uma tarefa extrair a imagem, então a imagem em cache não estará disponível até que a extração seja concluída.

    aws ecr delete-repository \ --repository-name cache-repository-name \ --force \ --region region

Alterando uma regra de cache enquanto uma execução está ativa

Sintoma—Depois de alterar ou recriar uma regra de pull through cache, uma execução que já está usando o repositório afetado pode falhar com NÃO É POSSÍVEL INICIAR_CONTAINER_ERROR ou FALHA_VERIFICAÇÃO_DE IMAGEM, ou pode concluir usando uma imagem que você não esperava.

Causa—O prefixo do repositório de cache agora é resolvido para um repositório upstream diferente, enquanto as execuções já estão sendo retiradas dos repositórios criados pela regra antiga.

Solução—Aguarde até que as execuções ativas terminem antes de alterar a regra, conforme observado em Etapa 1: Criando uma regra de pull through cache descreve. Para confirmar qual imagem uma tarefa realmente usou, marque imageDetails na get-run-task saída, conforme descrito em Etapa 5: Verificar sua configuração de cache de extração. Se uma execução usou uma imagem em cache obsoleta, exclua essa imagem do repositório de cache para que a próxima extração a atualize do registro upstream.