リモート リポジトリを作成する

このページでは、Artifact Registry のリモート リポジトリを作成する方法について説明します。

リモート リポジトリには、次のアップストリーム ソースからのアーティファクトが保存されます。

  • 標準の Artifact Registry リポジトリ。
  • Docker Hub、Maven Central、Python Package Index(PyPI)、Debian、CentOS などの外部ソース。

リモート リポジトリは、アップストリーム ソースのプロキシとして機能するため、依存関係をきめ細かく制御できます。パッケージのバージョンを初めてリクエストするときに、Artifact Registry はパッケージをダウンロードして、リモート リポジトリにキャッシュ保存します。次に同じパッケージ バージョンをリクエストすると、Artifact Registry はキャッシュに保存されたコピーを提供します。

存在しないアップストリーム ソースから、または指定したバージョンが含まれないアップストリーム ソースからアーティファクトをリクエストすると、リクエストは失敗します。

その他のリポジトリ モードは以下のとおりです。

  • 標準: デフォルトのリポジトリ モード。標準リポジトリに非公開パッケージなどのアーティファクトを直接アップロードまたは公開します。ダウンロードは個々の標準リポジトリから直接行えますが、仮想リポジトリでリポジトリのグループにアクセスするとツールの構成が簡素化されます。
  • 仮想: リモート リポジトリと標準リポジトリなど、複数のアップストリーム リポジトリに対する単一のアクセス ポイントとして機能するリポジトリ。

リモート リポジトリが機能する仕組みについて詳しくは、リモート リポジトリの概要をご覧ください。

準備

  1. Artifact Registry を有効にします。これには、Artifact Registry API の有効化と Google Cloud CLI のインストールが含まれます。
  2. (省略可)gcloud CLI コマンドのデフォルトを構成します。
  3. リポジトリのコンテンツを暗号化するために顧客管理の暗号鍵(CMEK)が必要な場合は、リポジトリで Cloud KMS の鍵を作成して有効化します。
  4. アップストリーム リポジトリに対して認証を行う場合は、Secret Manager API を有効にします。

    gcloud services enable secretmanager.googleapis.com \
        --project=PROJECT_ID
    
  5. Artifact Registry が VPC Service Controls のサービス境界内にあり、Access Context Manager API がまだ有効になっていない場合は、それを有効にします。

    gcloud services enable accesscontextmanager.googleapis.com \
        --project=PROJECT_ID
    
  6. Artifact Registry リポジトリをアップストリームとして設定し、このリポジトリがご利用のリモート リポジトリとは異なるプロジェクトに存在する場合、リモート リポジトリを作成する前に、リモート リポジトリ プロジェクト用のサービス アカウントにアップストリーム リポジトリ プロジェクトに対するアクセス権を付与する必要があります。

    サービス エージェントのロールを付与する

    リモート リポジトリは、Artifact Registry サービス エージェントを使用して Artifact Registry アップストリーム リポジトリに対する認証を行います。リモート リポジトリ サービス エージェントに、アップストリーム リポジトリに対する読み取りアクセス権を付与する必要があります。

    リモート リポジトリ サービス エージェントにアップストリーム リポジトリに対する Artifact Registry サービス エージェント ロールを付与するには、次のコマンドを実行します。

    
      gcloud projects add-iam-policy-binding UPSTREAM_REPOSITORY \
          --member serviceAccount:service-REMOTE_PROJECT_NUMBER@REMOTE_PROJECT_ID.iam.gserviceaccount.com \
          --location=REGION \
          --project=UPSTREAM_PROJECT_ID \
          --role roles/artifactregistry.serviceAgent
      

    以下を置き換えます。

    • UPSTREAM_REPOSITORY は、アップストリーム リポジトリの ID です。Artifact Registry アップストリーム リポジトリは、標準モードのリポジトリである必要があります。
    • REMOTE_PROJECT_NUMBER は、リモート リポジトリの Google Cloud プロジェクトのプロジェクト番号です。
    • REMOTE_PROJECT_ID は、リモート リポジトリの Google Cloud プロジェクトの ID です。
    • REGION は、リモート リポジトリを作成するリージョンです。
    • UPSTREAM_PROJECT_ID は、アップストリーム リポジトリを持つ Google Cloud プロジェクトの ID です。

必要なロール

リポジトリの管理に必要な権限を取得するには、次に挙げる IAM ロールの付与を、管理者に依頼してください。

  • リモート リポジトリを作成し、個々のリポジトリへのアクセス権を付与する場合: プロジェクトに対する Artifact Registry 管理者roles/artifactregistry.admin
  • アップストリーム リポジトリの認証情報をシークレット バージョンに保存する場合: プロジェクトに対する Secret Manager 管理者roles/secretmanager.admin
  • VPC Service Controls サービス境界外のアップストリーム ソースへのアクセス権を付与する場合: プロジェクト、フォルダ、アクセス ポリシーが適用される組織に対する Access Context Manager 編集者roles/accesscontextmanager.policyEditor

ロールの付与については、プロジェクト、フォルダ、組織へのアクセス権の管理をご覧ください。

必要な権限は、カスタムロールや他の事前定義ロールから取得することもできます。

リモート リポジトリを作成する

リモート リポジトリを作成する際は、次の設定を構成する必要があります。この設定は、リポジトリの作成後に変更できません。

  • アーティファクトの形式
  • リモートに設定されたリポジトリのモード
  • リモート リポジトリのアップストリーム ソース。
  • リポジトリのロケーション
  • Google が管理する鍵または顧客管理の暗号鍵による暗号化。Artifact Registry は、デフォルトで Google が管理する暗号鍵を使用します。

Artifact Registry では組織のポリシーの制約が適用され、CMEK でリソースを暗号化するか、CMEK の保護に使用できる Cloud KMS 鍵を制限する必要があります。

