🐈

【GCE】インスタンスグループの自動スケーリング についての備忘録

2022/01/16に公開
2

はじめに

インスタンスのグループの自動スケーリング についてまとめます

https://www.udemy.com/course/google-cloud-platform-gcp/

https://cloud.google.com/compute/docs/autoscaler?hl=ja

全体構成像

スクリーンショット 2022-01-15 4.27.13.png

用語

マネージド インスタンス グループ(MIG)

  • 複数の同一VMでのアプリケーション操作が可能
  • 自動スケーリング、自動修復、リージョン(マルチゾーン)デプロイメント、自動更新などの自動化MIGサービスを活用することで、スケーラブルで可用性に優れたワークロード処理を実現できる

https://cloud.google.com/compute/docs/instance-groups?hl=ja

VM

仮想マシンのこと

スケールイン

スケールインしたVMの必要性が低下した際に増やしたVMを削除すること

スケールアウト

サーバー負荷に伴い、MIGVMが追加されること

やり方

GCEのイメージの作成

イメージ

イメージとは、VM の起動に必要なアプリケーションとオペレーティング システムを含むディスクのレプリカです

https://cloud.google.com/compute/docs/images?authuser=1&_ga=2.142160626.-1557321698.1619416499&_gac=1.49062612.1642149041.CjwKCAiA24SPBhB0EiwAjBgkhgaXRmDvxEnvLvpJQ6RZ-rdbhSEQ8ZsVBj0cmg2a0igw45ZV8sjWbBoCH1cQAvD_BwE

スクリーンショット 2022-01-15 5.20.49.png

gcloud compute images create イメージ名 --project=プロジェクト名 --source-disk=ソースディスク名 --source-disk-zone=asia-northeast1-b --storage-location=asia-northeast1

インスタンステンプレートの作成

インスタンス テンプレート

仮想マシン(VM)インスタンスとマネージド インスタンス グループ(MIG)を作成するために使用できるリソース

https://cloud.google.com/compute/docs/instance-templates?hl=ja

テンプレート名・マシン構成を設定

スクリーンショット 2022-01-15 5.24.21.png

作成したイメージをブートディスクに設定する

スクリーンショット 2022-01-15 5.28.37.png

アクセス スコープ > API ごとにアクセス権を設定

  • ストレージ > フル
  • ファイアウォールのHTTPトラフィック(HTTP通信)を許可する
    スクリーンショット 2022-01-15 5.29.32.png

インスタンスグループの作成

インスタンスグループ

単一のエンティティとして管理できる仮想マシン(VM)インスタンスの集まり

https://cloud.google.com/compute/docs/instance-groups/?_ga=2.142160626.-1557321698.1619416499&_gac=1.49062612.1642149041.CjwKCAiA24SPBhB0EiwAjBgkhgaXRmDvxEnvLvpJQ6RZ-rdbhSEQ8ZsVBj0cmg2a0igw45ZV8sjWbBoCH1cQAvD_BwE

前回作成したインスタンステンプレートを選択する

スクリーンショット 2022-01-15 5.38.34.png

自動スケーリングを設定する

スクリーンショット 2022-01-15 5.39.48.png

インスタンスの最小・最大数を設定する

スクリーンショット 2022-01-15 5.40.32.png

設定したインスタンス数に応じてインスタンスが自動で作成される

スクリーンショット 2022-01-15 5.43.26.png

CloudSQLに接続する

プライベートIPアドレスを設定する

スクリーンショット 2022-01-15 18.46.31.png

設定したプライベートIPアドレスを設定する

/var/www/html/index.php
<?php
try {
    $pdo = new PDO('mysql:host='プライベートIPアドレス名';dbname='DB';charset=utf8','ユーザ名','パスワード',
      [(PDO::ATTR_EMULATE_PREPARES => false)];
      echo "成功";
    } catch (PDOException $e) {
    echo "失敗";
}
?>

<?php
$stmt = $pdo->query("SELECT * FROM users");
while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
    echo "<p>";
    echo $row["name"];
    echo "</p>";
}
?>

イメージを作成

スクリーンショット 2022-01-16 2.46.49.png

インスタンステンプレートを作成

作成したイメージをブートディスクに設定

スクリーンショット 2022-01-16 2.58.32.png

起動スクリプトにGCSバケットをマウントする処理を追加する

#! /bin/bash
sudo gcsfuse -o allow_other マウント元のバケット名 マウント先

インスタンスグループを更新

作成したインスタンステンプレートを設定する
スクリーンショット 2022-01-16 3.02.13.png

インスタンスの再起動/置換を行う
スクリーンショット 2022-01-16 3.03.16.png

マウントしたGCSの画像を表示する

ls  -ltr /var/www/html/demo/
total 224
-rw-r--r-- 1 root root  25424 Jan 10 15:01 b551ca84-3de9-2e40-5ceb-c2d7f90bb8f6.png
-rw-r--r-- 1 root root 202962 Jan 10 15:01 Corporate_Sunrise.png

vi /var/www/html/index.php 
/var/www/index.php
<div>
 <img src="./demo/Corporate_Sunrise.png">
</div>

画像が表示できれば成功

スクリーンショット 2022-01-16 3.17.19.png

さいごに

読んでいただきありがとうございます。
いいねしていただけると記事執筆の励みになりますので、参考になったと思った方は是非よろしくお願いします!

GitHubで編集を提案

Discussion

K.HidakaK.Hidaka

有用な記事をありがとうございます。
勉強になります。

一点。
スケールイン、スケールアウトの用語ですが、
 スケールイン :台数を減らす
 スケールアウト:台数を増やす
で、用語の意味が逆で使用されているのではないかと思いました。
意図の取違などでしたらすみません。