GSP649

概要
このラボでは、Cloud Run functions と Cloud Scheduler を使用して、活用されていないクラウド リソースを特定してクリーンアップします。具体的には、Cloud Monitoring アラート ポリシーから Cloud Run functions の関数をトリガーすることで、ストレージ バケットをより安価なストレージ クラスに移行します。
Google Cloud では、ストレージ オブジェクトのライフサイクル ルールが適用されており、作成日やライブ状態などの複数の属性に基づいて、オブジェクトが別のストレージ クラスに自動的に移動されます。ただし、これらのルールではオブジェクトがアクセスされたかどうかは考慮されません。一定の期間、アクセスのない新しいオブジェクトは、Nearline Storage に移したほうが良いこともあります。
目標
このラボでは、次の方法について学びます。
- 2 つのストレージ バケットを作成し、ファイルを
serving-bucket
に追加して、トラフィックを生成する。
- バケット使用率を可視化する Cloud Monitoring ダッシュボードを作成する。
- アイドル状態のバケットをより安価なストレージ クラスに移行するために、Cloud Run functions の関数をデプロイして、Cloud アラート ポリシーから受信した通知をシミュレートするためのペイロードでトリガーする。
設定と要件
[ラボを開始] ボタンをクリックする前に
こちらの説明をお読みください。ラボには時間制限があり、一時停止することはできません。タイマーは、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 の概要ガイドをご覧ください。
アーキテクチャ
次の図では、Cloud Monitoring アラート ポリシーから Cloud Run functions の関数をトリガーし、ストレージ バケットをより安価なストレージ クラスに移行しています。

