View a markdown version of this page

プルスルーキャッシュでサポートされていないサードパーティーレジストリの使用 - AWS HealthOmics

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

プルスルーキャッシュでサポートされていないサードパーティーレジストリの使用

ワークフローでは、Amazon ECR プルスルーキャッシュ (PTC) がサポートしていないアップストリームレジストリのコンテナイメージを使用できます。実行のタスクがこれらのイメージのいずれかを初めて必要とする場合、HealthOmics はアップストリームレジストリからアカウントのプライベート Amazon ECR リポジトリにタスクをコピーし、コピーからタスクを開始します。後のタスクと実行ではコピーが再利用されるため、ダウンロードは 1 回だけ行われます。複数の実行で同じイメージを同時に必要とする場合、たとえば、 がバッチで実行される場合、HealthOmics はイメージを 1 回コピーし、実行はそのコピーを待機します。ワークフロー定義は元のアップストリームイメージ URIs を保持するため、イメージ URIs自分でプル、プッシュ、または書き換えることはありません。

これらのイメージは、タグではなくダイジェストまたはバージョンで参照することをお勧めします。詳細については、「非 PTC イメージにはタグの代わりにダイジェストまたはバージョンを使用する」を参照してください。

HealthOmics は、PTC がサポートしていない次のアップストリームレジストリをサポートしています。

  • Seqera コンテナ (community.wave.seqera.io および wave.seqera.io)

  • NVIDIA NGC (nvcr.io)

  • Google コンテナレジストリ (gcr.io)

  • Google Artifact Registry (region-docker.pkg.dev)。など、完全なリージョンホストを使用しますus-central1-docker.pkg.dev。

非 PTC コンテナサポートの設定

PTC がサポートしていないレジストリのコンテナを使用する前に、レジストリ認証情報を保存し、HealthOmics のアクセス許可を設定します。

ステップ 1: Secrets Manager にレジストリ認証情報を保存する

HealthOmics は、認証情報を使用して、アップストリームレジストリからコンテナイメージを認証してコピーします。認証情報は、HealthOmics の実行と同じ AWS リージョンにシークレットとして保存します。別の のシークレットを使用した AWS アカウント り、別のアカウントとシークレットを共有したりすることもできます。別の のシークレットを使用する場合は AWS アカウント、 に渡すサービスロールにシークレットの読み取りを許可StartRunする必要があります。詳細については、「 Secrets Manager ユーザーガイド」の「Access Secrets Manager secrets from a different account」を参照してください。

サポートされているすべてのレジストリには、 などの匿名プルを許可するレジストリを含む認証情報が必要ですcommunity.wave.seqera.io。

次のタブは、サポートされている各レジストリの認証情報形式と例を示しています。

Seqera Containers and Wave

Seqera プラットフォームアクセストークンを保持する単一のaccessTokenキーを持つ JSON オブジェクト。

次の AWS CLI コマンドは、Seqera コンテナのシークレットを作成します。

aws secretsmanager create-secret \ --name omics-registry/seqera \ --secret-string '{"accessToken":"seqera-platform-access-token"}' \ --region us-east-1
NVIDIA NGC

をリテラルusernameに設定$oauthtokenし、 を NGC API キーaccessTokenに設定する JSON オブジェクト。

次の AWS CLI コマンドは、NVIDIA NGC のシークレットを作成します。

aws secretsmanager create-secret \ --name omics-registry/nvidia-ngc \ --secret-string '{"username":"$oauthtoken","accessToken":"ngc-api-key"}' \ --region us-east-1

NVIDIA NGC のシークレットを作成するときは、シェルが を展開しないように--secret-string、値を一重引用符で囲みます$oauthtoken。

Google Container Registry and Google Artifact Registry

レジストリからイメージを読み取ることができる Google Cloud サービスアカウントの JSON キーを作成し、キーファイル ( など) を保存しますkey.json。手順については、Google Cloud ドキュメントの「サービスアカウントキーの作成と削除」を参照してください。

を usernameに設定_json_keyしaccessToken、キーファイルの内容を単一の JSON 文字列として設定します。次の AWS CLI コマンドはシークレットを作成し、 jqツールを使用して JSON 文字列を構築します。

aws secretsmanager create-secret \ --name omics-registry/google \ --secret-string "$(jq -n --rawfile key key.json '{username: "_json_key", accessToken: $key}')" \ --region us-east-1

レスポンスからシークレットの Amazon リソースネーム (ARN) を記録し、レジストリマッピングcredentialArnの値として使用できます。

ステップ 2: サービスロールにアクセス許可を付与する

