ラボの設定手順と要件
アカウントと進行状況を保護します。このラボを実行するには、常にシークレット ブラウジング ウィンドウとラボの認証情報を使用してください。

コンテナビルドの保護

ラボ 10分 universal_currency_alt クレジット: 5 show_chart 中級
info このラボでは、学習をサポートする AI ツールが組み込まれている場合があります。
このコンテンツはまだモバイル デバイス向けに最適化されていません。
快適にご利用いただくには、メールで送信されたリンクを使用して、デスクトップ パソコンでアクセスしてください。

GSP1185

Google Cloud セルフペース ラボ

概要

Artifact Registry を使用すると、さまざまなアーティファクト タイプを格納することや、単一のプロジェクトに複数のリポジトリを作成すること、各リポジトリに特定のリージョンやマルチリージョンを関連付けることができます。リポジトリのモードは複数あります。各モードにはそれぞれ異なる目的があります。次の図は、さまざまなモードのリポジトリを一緒に使用する方法の一例を示しています。図は、2 つの Google Cloud プロジェクトにまたがるワークフローを示しています。ある開発プロジェクトで、デベロッパーが Java アプリケーションをビルドします。別のランタイム プロジェクトでは、そのアプリケーションを含むコンテナ イメージが別のビルドによって作成され、Google Kubernetes Engine にデプロイされます。

モードの図

このラボでは、次のタスクの実行方法について学びます。

  • 標準リポジトリを使用してプライベート パッケージをデプロイする
  • リモート リポジトリを使用して Maven Central パッケージをキャッシュに保存する
  • 仮想リポジトリを使用して複数のアップストリーム リポジトリを 1 つの構成に結合する

設定と要件

[ラボを開始] ボタンをクリックする前に

こちらの説明をお読みください。ラボには時間制限があり、一時停止することはできません。タイマーは Google Cloud のリソースを利用できる時間を示しており、[ラボを開始] をクリックするとスタートします。

このハンズオンラボでは、シミュレーションやデモ環境ではなく実際のクラウド環境を使って、ご自身でラボのアクティビティを行います。そのため、ラボの受講中に Google Cloud にログインおよびアクセスするための、新しい一時的な認証情報が提供されます。

このラボを完了するためには、以下が必要です。

  • 標準的なインターネット ブラウザ(Chrome を推奨)
注: このラボの実行には、シークレット モードまたはシークレット ブラウジング ウィンドウを使用してください。これにより、個人アカウントと受講者アカウント間の競合を防ぎ、個人アカウントに追加料金が発生しないようにすることができます。
  • ラボを完了するための時間(開始後は一時停止できません)
注: すでに個人の Google Cloud アカウントやプロジェクトをお持ちの場合でも、このラボでは使用しないでください。アカウントへの追加料金が発生する可能性があります。

ラボを開始して Google Cloud コンソールにログインする方法

  1. [ラボを開始] ボタンをクリックします。ラボの料金をお支払いいただく必要がある場合は、表示されるポップアップでお支払い方法を選択してください。 左側の [ラボの詳細] パネルには、以下が表示されます。

    • [Google Cloud コンソールを開く] ボタン
    • 残り時間
    • このラボで使用する必要がある一時的な認証情報
    • このラボを行うために必要なその他の情報(ある場合)
  2. [Google Cloud コンソールを開く] をクリックします(Chrome ブラウザを使用している場合は、右クリックして [シークレット ウィンドウで開く] を選択します)。

    ラボでリソースがスピンアップし、別のタブで [ログイン] ページが表示されます。

    ヒント: タブをそれぞれ別のウィンドウで開き、並べて表示しておきましょう。

    注: [アカウントの選択] ダイアログが表示されたら、[別のアカウントを使用] をクリックします。
  3. 必要に応じて、下のユーザー名をコピーして、[ログイン] ダイアログに貼り付けます。

    {{{user_0.username | "Username"}}}

    [ラボの詳細] パネルでもユーザー名を確認できます。

  4. [次へ] をクリックします。

  5. 以下のパスワードをコピーして、[ようこそ] ダイアログに貼り付けます。

    {{{user_0.password | "Password"}}}

    [ラボの詳細] パネルでもパスワードを確認できます。

  6. [次へ] をクリックします。

    重要: ラボで提供された認証情報を使用する必要があります。Google Cloud アカウントの認証情報は使用しないでください。 注: このラボでご自身の Google Cloud アカウントを使用すると、追加料金が発生する場合があります。
  7. その後次のように進みます。

    • 利用規約に同意します。
    • 一時的なアカウントなので、復元オプションや 2 要素認証プロセスは設定しないでください。
    • 無料トライアルには登録しないでください。

