GSP1076

概要
Container Registry の進化形である Artifact Registry は、コンテナ イメージと言語パッケージ(Maven や npm など)を 1 か所で管理できるサービスです。Google Cloud のツールおよびランタイムと完全に統合されており、ネイティブのアーティファクト プロトコルがサポートされています。これにより、簡単に独自の CI / CD ツールと連携させて自動化パイプラインを構築できます。
このラボでは、Artifact Registry で利用できる機能について学びます。
目標
このラボでは、次の方法について学びます。
- コンテナと言語パッケージ用のリポジトリを作成する
- Artifact Registry を使用してコンテナ イメージを管理する
- Artifact Registry と Cloud Code を統合する
- Java の依存関係に Artifact Registry を使用するように Maven を構成する
設定と要件
[ラボを開始] ボタンをクリックする前に
こちらの説明をお読みください。ラボには時間制限があり、一時停止することはできません。タイマーは、Google Cloud のリソースを利用できる時間を示しており、[ラボを開始] をクリックするとスタートします。
このハンズオンラボでは、シミュレーションやデモ環境ではなく実際のクラウド環境を使って、ラボのアクティビティを行います。そのため、ラボの受講中に Google Cloud にログインおよびアクセスするための、新しい一時的な認証情報が提供されます。
このラボを完了するためには、下記が必要です。
- 標準的なインターネット ブラウザ(Chrome を推奨)
注: このラボの実行には、シークレット モード(推奨)またはシークレット ブラウジング ウィンドウを使用してください。これにより、個人アカウントと受講者アカウント間の競合を防ぎ、個人アカウントに追加料金が発生しないようにすることができます。
- ラボを完了するための時間(開始後は一時停止できません)
注: このラボでは、受講者アカウントのみを使用してください。別の Google Cloud アカウントを使用すると、そのアカウントに料金が発生する可能性があります。ラボを開始して Google Cloud コンソールにログインする方法
- 
[ラボを開始] ボタンをクリックします。ラボの料金をお支払いいただく必要がある場合は、表示されるダイアログでお支払い方法を選択してください。
左側の [ラボの詳細] ペインには、以下が表示されます。 
- [Google Cloud コンソールを開く] ボタン
- 残り時間
- このラボで使用する必要がある一時的な認証情報
- このラボを行うために必要なその他の情報(ある場合)
 
- 
[Google Cloud コンソールを開く] をクリックします(Chrome ブラウザを使用している場合は、右クリックして [シークレット ウィンドウで開く] を選択します)。 ラボでリソースがスピンアップし、別のタブで [ログイン] ページが表示されます。 ヒント: タブをそれぞれ別のウィンドウで開き、並べて表示しておきましょう。 注: [アカウントの選択] ダイアログが表示されたら、[別のアカウントを使用] をクリックします。
- 
必要に応じて、下のユーザー名をコピーして、[ログイン] ダイアログに貼り付けます。 {{{user_0.username | "Username"}}}[ラボの詳細] ペインでもユーザー名を確認できます。 
- 
[次へ] をクリックします。 
- 
以下のパスワードをコピーして、[ようこそ] ダイアログに貼り付けます。 {{{user_0.password | "Password"}}}[ラボの詳細] ペインでもパスワードを確認できます。 
- 
[次へ] をクリックします。 重要: ラボで提供された認証情報を使用する必要があります。Google Cloud アカウントの認証情報は使用しないでください。
注: このラボでご自身の Google Cloud アカウントを使用すると、追加料金が発生する場合があります。
- 
その後次のように進みます。 
- 利用規約に同意してください。
- 一時的なアカウントなので、復元オプションや 2 要素認証プロセスは設定しないでください。
- 無料トライアルには登録しないでください。
 
その後、このタブで Google Cloud コンソールが開きます。
注: Google Cloud のプロダクトやサービスにアクセスするには、ナビゲーション メニューをクリックするか、[検索] フィールドにサービス名またはプロダクト名を入力します。
 