タスク 1. API の有効化とソースコードのダウンロード
-
Google Cloud コンソールの上部にある「Cloud Shell をアクティブにする」アイコン
をクリックします。
-
Cloud Shell で、Cloud Scheduler API を有効にします。
gcloud services enable cloudscheduler.googleapis.com
[進行状況を確認] をクリックして、目標に沿って進んでいることを確認します。
Cloud Scheduler API を有効にする
- ラボのソースコードをダウンロードします。
gcloud storage cp -r gs://spls/gsp649/* . && cd gcf-automated-resource-cleanup/
- 環境変数を設定し、リポジトリ フォルダを $WORKDIR にします。このラボに関連するすべてのコマンドを $WORKDIR で実行します。
export PROJECT_ID=$(gcloud config list --format 'value(core.project)' 2>/dev/null)
WORKDIR=$(pwd)
- オープンソースの負荷生成ツールである Apache Bench をインストールします。
sudo apt-get update
sudo apt-get install apache2-utils -y
タスク 2. Cloud Storage バケットの作成とファイルの追加
- Cloud Shell で、
migrate-storage
ディレクトリに移動します。
cd $WORKDIR/migrate-storage
- Cloud Storage バケット
serving-bucket
を作成します。このバケットは、後でストレージ クラスを変更するために使用します。
export PROJECT_ID=$(gcloud config list --format 'value(core.project)' 2>/dev/null)
gcloud storage buckets create gs://${PROJECT_ID}-serving-bucket -l {{{project_0.default_region|REGION}}}
[進行状況を確認] をクリックして、目標に沿って進んでいることを確認します。
Cloud Storage バケットを作成する
- バケットを公開します。
gsutil acl ch -u allUsers:R gs://${PROJECT_ID}-serving-bucket
- バケットにテキスト ファイルを追加します。
gcloud storage cp $WORKDIR/migrate-storage/testfile.txt gs://${PROJECT_ID}-serving-bucket
- ファイルを公開します。
gsutil acl ch -u allUsers:R gs://${PROJECT_ID}-serving-bucket/testfile.txt
- ファイルにアクセスできることを確認します。
curl http://storage.googleapis.com/${PROJECT_ID}-serving-bucket/testfile.txt
出力は次のようになります。
this is a test
[進行状況を確認] をクリックして、目標に沿って進んでいることを確認します。
Cloud Storage バケットを公開する
- データを提供しない、idle-bucket という名前の 2 番目のバケットを作成します。
gcloud storage buckets create gs://${PROJECT_ID}-idle-bucket -l {{{project_0.default_region|REGION}}}
export IDLE_BUCKET_NAME=$PROJECT_ID-idle-bucket
[進行状況を確認] をクリックして、目標に沿って進んでいることを確認します。
Cloud Storage バケットをもう 1 つ作成する
タスク 3. モニタリング ダッシュボードの作成
Monitoring の指標スコープを作成する
Google Cloud プロジェクトに関連付けられた Monitoring の指標スコープを設定します。次の手順に沿って、Monitoring を無料でお試しいただける新しいアカウントを作成します。
- Cloud コンソールで、ナビゲーション メニュー(
)> [すべてのプロダクトを表示] > [オブザーバビリティ] > [Monitoring] をクリックします。
Monitoring の [概要] ページが開いたら、指標スコープのプロジェクトの準備は完了です。
-
左側のパネルで、[ダッシュボード] > [カスタム ダッシュボードを作成します] をクリックします。
-
ダッシュボードに「Bucket Usage
」と名前を付けます。
-
[ウィジェットを追加] をクリックします。
-
[Line] をクリックします。
-
[ウィジェットのタイトル] に「Bucket Access
」と入力します。
-
[指標を選択] > [GCS Bucket] > [Api] > [Request count] を選択して、[適用] をクリックします。
注: [Request count] の指標が見つからない場合は、[アクティブ] チェックボックスをオフにします。
![[指標を選択] ダッシュボード](https://cdn.qwiklabs.com/D9fN4z1MoBwAgAk%2BJqqbFqt14BK1IWP83aH4067ekFE%3D)
-
[グループ条件] プルダウン リストで [bucket_name] を選択して [OK] をクリックし、バケット名で指標をグループ化します。
-
[フィルタを追加] をクリックします。
次のようにして、メソッド名でフィルタします。
- [指標ラベルでフィルタ] で、[method] を選択します。
- [method] の横にあるプルダウンで、[ReadObject] を選択します。
- [適用] をクリックします。
バケット内のオブジェクト アクセスを監視できるよう、Cloud Monitoring を構成しました。Cloud Storage バケットへのトラフィックがないため、グラフにはデータが表示されません。
タスク 4. 提供バケットでの負荷の生成
Monitoring が構成されたので、Apache Bench を使用してトラフィックを serving-bucket
に送信します。
- Cloud Shell で、提供バケット内のオブジェクトにリクエストを送信します。
ab -n 10000 http://storage.googleapis.com/$PROJECT_ID-serving-bucket/testfile.txt
- 左側のパネルで [ダッシュボード] をクリックし、先ほど作成したダッシュボードの名前(Bucket Usage)をクリックして Bucket Access グラフを表示します。
注: このタブをすでに閉じてしまった場合は、ナビゲーション メニュー > [すべてのプロダクトを表示] > [オブザーバビリティ] > [Monitoring] を選択してから、左側のパネルの [ダッシュボード] > [Bucket Usage] をクリックします。
注: [Bucket Usage] ダッシュボードにグラフが表示されるまで、少なくとも 1 分間待機する必要があります。
- トラフィックの詳細を表示します。
![[Bucket Usage] ダッシュボード](https://cdn.qwiklabs.com/nxR5TD%2FlukvPSXlfa3D4FJq7NA24BXHKFxdw%2Bd6AIiQ%3D)
コマンド プロンプトに戻るには、CTRL-C を入力する必要がある場合があります。
タスク 5. Cloud Run functions の関数の確認とデプロイ
- Cloud Shell で次のコマンドを入力して、ストレージ バケットを Nearline Storage クラスに移行するための Cloud Run functions のコードを表示します。
cat $WORKDIR/migrate-storage/main.py | grep "migrate_storage(" -A 15
次のように出力されます。
def migrate_storage(request):
request_json = request.get_json(force=True)
bucket_name = request_json['incident']['resource_name']
print(f"bucket_name: {bucket_name}") # Print the bucket name
if not bucket_name:
print("Error: bucket_name is empty")
return "Invalid bucket name", 400
storage_client = storage.Client(project)
bucket = storage_client.get_bucket(bucket_name)
bucket.storage_class = "NEARLINE"
bucket.patch()
return "Bucket migrated successfully", 200
この Cloud Run functions の関数はリクエストで渡されたバケット名を使用して、ストレージ クラスを Nearline に変更します。
- プロジェクト ID を使用するように Python スクリプトを更新します。
sed -i "s/<project-id>/$PROJECT_ID/" $WORKDIR/migrate-storage/main.py
- Cloud Run functions API を無効にします。
gcloud services disable cloudfunctions.googleapis.com
- Cloud Run functions API を再度有効にします。
gcloud services enable cloudfunctions.googleapis.com
- プロジェクト番号をエクスポートします。
export PROJECT_NUMBER=$(gcloud projects describe $PROJECT_ID --format="value(projectNumber)")
- デベロッパー サービス アカウントに
artifactregistry.reader
権限を追加します。
gcloud projects add-iam-policy-binding $PROJECT_ID \
--member="serviceAccount:$PROJECT_NUMBER-compute@developer.gserviceaccount.com" \
--role="roles/artifactregistry.reader"
- Cloud Run functions の関数をデプロイします。
gcloud functions deploy migrate_storage --gen2 --trigger-http --runtime=python39 --region {{{project_0.default_region | Region}}}
プロンプトが表示されたら「Y
」と入力し、プロジェクトの API [run.googleapis.com] を有効にしてから再試行します。未認証の呼び出しを許可する場合も同様の操作を行います。
注: 権限エラーが表示された場合は、数分待ってからデプロイを再試行してください。
- 次のセクションで使用する環境変数にトリガー URL を取得します。
export FUNCTION_URL=$(gcloud functions describe migrate_storage --format=json --region {{{project_0.default_region | Region}}} | jq -r '.url')
[進行状況を確認] をクリックして、目標に沿って進んでいることを確認します。
Cloud Run 関数をデプロイする
タスク 6. アラート自動化のテストと検証
- バケット名で JSON ファイルを更新します。
export IDLE_BUCKET_NAME=$PROJECT_ID-idle-bucket
sed -i "s/\\\$IDLE_BUCKET_NAME/$IDLE_BUCKET_NAME/" $WORKDIR/migrate-storage/incident.json
-
incident.json
ファイルを使用して、デプロイした Cloud Run functions の関数にテスト通知を送信します。
envsubst < $WORKDIR/migrate-storage/incident.json | curl -X POST -H "Content-Type: application/json" $FUNCTION_URL -d @-
次のように出力されます。
バケットを正常に移行しました
出力は改行で終了せずに、すぐにコマンド プロンプトが続きます。
- アイドル状態のバケットが Nearline Storage に移行されたことを確認します。
gsutil defstorageclass get gs://$PROJECT_ID-idle-bucket
次のように出力されます。
gs://<project-id>-idle-bucket: NEARLINE
[進行状況を確認] をクリックして、目標に沿って進んでいることを確認します。
バケットが Nearline Storage に移行されたことを確認する
お疲れさまでした
これで完了です。このラボでは、2 つの Cloud Storage バケットを作成し、そのうちの 1 つにオブジェクトを追加しました。また、バケット アクセスを追跡するように Cloud Monitoring を構成し、Cloud Run functions の関数を確認してデプロイし、オブジェクトを Nearline バケットに移行してから、Cloud Monitoring アラートを使用してテストしました。
Google Cloud トレーニングと認定資格
Google Cloud トレーニングと認定資格を通して、Google Cloud 技術を最大限に活用できるようになります。必要な技術スキルとベスト プラクティスについて取り扱うクラスでは、学習を継続的に進めることができます。トレーニングは基礎レベルから上級レベルまであり、オンデマンド、ライブ、バーチャル参加など、多忙なスケジュールにも対応できるオプションが用意されています。認定資格を取得することで、Google Cloud テクノロジーに関するスキルと知識を証明できます。
マニュアルの最終更新日: 2025 年 3 月 4 日
ラボの最終テスト日: 2025 年 3 月 4 日
Copyright 2025 Google LLC. All rights reserved. Google および Google のロゴは Google LLC の商標です。その他すべての企業名および商品名はそれぞれ各社の商標または登録商標です。