その後、このタブで Google Cloud コンソールが開きます。

注: Google Cloud のプロダクトやサービスのリストを含むメニューを表示するには、左上のナビゲーション メニューをクリックします。ナビゲーション メニュー アイコン

Cloud Shell をアクティブにする

Cloud Shell は、開発ツールと一緒に読み込まれる仮想マシンです。5 GB の永続ホーム ディレクトリが用意されており、Google Cloud で稼働します。Cloud Shell を使用すると、コマンドラインで Google Cloud リソースにアクセスできます。

  1. Google Cloud コンソールの上部にある「Cloud Shell をアクティブにする」アイコン 「Cloud Shell をアクティブにする」アイコン をクリックします。

接続した時点で認証が完了しており、プロジェクトに各自の Project_ID が設定されます。出力には、このセッションの PROJECT_ID を宣言する次の行が含まれています。

Your Cloud Platform project in this session is set to {{{project_0.project_id | "PROJECT_ID"}}}

gcloud は Google Cloud のコマンドライン ツールです。このツールは、Cloud Shell にプリインストールされており、タブ補完がサポートされています。

  1. (省略可)次のコマンドを使用すると、有効なアカウント名を一覧表示できます。
gcloud auth list
  1. [承認] をクリックします。

出力:

ACTIVE: * ACCOUNT: {{{user_0.username | "ACCOUNT"}}} To set the active account, run: $ gcloud config set account `ACCOUNT`
  1. (省略可)次のコマンドを使用すると、プロジェクト ID を一覧表示できます。
gcloud config list project

出力:

[core] project = {{{project_0.project_id | "PROJECT_ID"}}} 注: Google Cloud における gcloud ドキュメントの全文については、gcloud CLI の概要ガイドをご覧ください。

Workspace の設定

  1. Cloud Shell で、プロジェクト ID とプロジェクト番号を設定します。これらを変数 PROJECT_IDPROJECT_NUMBER として保存します。
export PROJECT_ID=$(gcloud config get-value project) export PROJECT_NUMBER=$(gcloud projects describe $PROJECT_ID --format='value(projectNumber)')
  1. Artifact Registry API を有効にします。
gcloud services enable artifactregistry.googleapis.com
  1. このラボに必要なリポジトリのクローンを作成し、container-analysis ディレクトリに移動します。
git clone https://github.com/GoogleCloudPlatform/java-docs-samples cd java-docs-samples/container-registry/container-analysis

タスク 1. 標準リポジトリ

標準リポジトリを使用すると、プライベート パッケージを保存して他のアプリケーション間で共有できます。

  1. 次のコマンドを実行して、Java アーティファクトの標準 Maven リポジトリを作成します。
gcloud artifacts repositories create container-dev-java-repo \ --repository-format=maven \ --location=us-central1 \ --description="Java package repository for Container Dev Workshop"

Cloud Shell の承認を求めるプロンプトが表示されたら、[承認] をクリックします。

  1. Cloud コンソールで、[Artifact Registry] > [リポジトリ] に移動し、container-dev-java-repo という名前の新しい Maven リポジトリが作成されていることを確認します。クリックすると、現時点では空であることがわかります。

  2. ターミナルでリポジトリを確認します。

gcloud artifacts repositories describe container-dev-java-repo \ --location=us-central1

次のようなレスポンスが返されます。

Encryption: Google-managed key Repository Size: 0.000MB createTime: '2023-03-21T19:01:45.461589Z' description: Java package repository for Container Dev Workshop format: MAVEN mavenConfig: {} mode: STANDARD_REPOSITORY name: projects/qwiklabs-gcp-03-4304110dc461/locations/us-central1/repositories/container-dev-java-repo updateTime: '2023-03-21T19:01:45.461589Z'

[進行状況を確認] をクリックして、目標に沿って進んでいることを確認します。 標準の Maven リポジトリを作成する

タスク 2. Artifact Registry 用に Maven を構成する

  1. 次のコマンドを実行して、Java プロジェクトに追加するリポジトリ構成をプリントします。
gcloud artifacts print-settings mvn \ --repository=container-dev-java-repo \ --location=us-central1