Cloud Shell をアクティブにする
Cloud Shell は、開発ツールと一緒に読み込まれる仮想マシンです。5 GB の永続ホーム ディレクトリが用意されており、Google Cloud で稼働します。Cloud Shell を使用すると、コマンドラインで Google Cloud リソースにアクセスできます。
- 
Google Cloud コンソールの上部にある「Cloud Shell をアクティブにする」アイコン  をクリックします。 をクリックします。
 
- 
ウィンドウで次の操作を行います。 
- Cloud Shell 情報ウィンドウで操作を進めます。
- Cloud Shell が認証情報を使用して Google Cloud API を呼び出すことを承認します。
 
接続した時点で認証が完了しており、プロジェクトに各自の 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 にプリインストールされており、タブ補完がサポートされています。
- (省略可)次のコマンドを使用すると、有効なアカウント名を一覧表示できます。
gcloud auth list
- [承認] をクリックします。
出力:
ACTIVE: *
ACCOUNT: {{{user_0.username | "ACCOUNT"}}}
To set the active account, run:
    $ gcloud config set account `ACCOUNT`
- (省略可)次のコマンドを使用すると、プロジェクト ID を一覧表示できます。
gcloud config list project出力:
[core]
project = {{{project_0.project_id | "PROJECT_ID"}}}
注: Google Cloud における gcloud ドキュメントの全文については、gcloud CLI の概要ガイドをご覧ください。
すべての変更は、ラボ環境のプロビジョニングが完了してから行う必要があります。ラボの準備が整うと、作業に必要な事前構成された環境が使用可能になります。
タスク 1. ラボ環境を準備する
環境変数を設定する
- Cloud Shell で、プロジェクト ID とプロジェクト番号を設定します。これらを変数 PROJECT_IDとPROJECT_NUMBERとして保存します。
export PROJECT_ID=$(gcloud config get-value project)
export PROJECT_NUMBER=$(gcloud projects describe $PROJECT_ID --format='value(projectNumber)')
export REGION={{{ project_0.default_region | "REGION" }}}
gcloud config set compute/region $REGIONGoogle サービスを有効にする
- 次のコマンドを実行して、必要な Google サービスを有効にします。
gcloud services enable \
  cloudresourcemanager.googleapis.com \
  container.googleapis.com \
  artifactregistry.googleapis.com \
  containerregistry.googleapis.com \
  containerscanning.googleapis.comソースコードを取得する
このラボのソースコードは、GitHub の GoogleCloudPlatform 組織にあります。
- 次のコマンドでソースコードをクローンし、ディレクトリに移動します。
git clone https://github.com/GoogleCloudPlatform/cloud-code-samples/
cd ~/cloud-code-samplesこのラボで使用するインフラストラクチャをプロビジョニングする
このラボでは、コードを Kubernetes Engine(GKE)にデプロイします。
- 次の設定スクリプトを実行して、このインフラストラクチャを準備します。
gcloud container clusters create container-dev-cluster --zone={{{ project_0.default_zone | "ZONE" }}}[進行状況を確認] をクリックして、目標に沿って進んでいることを確認します。
      Google サービスを有効にして GKE クラスタを作成する
  
タスク 2. コンテナ イメージを操作する
Artifact Registry で Docker リポジトリを作成する
Artifact Registry は、コンテナ イメージと言語パッケージの管理に役立ちます。アーティファクトのタイプによって必要な仕様が異なり、たとえば、Maven の依存関係のリクエストは Node の依存関係のリクエストとは異なります。
さまざまな API 仕様をサポートするために、ユーザーが求める API レスポンスの形式を Artifact Registry に把握させる必要があります。これを行うには、リポジトリを作成し、目的のリポジトリ タイプを示す --repository-format フラグを渡します。
- Cloud Shell から次のコマンドを実行して、Docker イメージのリポジトリを作成します。
gcloud artifacts repositories create container-dev-repo --repository-format=docker \
  --location=$REGION \
  --description="Docker repository for Container Dev Workshop"Cloud Shell の承認を求めるプロンプトが表示されたら、[承認] をクリックします。
