1. 概要
Container Registry の進化形である Artifact Registry は、組織がコンテナ イメージと言語パッケージ(Maven や NPM など)を 1 か所で管理できる場所になりました。Google Cloud のツールやランタイムと完全に統合されており、npm や Maven などのツールで使用する言語ベースの依存関係管理をサポートしています。これにより、CI/CD ツールと簡単に統合して自動化パイプラインを設定できるようになりました。
このラボでは、Artifact Registry で利用できるいくつかの機能について説明します。
学習内容
このラボの学習目標は何ですか。
- コンテナと言語パッケージのリポジトリを作成する
- Artifact Registry を使用してコンテナ イメージを管理する
- Java の依存関係に Artifact Registry を使用するように Maven を構成する
2. 設定と要件
セルフペース型の環境設定
- Google Cloud Console にログインして、プロジェクトを新規作成するか、既存のプロジェクトを再利用します。Gmail アカウントも Google Workspace アカウントもまだお持ちでない場合は、アカウントを作成してください。
- プロジェクト名は、このプロジェクトの参加者に表示される名称です。Google API では使用されない文字列です。この値はいつでも更新できます。
- プロジェクト ID は、すべての Google Cloud プロジェクトにおいて一意でなければならず、不変です(設定後は変更できません)。Cloud コンソールでは一意の文字列が自動生成されます。通常、それが何であるかは関係ありません。ほとんどの Codelab では、プロジェクト ID を参照する必要があります(通常は
PROJECT_ID
として識別されます)。生成された ID が気に入らない場合は、別のランダムな ID を生成できます。または、ご自身でお試しになることもできます。このステップを終えた後は変更できず、プロジェクト期間中は維持されます。 - なお、3 つ目の値は、一部の API で使用される [プロジェクト番号] です。これら 3 つの値について詳しくは、こちらのドキュメントをご覧ください。
- 次に、Cloud のリソースや API を使用するために、Cloud コンソールで課金を有効にする必要があります。この Codelab の操作をすべて行って、費用が生じたとしても、少額です。このチュートリアルの終了後に課金が発生しないようにリソースをシャットダウンするには、作成したリソースを削除するか、プロジェクト全体を削除します。Google Cloud の新規ユーザーは、300 米ドル分の無料トライアル プログラムをご利用いただけます。
gcloud を設定する
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)')
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/
3. コンテナ イメージの操作
Artifact Registry に Docker リポジトリを作成する
Artifact Registry は、コンテナ イメージと言語パッケージの管理をサポートしています。アーティファクトのタイプが異なれば、必要な仕様も異なります。たとえば、Maven の依存関係のリクエストは Node の依存関係のリクエストとは異なります。
さまざまな API 仕様をサポートするには、Artifact Registry で API レスポンスの形式を認識する必要があります。これを行うには、リポジトリを作成し、目的のリポジトリのタイプを示す --repository-format
フラグを渡します。
Cloud Shell で次のコマンドを実行して、Docker イメージのリポジトリを作成します。
gcloud artifacts repositories create container-dev-repo --repository-format=docker \
--location=us-central1 --description="Docker repository for Container Dev Workshop"
Cloud Shell の承認プロンプトが表示されたら、[承認] をクリックします。
Google Cloud コンソールの Artifact Registry - [リポジトリ] に移動し、container-dev-repo
という名前の新しく作成された Docker リポジトリをクリックします。この時点では空になっています。
Artifact Registry に対して Docker 認証を構成する
Artifact Registry に接続する場合、アクセスするには認証情報が必要です。個別の認証情報を設定するのではなく、gcloud 認証情報をシームレスに使用するように Docker を構成できます。
Cloud Shell で次のコマンドを実行して、Google Cloud CLI を使用して us-central1
リージョンの Artifact Registry へのリクエストを認証するように Docker を構成します。
gcloud auth configure-docker us-central1-docker.pkg.dev
Cloud Shell の Docker 構成の変更を確認するメッセージが表示されたら、Enter キーを押します。
サンプル アプリケーションを確認する
サンプル アプリケーションは、前の手順でクローンを作成した Git リポジトリに用意されています。Java ディレクトリに移動して、アプリケーション コードを確認します。
cd cloud-code-samples/java/java-hello-world
このフォルダには、シンプルなウェブページをレンダリングするサンプル Java アプリケーションが含まれています。この特定のラボに関係のないさまざまなファイルに加えて、src
フォルダの下にあるソースコードと、コンテナ イメージをローカルでビルドするために使用する Dockerfile が含まれています。
コンテナ イメージをビルドする
Artifact Registry にコンテナ イメージを保存する前に、イメージを作成する必要があります。
次のコマンドを実行してコンテナ イメージをビルドし、適切なタグ付けを行い、次のステップでリポジトリに push します。
docker build -t us-central1-docker.pkg.dev/$PROJECT_ID/container-dev-repo/java-hello-world:tag1 .
コンテナ イメージを Artifact Registry に push する
次のコマンドを実行して、先ほど作成したリポジトリにコンテナ イメージを push します。
docker push us-central1-docker.pkg.dev/$PROJECT_ID/container-dev-repo/java-hello-world:tag1
Artifact Registry でイメージを確認する
Google Cloud コンソール - Artifact Registry - リポジトリに移動します。.
container-dev-repo
をクリックして、java-hello-world
イメージがあることを確認します。画像をクリックし、tag1
タグの付いた画像をメモします。脆弱性スキャンが実行中またはすでに完了していること、検出された脆弱性の数が表示されます。
脆弱性の数をクリックすると、イメージで検出された脆弱性のリストと CVE 公開情報の名前と重大度が表示されます。表示された各脆弱性の [表示] をクリックすると、詳細が表示されます。
4. 言語パッケージの使用
このセクションでは、Artifact Registry Java リポジトリを設定し、そこにパッケージをアップロードして、さまざまなアプリケーションで利用する方法を説明します。
Java パッケージ リポジトリを作成する
Cloud Shell で次のコマンドを実行して、Java アーティファクトのリポジトリを作成します。
gcloud artifacts repositories create container-dev-java-repo \
--repository-format=maven \
--location=us-central1 \
--description="Java package repository for Container Dev Workshop"
Cloud Shell の承認プロンプトが表示されたら、[承認] をクリックします。
Google Cloud コンソールの Artifact Registry - [リポジトリ] に移動し、container-dev-java-repo
という名前の新しく作成した Maven リポジトリを確認します。クリックすると、この時点で空であることがわかります。
アーティファクト リポジトリの認証を設定する
次のコマンドを使用して、アプリケーションのデフォルト認証情報(ADC)のよく知られた場所をユーザー アカウントの認証情報で更新します。これにより、Artifact Registry 認証情報ヘルパーがリポジトリに接続するときに、ADC を使用して認証できるようになります。
gcloud auth login --update-adc
Artifact Registry 用に Maven を構成する
java-hello-world
フォルダから次のコマンドを実行して、Cloud Shell エディタを開き、アプリケーション フォルダをワークスペースに追加します。
cloudshell workspace .
[サイトは現在動作していますか?] をクリックして、サードパーティ Cookie を有効にします。[Cookie を許可する]を選択します
ブラウザが再読み込みされたら、Cloud Shell を開き、上記のコマンドをもう一度実行してアプリケーション フォルダを読み込みます。
Cloud Shell エディタで pom.xml を開き、[エディタを開く] をクリックします。
Cloud Shell エディタからターミナルを開き、次のコマンドを実行して、Java プロジェクトに追加するリポジトリ構成を出力します。
gcloud artifacts print-settings mvn \
--repository=container-dev-java-repo \
--location=us-central1
返された設定を pom.xml
ファイルの適切なセクションに追加します。
ターミナルが組み込まれた Cloud Editor ビュー:
distributionManagement セクションを更新する
<distributionManagement>
<snapshotRepository>
<id>artifact-registry</id>
<url>artifactregistry://us-central1-maven.pkg.dev/<PROJECT>/container-dev-java-repo</url>
</snapshotRepository>
<repository>
<id>artifact-registry</id>
<url>artifactregistry://us-central1-maven.pkg.dev/<PROJECT>/container-dev-java-repo</url>
</repository>
</distributionManagement>
repositories セクションを更新します
<repositories>
<repository>
<id>artifact-registry</id>
<url>artifactregistry://us-central1-maven.pkg.dev/<PROJECT>/container-dev-java-repo</url>
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>true</enabled>
</snapshots>
</repository>
</repositories>
拡張機能を更新する
<extensions>
<extension>
<groupId>com.google.cloud.artifactregistry</groupId>
<artifactId>artifactregistry-maven-wagon</artifactId>
<version>2.1.0</version>
</extension>
</extensions>
ファイル全体の例を次に示します。<PROJECT> はをプロジェクト ID に置き換えます。
<?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://us-central1-maven.pkg.dev/<PROJECT>/container-dev-java-repo</url>
</snapshotRepository>
<repository>
<id>artifact-registry</id>
<url>artifactregistry://us-central1-maven.pkg.dev/<PROJECT>/container-dev-java-repo</url>
</repository>
</distributionManagement>
<repositories>
<repository>
<id>artifact-registry</id>
<url>artifactregistry://us-central1-maven.pkg.dev/<PROJECT>/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 パッケージを Artifact Registry にアップロードします。
mvn deploy
Artifact Registry で Java パッケージを確認する
Cloud コンソール - Artifact Registry - リポジトリに移動します。container-dev-java-repo
をクリックして、hello-world
バイナリ アーティファクトがあることを確認します。
5. 完了
お疲れさまでした。これでこの Codelab は終了です。
学習した内容
- コンテナと言語パッケージ用のリポジトリを作成
- Artifact Registry を使用したマネージド コンテナ イメージ
- Java の依存関係に Artifact Registry を使用するように Maven を構成する
クリーンアップ
次のコマンドを実行してプロジェクトを削除します。
gcloud projects delete $PROJECT_ID