Google Cloud コンソールを使用してリモート リポジトリを作成する

  1. Google Cloud コンソールで [リポジトリ] ページを開きます。

    [リポジトリ] ページを開く

  2. [リポジトリを作成] をクリックします。

  3. リポジトリ名を指定します。プロジェクト内のリポジトリの場所ごとに、リポジトリ名は一意であることが必要です。

  4. [形式] セクションで、リポジトリの形式を選択します。

  5. [リポジトリ モード] セクションで、[リモート] を選択します。

  6. [リモート リポジトリのソース] セクションで、次のいずれかの方法を選択してアップストリーム リポジトリの URL を入力します。

    • 形式の種類に応じて、一覧表示されたプリセット アップストリーム ソースを選択します。
    • [カスタム] を選択して、サポートされている形式の公開 / 非公開リポジトリの完全な URL を指定します。
    • [Artifact Registry リポジトリ] を選択して、標準の Artifact Registry リポジトリを選択します。
  7. [カスタム] を選択した場合は、[カスタム リポジトリ] フィールドにリポジトリの完全な URL を入力します。リポジトリの作成後に URL を変更することはできません。

    一般的なアップストリーム URL の例については、カスタム アップストリームをご覧ください。

  8. [Artifact Registry リポジトリ] を選択した場合:

    1. [Artifact Registry リポジトリ] フィールドに、アップストリームとして使用するリポジトリの完全な名前を入力するか、[参照] をクリックして、表示可能なリポジトリのリストを表示します。リモート リポジトリと同じ形式のリポジトリのみが一覧表示されます。
    2. アップストリームとして使用するリポジトリの名前をクリックします。
    3. [選択] をクリックします。
  9. プリセット アップストリームのいずれかを選択した場合、または [カスタム] ボタンを使用して完全な URL を入力した場合は、[リモート リポジトリの認証モード] で次のいずれかを選択します。

    • 認証済み: アップストリーム リポジトリに対する認証のユーザー名とパスワードを入力します。
    • 未認証: アップストリーム リポジトリに対する認証をスキップします。
  10. [認証済み] を選択した場合は、次の情報を入力します。

    • [ユーザー名] フィールドに、アップストリーム リポジトリのユーザー名を入力します。
    • [シークレット] フィールドに、アップストリーム リポジトリのパスワードを保存したシークレット バージョンを入力します。

    これらの値は、リポジトリの作成後に編集できます。リモート リポジトリのアップストリームに対する認証の詳細については、リモート リポジトリのアップストリームに対する認証を構成するをご覧ください。

  11. [ロケーション タイプ] セクションで、リポジトリのロケーションを選択します。

    1. ロケーション タイプには、[リージョン] または [マルチリージョン] を選択します。ロケーションのリストは、選択した内容に応じて変わります。

    2. [リージョン] リストまたは [マルチリージョン] リストでロケーションを選択します。

    ロケーション タイプとサポートされているロケーションについては、リポジトリのロケーションをご覧ください。

  12. リポジトリの説明を追加します。説明は、リポジトリの目的とリポジトリに含まれるアーティファクトの種類の識別に役立ちます。

    リポジトリの説明は暗号化されないため、センシティブ データは含めないでください。

  13. リポジトリの整理に ラベル を使用する場合は、ラベルの追加をクリックし、ラベルの Key-Value ペアを入力します。リポジトリを作成した後にラベルを追加、編集、削除できます。

  14. [暗号化] セクションで、リポジトリの暗号化方式を選択します。

    • Google が管理する鍵 - Google が管理する暗号鍵を使用してリポジトリのコンテンツを暗号化します。
    • 顧客管理の暗号鍵 - Cloud Key Management Service で管理する鍵を使用してリポジトリのコンテンツを暗号化します。鍵の設定手順については、リポジトリの CMEK の設定をご覧ください。
  15. クリーンアップ ポリシーを使用して未使用のアーティファクトを削除する場合は、[クリーンアップ ポリシー] セクションで次の操作を行います。

    1. ポリシーを適用する前に [ドライラン] を選択してテストします。
    2. [ポリシーを追加] をクリックして、リポジトリに保持ポリシーまたは削除ポリシーを追加します。
    3. [名前] フィールドでクリーンアップ ポリシーにわかりやすい名前を付けます。
    4. [ポリシータイプ] セクションで、次のいずれかを選択します。

      • 条件付き削除: 定義した条件に基づいてアーティファクトを削除します。
      • 条件付き保持: 定義した条件に基づいてアーティファクトを保持します。
      • 最新のバージョンを保持: パッケージごとに一定数の最新バージョンを保持します。

      クリーンアップ ポリシーの詳細については、クリーンアップ ポリシーの設定をご覧ください。

  16. [作成] をクリックします。

Artifact Registry でリポジトリが作成され、リポジトリのリストに追加されます。

リポジトリを作成した後は:

gcloud CLI を使用してリモート リポジトリを作成する

リポジトリを作成するには、適切なリポジトリ形式になるようコマンドを実行します。

Docker

gcloud artifacts repositories create REMOTE-REPOSITORY-NAME \
    --project=PROJECT_ID \
    --repository-format=docker \
    --location=LOCATION \
    --description="DESCRIPTION" \
    --mode=remote-repository \
    --remote-repo-config-desc="REMOTE-REPOSITORY-DESCRIPTION" \
    --remote-docker-repo=UPSTREAM

アップストリーム リポジトリに対する認証用のオプション フラグ:

  • --remote-username=USERNAME
  • --remote-password-secret-version=SECRET_VERSION

以下を置き換えます。

  • REMOTE-REPOSITORY-NAME は、リポジトリの名前に置き換えます。プロジェクト内のリポジトリの場所ごとに、リポジトリ名は一意であることが必要です。
  • PROJECT_ID: プロジェクト ID。このフラグを省略すると、現在のプロジェクトまたはデフォルトのプロジェクトが使用されます。
  • LOCATION は、リポジトリのリージョンまたはマルチリージョンのロケーションです。デフォルトを設定すると、このフラグを省略できます。サポートされているリポジトリのロケーションの一覧を表示するには、コマンド gcloud artifacts locations listを実行します。
  • DESCRIPTION は、リポジトリの説明(省略可)です。リポジトリの説明は暗号化されないため、センシティブ データは含めないでください。
  • REMOTE-REPOSITORY-DESCRIPTION は、このリモート リポジトリの外部リポジトリの構成の説明です。
  • (省略可)USERNAME は、認証を使用している場合、アップストリーム リポジトリに対する認証に使用するユーザー名に置き換えます。
  • (省略可)SECRET_VERSION は、認証を使用している場合、アップストリーム リポジトリのパスワードを含むシークレット バージョンに置き換えます。
  • UPSTREAM は、プリセット アップストリーム名、Artifact Registry のリポジトリパス、またはアップストリーム リポジトリのユーザー定義 URL に置き換えます。

    Artifact Registry アップストリーム リポジトリの場合は、リポジトリ パスを projects/UPSTREAM_PROJECT_ID/locations/REGION/repositories/UPSTREAM_REPOSITORY のようにフォーマットします。

    使用可能なプリセット アップストリームとサポート対象のユーザー定義アップストリームについては、サポートされているファイル形式をご覧ください。