- Cloud コンソールで、[Artifact Registry] > [リポジトリ] に移動し、container-dev-repoという名前の新しい Docker リポジトリが作成されていることを確認します。クリックすると、現時点では空であることがわかります。
[進行状況を確認] をクリックして、目標に沿って進んでいることを確認します。(これには 1 分ほどかかる場合があります。プロセスを正常に完了しても確認がうまくいかない場合は、1 分待ってからもう一度試してください。)
      コンテナ イメージを操作する
  
Artifact Registry に対する Docker の認証を構成する
Artifact Registry に接続する際には、アクセスのために認証情報が必要です。Docker は、個別の認証情報を設定するのではなく、gcloud 認証情報をそのまま使用するように構成できます。
- Cloud Shell から次のコマンドを実行することによって、Google Cloud CLI を使用して  リージョンの Artifact Registry へのリクエストを認証するように Docker を構成します。
gcloud auth configure-docker {{{ project_0.default_region | "Filled in at lab start" }}}-docker.pkg.dev
- コマンドを実行すると、Cloud Shell の Docker 構成を変更するかどうかを確認するプロンプトが表示されるので、Enter をクリックします。
サンプル アプリケーションを調べる
クローンを作成した Git リポジトリにサンプル アプリケーションが用意されています。
- java ディレクトリに移動して、アプリケーション コードを確認します。
cd ~/cloud-code-samples/java/java-hello-worldこのフォルダには、簡単なウェブページをレンダリングする Java アプリケーションのサンプルが含まれています。このラボでは扱わないさまざまなファイルのほかに、src フォルダの下にソースコードと、コンテナ イメージをローカルでビルドするための Dockerfile が含まれています。
コンテナ イメージをビルドする
Artifact Registry にコンテナ イメージを保存するには、まずコンテナ イメージを作成する必要があります。
- 次のコマンドを実行してコンテナ イメージをビルドし、適切なタグを付けます。
docker build -t {{{ project_0.default_region | "REGION" }}}-docker.pkg.dev/{{{ project_0.project_id | "PROJECT_ID" }}}/container-dev-repo/java-hello-world:tag1 .コンテナ イメージを Artifact Registry に push する
- 次のコマンドを実行して、作成したリポジトリにコンテナ イメージを push します。
docker push {{{ project_0.default_region | "REGION" }}}-docker.pkg.dev/{{{ project_0.project_id | "PROJECT_ID" }}}/container-dev-repo/java-hello-world:tag1Artifact Registry のイメージを確認する
- 
Artifact Registry > リポジトリ で、container-dev-repoをクリックし、java-hello-worldイメージがあることを確認します。
 
- 
イメージをクリックし、tag1のタグが付いていることを確認します。脆弱性スキャンが実行中であるか、すでに完了していることがわかります。検出された脆弱性の数が表示されています。
 

脆弱性の数をクリックすると、イメージで検出された脆弱性が CVE 情報の名前および重大度とともに一覧表示されます。各脆弱性の [表示] をクリックすると、詳細を確認できます。

タスク 3. Cloud Code と統合する
このセクションでは、Cloud Code で Artifact Registry の Docker イメージ リポジトリを使用します。
Cloud Code からアプリケーションを GKE クラスタにデプロイする
- 
java-hello-worldフォルダから次のコマンドを実行して Cloud Shell エディタを開き、アプリケーション フォルダをこのワークスペースに追加します。
cd ~/cloud-code-samples/
cloudshell workspace .Cloud Shell エディタが開き、エクスプローラにアプリケーション フォルダが表示されます。
- 左側のメニューから [Cloud Code] を選択し、[COMPUTE ENGINE] オプションを展開します。[プロジェクトを選択] をクリックし、ラボ手順に記載されているプロジェクト ID を選択します。