このコマンドにより、プロジェクトの pom.xml に追加する xml が返されます。

  • repositories セクションでは、現在のプロジェクトで使用するリモート アーティファクトを Maven がダウンロードする場所を指定します。
  • distributionManagement セクションでは、プロジェクトがデプロイされるときに push されるリモート リポジトリを指定します。
  • extensions セクションでは、Artifact Registry への接続に必要な認証とトランスポート層を有効にする artifactregistry-maven-wagon を追加します。
  • 注: 拡張機能は pom.xml または extensions.xml に存在できます。プロジェクトが親プロジェクトに依存している場合、pom.xml の残りのエントリが読み込まれる前に、これらの依存関係へのアクセスが発生します。親が拡張機能に確実にアクセスできるように、親を extensions.xml ファイルに配置できます。このファイルは pom.xml よりも前に読み込まれるため、親の依存関係で使用できるようになります。
  1. Cloud Shell で次のコマンドを実行して、現在のディレクトリでエディタを開きます。
cloudshell workspace .
  1. 3 つのセクションをコピーし、Cloud Shell エディタで pom.xml を開いて、返された設定をファイルの末尾(project の閉じタグの直前)に追加します。

例: (実際の URL のプロジェクト名は異なります)

... <distributionManagement> <snapshotRepository> <id>artifact-registry</id> <url>artifactregistry://us-central1-maven.pkg.dev/qwiklabs-gcp-04-3c51830ea757/container-dev-java-repo</url> </snapshotRepository> <repository> <id>artifact-registry</id> <url>artifactregistry://us-central1-maven.pkg.dev/qwiklabs-gcp-04-3c51830ea757/container-dev-java-repo</url> </repository> </distributionManagement> <repositories> <repository> <id>artifact-registry</id> <url>artifactregistry://us-central1-maven.pkg.dev/qwiklabs-gcp-04-3c51830ea757/container-dev-java-repo</url> <releases> <enabled>true</enabled> </releases> <snapshots> <enabled>true</enabled> </snapshots> </repository> </repositories> <build> <extensions> <extension> <groupId>com.google.cloud.artifactregistry</groupId> <artifactId>artifactregistry-maven-wagon</artifactId> <version>2.2.0</version> </extension> </extensions> </build> </project>

Maven で Artifact Registry を構成したので、Artifact Registry を使用して Java jar を保存し、組織内の他のプロジェクトで使用できるようになりました。

  1. 次のコマンドを実行して、Java パッケージを Artifact Registry にアップロードします。
mvn deploy -DskipTests

このコマンドを再度実行する場合は、必ず pom.xml のバージョンを増やしてください。

  1. Cloud コンソールで、[Artifact Registry] > [リポジトリ] に移動し、container-dev-java-repo をクリックして、hello-world バイナリ アーティファクトがあることを確認します。
Artifact Registry リポジトリの詳細

タスク 3. リモート リポジトリ

リモート リポジトリを使用すると、信頼性とセキュリティを高めるためにサードパーティ パッケージをキャッシュに保存できます。

  1. 次のコマンドを実行して、Maven Central アーティファクトのリモート リポジトリを作成します。
gcloud artifacts repositories create maven-central-cache \ --project=$PROJECT_ID \ --repository-format=maven \ --location=us-central1 \ --description="Remote repository for Maven Central caching" \ --mode=remote-repository \ --remote-repo-config-desc="Maven Central" \ --remote-mvn-repo=MAVEN-CENTRAL
  1. Cloud コンソールで、[Artifact Registry] > [リポジトリ] に移動します。maven-central-cache をクリックすると、作成済みで、現在は空であることがわかります。

[進行状況を確認] をクリックして、目標に沿って進んでいることを確認します。 リモート リポジトリを作成する

  1. ターミナルでリポジトリを確認します。
gcloud artifacts repositories describe maven-central-cache \ --location=us-central1
  1. 次のコマンドを実行して、Java プロジェクトに追加するリポジトリ構成をプリントします。
gcloud artifacts print-settings mvn \ --repository=maven-central-cache \ --location=us-central1
  1. pom.xml にリポジトリ セクションを追加します。出力から外側の <repositories> タグをコピーしないようにしてください。

  2. 新しく追加したリポジトリの ID を「central」に変更して、各リポジトリ エントリの ID が一意になるようにします。