たとえば、次のコマンドは、Google Cloud プロジェクト my-project のリージョン us-east1my-repo という名前のリモート リポジトリを作成し、ユーザー名 my-username と Secret のバージョン projects/my-project/secrets/my-secret/versions/1 を使用してアップストリーム リポジトリに対する認証を行うことができますです。

gcloud artifacts repositories create my-repo \
    --project=my-project \
    --repository-format=docker \
    --location=us-east1 \
    --description="Remote Docker repository" \
    --mode=remote-repository \
    --remote-repo-config-desc="Docker Hub" \
    --remote-username=my-username \
    --remote-password-secret-version=projects/my-project/secrets/my-secret/versions/1 \
    --remote-docker-repo=DOCKER-HUB

Docker Hub アップストリーム リポジトリに対する認証の詳細については、Docker Hub に対するリモート リポジトリ認証を構成するをご覧ください。

Maven

gcloud artifacts repositories create REMOTE-REPOSITORY-NAME \
    --project=PROJECT_ID \
    --repository-format=maven \
    --location=LOCATION \
    --description="DESCRIPTION" \
    --mode=remote-repository \
    --remote-repo-config-desc="REMOTE-REPOSITORY-DESCRIPTION" \
    --remote-mvn-repo=UPSTREAM

アップストリーム リポジトリに対する認証用のオプション フラグ:

  • --remote-username=USERNAME
  • --remote-password-secret-version=SECRET_VERSION

以下を置き換えます。

  • REMOTE-REPOSITORY-NAME は、リポジトリの名前に置き換えます。プロジェクト内のリポジトリの場所ごとに、リポジトリ名は一意であることが必要です。
  • PROJECT_ID: プロジェクト ID。このフラグを省略すると、現在のプロジェクトまたはデフォルトのプロジェクトが使用されます。
  • LOCATION は、リポジトリのリージョンまたはマルチリージョンのロケーションです。デフォルトを設定すると、このフラグを省略できます。サポートされているリポジトリのロケーションの一覧を表示するには、コマンド gcloud artifacts locations listを実行します。
  • DESCRIPTION は、リポジトリの説明(省略可)です。リポジトリの説明は暗号化されないため、センシティブ データは含めないでください。
  • REMOTE-REPOSITORY-DESCRIPTION は、このリモート リポジトリの外部リポジトリの構成の説明です。
  • (省略可)USERNAME は、認証を使用している場合、アップストリーム リポジトリに対する認証に使用するユーザー名に置き換えます。
  • (省略可)SECRET_VERSION は、認証を使用している場合、アップストリーム リポジトリのパスワードを含むシークレット バージョンに置き換えます。
  • UPSTREAM は、プリセット アップストリーム名、Artifact Registry のリポジトリパス、またはアップストリーム リポジトリのユーザー定義 URL に置き換えます。

    Artifact Registry アップストリーム リポジトリの場合は、リポジトリ パスを projects/UPSTREAM_PROJECT_ID/locations/REGION/repositories/UPSTREAM_REPOSITORY のようにフォーマットします。

    使用可能なプリセット アップストリームとサポート対象のユーザー定義アップストリームについては、サポートされているファイル形式をご覧ください。

たとえば、次のコマンドは、Google Cloud プロジェクト my-project のリージョン us-east1my-repo という名前のリモート リポジトリを作成し、ユーザー名 my-username と Secret のバージョン projects/my-project/secrets/my-secret/versions/1 を使用してアップストリーム リポジトリに対する認証を行うことができますです。

gcloud artifacts repositories create my-repo \
    --project=my-project \
    --repository-format=maven \
    --location=us-east1 \
    --description="Remote Maven repository" \
    --mode=remote-repository \
    --remote-repo-config-desc="Maven Central" \
    --remote-username=my-username \
    --remote-password-secret-version=projects/my-project/secrets/my-secret/versions/1 \
    --remote-mvn-repo=MAVEN-CENTRAL

npm

gcloud artifacts repositories create REMOTE-REPOSITORY-NAME \
    --project=PROJECT_ID \
    --repository-format=npm \
    --location=LOCATION \
    --description="DESCRIPTION" \
    --mode=remote-repository \
    --remote-repo-config-desc="REMOTE-REPOSITORY-DESCRIPTION" \
    --remote-npm-repo=UPSTREAM

アップストリーム リポジトリに対する認証用のオプション フラグ:

  • --remote-username=USERNAME
  • --remote-password-secret-version=SECRET_VERSION

以下を置き換えます。

  • REMOTE-REPOSITORY-NAME は、リポジトリの名前に置き換えます。プロジェクト内のリポジトリの場所ごとに、リポジトリ名は一意であることが必要です。
  • PROJECT_ID: プロジェクト ID。このフラグを省略すると、現在のプロジェクトまたはデフォルトのプロジェクトが使用されます。
  • LOCATION は、リポジトリのリージョンまたはマルチリージョンのロケーションです。デフォルトを設定すると、このフラグを省略できます。サポートされているリポジトリのロケーションの一覧を表示するには、コマンド gcloud artifacts locations listを実行します。
  • DESCRIPTION は、リポジトリの説明(省略可)です。リポジトリの説明は暗号化されないため、センシティブ データは含めないでください。
  • REMOTE-REPOSITORY-DESCRIPTION は、このリモート リポジトリの外部リポジトリの構成の説明です。
  • (省略可)USERNAME は、認証を使用している場合、アップストリーム リポジトリに対する認証に使用するユーザー名に置き換えます。
  • (省略可)SECRET_VERSION は、認証を使用している場合、アップストリーム リポジトリのパスワードを含むシークレット バージョンに置き換えます。
  • UPSTREAM は、プリセット アップストリーム名、Artifact Registry のリポジトリパス、またはアップストリーム リポジトリのユーザー定義 URL に置き換えます。

    Artifact Registry アップストリーム リポジトリの場合は、リポジトリ パスを projects/UPSTREAM_PROJECT_ID/locations/REGION/repositories/UPSTREAM_REPOSITORY のようにフォーマットします。

    使用可能なプリセット アップストリームとサポート対象のユーザー定義アップストリームについては、サポートされているファイル形式をご覧ください。