次に、[KUBERNETES] オプションを開きます。ここでは、クラスタの読み込み状況を確認できます。
クラスタが [KUBERNETES] と [COMPUTE ENGINE] の両方に表示されるまで待ちます。
- 以降の手順では、Artifact Registry リポジトリの場所を入力する必要があります。場所の形式は次のとおりです。
{{{ project_0.default_region | "REGION" }}}-docker.pkg.dev/{{{ project_0.project_id | "PROJECT_ID" }}}/container-dev-repoCloud Shell エディタのナビゲーション メニュー  で、[View] > [Command Palette] をクリックし、「Run on Kubernetes」と入力して [Cloud Code: Run on Kubernetes] を選択します。
 で、[View] > [Command Palette] をクリックし、「Run on Kubernetes」と入力して [Cloud Code: Run on Kubernetes] を選択します。

- 
cloud-code-samples/java/java-hello-world/skaffold.yaml を選択し、次に dockerfile を選択します。 
- 
コンテキストの選択を求められたら、[Yes] を選択して現在のコンテキストを使用します。 
- 
イメージ レジストリのプロンプトで、[Enter the address of an image repository] を選択し、以下に示すアドレスを入力して Enter キーを押します。 

{{{ project_0.default_region | "REGION" }}}-docker.pkg.dev/{{{ project_0.project_id | "PROJECT_ID" }}}/container-dev-repo
- 
Run on Kubernetes を初めて実行すると、Cloud Code によって対象のイメージ リポジトリの場所を求めるプロンプトが表示されます。リポジトリの URL を指定すると、アプリケーション フォルダ内に .vscode/launch.jsonファイルが作成され、ここに URL が保存されます。
出力ペインを見ると、アプリケーション イメージ java-hello-world のビルドが開始され、先ほど構成した Artifact Registry リポジトリにアップロードされたことがわかります。
- 
Artifact Registry > リポジトリで container-dev-repoをクリックし、latestというタグが付いた新しいjava-hello-worldイメージがあることを確認します。
デプロイされたアプリケーションを確認する
- Cloud Shell エディタに戻ります。デプロイが完了すると、Skaffold / Cloud Code によって、サービスの転送先の公開 URL がプリントされます。Follow link をクリックします。

新しいブラウザ ウィンドウに、Hello World アプリのページが表示されます。

アプリケーション コードを更新する
次に、アプリケーションを更新して、クラスタ上のデプロイメントにすぐに変更が実装されることを確認します。
- 
Cloud Shell エディタのナビゲーション メニュー  で [View] > [Command Palette] をクリックして で [View] > [Command Palette] をクリックしてHelloWorldController.javaを開きます。Backspace キーを 1 回押してからパス src/main/java/cloudcode/helloworld/web を入力し、Hello..で始まるオプションをクリックします。
 
- 
20 行目のテキストを「It's running!」から「It's updated!」に変更します。ビルドとデプロイのプロセスがすぐに開始されます。 
- 
デプロイが完了したら、転送先の URL を再度クリックするかアプリケーションのブラウザ ウィンドウを更新して、デプロイされた変更を確認します。 

- Cloud コンソールで、ナビゲーション メニュー > Artifact Registry > リポジトリ に移動し、container-dev-repoをクリックして、新しいjava-hello-worldイメージがあることを確認します。
[進行状況を確認] をクリックして、目標に沿って進んでいることを確認します。
      Cloud Code と統合する
  
タスク 4. 言語パッケージを操作する
このセクションでは、Artifact Registry の Java リポジトリを設定し、そこにパッケージをアップロードして、さまざまなアプリケーションで利用します。
Java パッケージ リポジトリを作成する
- Cloud Shell から次のコマンドを実行して、Java アーティファクトのリポジトリを作成します。
gcloud artifacts repositories create container-dev-java-repo \
    --repository-format=maven \
    --location={{{ project_0.default_region | "REGION" }}} \
    --description="Java package repository for Container Dev Workshop"
- 
Cloud Shell の承認を求めるプロンプトが表示されたら、[承認] をクリックします。 
- 
Cloud コンソールで、[Artifact Registry] > [リポジトリ] に移動し、新しく作成された Maven リポジトリ container-dev-java-repoを確認します。クリックすると、現時点では空であることがわかります。
 
[進行状況を確認] をクリックして、目標に沿って進んでいることを確認します。
      Java パッケージ リポジトリを作成する
  
