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

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

リモート リポジトリDocker Hub、Maven Central、Python Package Index(PyPI)、Debian、CentOS などの事前設定された外部ソースからのアーティファクトとサポートされている形式して、ソース別にトラフィック データを分類します。リモート リポジトリは、外部ソースのプロキシとして機能するため、外部依存関係をより細かく制御できます。パッケージのバージョンを初めてリクエストするときに、Artifact Registry はパッケージをダウンロードして、リモート リポジトリにキャッシュ保存します。次に同じパッケージ バージョンをリクエストすると、Artifact Registry はキャッシュに保存されたコピーを提供します。

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

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

リモート リポジトリの仕組みの詳細については、リモート リポジトリの概要をご覧ください。

準備

  1. Artifact Registry API を有効にして Google Cloud CLI をインストールするなど、Artifact Registry を有効にします
  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
    

必要なロール

リポジトリの管理に必要な権限を取得するには、次に挙げる 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 を使用する場合は、[リモート リポジトリのソース] セクションで、プリセット アップストリームまたはカスタムを選択します。

  7. 省略可。カスタム アップストリームを使用している場合は、[カスタム リポジトリ] フィールドにカスタム リポジトリの URL を入力します。リポジトリの作成後に URL を変更することはできません。

  8. [リモート リポジトリの認証モード] で、次のいずれかを選択します。

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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-username=USERNAME \
    --remote-password-secret-version=SECRET_VERSION \
    --remote-docker-repo=UPSTREAM

次のように置き換えます。

  • REMOTE-REPOSITORY-NAME はリポジトリの名前に置き換えます。プロジェクト内のリポジトリの場所ごとに、リポジトリ名は一意であることが必要です。
  • PROJECT_ID: プロジェクト ID。このフラグを省略すると、現在のプロジェクトまたはデフォルトのプロジェクトが使用されます。
  • LOCATION は、リポジトリのリージョンまたはマルチリージョンのロケーションです。デフォルトを設定すると、このフラグを省略できます。サポートされているリポジトリのロケーションの一覧を表示するには、コマンド gcloud artifacts locations listを実行します。

  • DESCRIPTION は、リポジトリの説明(省略可)です。リポジトリの説明は暗号化されないため、機密データは含めないでください。

  • REMOTE-REPOSITORY-DESCRIPTION は、このリモート リポジトリの外部リポジトリの構成の説明です。

  • 認証を使用する場合は USERNAME です。アップストリーム リポジトリの認証にはユーザー名を使用します。

  • 認証を使用する場合は必要に応じて SECRET_VERSION。アップストリーム リポジトリのパスワードを含むシークレット バージョンを使用します。

  • UPSTREAM は、アップストリーム リポジトリのプリセット名またはユーザー定義の URL に置き換えます。使用可能なプリセット アップストリームとサポートされているユーザー定義アップストリームについては、サポートされている形式をご覧ください。

たとえば、次のコマンドは、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-username=USERNAME \
    --remote-password-secret-version=SECRET_VERSION \
    --remote-mvn-repo=UPSTREAM

次のように置き換えます。

  • REMOTE-REPOSITORY-NAME はリポジトリの名前に置き換えます。プロジェクト内のリポジトリの場所ごとに、リポジトリ名は一意であることが必要です。
  • PROJECT_ID: プロジェクト ID。このフラグを省略すると、現在のプロジェクトまたはデフォルトのプロジェクトが使用されます。
  • LOCATION は、リポジトリのリージョンまたはマルチリージョンのロケーションです。デフォルトを設定すると、このフラグを省略できます。サポートされているリポジトリのロケーションの一覧を表示するには、コマンド gcloud artifacts locations listを実行します。

  • DESCRIPTION は、リポジトリの説明(省略可)です。リポジトリの説明は暗号化されないため、機密データは含めないでください。

  • REMOTE-REPOSITORY-DESCRIPTION は、このリモート リポジトリの外部リポジトリの構成の説明です。

  • 認証を使用する場合は USERNAME です。アップストリーム リポジトリの認証にはユーザー名を使用します。

  • 認証を使用する場合は必要に応じて SECRET_VERSION。アップストリーム リポジトリのパスワードを含むシークレット バージョンを使用します。

  • UPSTREAM は、アップストリーム リポジトリのプリセット名またはユーザー定義の URL に置き換えます。使用可能なプリセット アップストリームとサポートされているユーザー定義アップストリームについては、サポートされている形式をご覧ください。