たとえば、次のコマンドは、Google Cloud プロジェクト my-project のリージョン us-east1my-repo という名前のリモート リポジトリを作成し、ユーザー名 my-username と Secret のバージョン projects/my-project/secrets/my-secret/versions/1 を使用してアップストリーム リポジトリに対する認証を行うことができますです。

gcloud artifacts repositories create my-repo \
    --project=my-project \
    --repository-format=npm \
    --location=us-east1 \
    --description="Remote npm repository" \
    --mode=remote-repository \
    --remote-repo-config-desc="Public npm registry" \
    --remote-username=my-username \
    --remote-password-secret-version=projects/my-project/secrets/my-secret/versions/1 \
    --remote-npm-repo=NPMJS

Python

gcloud artifacts repositories create REMOTE-REPOSITORY-NAME \
    --project=PROJECT_ID \
    --repository-format=python \
    --location=LOCATION \
    --description="DESCRIPTION" \
    --mode=remote-repository \
    --remote-repo-config-desc="REMOTE-REPOSITORY-DESCRIPTION" \
    --remote-python-repo=UPSTREAM

アップストリーム リポジトリに対する認証用のオプション フラグ:

  • --remote-username=USERNAME
  • --remote-password-secret-version=SECRET_VERSION

以下を置き換えます。

  • REMOTE-REPOSITORY-NAME は、リポジトリの名前に置き換えます。プロジェクト内のリポジトリの場所ごとに、リポジトリ名は一意であることが必要です。
  • PROJECT_ID: プロジェクト ID。このフラグを省略すると、現在のプロジェクトまたはデフォルトのプロジェクトが使用されます。
  • LOCATION は、リポジトリのリージョンまたはマルチリージョンのロケーションです。デフォルトを設定すると、このフラグを省略できます。サポートされているリポジトリのロケーションの一覧を表示するには、コマンド gcloud artifacts locations listを実行します。
  • DESCRIPTION は、リポジトリの説明(省略可)です。リポジトリの説明は暗号化されないため、センシティブ データは含めないでください。
  • REMOTE-REPOSITORY-DESCRIPTION は、このリモート リポジトリの外部リポジトリの構成の説明です。
  • (省略可)USERNAME は、認証を使用している場合、アップストリーム リポジトリに対する認証に使用するユーザー名に置き換えます。
  • (省略可)SECRET_VERSION は、認証を使用している場合、アップストリーム リポジトリのパスワードを含むシークレット バージョンに置き換えます。
  • UPSTREAM は、プリセット アップストリーム名、Artifact Registry のリポジトリパス、またはアップストリーム リポジトリのユーザー定義 URL に置き換えます。

    Artifact Registry アップストリーム リポジトリの場合は、リポジトリ パスを projects/UPSTREAM_PROJECT_ID/locations/REGION/repositories/UPSTREAM_REPOSITORY のようにフォーマットします。

    使用可能なプリセット アップストリームとサポート対象のユーザー定義アップストリームについては、サポートされているファイル形式をご覧ください。

たとえば、次のコマンドは、Google Cloud プロジェクト my-project のリージョン us-east1my-repo という名前のリモート リポジトリを作成し、ユーザー名 my-username と Secret のバージョン projects/my-project/secrets/my-secret/versions/1 を使用してアップストリーム リポジトリに対する認証を行うことができますです。

gcloud artifacts repositories create my-repo \
    --project=my-project \
    --repository-format=python \
    --location=us-east1 \
    --description="Remote Python repository" \
    --mode=remote-repository \
    --remote-repo-config-desc="PyPI" \
    --remote-username=my-username \
    --remote-password-secret-version=projects/my-project/secrets/my-secret/versions/1 \
    --remote-python-repo=PYPI

Apt(プレビュー)

gcloud artifacts repositories create REMOTE_REPOSITORY_NAME \
    --project=PROJECT_ID \
    --repository-format=apt \
    --location=LOCATION \
    --description="DESCRIPTION" \
    --mode=remote-repository \
    --remote-repo-config-desc="REMOTE_REPOSITORY_DESCRIPTION" \
    --remote-apt-repo=APT_REPOSITORY_BASE \
    --remote-apt-repo-path="APT_REPOSITORY_PATH"

以下を置き換えます。

  • REMOTE_REPOSITORY_NAME は、リポジトリの名前に置き換えます。プロジェクト内のリポジトリの場所ごとに、リポジトリ名は一意であることが必要です。
  • PROJECT_ID: プロジェクト ID。このフラグを省略すると、現在のプロジェクトまたはデフォルトのプロジェクトが使用されます。
  • LOCATION は、リポジトリのリージョンまたはマルチリージョンのロケーションです。デフォルトを設定すると、このフラグを省略できます。サポートされているリポジトリのロケーションの一覧を表示するには、コマンド gcloud artifacts locations listを実行します。
  • DESCRIPTION は、リポジトリの説明(省略可)です。リポジトリの説明は暗号化されないため、センシティブ データは含めないでください。
  • REMOTE_REPOSITORY_DESCRIPTION は、このリモート リポジトリの外部リポジトリの構成の説明です。
  • APT_REPOSITORY_BASE は、Apt リモート リポジトリの OS パッケージのサポート対象のアップストリームにリストされたサポートされているリポジトリ ベース名のいずれかに置き換えます。
  • APT_REPOSITORY_PATH は、リポジトリ ベースの後のリモート リポジトリにキャッシュ保存するアップストリーム リポジトリの残りの URL に置き換えます。

たとえば、次のコマンドは、Google Cloud プロジェクト my-project のリージョン us-east1 に Debian buster リポジトリをキャッシュ保存するために、my-repo という名前のリモート リポジトリを作成します。アップストリーム リポジトリの完全な URL は http://deb.debian.org/debian/dists/buster です。

gcloud artifacts repositories create my-repo \
    --project=my-project \
    --repository-format=apt \
    --location=us-east1 \
    --description="Apt remote repository" \
    --mode=remote-repository \
    --remote-repo-config-desc="Debian buster distribution" \
    --remote-apt-repo=DEBIAN \
    --remote-apt-repo-path="debian/dists/buster"

Yum(プレビュー)