Artifact Repository の認証を設定する
- 次のコマンドを使用して、アプリケーションのデフォルト認証情報(ADC)をユーザー アカウントの認証情報で更新します。これにより、Artifact Registry 認証情報ヘルパーが、リポジトリへの接続時にこの認証情報を使用できるようになります。
gcloud auth login --update-adc認証を求められた場合:
- [Y] を選択します。
- コードをブラウザ ウィンドウに貼り付けます。
- [Google ログイン] を選択し、ラボの認証情報を使用してログインします。
- ブラウザからコンソールに認証コードをコピーし、認証を完了します。
Artifact Registry 用に Maven を構成する
- 次のコマンドを実行して、Java プロジェクトに追加するリポジトリ構成をプリントします。
gcloud artifacts print-settings mvn \
    --repository=container-dev-java-repo \
    --location={{{ project_0.default_region | "REGION" }}}
- Cloud Shell エディタで pom.xmlを開き、返された設定をファイルの適切なセクションに追加します。
- 
distributionManagement セクションを追加します。
<distributionManagement>
    <snapshotRepository>
      <id>artifact-registry</id>
      <url>artifactregistry://{{{ project_0.default_region | "REGION" }}}-maven.pkg.dev/{{{ project_0.project_id | "PROJECT_ID" }}}/container-dev-java-repo</url>
    </snapshotRepository>
    <repository>
      <id>artifact-registry</id>
      <url>artifactregistry://{{{ project_0.default_region | "REGION" }}}-maven.pkg.dev/{{{ project_0.project_id | "PROJECT_ID" }}}/container-dev-java-repo</url>
    </repository>
  </distributionManagement>
- 
repositories セクションを追加します。
<repositories>
   <repository>
     <id>artifact-registry</id>
     <url>artifactregistry://{{{ project_0.default_region | "REGION" }}}-maven.pkg.dev/{{{ project_0.project_id | "PROJECT_ID" }}}/container-dev-java-repo</url>
     <releases>
       <enabled>true</enabled>
     </releases>
     <snapshots>
       <enabled>true</enabled>
     </snapshots>
   </repository>
 </repositories>
- 
build セクションの extensions を更新します。
<extensions>
     <extension>
       <groupId>com.google.cloud.artifactregistry</groupId>
       <artifactId>artifactregistry-maven-wagon</artifactId>
       <version>2.1.0</version>
     </extension>
   </extensions>参考として、完全なファイルの例を以下に示します。
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
 <modelVersion>4.0.0</modelVersion>
 <artifactId>hello-world</artifactId>
 <packaging>jar</packaging>
 <name>Cloud Code Hello World</name>
 <description>Getting started with Cloud Code</description>
 <version>1.0.0</version>
