このページでは、Cloud Build プライベート プールを使用して、プライベート Virtual Private Cloud ネットワークからリソースにアクセスする方法について説明します。
このチュートリアルでは、プライベート VPC ネットワークでホストされている Compute Engine に JFrog Artifactory を作成し、プライベート プールで実行されるビルドを構成して、その Artifactory からデータにアクセスします。Jfrog Artifactory はオープンソースのバイナリ リポジトリ マネージャーです。
目標
- Compute Engine で Jfrog Artifactory を設定する
- Artifactory にファイルをアップロードする
- プライベート プールの作成
- プライベート プールをホストするサービス プロデューサー ネットワークを Artifactory の Virtual Private Cloud ネットワークにピアリングする
- ビルド構成ファイルを作成し、Artifactory のデータにアクセスする
費用
このドキュメントでは、Google Cloud の次の課金対象のコンポーネントを使用します。
- Compute Engine
- Cloud Build
料金計算ツールを使うと、予想使用量に基づいて費用の見積もりを生成できます。
始める前に
- Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the Compute Engine, Cloud Build, Service Networking APIs.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the Compute Engine, Cloud Build, Service Networking APIs.
オプション A: Cloud Shell を使用する
このチュートリアルで使用する、Google Cloud CLI とともにプリインストールされる Cloud Shell を使用して、このチュートリアルを進めることができます。Cloud Shell を使用する場合は、これらのコマンドライン ツールをワークステーションにインストールする必要はありません。
Cloud Shell を使用するには:
Google Cloud コンソールに移動します。
Google Cloud コンソール ウィンドウの上部にある [Cloud Shell をアクティブにする] ボタンをクリックします。
Google Cloud コンソールの一番下にある新しいフレームの中で Cloud Shell セッションが開き、コマンドライン プロンプトが表示されます。
オプション B: ローカルのコマンドライン ツールを使用する
このチュートリアルをワークステーションで行う場合は、次の手順で必要なツールをインストールします。
非公開の Artifactory を作成する
コンテナから Compute Engine インスタンスを作成します。
gcloud compute instances create-with-container jfrog \ --container-image docker.bintray.io/jfrog/artifactory-jcr:latest \ --zone us-central1-a
インスタンスに SSH 接続する。コンテナの初期化には数分かかる場合があります。
gcloud compute ssh --zone us-central1-a jfrog
次のコマンドを実行して接続をテストします。コンテナの準備が整うと、
200
HTTP コードが返され、その後に HTML ページが表示されます。curl -i http://localhost:8081
Artifactory でリポジトリを作成するには、JFrog EULA(エンドユーザー使用許諾契約)に署名する必要があります。
curl -XPOST -vu admin:password http://localhost:8081/artifactory/ui/jcr/eula/accept
出力は次のようになります。
* Trying 127.0.0.1:8081... * Connected to localhost (127.0.0.1) port 8081 (#0) * Server auth using Basic with user 'admin' > POST /artifactory/ui/jcr/eula/accept HTTP/1.1 > Host: localhost:8081 > Authorization: Basic …. > User-Agent: curl/7.74.0 > Accept: */* > * Mark bundle as not supporting multiuse < HTTP/1.1 200 OK < X-JFrog-Version: Artifactory/7.19.9 71909900 < X-Artifactory-Id: …. < X-Artifactory-Node-Id: jfrog2 < SessionValid: false < Content-Length: 0 < Date: Fri, 25 Jun 2021 19:08:10 GMT * Connection #0 to host localhost left intact
Artifactory にファイルをアップロードする
Artifactory にアップロードする txt ファイルを作成します。
echo "Hello world" >> helloworld.txt
JFrog にはデフォルトのサンプル リポジトリが用意されています。デフォルトの認証情報を使用してリポジトリにアップロードします。
curl -u admin:password -X PUT \ "http://localhost:8081/artifactory/example-repo-local/helloworld.txt" \ -T helloworld.txt
次のような出力が返されます
{ "repo" : "example-repo-local", "path" : "/helloworld.txt", "created" : "2021-06-25T19:08:24.176Z", "createdBy" : "admin", "downloadUri" : "http://localhost:8081/artifactory/example-repo-local/helloworld.txt", "mimeType" : "text/plain", "size" : "12", "checksums" : { "sha1" : "...", "md5" : "...", "sha256" : "..." }, "originalChecksums" : { "sha256" : "..." }, "uri" : "http://localhost:8081/artifactory/example-repo-local/helloworld.txt" }
「
exit
」と入力して、SSH セッションを終了します。Artifactory には非公開の内部ソースからのみアクセスできるように、外部 IP アドレスを削除します。
gcloud compute instances delete-access-config --zone us-central1-a jfrog
Artifactory のデータへのアクセスを試す
プロジェクト ID とプロジェクト番号を格納する環境変数を設定します。
PROJECT_ID=$(gcloud config list --format='value(core.project)') PROJECT_NUMBER=$(gcloud projects describe $PROJECT_ID --format='value(projectNumber)')
JFrog インスタンスの内部 IP アドレスを表示できるように、ビルドに使用しているサービス アカウントに Compute Engine 閲覧者のロールを付与します。
gcloud projects add-iam-policy-binding $PROJECT_ID \ --member=serviceAccount:SERVICE_ACCOUNT \ --role=roles/compute.viewer
ここで、SERVICE_ACCOUNT はサービス アカウントのメールアドレスです。
次のコードを含む、Artifactory から読み取る
cloudbuild.yaml
という名前のファイルを作成します。これはビルド構成ファイルです。最初のステップで、作成した Artifactory から内部 IP アドレスを取得します。 次のステップでは、作成した
helloworld.txt
ファイルを読み取るためのリクエストを、そのアドレスに送信します。権限とネットワーク エラーをより簡単に分離できるように、ステップが分離されます。 最初のステップが失敗した場合、これは権限エラーが原因です。前のステップで説明したように、ビルドサービス アカウントが Compute Engine リソースにアクセスできることを確認する必要があります。2 番目のステップが失敗した場合は、ネットワーク エラーが原因です。このチュートリアルの残りの部分では、ネットワーク構成について説明します。ビルド構成ファイルを使用してビルドを開始します。
デフォルトでは、Cloud Build でビルドを実行すると、ビルドは公共のインターネットにアクセスできる安全なホスト環境で実行されます。各ビルドは独自のワーカー上で実行され、他のワークロードから分離されます。デフォルトのプールには、環境(特にプライベート ネットワーク アクセス)をカスタマイズできる範囲に制限があります。この例では、パブリック ワーカーからプライベート ネットワークにアクセスしようとしています。
次のコマンドで
cloudbuild.yaml
を実行します。これは失敗するはずです。gcloud builds submit --no-source
出力は、以下のようになります。
BUILD Starting Step #0 - "Get Private Artifactory Address" Step #0 - "Get Private Artifactory Address": Already have image (with digest): gcr.io/cloud-builders/gcloud Finished Step #0 - "Get Private Artifactory Address" Starting Step #1 - "Pull from Private Artifactory" Step #1 - "Pull from Private Artifactory": Already have image (with digest): gcr.io/cloud-builders/curl Step #1 - "Pull from Private Artifactory": % Total % Received % Xferd Average Speed Time Time Time Current Step #1 - "Pull from Private Artifactory": Dload Upload Total Spent Left Speed 0 0 0 0 0 0 0 0 --:--:-- 0:02:09 --:--:-- 0curl: (7) Failed to connect to 10.128.0.2 port 8081: Connection timed out Finished Step #1 - "Pull from Private Artifactory" ERROR ERROR: build step 1 "gcr.io/cloud-builders/curl" failed: step exited with non-zero status: 7
Cloud Build が内部 IP アドレスに到達できない接続タイムアウトを確認できます。このプライベート リソースにアクセスするには、Cloud Build プライベート プールを使用する必要があります。
Artifactory の VPC ネットワークとサービス プロデューサー ネットワークの間のプライベート接続を作成する
まず、VPC ネットワークで上り(内向き)が許可されていることを確認します。
jfrog
インスタンスを使用してネットワークへの受信内部トラフィックを許可するファイアウォール ルールを作成します。範囲10.0.0.0/16
はプライベート アドレス空間にあります。これは、次のステップで Cloud Build のプライベート プールに使用します。gcloud compute firewall-rules create allow-private-pools --direction=INGRESS \ --priority=1000 --network=default --action=ALLOW --rules=all --source-ranges=10.0.0.0/16
ワーカーが使用する Cloud Build のプライベート プール用に予約済みの範囲を作成します。予約済みの範囲は、Artifactory が配置されているネットワーク内に存在する必要があります。この場合、これは
default
コンピューティング ネットワークです。予約済みの範囲を設定する方法は 2 つあります。
--addresses
と--prefix-length
で範囲を明示的に指定することも、指定されたprefix-length
に基づいて使用可能な範囲を Google Cloud にプロビジョニングさせることもできます。以下の例では、作成したファイアウォール ルールに一致するようにアドレスを明示的に設定しています。プライベート プールではこのアドレス空間を使用し、受信トラフィックはブロックされません。
gcloud compute addresses create jfrog-ranges --global --purpose=VPC_PEERING \ --addresses=10.0.0.0 --prefix-length=16 --network=default
Service Networking API と VPC ネットワークをピアリングします。
Cloud Build のプライベート プールは、Service Networking API を使用してワーカーを実行します。これにより、内部 IP アドレスでマネージド サービスを提供できます。これは、Cloud Build のプライベート プール ワーカーを実行している Google 管理 VPC を、独自の VPC とピアリングすることで実現されます。(完了するまで数分ほどかかる場合があります)
gcloud services vpc-peerings connect --service=servicenetworking.googleapis.com \ --ranges=jfrog-ranges --network=default
プライベート プールを作成する
これで、
default
VPC ネットワークを Cloud VPC プライベート プールで使用できるようになりました。プライベート プールを作成し、VPC ネットワークとピアリングします。gcloud builds worker-pools create jfrog-pool --region us-central1 \ --peered-network=projects/${PROJECT_ID}/global/networks/default
新しいプライベート プールでビルドを実行するには、
gcloud
コマンドで--worker-pool
フラグを渡すか、プライベート プールを常に使用するようにcloudbuild.yaml
構成を更新します。このチュートリアルでは、次のオプションを追加してcloudbuild.yaml
を更新します。完全なファイルは次のようになります。
ビルドを開始する
gcloud builds submit --no-source
ビルドで VPC ネットワークとピアリングされた新しいプライベート プールを使用すると、Artifactory の内部 IP アドレスにアクセスできるようになります。出力が成功し、
Step #1
によって「Hello world」と出力されます。
クリーンアップ
このチュートリアルで使用したリソースについて、Google Cloud アカウントに課金されないようにするには、リソースを含むプロジェクトを削除するか、プロジェクトを維持して個々のリソースを削除します。
このチュートリアル用に新規プロジェクトを作成した場合は、そのプロジェクトを削除します。既存のプロジェクトを使用し、このチュートリアルで変更を加えずに残す場合は、チュートリアル用に作成したリソースを削除します。
プロジェクトを削除する
課金をなくす最も簡単な方法は、チュートリアル用に作成したプロジェクトを削除することです。
プロジェクトを削除するには:
- In the Google Cloud console, go to the Manage resources page.
- In the project list, select the project that you want to delete, and then click Delete.
- In the dialog, type the project ID, and then click Shut down to delete the project.
チュートリアル リソースを削除する
このチュートリアルでデプロイした Compute Engine サービスを削除します。
gcloud compute instances delete jfrog
ファイアウォール ルールを削除します。
gcloud compute firewall-rules delete allow-private-pools --network=default
予約済みの範囲を削除します。
gcloud compute addresses delete jfrog-ranges --global
Cloud Build プライベート プールを削除します。
gcloud builds worker-pools delete jfrog-pool
次のステップ
- プライベート プールでよく使用されるプライベート ネットワーク設定を構成する方法を学習する。
- プライベート プールで VPC Service Controls を使用する方法を確認する。