gcloud artifacts repositories create REMOTE_REPOSITORY_NAME \
    --project=PROJECT_ID \
    --repository-format=yum \
    --location=LOCATION \
    --description="DESCRIPTION" \
    --mode=remote-repository \
    --remote-repo-config-desc="REMOTE_REPOSITORY_DESCRIPTION" \
    --remote-yum-repo=YUM_REPOSITORY_BASE \
    --remote-yum-repo-path="YUM_REPOSITORY_PATH"

以下を置き換えます。

  • REMOTE_REPOSITORY_NAME は、リポジトリの名前に置き換えます。プロジェクト内のリポジトリの場所ごとに、リポジトリ名は一意であることが必要です。
  • PROJECT_ID: プロジェクト ID。このフラグを省略すると、現在のプロジェクトまたはデフォルトのプロジェクトが使用されます。
  • LOCATION は、リポジトリのリージョンまたはマルチリージョンのロケーションです。デフォルトを設定すると、このフラグを省略できます。サポートされているリポジトリのロケーションの一覧を表示するには、コマンド gcloud artifacts locations listを実行します。
  • DESCRIPTION は、リポジトリの説明(省略可)です。リポジトリの説明は暗号化されないため、センシティブ データは含めないでください。
  • REMOTE_REPOSITORY_DESCRIPTION は、このリモート リポジトリの外部リポジトリの構成の説明です。
  • YUM_REPOSITORY_BASE は、Yum リモート リポジトリの OS パッケージのサポート対象のアップストリームにリストされたサポートされているリポジトリ ベース名のいずれかに置き換えます。
  • YUM_REPOSITORY_PATH は、リポジトリ ベースの後のリモート リポジトリにキャッシュ保存するアップストリーム リポジトリの残りの URL に置き換えます。

たとえば、次のコマンドは、アップストリーム リポジトリ 9-stream/BaseOs/x86_64/os の Google Cloud プロジェクト my-project のリージョン us-east1 に、my-repo という名前の Yum パッケージのリモート リポジトリを作成します。リポジトリの完全な URL は https://mirror.stream.centos.org/9-stream/BaseOS/x86_64/os です。

gcloud artifacts repositories create my-repo \
    --project=my-project \
    --repository-format=yum \
    --location=us-east1 \
    --description="Yum remote repository" \
    --mode=remote-repository \
    --remote-repo-config-desc="CentOS 8 x86" \
    --remote-yum-repo=CENTOS_STREAM \
    --remote-yum-repo-path="9-stream/BaseOs/x86_64/os"

Artifact Registry がリポジトリを作成します。次のコマンドを実行してリポジトリの説明を表示します。

gcloud artifacts repositories describe REMOTE_REPOSITORY_NAME \
    --location=LOCATION

リポジトリを作成したら、次のようにします。

Terraform を使用してリモート リポジトリを作成する

google_artifact_registry_repository リソースを使用して、リポジトリを作成します。 terraform-provider-google のバージョン 5.0.0 以降が必要です。

Google Cloud で Terraform を初めて使用する場合は、HashiCorp ウェブサイトの Google Cloud スタートガイド ページをご覧ください。

次の例では、Terraform リソース名 my-repo でプロバイダとリモート リポジトリを定義します。

Docker

provider "google" {
    project = "PROJECT-ID"
}

resource "google_artifact_registry_repository" "my-repo" {
  location      = "LOCATION"
  repository_id = "REPOSITORY_ID"
  description   = "DESCRIPTION"
  format        = "docker"
  kms_key_name = "KEY"
  mode          = "REMOTE_REPOSITORY"
  remote_repository_config {
    description = "CONFIG_DESCRIPTION"
    docker_repository {
      public_repository = "DOCKER_HUB"
    }
  }
  cleanup_policy_dry_run = DRY_RUN_STATUS
  cleanup_policies {
    id     = "POLICY_NAME"
    action = "DELETE"
    condition {
      tag_state    = "TAG_STATE"
      tag_prefixes = ["TAG_PREFIX", "TAG_PREFIX_N"]
      older_than   = "TIME_SINCE_UPLOAD"
    }
  }
  cleanup_policies {
    id     = "POLICY_NAME"
    action = "KEEP"
    condition {
      tag_state             = "TAG_STATE"
      tag_prefixes          = ["TAG_PREFIX", "TAG_PREFIX_N"]
      package_name_prefixes = ["PKG_PREFIX", "PKG_PREFIX_N"]
    }
  }
  cleanup_policies {
    id     = "POLICY_NAME"
    action = "KEEP"
    most_recent_versions {
      package_name_prefixes = ["PKG_PREFIX", "PKG_PREFIX_N"]
      keep_count            = KEEP_COUNT
    }
  }
}

ここで

  • PROJECT-ID は、Google Cloud プロジェクト ID です。
  • LOCATION は、リポジトリのロケーションです。
  • REPOSITORY_ID は、リポジトリ ID です。
  • DESCRIPTION はリポジトリの説明です(省略可能)。リポジトリの説明は暗号化されないため、機密データは含めないでください。
  • KEY は、Cloud Key Management Service 鍵の名前です(暗号化に顧客管理の暗号鍵(CMEK)を使用している場合)。デフォルト設定(Google が管理する暗号鍵)を使用する場合は、この引数を省略します。
  • CONFIG_DESCRIPTION は、リモートソースの説明です(省略可能)。
  • DRY_RUN_STATUS は、リポジトリにクリーンアップ ポリシーを設定する場合に、クリーンアップ ポリシーでアーティファクトを削除するか、または削除されるアーティファクトをログに記録するだけかを決定します。クリーンアップ ポリシーをリポジトリに追加しない場合は省略します。* true: ドライラン モードで実行するポリシーを設定します。ドライラン モードでは、アーティファクトは削除されません。* false: クリーンアップ ポリシーを適用します。アーティファクトは、ポリシーに応じて削除または保持されます。クリーンアップ ポリシーの詳細については、クリーンアップ ポリシーの設定をご覧ください。
    • POLICY_NAME は、クリーンアップ ポリシーの名前です。
    • TAG_STATE は、ポリシーを適用するタグの状態です。値は taggeduntagged、および any です。any は、タグ付けされたアーティファクトとタグ付けされていないアーティファクトの両方に適用されます。リポジトリで不変のタグが有効になっている場合、タグ付けされたアーティファクトは削除できません。
    • TAG_PREFIXTAG_PREFIX_N は、ポリシーを適用するタグの接頭辞です。
    • PKG_PREFIXPKG_PREFIX_N は、ポリシーを適用するパッケージの接頭辞です。
    • TIME_SINCE_UPLOAD は、アーティファクト バージョンがリポジトリにアップロードされてからの時間(期間)です。それぞれ、smhd を追加することにより、秒、分、時、日の期間を指定できます。
    • KEEP_COUNT は、リポジトリに保持するアーティファクトのパッケージあたりのバージョン数です。