<distributionManagement>
   <snapshotRepository>
     <id>artifact-registry</id>
     <url>artifactregistry://{{{ project_0.default_region | "REGION" }}}-maven.pkg.dev/{{{ project_0.project_id | "PROJECT_ID" }}}/container-dev-java-repo</url>
   </snapshotRepository>
   <repository>
     <id>artifact-registry</id>
     <url>artifactregistry://{{{ project_0.default_region | "REGION" }}}-maven.pkg.dev/{{{ project_0.project_id | "PROJECT_ID" }}}/container-dev-java-repo</url>
   </repository>
 </distributionManagement>
 <repositories>
   <repository>
     <id>artifact-registry</id>
     <url>artifactregistry://{{{ project_0.default_region | "REGION" }}}-maven.pkg.dev/{{{ project_0.project_id | "PROJECT_ID" }}}/container-dev-java-repo</url>
     <releases>
       <enabled>true</enabled>
     </releases>
     <snapshots>
       <enabled>true</enabled>
     </snapshots>
   </repository>
 </repositories>
 <parent>
   <groupId>org.springframework.boot</groupId>
   <artifactId>spring-boot-starter-parent</artifactId>
   <version>2.6.3</version>
 </parent>
 <properties>
   <java.version>1.8</java.version>
   <checkstyle.config.location>./checkstyle.xml</checkstyle.config.location>
 </properties>
 <build>
   <plugins>
     <plugin>
       <groupId>com.google.cloud.tools</groupId>
       <artifactId>jib-maven-plugin</artifactId>
       <version>3.2.0</version>
     </plugin>
     <plugin>
       <groupId>org.springframework.boot</groupId>
       <artifactId>spring-boot-maven-plugin</artifactId>
     </plugin>
     <plugin>
       <groupId>org.apache.maven.plugins</groupId>
       <artifactId>maven-checkstyle-plugin</artifactId>
       <version>3.1.2</version>
     </plugin>
   </plugins>
   <extensions>
     <extension>
       <groupId>com.google.cloud.artifactregistry</groupId>
       <artifactId>artifactregistry-maven-wagon</artifactId>
       <version>2.1.0</version>
     </extension>
   </extensions>
 </build>
 <!-- The Spring Cloud GCP BOM will manage spring-cloud-gcp version numbers for you. -->
 <dependencyManagement>
   <dependencies>
     <dependency>
       <groupId>org.springframework.cloud</groupId>
       <artifactId>spring-cloud-gcp-dependencies</artifactId>
       <version>1.2.8.RELEASE</version>
       <type>pom</type>
       <scope>import</scope>
     </dependency>
   </dependencies>
 </dependencyManagement>
 <dependencies>
   <dependency>
     <groupId>org.springframework.boot</groupId>
     <artifactId>spring-boot-starter</artifactId>
   </dependency>
   <dependency>
     <groupId>org.springframework.boot</groupId>
     <artifactId>spring-boot-starter-jetty</artifactId>
   </dependency>
   <dependency>
     <groupId>org.springframework</groupId>
     <artifactId>spring-webmvc</artifactId>
   </dependency>
   <dependency>
     <groupId>org.springframework.boot</groupId>
     <artifactId>spring-boot-starter-thymeleaf</artifactId>
   </dependency>
   <dependency>
     <groupId>org.springframework.boot</groupId>
     <artifactId>spring-boot-starter-test</artifactId>
     <scope>test</scope>
   </dependency>
   <dependency>
     <groupId>org.springframework.cloud</groupId>
     <artifactId>spring-cloud-gcp-starter-logging</artifactId>
   </dependency>
 </dependencies>
</project>
Java パッケージを Artifact Registry にアップロードする
Maven で Artifact Registry を構成したので、Artifact Registry を使用して Java Jar を保存し、組織内の他のプロジェクトで使用できるようになりました。
- 次のコマンドを入力して、java-hello-worldフォルダに移動します。
cd ~/cloud-code-samples/java/java-hello-world
- 次のコマンドを実行して、Java パッケージを Artifact Registry にアップロードします。
mvn deployArtifact Registry で Java パッケージを確認する
Cloud コンソールで、[Artifact Registry] > [リポジトリ] に移動し、container-dev-java-repo をクリックして、hello-world バイナリ アーティファクトがあることを確認します。

お疲れさまでした
このラボでは、Artifact Registry で利用できる機能について学びました。まず、コンテナと言語パッケージ用にリポジトリを作成し、それから、Artifact Registry でコンテナ イメージを管理して Cloud Code と統合しました。最後に、Java の依存関係に Artifact Registry を使用するように Maven を構成しました。これで、Artifact Registry で利用できる機能について確認できました。
Google Cloud トレーニングと認定資格
Google Cloud トレーニングと認定資格を通して、Google Cloud 技術を最大限に活用できるようになります。必要な技術スキルとベスト プラクティスについて取り扱うクラスでは、学習を継続的に進めることができます。トレーニングは基礎レベルから上級レベルまであり、オンデマンド、ライブ、バーチャル参加など、多忙なスケジュールにも対応できるオプションが用意されています。認定資格を取得することで、Google Cloud テクノロジーに関するスキルと知識を証明できます。
マニュアルの最終更新日: 2024 年 5 月 9 日
ラボの最終テスト日: 2024 年 5 月 9 日
Copyright 2025 Google LLC. All rights reserved. Google および Google のロゴは Google LLC の商標です。その他すべての企業名および商品名はそれぞれ各社の商標または登録商標です。