Cloud Workstations を使用すると、ワークステーション用のカスタム イメージを作成して使用できます。カスタム イメージの使用後に、ベースイメージで利用可能な修正と更新を取得するために、カスタム イメージの再ビルドを自動化すると便利です。
このチュートリアルでは、カスタム ワークステーション イメージにセキュリティに関するアップデートとパッチを確実に適用するための、自動パイプラインを構築する方法を説明します。
目標
このチュートリアルでは、次の手順でベースイメージの自動化されたパイプラインを構築します。
- カスタム イメージを保存してスキャンするための Artifact Registry リポジトリを作成します。
- イメージ構成を保存するように Google Cloud で GitHub を構成します。
- Cloud Build トリガーを作成して、Artifact Registry へのカスタム イメージの作成とデプロイを自動化します。
- 定期的にビルドを開始するように Cloud Scheduler を構成します。
- 自動化されたプロセスの結果を確認します。
費用
このドキュメントでは、Google Cloud の次の課金対象のコンポーネントを使用します。
料金計算ツールを使うと、予想使用量に基づいて費用の見積もりを生成できます。
このドキュメントに記載されているタスクの完了後、作成したリソースを削除すると、それ以上の請求は発生しません。詳細については、クリーンアップをご覧ください。
始める前に
- 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 Artifact Registry, Container Scanning API, Cloud Build, and Cloud Scheduler APIs.
- Install the Google Cloud CLI.
-
To initialize the gcloud CLI, run the following command:
gcloud init
-
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 Artifact Registry, Container Scanning API, Cloud Build, and Cloud Scheduler APIs.
- Install the Google Cloud CLI.
-
To initialize the gcloud CLI, run the following command:
gcloud init
環境を準備する
続行する前に、次の環境変数を設定してください。
使用するクラウド プロジェクトのプロジェクト ID を設定します。
PROJECT_ID=$PROJECT_ID
リポジトリを保存する GitHub ユーザー名を設定します。
GITHUB_USER=$GITHUB_ID
プロセスで使用する
PROJECT_NUMBER
変数とREGION
変数を設定します。PROJECT_NUMBER=$(gcloud projects describe $PROJECT_ID \ --format='value(projectNumber)') REGION=$REGION
上記の例では、$REGION は使用するリージョン名に置き換えます(例:
us-central1
)。使用可能なリージョンの詳細については、Cloud Workstations のロケーションをご覧ください。
Artifact Registry リポジトリを作成する
このチュートリアルでは、Artifact Registry を使用してイメージを保存してスキャンします。
次のコマンドを使用してリポジトリを作成します。
gcloud artifacts repositories create custom-images \ --repository-format=docker \ --location=$REGION \ --description="Docker repository"
$REGION は、使用するリージョン名に置き換えます。
Artifact Registry にアクセスするときに
gcloud
CLI 認証情報を使用するように Docker を構成します。gcloud auth configure-docker $REGION-docker.pkg.dev
Artifact Analysis を無効にするには、次のコマンドを実行します。
gcloud services disable containerscanning.googleapis.com
GitHub リポジトリを構成する
実際には、カスタム イメージの Dockerfile を Git リポジトリに保存します。自動プロセスは、ビルドプロセス中にそのリポジトリにアクセスして、関連する構成と Dockerfile を pull します。
サンプル リポジトリをフォークする
コンテナ定義を指定するサンプル リポジトリをフォークする手順は次のとおりです。
- このリンクをクリックして、
software-delivery-workshop
リポジトリの新しいフォークを作成します。 - プロンプトが表示されたら、GitHub にログインします。
- オーナーとして GitHub ユーザー名を選択します。リポジトリ名は
software-delivery-workshop
として表示されます。 - [フォークを作成] をクリックし、プロセスが完了するまで数秒待ちます。
Cloud Build を GitHub に接続する
次に、組み込みの GitHub 接続機能を使用して、そのリポジトリを Cloud Build に接続します。GitHub リポジトリへのリンクをクリックして、プロセスを完了する手順に従います。ウィザードの最後のステップでトリガーを作成する必要はありません。後でコマンドラインから行うことができるため、最後のステップはスキップできます。
別の Git リポジトリ ソリューションを使用する場合は、手順に沿って Cloud Build を GitLab に接続する、または Bitbucket に接続することもできます。
Cloud Build トリガーを作成する
サンプル リポジトリには、コンテナ イメージのビルドに使用されるコンテナ定義と Cloud Build 構成が含まれています。このステップでは、labs/cloudbuild-scheduled-jobs/code-oss-java フォルダの cloudbuild.yaml
ファイルにある手順を実行する Cloud Build トリガーを作成します。
gcloud builds triggers create manual \
--name=custom-image-trigger \
--repo=$GITHUB_USER/software-delivery-workshop \
--repo-type=GITHUB \
--branch=main \
--build-config=labs/cloudbuild-scheduled-jobs/code-oss-java/cloudbuild.yaml \
--substitutions=_REGION=$REGION,_AR_REPO_NAME=custom-images,_AR_IMAGE_NAME=code-oss-java,_IMAGE_DIR=labs/cloudbuild-scheduled-jobs/code-oss-java
TRIGGER_ID=$(gcloud builds triggers list \
--filter=name="custom-image-trigger" --format="value(id)")
この例では、次のように構成します。
gcloud
CLI コマンドによって、2 行目のname
フラグで示されているように、custom-image-trigger
という名前の Cloud Build 内の手動トリガーが作成されます。- 次の 3 行には、ソース GitHub リポジトリに関連するフラグが含まれています。
- リポジトリのパス
- リポジトリのタイプ
- ビルドする Git ブランチ
build-config
フラグは、Git リポジトリ内の Cloud Build ファイルのパスを示します。ジョブを動的にする場合は、
substitutions
フラグを使用します。このジョブでは、コマンドは次の変数を渡します。- リージョン、
$_REGION
- Artifact Registry リポジトリ名、
$_AR_REPO_NAME
- コンテナ イメージ名、
$_AR_IMAGE_NAME
- ビルドする Dockerfile の場所、
$_IMAGE_DIR
cloudbuild.yaml ファイルを表示して、これらの変数がプロセスでどのように使用されているかを確認します。
- リージョン、
トリガーが作成されると、トリガーの一意の名前が取得され、後で使用するために
$TRIGGER_ID
環境変数に保存されます。
Cloud Scheduler を構成する
イメージが最新のアップデートとパッチで最新の状態になるようにするには、Cloud Scheduler を使用して、設定した頻度で Cloud Build トリガーを実行します。このチュートリアルでは、ジョブは毎日実行されます。実際には、組織のニーズに合わせて頻度を設定し、最新の更新が常に含まれるようにします。
Cloud Build トリガーを呼び出すために、デフォルトのサービス アカウントに必要なロールを付与します。
gcloud projects add-iam-policy-binding $PROJECT_ID \ --member="serviceAccount:$PROJECT_NUMBER-compute@developer.gserviceaccount.com" \ --role="roles/cloudbuild.builds.editor"
Artifact Registry にイメージをアップロードするために、Cloud Build サービス アカウントに必要なロールを付与します。
gcloud projects add-iam-policy-binding $PROJECT_ID \ --member=serviceAccount:$PROJECT_NUMBER@cloudbuild.gserviceaccount.com \ --role="roles/artifactregistry.admin"
次のコマンドを使用して Cloud Scheduler ジョブを作成します。
gcloud scheduler jobs create http run-build \ --schedule='0 1 * * *' \ --uri=https://cloudbuild.googleapis.com/v1/projects/$PROJECT_ID/locations/global/triggers/$TRIGGER_ID:run \ --location=us-central1 \ --oauth-service-account-email=$PROJECT_NUMBER-compute@developer.gserviceaccount.com \ --oauth-token-scope=https://www.googleapis.com/auth/cloud-platform
このジョブは毎日 1 回実行されるように設定されていますが、機能をすぐにテストするには、Cloud Scheduler からジョブを手動で実行します。
- Cloud Scheduler ページで、先ほど作成した「run-build」という名前のエントリを見つけます。
- [アクション] 列で、対象の行の more_vert [その他] オプション メニューをクリックします。
- [ジョブの強制実行] をクリックして、システムを手動でテストします。
コマンドが正常に実行されたら、Cloud Build の履歴ページに移動して進行状況を確認します。
結果を確認する
設定プロセスの一環として Container Scanning API を有効にしたため、Artifact Registry はセキュリティの脆弱性についてイメージを自動的にスキャンします。
脆弱性を確認する手順は次のとおりです。
Artifact Registry リポジトリ ページを開きます。
リポジトリ リストで、リポジトリをクリックします。
イメージ名をクリックします。各イメージ ダイジェストの脆弱性の総数が [脆弱性] 列に表示されます。
イメージで検出された脆弱性の一覧を表示するには、[脆弱性] 列のリンクをクリックします。脆弱性リストには、重大度、修正プログラムが入手可能かどうか、脆弱性が存在するパッケージの名前が表示されます。
クリーンアップ
このチュートリアルで使用したリソースについて、Google Cloud アカウントに課金されないようにするには、リソースを含むプロジェクトを削除するか、プロジェクトを維持して個々のリソースを削除します。
Google Cloud アカウントに対して、このページで使用したリソースについての課金が行われないようにするには、不要になったリソースを忘れずに削除してください。
Google Cloud コンソールまたは gcloud
CLI から Google Cloud プロジェクトを削除するには:
Console
- 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.
gcloud
Delete a Google Cloud project:
gcloud projects delete PROJECT_ID
次のステップ
- 使用可能な事前構成されたベースイメージのリストを確認する。
- コンテナ イメージをカスタマイズする。
- 使用可能なマシンタイプを確認する。
- セキュリティのベスト プラクティスを設定する。
- Google Cloud に関するリファレンス アーキテクチャ、図、ベスト プラクティスを確認する。Cloud アーキテクチャ センターをご覧ください。