Maven

バージョン ポリシーを指定しない場合は、Artifact Registry によってデフォルトでパッケージのスナップショットとリリース バージョンの両方を保存する Maven リポジトリが作成されます。

provider "google" {
    project = "PROJECT-ID"
}

resource "google_artifact_registry_repository" "my-repo" {
  location      = "LOCATION"
  repository_id = "REPOSITORY_ID"
  description   = "DESCRIPTION"
  format        = "maven"
  kms_key_name = "KEY"
  mode          = "REMOTE_REPOSITORY"
  remote_repository_config {
    description = "CONFIG_DESCRIPTION"
    maven_repository {
      public_repository = "MAVEN_CENTRAL"
    }
  }
  cleanup_policy_dry_run = DRY_RUN_STATUS
  cleanup_policies {
    id     = "POLICY_NAME"
    action = "DELETE"
    condition {
      tag_state    = "TAG_STATE"
      tag_prefixes = ["TAG_PREFIX", "TAG_PREFIX_N"]
      older_than   = "TIME_SINCE_UPLOAD"
    }
  }
  cleanup_policies {
    id     = "POLICY_NAME"
    action = "KEEP"
    condition {
      tag_state             = "TAG_STATE"
      tag_prefixes          = ["TAG_PREFIX", "TAG_PREFIX_N"]
      package_name_prefixes = ["PKG_PREFIX", "PKG_PREFIX_N"]
    }
  }
  cleanup_policies {
    id     = "POLICY_NAME"
    action = "KEEP"
    most_recent_versions {
      package_name_prefixes = ["PKG_PREFIX", "PKG_PREFIX_N"]
      keep_count            = KEEP_COUNT
    }
  }
}

ここで

  • PROJECT-ID は、Google Cloud プロジェクト ID です。
  • LOCATION は、リポジトリのロケーションです。
  • REPOSITORY_ID は、リポジトリ ID です。
  • DESCRIPTION はリポジトリの説明です(省略可能)。リポジトリの説明は暗号化されないため、機密データは含めないでください。
  • KEY は、Cloud Key Management Service 鍵の名前です(暗号化に顧客管理の暗号鍵(CMEK)を使用している場合)。デフォルト設定(Google が管理する暗号鍵)を使用する場合は、この引数を省略します。
  • CONFIG_DESCRIPTION は、リモートソースの説明です(省略可能)。
  • DRY_RUN_STATUS は、リポジトリにクリーンアップ ポリシーを設定する場合に、クリーンアップ ポリシーでアーティファクトを削除するか、または削除されるアーティファクトをログに記録するだけかを決定します。クリーンアップ ポリシーをリポジトリに追加しない場合は省略します。* true: ドライラン モードで実行するポリシーを設定します。ドライラン モードでは、アーティファクトは削除されません。* false: クリーンアップ ポリシーを適用します。アーティファクトは、ポリシーに応じて削除または保持されます。クリーンアップ ポリシーの詳細については、クリーンアップ ポリシーの設定をご覧ください。
    • POLICY_NAME は、クリーンアップ ポリシーの名前です。
    • TAG_STATE は、ポリシーを適用するタグの状態です。値は taggeduntagged、および any です。any は、タグ付けされたアーティファクトとタグ付けされていないアーティファクトの両方に適用されます。リポジトリで不変のタグが有効になっている場合、タグ付けされたアーティファクトは削除できません。
    • TAG_PREFIXTAG_PREFIX_N は、ポリシーを適用するタグの接頭辞です。
    • PKG_PREFIXPKG_PREFIX_N は、ポリシーを適用するパッケージの接頭辞です。
    • TIME_SINCE_UPLOAD は、アーティファクト バージョンがリポジトリにアップロードされてからの時間(期間)です。それぞれ、smhd を追加することにより、秒、分、時、日の期間を指定できます。
    • KEEP_COUNT は、リポジトリに保持するアーティファクトのパッケージあたりのバージョン数です。

スナップショットとリリース バージョンを別々のリポジトリに保存するには、maven_config ブロックを使用してリポジトリのバージョン ポリシーを指定します。このブロックは、次の設定をサポートします。

  • version_policy は、次のいずれかの値を使用してバージョン ポリシーを設定します。
    • VERSION_POLICY_UNSPECIFIED: スナップショットとリリース パッケージを保存します。これはデフォルトの設定です。
    • RELEASE: リリース パッケージのみを保存します。
    • SNAPSHOT: スナップショット パッケージのみを保存します。
  • allow_snapshot_overwrites は、SNAPSHOT バージョン ポリシーで、リポジトリ内の既存のバージョンを上書きする一意でないスナップショットを受け入れるようにリポジトリを構成します。

次の例では、リリース バージョン ポリシーを持つ Maven リポジトリを定義しています。

provider "google" {
project = "my-project"
}

resource "google_artifact_registry_repository" "my-repo" {
provider = google-beta

location = "LOCATION"
repository_id = "my-repo"
description = "Maven repository"
format = "MAVEN"
mode = "REMOTE_REPOSITORY"
maven_config {
  version_policy = "RELEASE"
}
}

npm

provider "google" {
    project = "PROJECT-ID"
}

resource "google_artifact_registry_repository" "my-repo" {
  location      = "LOCATION"
  repository_id = "REPOSITORY_ID"
  description   = "DESCRIPTION"
  format        = "npm"
  kms_key_name = "KEY"
  mode          = "REMOTE_REPOSITORY"
  remote_repository_config {
    description = "CONFIG_DESCRIPTION"
    npm_repository {
      public_repository = "NPMJS"
    }
  }
  cleanup_policy_dry_run = DRY_RUN_STATUS
  cleanup_policies {
    id     = "POLICY_NAME"
    action = "DELETE"
    condition {
      tag_state    = "TAG_STATE"
      tag_prefixes = ["TAG_PREFIX", "TAG_PREFIX_N"]
      older_than   = "TIME_SINCE_UPLOAD"
    }
  }
  cleanup_policies {
    id     = "POLICY_NAME"
    action = "KEEP"
    condition {
      tag_state             = "TAG_STATE"
      tag_prefixes          = ["TAG_PREFIX", "TAG_PREFIX_N"]
      package_name_prefixes = ["PKG_PREFIX", "PKG_PREFIX_N"]
    }
  }
  cleanup_policies {
    id     = "POLICY_NAME"
    action = "KEEP"
    most_recent_versions {
      package_name_prefixes = ["PKG_PREFIX", "PKG_PREFIX_N"]
      keep_count            = KEEP_COUNT
    }
  }
}