例: (実際の URL のプロジェクト名は異なります)

... <distributionManagement> <snapshotRepository> <id>artifact-registry</id> <url>artifactregistry://us-central1-maven.pkg.dev/qwiklabs-gcp-04-3c51830ea757/container-dev-java-repo</url> </snapshotRepository> <repository> <id>artifact-registry</id> <url>artifactregistry://us-central1-maven.pkg.dev/qwiklabs-gcp-04-3c51830ea757/container-dev-java-repo</url> </repository> </distributionManagement> <repositories> <repository> <id>artifact-registry</id> <url>artifactregistry://us-central1-maven.pkg.dev/qwiklabs-gcp-04-3c51830ea757/container-dev-java-repo</url> <releases> <enabled>true</enabled> </releases> <snapshots> <enabled>true</enabled> </snapshots> </repository> <repository> <id>central</id> <url>artifactregistry://us-central1-maven.pkg.dev/qwiklabs-gcp-04-3c51830ea757/maven-central-cache</url> <releases> <enabled>true</enabled> </releases> <snapshots> <enabled>true</enabled> </snapshots> </repository> </repositories> <build> <extensions> <extension> <groupId>com.google.cloud.artifactregistry</groupId> <artifactId>artifactregistry-maven-wagon</artifactId> <version>2.2.0</version> </extension> </extensions> </build> </project>
  1. ターミナルで次のコマンドを実行して、プロジェクトがコア拡張機能メカニズムを使用するための extensions.xml を作成します。これにより、Maven が Artifact Registry から親またはプラグインの依存関係を確実に解決できるようにします。
mkdir .mvn cat > .mvn/extensions.xml << EOF <extensions xmlns="http://maven.apache.org/EXTENSIONS/1.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/EXTENSIONS/1.0.0 http://maven.apache.org/xsd/core-extensions-1.0.0.xsd"> <extension> <groupId>com.google.cloud.artifactregistry</groupId> <artifactId>artifactregistry-maven-wagon</artifactId> <version>2.2.0</version> </extension> </extensions> EOF
  1. 次のコマンドを実行して、リモート リポジトリを使用してアプリケーションをコンパイルします。
rm -rf ~/.m2/repository mvn compile
  1. Cloud コンソールで、[Artifact Registry] > [リポジトリ] に移動します。maven-central-cache をクリックし、バイナリ アーティファクトがそこでキャッシュに保存されていることを確認します。
Artifact Registry リポジトリの詳細

タスク 4. 仮想リポジトリ

仮想リポジトリは、単一の構成を介してアクセスされる、複数のリポジトリのインターフェースとして機能します。これにより、アーティファクトのコンシューマーに対するクライアント構成が簡素化され、依存関係かく乱攻撃を軽減することでセキュリティが強化されます。

  1. ポリシー ファイルを作成する
cat > ./policy.json << EOF [ { "id": "private", "repository": "projects/${PROJECT_ID}/locations/us-central1/repositories/container-dev-java-repo", "priority": 100 }, { "id": "central", "repository": "projects/${PROJECT_ID}/locations/us-central1/repositories/maven-central-cache", "priority": 80 } ] EOF
  1. 仮想リポジトリを作成する
gcloud artifacts repositories create virtual-maven-repo \ --project=${PROJECT_ID} \ --repository-format=maven \ --mode=virtual-repository \ --location=us-central1 \ --description="Virtual Maven Repo" \ --upstream-policy-file=./policy.json

[進行状況を確認] をクリックして、目標に沿って進んでいることを確認します。 仮想リポジトリを作成する

  1. 次のコマンドを実行して、Java プロジェクトに追加するリポジトリ構成をプリントします。
gcloud artifacts print-settings mvn \ --repository=virtual-maven-repo \ --location=us-central1
  1. pom のリポジトリ セクション全体を、出力の 1 つの仮想リポジトリ セクションに置き換えます。

例: (実際の URL のプロジェクト名は異なります)

