GSP646

概要
このラボでは、Cloud Functions と Cloud Scheduler を使用して、活用されていないクラウド リソースを特定してクリーンアップします。Google Cloud では、ロードバランサまたは仮想マシン(VM)インスタンスに接続されている静的 IP アドレスには課金されません。静的 IP アドレスが予約されている場合、それが使用されていなくても、1 時間単位で課金されます。静的 IP アドレスと大規模な動的プロビジョニングが不可欠なアプリでは、このコストが時間の経過とともに極めて大きくなる可能性があります。
演習内容
- 静的外部 IP アドレスを使用する Compute Engine VM と、それとは別の未使用の静的外部 IP アドレスを作成する
- Cloud Functions 関数をデプロイして未使用のアドレスを特定する
- HTTP トリガーで起動する関数のスケジュールを設定するために、Cloud Scheduler ジョブを作成する
アーキテクチャ
次の図は、このラボの最初のセクションで使用するアーキテクチャを示しています。このラボでは、Cloud Functions 関数のスケジュールを設定し、未使用の IP アドレスを特定してクリーンアップします。

設定と要件
このセクションでは、ラボの実施に必要なインフラストラクチャと ID を構成します。
[ラボを開始] ボタンをクリックする前に
こちらの説明をお読みください。ラボには時間制限があり、一時停止することはできません。タイマーは、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. API の有効化とリポジトリのクローン作成
-
Cloud Shell で、Cloud Scheduler API を有効にします。
gcloud services enable cloudscheduler.googleapis.com
注: Cloud Scheduler API が有効になるまでには少し時間がかかります。
[進行状況を確認] をクリックして、目標に沿って進んでいることを確認します。
Cloud Scheduler API を有効にする
-
リポジトリのクローンを作成します。
git clone https://github.com/GoogleCloudPlatform/gcf-automated-resource-cleanup.git && cd gcf-automated-resource-cleanup/
-
環境変数を設定し、リポジトリ フォルダを $WORKDIR にします。このラボに関連するすべてのコマンドを $WORKDIR で実行します。
export PROJECT_ID=$(gcloud config list --format 'value(core.project)' 2>/dev/null)
export region={{{project_0.default_region | Region}}}
WORKDIR=$(pwd)
タスク 2. IP アドレスの作成
-
Cloud Shell で unused-ip ディレクトリに移動します。
cd $WORKDIR/unused-ip
-
IP アドレスの名前を変数としてエクスポートします。
export USED_IP=used-ip-address
export UNUSED_IP=unused-ip-address
-
2 つの静的 IP アドレスを作成します。
gcloud compute addresses create $USED_IP --project=$PROJECT_ID --region={{{project_0.default_region | Region}}}
gcloud compute addresses create $UNUSED_IP --project=$PROJECT_ID --region={{{project_0.default_region | Region}}}
このラボでは リージョンを使用しますが、別のリージョンを選択することもできます。その場合、このラボの以降の操作で、指定したリージョンを一貫して参照してください。
-
2 つのアドレスが作成されたことを確認します。
gcloud compute addresses list --filter="region:({{{project_0.default_region | Region}}})"
出力にある RESERVED ステータスは、この IP アドレスが使用されていないことを示しています。
NAME ADDRESS/RANGE TYPE PURPOSE NETWORK REGION SUBNET STATUS
unused-ip-address 35.232.144.85 EXTERNAL {{{project_0.default_region | Region}}} RESERVED
used-ip-address 104.197.56.87 EXTERNAL {{{project_0.default_region | Region}}} RESERVED
[進行状況を確認] をクリックして、目標に沿って進んでいることを確認します。
2 つの静的 IP アドレスを作成する
-
使用されている IP アドレスを環境変数として設定します。
export USED_IP_ADDRESS=$(gcloud compute addresses describe $USED_IP --region={{{project_0.default_region | Region}}} --format=json | jq -r '.address')
タスク 3. VM の作成
-
Cloud Shell でインスタンスを作成します。
gcloud compute instances create static-ip-instance \
--zone={{{project_0.default_zone | Zone}}} \
--machine-type=e2-medium \
--subnet=default \
--address=$USED_IP_ADDRESS
[進行状況を確認] をクリックして、目標に沿って進んでいることを確認します。
作成した静的 IP アドレスを使うインスタンスを作成します。
-
IP アドレスの 1 つが現在使用中であることを確認します。
gcloud compute addresses list --filter="region:({{{project_0.default_region | Region}}})"
出力は次のようになります。
NAME ADDRESS/RANGE TYPE PURPOSE NETWORK REGION SUBNET STATUS
unused-ip-address 35.232.144.85 EXTERNAL {{{project_0.default_region | Region}}} RESERVED
used-ip-address 104.197.56.87 EXTERNAL {{{project_0.default_region | Region}}} IN_USE
タスク 4. Cloud Functions 関数のコードの確認
出力は次のとおりです。
const compute = new Compute();
compute.getAddresses(function(err, addresses){ // gets all addresses across regions
if(err){
console.log("there was an error: " + err);
}
if (addresses == null) {
console.log("no addresses found");
return;
}
console.log("there are " + addresses.length + " addresses");
// iterate through addresses
for (let item of addresses){
// get metadata for each address
item.getMetadata(function(err, metadata, apiResponse) {
// if the address is not used:
if (metadata.status=='RESERVED'){
// compute age by convering ISO 8601 timestamps to Date
var creationDate = new Date(metadata.creationTimestamp);
var currDate = new Date();
var addressAge = Math.floor((currDate - creationDate)/86400e3);;
// delete address
item.delete(function(err, operation, apiResponse2){
if (err) {
console.log("could not delete address: " + err);
}
})
}
上のコードサンプルでは、次の点が重要になります。
-
compute.getAddresses(function(err, addresses)
では、getAddresses メソッドを使用して、プロジェクト内のすべてのリージョンの IP アドレスを取得します。
-
item.getMetadata(function(err, metadata, apiResponse)
では、各 IP アドレスのメタデータを取得して、その STATUS フィールドを確認します。
-
if ((metadata.status=='RESERVED') & (calculateAge(metadata.creationTimestamp) >= ageToDelete)){
では、IP アドレスが使用中かどうかを確認し、ヘルパー関数を使用して期間を計算し、その期間を定数(ラボでは 0 に設定)と比較します。
-
item.delete(function(err, operation, apiResponse2){
では、IP アドレスを削除します。
タスク 5. Cloud Functions 関数のデプロイ
-
Cloud Shell で Cloud Functions 関数をデプロイします。
gcloud functions deploy unused_ip_function --trigger-http --runtime=nodejs12 --region={{{project_0.default_region | Region}}}
- プロンプトが表示されたら、「Y」と入力して未承認の呼び出しを許可します。
注: Cloud Functions 関数のデプロイには 2~5 分ほどかかります。所要時間はリージョンによって異なります。
[進行状況を確認] をクリックして、目標に沿って進んでいることを確認します。
Cloud Functions 関数をデプロイする
-
トリガー URL を環境変数として設定します。
export FUNCTION_URL=$(gcloud functions describe unused_ip_function --region={{{project_0.default_region | Region}}} --format=json | jq -r '.httpsTrigger.url')
タスク 6. Cloud Functions 関数のスケジュール設定とテスト
-
Cloud Scheduler を使用するために、Cloud Shell で App Engine アプリを作成します。
gcloud app create --region {{{project_0.startup_script.app_region | REGION}}}
-
Cloud Shell で、毎日午前 2 時に Cloud Functions 関数を実行する Cloud Scheduler タスクを作成します。
gcloud scheduler jobs create http unused-ip-job \
--schedule="* 2 * * *" \
--uri=$FUNCTION_URL \
--location={{{project_0.default_region | Region}}}
[進行状況を確認] をクリックして、目標に沿って進んでいることを確認します。
App Engine アプリケーションを作成する
-
ジョブを手動でトリガーしてテストします。
gcloud scheduler jobs run unused-ip-job \
--location={{{project_0.default_region | Region}}}
出力は表示されません。
[進行状況を確認] をクリックして、目標に沿って進んでいることを確認します。
Cloud Scheduler のジョブを実行する
-
未使用の IP アドレスが削除されたことを確認します。
gcloud compute addresses list --filter="region:({{{project_0.default_region | Region}}})"
出力は次のようになります。
NAME ADDRESS/RANGE TYPE PURPOSE NETWORK REGION SUBNET STATUS
used-ip-address 104.197.56.87 EXTERNAL {{{project_0.default_region | Region}}} IN_USE
[進行状況を確認] をクリックして、目標に沿って進んでいることを確認します。
未使用の IP アドレスが削除されたことを確認する
お疲れさまでした
このラボでは、次のタスクを実行しました。
- 静的外部 IP アドレスを使用する Compute Engine VM と、それとは別の未使用の静的外部 IP アドレスを作成しました。
- 未使用のアドレスを特定するために、Cloud Functions 関数をデプロイしました。
- HTTP トリガーで起動する関数のスケジュールを設定するために、Cloud Scheduler ジョブを作成しました。
Google Cloud トレーニングと認定資格
Google Cloud トレーニングと認定資格を通して、Google Cloud 技術を最大限に活用できるようになります。必要な技術スキルとベスト プラクティスについて取り扱うクラスでは、学習を継続的に進めることができます。トレーニングは基礎レベルから上級レベルまであり、オンデマンド、ライブ、バーチャル参加など、多忙なスケジュールにも対応できるオプションが用意されています。認定資格を取得することで、Google Cloud テクノロジーに関するスキルと知識を証明できます。
マニュアルの最終更新日: 2023 年 11 月 23 日
ラボの最終テスト日: 2023 年 11 月 23 日
Copyright 2025 Google LLC. All rights reserved. Google および Google のロゴは Google LLC の商標です。その他すべての企業名および商品名はそれぞれ各社の商標または登録商標です。