ここで

  • PROJECT-ID は、Google Cloud プロジェクト ID です。
  • LOCATION は、リポジトリのロケーションです。
  • REPOSITORY_ID は、リポジトリ ID です。
  • DESCRIPTION はリポジトリの説明です(省略可能)。リポジトリの説明は暗号化されないため、機密データは含めないでください。
  • KEY は、Cloud Key Management Service 鍵の名前です(暗号化に顧客管理の暗号鍵(CMEK)を使用している場合)。デフォルト設定(Google が管理する暗号鍵)を使用する場合は、この引数を省略します。
  • CONFIG_DESCRIPTION は、リモートソースの説明です(省略可能)。
  • DRY_RUN_STATUS は、リポジトリにクリーンアップ ポリシーを設定する場合に、クリーンアップ ポリシーでアーティファクトを削除するか、または削除されるアーティファクトをログに記録するだけかを決定します。クリーンアップ ポリシーをリポジトリに追加しない場合は省略します。* true: ドライラン モードで実行するポリシーを設定します。ドライラン モードでは、アーティファクトは削除されません。* false: クリーンアップ ポリシーを適用します。アーティファクトは、ポリシーに応じて削除または保持されます。クリーンアップ ポリシーの詳細については、クリーンアップ ポリシーの設定をご覧ください。
    • POLICY_NAME は、クリーンアップ ポリシーの名前です。
    • TAG_STATE は、ポリシーを適用するタグの状態です。値は taggeduntagged、および any です。any は、タグ付けされたアーティファクトとタグ付けされていないアーティファクトの両方に適用されます。リポジトリで不変のタグが有効になっている場合、タグ付けされたアーティファクトは削除できません。
    • TAG_PREFIXTAG_PREFIX_N は、ポリシーを適用するタグの接頭辞です。
    • PKG_PREFIXPKG_PREFIX_N は、ポリシーを適用するパッケージの接頭辞です。
    • TIME_SINCE_UPLOAD は、アーティファクト バージョンがリポジトリにアップロードされてからの時間(期間)です。それぞれ、smhd を追加することにより、秒、分、時、日の期間を指定できます。
    • KEEP_COUNT は、リポジトリに保持するアーティファクトのパッケージあたりのバージョン数です。

Python

provider "google" {
    project = "PROJECT-ID"
}

resource "google_artifact_registry_repository" "my-repo" {
  location      = "LOCATION"
  repository_id = "REPOSITORY_ID"
  description   = "DESCRIPTION"
  format        = "python"
  kms_key_name = "KEY"
  mode          = "REMOTE_REPOSITORY"
  remote_repository_config {
    description = "CONFIG_DESCRIPTION"
    python_repository {
      public_repository = "PYPI"
    }
  }
  cleanup_policy_dry_run = DRY_RUN_STATUS
  cleanup_policies {
    id     = "POLICY_NAME"
    action = "DELETE"
    condition {
      tag_state    = "TAG_STATE"
      tag_prefixes = ["TAG_PREFIX", "TAG_PREFIX_N"]
      older_than   = "TIME_SINCE_UPLOAD"
    }
  }
  cleanup_policies {
    id     = "POLICY_NAME"
    action = "KEEP"
    condition {
      tag_state             = "TAG_STATE"
      tag_prefixes          = ["TAG_PREFIX", "TAG_PREFIX_N"]
      package_name_prefixes = ["PKG_PREFIX", "PKG_PREFIX_N"]
    }
  }
  cleanup_policies {
    id     = "POLICY_NAME"
    action = "KEEP"
    most_recent_versions {
      package_name_prefixes = ["PKG_PREFIX", "PKG_PREFIX_N"]
      keep_count            = KEEP_COUNT
    }
  }
}

ここで

  • PROJECT-ID は、Google Cloud プロジェクト ID です。
  • LOCATION は、リポジトリのロケーションです。
  • REPOSITORY_ID は、リポジトリ ID です。
  • DESCRIPTION はリポジトリの説明です(省略可能)。リポジトリの説明は暗号化されないため、機密データは含めないでください。
  • KEY は、Cloud Key Management Service 鍵の名前です(暗号化に顧客管理の暗号鍵(CMEK)を使用している場合)。デフォルト設定(Google が管理する暗号鍵)を使用する場合は、この引数を省略します。
  • CONFIG_DESCRIPTION は、リモートソースの説明です(省略可能)。
  • DRY_RUN_STATUS は、リポジトリにクリーンアップ ポリシーを設定する場合に、クリーンアップ ポリシーでアーティファクトを削除するか、または削除されるアーティファクトをログに記録するだけかを決定します。クリーンアップ ポリシーをリポジトリに追加しない場合は省略します。* true: ドライラン モードで実行するポリシーを設定します。ドライラン モードでは、アーティファクトは削除されません。* false: クリーンアップ ポリシーを適用します。アーティファクトは、ポリシーに応じて削除または保持されます。クリーンアップ ポリシーの詳細については、クリーンアップ ポリシーの設定をご覧ください。
    • POLICY_NAME は、クリーンアップ ポリシーの名前です。
    • TAG_STATE は、ポリシーを適用するタグの状態です。値は taggeduntagged、および any です。any は、タグ付けされたアーティファクトとタグ付けされていないアーティファクトの両方に適用されます。リポジトリで不変のタグが有効になっている場合、タグ付けされたアーティファクトは削除できません。
    • TAG_PREFIXTAG_PREFIX_N は、ポリシーを適用するタグの接頭辞です。
    • PKG_PREFIXPKG_PREFIX_N は、ポリシーを適用するパッケージの接頭辞です。
    • TIME_SINCE_UPLOAD は、アーティファクト バージョンがリポジトリにアップロードされてからの時間(期間)です。それぞれ、smhd を追加することにより、秒、分、時、日の期間を指定できます。
    • KEEP_COUNT は、リポジトリに保持するアーティファクトのパッケージあたりのバージョン数です。

