arrow_back

未使用の IP アドレスのクリーンアップ

参加 ログイン
Test and share your knowledge with our community!
done
Get access to over 700 hands-on labs, skill badges, and courses

未使用の IP アドレスのクリーンアップ

Lab 1時間 universal_currency_alt クレジット: 5 show_chart 中級
Test and share your knowledge with our community!
done
Get access to over 700 hands-on labs, skill badges, and courses

GSP646

Google Cloud セルフペース ラボ

概要

このラボでは、Cloud FunctionsCloud 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 コンソールにログインする方法

  1. [ラボを開始] ボタンをクリックします。ラボの料金をお支払いいただく必要がある場合は、表示されるポップアップでお支払い方法を選択してください。 左側の [ラボの詳細] パネルには、以下が表示されます。

    • [Google コンソールを開く] ボタン
    • 残り時間
    • このラボで使用する必要がある一時的な認証情報
    • このラボを行うために必要なその他の情報(ある場合)
  2. [Google コンソールを開く] をクリックします。 ラボでリソースが起動し、別のタブで [ログイン] ページが表示されます。

    ヒント: タブをそれぞれ別のウィンドウで開き、並べて表示しておきましょう。

    注: [アカウントの選択] ダイアログが表示されたら、[別のアカウントを使用] をクリックします。
  3. 必要に応じて、[ラボの詳細] パネルから [ユーザー名] をコピーして [ログイン] ダイアログに貼り付けます。[次へ] をクリックします。

  4. [ラボの詳細] パネルから [パスワード] をコピーして [ようこそ] ダイアログに貼り付けます。[次へ] をクリックします。

    重要: 認証情報は左側のパネルに表示されたものを使用してください。Google Cloud Skills Boost の認証情報は使用しないでください。 注: このラボでご自身の Google Cloud アカウントを使用すると、追加料金が発生する場合があります。
  5. その後次のように進みます。

    • 利用規約に同意してください。
    • 一時的なアカウントなので、復元オプションや 2 要素認証プロセスは設定しないでください。
    • 無料トライアルには登録しないでください。

その後このタブで Cloud Console が開きます。

注: 左上にある [ナビゲーション メニュー] をクリックすると、Google Cloud のプロダクトやサービスのリストが含まれるメニューが表示されます。 ナビゲーション メニュー アイコン

Cloud Shell をアクティブにする

Cloud Shell は、開発ツールと一緒に読み込まれる仮想マシンです。5 GB の永続ホーム ディレクトリが用意されており、Google Cloud で稼働します。Cloud Shell を使用すると、コマンドラインで Google Cloud リソースにアクセスできます。

  1. Google Cloud コンソールの上部にある「Cloud Shell をアクティブにする」アイコン 「Cloud Shell をアクティブにする」アイコン をクリックします。

接続した時点で認証が完了しており、プロジェクトに各自の PROJECT_ID が設定されます。出力には、このセッションの PROJECT_ID を宣言する次の行が含まれています。

Your Cloud Platform project in this session is set to YOUR_PROJECT_ID

gcloud は Google Cloud のコマンドライン ツールです。このツールは、Cloud Shell にプリインストールされており、タブ補完がサポートされています。

  1. (省略可)次のコマンドを使用すると、有効なアカウント名を一覧表示できます。
gcloud auth list
  1. [承認] をクリックします。

  2. 出力は次のようになります。

出力:

ACTIVE: * ACCOUNT: student-01-xxxxxxxxxxxx@qwiklabs.net To set the active account, run: $ gcloud config set account `ACCOUNT`
  1. (省略可)次のコマンドを使用すると、プロジェクト ID を一覧表示できます。
gcloud config list project

出力:

[core] project = <project_ID>

出力例:

[core] project = qwiklabs-gcp-44776a13dea667a6 注: Google Cloud における gcloud ドキュメントの全文については、gcloud CLI の概要ガイドをご覧ください。

タスク 1. API の有効化とリポジトリのクローン作成

  1. Cloud Shell で、Cloud Scheduler API を有効にします。

    gcloud services enable cloudscheduler.googleapis.com : Cloud Scheduler API が有効になるまでには少し時間がかかります。

[進行状況を確認] をクリックして、目標に沿って進んでいることを確認します。

Cloud Scheduler API を有効にする
  1. リポジトリのクローンを作成します。

    git clone https://github.com/GoogleCloudPlatform/gcf-automated-resource-cleanup.git && cd gcf-automated-resource-cleanup/
  2. 環境変数を設定し、リポジトリ フォルダを $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 アドレスの作成

  1. Cloud Shell で unused-ip ディレクトリに移動します。

    cd $WORKDIR/unused-ip
  2. IP アドレスの名前を変数としてエクスポートします。

    export USED_IP=used-ip-address export UNUSED_IP=unused-ip-address
  3. 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}}}

    このラボでは リージョンを使用しますが、別のリージョンを選択することもできます。その場合、このラボの以降の操作で、指定したリージョンを一貫して参照してください。

  4. 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 アドレスを作成する
  1. 使用されている IP アドレスを環境変数として設定します。

    export USED_IP_ADDRESS=$(gcloud compute addresses describe $USED_IP --region={{{project_0.default_region | Region}}} --format=json | jq -r '.address')

タスク 3. VM の作成

  1. 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 アドレスを使うインスタンスを作成します。
  1. 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 関数のコードの確認

  • Cloud Shell でコードのメインの部分を出力します。

    cat $WORKDIR/unused-ip/function.js | grep "const compute" -A 31

出力は次のとおりです。

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 関数のデプロイ

  1. 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 関数をデプロイする
  1. トリガー 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 関数のスケジュール設定とテスト

  1. Cloud Scheduler を使用するために、Cloud Shell で App Engine アプリを作成します。

    gcloud app create --region {{{project_0.startup_script.app_region | REGION}}}
  2. 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 アプリケーションを作成する
  1. ジョブを手動でトリガーしてテストします。

    gcloud scheduler jobs run unused-ip-job \ --location={{{project_0.default_region | Region}}}

出力は表示されません。

[進行状況を確認] をクリックして、目標に沿って進んでいることを確認します。

Cloud Scheduler のジョブを実行する
  1. 未使用の 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 2024 Google LLC All rights reserved. Google および Google のロゴは Google LLC の商標です。その他すべての企業名および商品名はそれぞれ各社の商標または登録商標です。