HealthOmics は、 に渡したサービスロールStartRunを使用してシークレットの読み取り、宛先リポジトリの作成、コピーしたイメージのプッシュを行います。サービスロールは、実行 AWS アカウント と同じ にある必要があります。それ以外の場合、HealthOmics は、IAM ロールがリクエスト元の AWS アカウントと一致しないというエラーでロールを拒否します。

ポリシーについては、「」を参照してください非 PTC コンテナサポートのサービスロールポリシー。

これらのアクセス許可を付与したら、シークレット ARN を とするレジストリマッピングを追加しますcredentialArn。詳細については、「レジストリマッピング」を参照してください。

送信先リポジトリの命名

ワークフローの作成時にレジストリマッピングを指定すると、HealthOmics は実行中にイメージをコピーします。詳細については、「ワークフロー作成時のプライベートコンテナまたはサードパーティーコンテナの追加」を参照してください。

コピーされた各イメージは、レジストリマッピングから計算できる URI に配置されます。

account-id.dkr.ecr.region.amazonaws.com/ecrRepositoryPrefix/image-path:tag

image-path は、レジストリホストなしのアップストリームイメージ URI であり、設定upstreamRepositoryPrefixした場合は なしのアップストリームイメージ URI です。Wave () の設定upstreamRepositoryPrefixを解除しますwave.seqera.io。アカウントは、 を設定しない限り、ワークフローのアカウントですecrAccountId。を設定するとecrAccountId、HealthOmics はリポジトリを作成し、サービスロールを使用してそのアカウントでコピーをプッシュします。その後、サービスロールは、そのアカウントのリポジトリに対して同じ Amazon ECR アクセス許可を必要とし、そのアカウントのレジストリポリシーとリポジトリポリシーで許可する必要があります。

たとえば、プレフィックスwave-seqeraが community.wave.seqera.io/library/samtools:1.22.1--eccb42ff8fb55509の場合、 は になります111122223333.dkr.ecr.us-east-1.amazonaws.com/wave-seqera/library/samtools:1.22.1--eccb42ff8fb55509。

コピーが成功したことを確認するには、イメージが送信先 URI に存在することを確認します。たとえば、次の AWS CLI コマンドを使用します。

aws ecr describe-images \ --repository-name wave-seqera/library/samtools \ --image-ids imageTag=1.22.1--eccb42ff8fb55509 \ --region us-east-1

ワークフローのアカウントにリポジトリが存在しない場合、HealthOmics によって作成されます。リポジトリにリポジトリポリシーがない場合、HealthOmics は HealthOmics がイメージをプルできるようにするポリシーをアタッチします。リポジトリに既にポリシーがある場合、HealthOmics はポリシーを変更しないままにするので、HealthOmics がイメージをプルできるようにするステートメントを含めます。例については、Amazon ECR リポジトリのリソースポリシーを作成するを参照してください。

ecrRepositoryPrefix/image-path は Amazon ECR リポジトリ名になるため、プレフィックスには小文字、数字、および文字 /、-、_、 を使用する必要があります.。

同じアカウントのワークフローが を共有する場合ecrRepositoryPrefix、コピーされたイメージを共有します。コピーしたイメージを削除すると、そのプレフィックスでそのイメージを使用するすべてのワークフローに影響します。

非 PTC コンテナのサポートに関する考慮事項

非 PTC コンテナサポートを使用する場合は、次の点を考慮してください。

  • アーキテクチャ – HealthOmics は x86_64 イメージのみをコピーします。ARM ベースのイメージとマルチアーキテクチャイメージはサポートされていません。

  • ワークフロー共有 — 非 PTC コンテナのサポートは、共有ワークフローではサポートされていません。別のアカウントが共有したワークフローを実行すると、HealthOmics は を含むレジストリマッピングを無視しますcredentialArn。

  • イメージタグ – HealthOmics は、 などのタグが指すイメージをコピーしlatest、アップストリームコンテンツが変更されてもコピーを更新しません。新しいコンテンツを取得するには、コピーしたイメージを Amazon ECR から削除します。削除すると、HealthOmics は、必要な次の実行時にアップストリームレジストリからイメージを再度コピーします。ワークフローが新しいタグまたはダイジェストを参照する場合、HealthOmics はタスクが最初に必要とするときにそのイメージをコピーします。

  • コピーの失敗 – レジストリ認証情報が無効であるか、サービスロールに HealthOmics に必要なアクセス許可がない場合、イメージのコピーは失敗し、タスクと実行は失敗します。イメージのコピーが Amazon ECR に既に存在する場合、HealthOmics はそのコピーを使用し、レジストリ認証情報をチェックしません。