Apt(プレビュー)

  provider "google" {
  project = "PROJECT_ID"
}

resource "google_artifact_registry_repository" "my-repo" {
  location      = "LOCATION"
  repository_id = "REPOSITORY_ID"
  description   = "DESCRIPTION"
  format        = "APT"
  mode          = "REMOTE_REPOSITORY"
  remote_repository_config {
    description = "CONFIG_DESCRIPTION"
    apt_repository {
      public_repository {
        repository_base = "REPOSITORY_BASE"
        repository_path = "REPOSITORY_PATH"
      }
    }
  }
}

ここで

  • PROJECT-ID は、Google Cloud プロジェクト ID です。
  • LOCATION は、リポジトリのロケーションです。
  • REPOSITORY_ID は、リポジトリ ID です。
  • DESCRIPTION はリポジトリの説明です(省略可能)。リポジトリの説明は暗号化されないため、センシティブ データは含めないでください。
  • CONFIG_DESCRIPTION は、リモートソースの説明です(省略可)。
  • REPOSITORY_BASE は、Apt のプリセット パブリック リポジトリ ベースです。有効な値は DEBIANUBUNTU です。
  • REPOSITORY_PATH は、前述のベースの特定のリポジトリです。例: debian/dists/buster

Yum(プレビュー)

  provider "google" {
  project = "PROJECT_ID"
}

resource "google_artifact_registry_repository" "my-repo" {
  location      = "LOCATION"
  repository_id = "REPOSITORY_ID"
  description   = "DESCRIPTION"
  format        = "YUM"
  mode          = "REMOTE_REPOSITORY"
  remote_repository_config {
    description = "CONFIG_DESCRIPTION"
    yum_repository {
      public_repository {
        repository_base = "REPOSITORY_BASE"
        repository_path = "REPOSITORY_PATH"
      }
    }
  }
}

ここで

  • PROJECT-ID は、Google Cloud プロジェクト ID です。
  • LOCATION は、リポジトリのロケーションです。
  • REPOSITORY_ID は、リポジトリ ID です。
  • DESCRIPTION はリポジトリの説明です(省略可能)。リポジトリの説明は暗号化されないため、センシティブ データは含めないでください。
  • CONFIG_DESCRIPTION は、リモートソースの説明です(省略可)。
  • REPOSITORY_BASE は、Yum のプリセット パブリック リポジトリ ベースです。有効な値は CENTOSCENTOS_DEBUGCENTOS_VAULTCENTOS_STREAMROCKYEPEL です。
  • REPOSITORY_PATH は、前述のベースの特定のリポジトリです。例: "centos/8-stream/BaseOS/x86_64/os

Artifact Registry がリポジトリを作成します。次のコマンドを実行してリポジトリの説明を表示します。

gcloud artifacts repositories describe REPOSITORY \
    --location=LOCATION

リポジトリを作成した後は:

リポジトリの説明を編集する

リポジトリの説明は、Google Cloud コンソールか gcloud CLI から変更できます。

Console

  1. Google Cloud コンソールで [リポジトリ] ページを開きます。

    [リポジトリ] ページを開く

  2. リポジトリ リストでリポジトリを選択し、[リポジトリを編集] をクリックします。

  3. リポジトリの説明を編集し、[保存] をクリックします。

gcloud

リポジトリの説明を更新するには次のコマンドを実行します。

gcloud artifacts repositories update REPOSITORY \
    --project=PROJECT \
    --location=LOCATION \
    --description="DESCRIPTION"

以下を置き換えます。

  • REPOSITORY: リポジトリの名前 デフォルト リポジトリを構成した場合は、このフラグを省略してデフォルトを使用できます。
  • PROJECT: Google Cloud プロジェクト ID。 このフラグを省略すると、現在のプロジェクトまたはデフォルトのプロジェクトが使用されます。
  • LOCATION:リージョンまたはマルチリージョン ロケーション。このフラグを使用して、特定のロケーションのリポジトリを表示します。デフォルト ロケーションを構成している場合は、このフラグを省略してデフォルトを使用できます。
  • DESCRIPTION: リポジトリの説明。

サービス境界内のアップストリーム ソースにアクセスする

VPC Service Controls のサービス境界内のサービスは、境界外のリソースへのアクセスを制限しています。

指定した Google Cloud プロジェクトとロケーション内のアップストリーム ソースへのアクセスを許可または拒否できます。

デフォルトでは、アクセス権を明示的に付与していない場合、Artifact Registry はアップストリーム ソースへのアクセスを拒否します。

Artifact Registry の場合、必要なロールは Artifact Registry 管理者(roles/artifactregistry.admin)です。

アップストリーム ソースの設定を表示する

特定のプロジェクトとロケーションの組み合わせの構成を表示するには、次のコマンドを実行します。

gcloud artifacts vpcsc-config describe \
    --project=PROJECT_ID \
    --location=LOCATION

たとえば、プロジェクト my-projectus-east1 にあるリモート リポジトリの設定を表示するには、次のコマンドを使用します。

gcloud artifacts vpcsc-config describe \
    --project=my-project \
    --location=us-east1

アップストリーム ソースへのアクセスを許可する

指定したロケーションにあるアップストリーム ソースへのアクセスを許可するには、次のコマンドを実行します。

gcloud artifacts vpcsc-config allow \
    --project=PROJECT_ID \
    --location=LOCATION

たとえば、次のコマンドを使用して、プロジェクト my-projectus-east1 にあるすべてのリモート リポジトリが境界外のアップストリーム ソースにアクセスできるようにします。

gcloud artifacts vpcsc-config allow \
    --project=my-project \
    --location=us-east1

アップストリーム ソースへのアクセスを拒否する

アップストリーム ソースへのアクセスを拒否しても、リモート リポジトリ内のキャッシュに保存された既存のアーティファクトは引き続き使用できます。

指定したロケーションにあるアップストリーム ソースへのアクセスを拒否するには、次のコマンドを実行します。

gcloud artifacts vpcsc-config deny \
    --project=PROJECT_ID \
    --location=LOCATION

たとえば、次のコマンドを使用して、プロジェクト my-projectus-west1 にあるすべてのリモート リポジトリに対して、境界外のアップストリーム ソースへのアクセスをブロックします。

gcloud artifacts vpcsc-config deny \
    --project=my-project \
    --location=us-west1

次のステップ