たとえば、次のコマンドは、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-username=USERNAME \
    --remote-password-secret-version=SECRET_VERSION \
    --remote-npm-repo=UPSTREAM

次のように置き換えます。

  • REMOTE-REPOSITORY-NAME はリポジトリの名前に置き換えます。プロジェクト内のリポジトリの場所ごとに、リポジトリ名は一意であることが必要です。
  • PROJECT_ID: プロジェクト ID。このフラグを省略すると、現在のプロジェクトまたはデフォルトのプロジェクトが使用されます。
  • LOCATION は、リポジトリのリージョンまたはマルチリージョンのロケーションです。デフォルトを設定すると、このフラグを省略できます。サポートされているリポジトリのロケーションの一覧を表示するには、コマンド gcloud artifacts locations listを実行します。

  • DESCRIPTION は、リポジトリの説明(省略可)です。リポジトリの説明は暗号化されないため、機密データは含めないでください。

  • REMOTE-REPOSITORY-DESCRIPTION は、このリモート リポジトリの外部リポジトリの構成の説明です。

  • 認証を使用する場合は USERNAME です。アップストリーム リポジトリの認証にはユーザー名を使用します。

  • 認証を使用する場合は必要に応じて SECRET_VERSION。アップストリーム リポジトリのパスワードを含むシークレット バージョンを使用します。

  • UPSTREAM は、アップストリーム リポジトリのプリセット名またはユーザー定義の URL に置き換えます。使用可能なプリセット アップストリームとサポートされているユーザー定義アップストリームについては、サポートされている形式をご覧ください。

たとえば、次のコマンドは、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-username=USERNAME \
    --remote-password-secret-version=SECRET_VERSION \
    --remote-python-repo=UPSTREAM

次のように置き換えます。

  • REMOTE-REPOSITORY-NAME はリポジトリの名前に置き換えます。プロジェクト内のリポジトリの場所ごとに、リポジトリ名は一意であることが必要です。
  • PROJECT_ID: プロジェクト ID。このフラグを省略すると、現在のプロジェクトまたはデフォルトのプロジェクトが使用されます。
  • LOCATION は、リポジトリのリージョンまたはマルチリージョンのロケーションです。デフォルトを設定すると、このフラグを省略できます。サポートされているリポジトリのロケーションの一覧を表示するには、コマンド gcloud artifacts locations listを実行します。

  • DESCRIPTION は、リポジトリの説明(省略可)です。リポジトリの説明は暗号化されないため、機密データは含めないでください。

  • REMOTE-REPOSITORY-DESCRIPTION は、このリモート リポジトリの外部リポジトリの構成の説明です。

  • 認証を使用する場合は USERNAME です。アップストリーム リポジトリの認証にはユーザー名を使用します。

  • 認証を使用する場合は必要に応じて SECRET_VERSION。アップストリーム リポジトリのパスワードを含むシークレット バージョンを使用します。

  • UPSTREAM は、アップストリーム リポジトリのプリセット名またはユーザー定義の URL に置き換えます。使用可能なプリセット アップストリームとサポートされているユーザー定義アップストリームについては、サポートされている形式をご覧ください。

たとえば、次のコマンドは、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 に置き換えます。

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

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 \
    --remote-yum-repo-path="centos/8-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-project 内の us-east1 のリモート リポジトリの設定を表示するには、次のコマンドを使用します。

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

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

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

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

たとえば、プロジェクト my-project 内の us-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

次のステップ