... <distributionManagement> <snapshotRepository> <id>artifact-registry</id> <url>artifactregistry://us-central1-maven.pkg.dev/qwiklabs-gcp-04-3c51830ea757/container-dev-java-repo</url> </snapshotRepository> <repository> <id>artifact-registry</id> <url>artifactregistry://us-central1-maven.pkg.dev/qwiklabs-gcp-04-3c51830ea757/container-dev-java-repo</url> </repository> </distributionManagement> <repositories> <repository> <id>artifact-registry</id> <url>artifactregistry://us-central1-maven.pkg.dev/qwiklabs-gcp-04-3c51830ea757/virtual-maven-repo</url> <releases> <enabled>true</enabled> </releases> <snapshots> <enabled>true</enabled> </snapshots> </repository> </repositories> <build> <extensions> <extension> <groupId>com.google.cloud.artifactregistry</groupId> <artifactId>artifactregistry-maven-wagon</artifactId> <version>2.2.0</version> </extension> </extensions> </build> </project>

仮想リポジトリから依存関係を pull する

仮想リポジトリはパススルーで、実際のパッケージが保存されないため、プロセスを明確に示すために、先ほど作成した maven-central-cache リポジトリを削除して再作成し、空のリポジトリからやり直します。

  1. 次のコマンドを実行して、キャッシュ リポジトリを再作成します。
gcloud artifacts repositories delete maven-central-cache \ --project=$PROJECT_ID \ --location=us-central1 \ --quiet gcloud artifacts repositories create maven-central-cache \ --project=$PROJECT_ID \ --repository-format=maven \ --location=us-central1 \ --description="Remote repository for Maven Central caching" \ --mode=remote-repository \ --remote-repo-config-desc="Maven Central" \ --remote-mvn-repo=MAVEN-CENTRAL
  1. 空のリポジトリはコンソールで確認できます。Cloud コンソール > [Artifact Registry] > [リポジトリ]

  2. 次のコマンドを使用してプロジェクトをビルドし、仮想リポジトリの演習を行います。

rm -rf ~/.m2/repository mvn compile
  1. コンソールでパッケージを確認します。Cloud コンソール > [Artifact Registry] > [リポジトリ]maven-central-cache をクリックし、バイナリ アーティファクトが仮想リポジトリから pull するように構成されているが、最終的には maven-central-cache から pull されたことを確認します。
Artifact Registry リポジトリの詳細

お疲れさまでした

複数のリポジトリ モードの使用方法と、それらのリポジトリを使用するさまざまな目的について学習しました。

次のステップと詳細情報

Google Cloud トレーニングと認定資格

Google Cloud トレーニングと認定資格を通して、Google Cloud 技術を最大限に活用できるようになります。クラスでは、技術スキルとベスト プラクティスを迅速に身につけ、学習を継続的に進めることができます。トレーニングは基礎レベルから上級レベルまであり、オンデマンド、ライブ、バーチャル参加など、多忙なスケジュールにも対応できるオプションが用意されています。認定資格を取得することで、Google Cloud テクノロジーに関するスキルと知識を証明できます。

マニュアルの最終更新日: 2024 年 9 月 10 日

ラボの最終テスト日: 2023 年 12 月 6 日

Copyright 2024 Google LLC All rights reserved. Google および Google のロゴは、Google LLC の商標です。その他すべての社名および製品名は、それぞれ該当する企業の商標である可能性があります。

始める前に

  1. ラボでは、Google Cloud プロジェクトとリソースを一定の時間利用します
  2. ラボには時間制限があり、一時停止機能はありません。ラボを終了した場合は、最初からやり直す必要があります。
  3. 画面左上の [ラボを開始] をクリックして開始します

シークレット ブラウジングを使用する

  1. ラボで使用するユーザー名パスワードをコピーします
  2. プライベート モードで [コンソールを開く] をクリックします

コンソールにログインする

    ラボの認証情報を使用して
  1. ログインします。他の認証情報を使用すると、エラーが発生したり、料金が発生したりする可能性があります。
  2. 利用規約に同意し、再設定用のリソースページをスキップします
  3. ラボを終了する場合や最初からやり直す場合を除き、[ラボを終了] はクリックしないでください。クリックすると、作業内容がクリアされ、プロジェクトが削除されます

このコンテンツは現在ご利用いただけません

利用可能になりましたら、メールでお知らせいたします

ありがとうございます。

利用可能になりましたら、メールでご連絡いたします

1 回に 1 つのラボ

既存のラボをすべて終了して、このラボを開始することを確認してください

シークレット ブラウジングを使用してラボを実行する

このラボを実行するには、シークレット モードまたはシークレット ブラウジング ウィンドウを使用することをおすすめします。これにより、個人アカウントと受講者アカウントの競合を防ぎ、個人アカウントに追加料金が発生することを防ぎます。