オートスケーリングスクリプトの処理内容について説明します。
オートスケーリングスクリプトのサンプルスクリプト
AWS用のオートスケーリングスクリプトのサンプルスクリプトは以下に格納されています。
マニュアルパッケージの「Sample」-「autoscale」-「AWS」フォルダー配下
サンプルスクリプト名 | 用途 |
---|---|
UserScript.ps1 | スケールアウト・スケールイン用のスクリプト(PowerShell) |
userdata.sh | スケールアウト・スケールイン用のスクリプト(Bash) |
オートスケーリングスクリプトの利用イメージ
オートスケーリングスクリプトの利用イメージを以下に示します。
スケールアウト時
オートスケーリングスクリプトは、起動テンプレートに設定されたユーザーデータによって、Amazon S3からAmazon EC2(以下、仮想サーバー(VM))に転送され、VMのスケールアウト時に1度だけ実行されます。(図中1~3)
オートスケーリングスクリプトは、VMのスケールアウト時に、Jakarta EEアプリケーションの運用開始に必要な以下の手順を行います。
IP・ホスト一括変更ツール(ismodifyhostinfo)の実行
Webサーバー、Webサーバコネクタ、GlassFishの各定義ファイル内のIPアドレスやホスト名を変換します。
PCMIサービスの起動
DASの起動
GlassFish Serverクラスターの起動
Webサーバーの起動
1~5の実行が正常に完了し、スケールアウトが完了すると、増加したVMが負荷分散装置の振り分け先に登録されます。(図中4)
オートスケーリングスクリプト実行時に引数、オプションの指定はありません。
オートスケーリングスクリプトのメッセージは、isautoscale.logに出力します。
isautoscale.logは、「8.2.3 ログ情報」を参照してください。
出力するメッセージは、「8.5.1 オートスケーリングスクリプトのメッセージ」を参照してください。
IP・ホスト一括変更ツール(ismodifyhostinfo)のメッセージはismodifyhostinfo.logに出力します。
ismodifyhostinfo.logは、「8.2.3 ログ情報」を参照してください。
出力するメッセージは、「8.5.2 IP・ホスト一括変更ツールのメッセージ」を参照してください。
スケールイン時
スケールインが開始されると、VMが負荷分散装置の振り分け先から解除され、ライフサイクルアクション完了通知が出るまでVMは待機状態(ターゲットライフサイクル状態が「Terminated」)になります。(図中1)
オートスケーリングスクリプトは、VMの待機状態を検出し、Jakarta EEアプリケーションの運用停止に必要な以下の手順を行います。(図中2)
Webサーバーの停止
GlassFish Serverクラスターの停止
DASの停止
PCMIサービスの停止
一括情報採取ツール(iscollectinfo)の実行、ログの収集
iscollectinfoで収集したログ、オートスケーリングスクリプトが出力するログ、IP・ホスト一括変更ツール(ismodifyhostinfo)が出力したログを収集し、圧縮ファイルにします。
5.で圧縮ファイルをVM外のAmazon S3に退避
1~6の実行が正常に完了し、スケールインが完了すると、VMが削除されます。
オートスケーリングスクリプトのメッセージは、isautoscale.logに出力します。
isautoscale.logは、「8.2.3 ログ情報」を参照してください。
出力するメッセージは、「8.5.1 オートスケーリングスクリプトのメッセージ」を参照してください。
オートスケーリングスクリプトの処理内容
オートスケーリングスクリプトの処理内容について説明します。
[全体処理フローと関数一覧]
オートスケーリングスクリプトの全体処理フローを以下に示します。
オートスケーリングスクリプトの処理が開始すると、IP・ホスト一括変更ツール(ismodifyhostinfo)用入力ファイル作成開始時(変数確認が正常終了した後)に「as0001」メッセージを出力し、正常に終了した場合、「as0002」メッセージを出力します。異常が発生した場合、終了前に「as0003」メッセージを出力します。
注意
オートスケーリングスクリプトの異常の有無に関係なく、オートスケーリングスクリプト内のスケールアウト/スケールインに関する処理が終了するとAWSのスケールアウト/スケールインは完了します。
ライフサイクルフックの「ハートビートタイムアウト」を超えた場合は、VMが削除されます。以下の場合には一括情報採取ツール(iscollectinfo)による採取時間がかかるため、採取完了を待たずにVMが削除される可能性があります。その場合は、処理性能の高いVMに変更するなどの対応を行ってください。
採取対象のアプリケーションの資材やログ(GlassFish Serverクラスターのserver.logなど)のサイズが大きい場合
採取するファイル数が多くなる(運用するGlassFish Serverインスタンスが多いなど)場合
オートスケーリングスクリプトで使用する関数の一覧と、全体処理フローとの対応を以下に示します。
PowerShell | Bash | 説明 | 全体処理フローとの対応 |
---|---|---|---|
Output-Log | output_log | オートスケーリングスクリプトのログ(isautoscale.log)を出力します。 | - |
New-Hostinfo | new_hostinfo | IP・ホスト一括変更ツール(ismodifyhostinfo)の入力ファイルを作成します。 変更前のIPアドレス、ホスト名は、ORG_IP、ORG_HOSTを使用します。変更後のIPアドレス、ホスト名はスケールアウトで作成されたVMのIPアドレス、ホスト名を使用します。 | 「1. IP・ホスト一括変更ツールの実行」のうち、「IP・ホスト一括変更ツール用入力ファイル作成」 |
Invoke-Ismodifyhostinfo | invoke-ismodifyhostinfo | 「as0004」メッセージを出力後、ismodifyhostinfoコマンドを実行します。ismodifyhostinfoコマンドが正常に終了した場合、「as0005」メッセージを出力します。異常が発生した場合、「as0006」メッセージを出力します。ismodifyhostinfoコマンド異常時はismodifyhostinfo.logに異常内容を出力します。 | 「1. IP・ホスト一括変更ツールの実行」のうち、「IP・ホスト一括変更ツール(ismodifyhostinfo)実行」 |
Start-Interstage | start_interstage | 「as0007」メッセージ出力後、以下の関数を実行します。 Start-PCMI、Start-DAS、Start-Instance、Start-Webserverを順番に実行します。 start_PCMI、start_DAS、start_instance、start_webserverを順番に実行します。 正常に終了した場合、「as0008」メッセージを出力します。異常が発生した場合、関数を異常終了します。 | - |
Start-PCMI | start_PCMI | PCMIサービスの起動、起動確認を行います。 異常が発生した場合、「as0009」メッセージを出力し、関数を異常終了します。 | 2. PCMIサービスの起動 |
Start-DAS | start_DAS | DASの起動、起動確認を行います。 異常が発生した場合、「as0009」メッセージを出力し、関数を異常終了します。 | 3. DASの起動 |
Start-Instance | start_instance | GlassFish Serverクラスターの起動、起動確認を行います。 異常が発生した場合、「as0009」メッセージを出力し、関数を異常終了します。 | 4. GlassFish Serverクラスターの起動 |
Start-Webserver | start_webserver | Webサーバーの起動、起動確認を行います。 異常が発生した場合、「as0009」メッセージを出力し、関数を異常終了します。 | 5. Webサーバーの起動 |
Stop-Interstage | stop_interstage | 「as0013」メッセージ出力後、以下の関数を実行します。 Stop-Webserver、Stop-Instance、Stop-DAS、Stop-PCMIを順番に実行します。 stop_webserver、stop_instance、stop_DAS、stop_PCMIを順番に実行します。 正常に終了した場合、「as0014」メッセージを出力します。異常が発生した場合、関数を異常終了します。 | - |
Stop-Webserver | stop_webserver | Webサーバーの停止を行います。 Windowsサービスの最大待ち時間(デフォルト30秒)を超過した場合は強制停止になります。 GRACEFUL_SHUTDOWN_TIMEOUTで指定した時間(秒)待機後、後続の処理を継続します。 異常が発生した場合、「as0015」メッセージを出力し、関数を異常終了します。 | 6. Webサーバーの停止 |
Stop-Instance | stop_instance | GlassFish Serverクラスターの停止、停止確認を行います。 異常が発生した場合、「as0015」メッセージを出力し、関数を異常終了します。 | 7. GlassFish Serverクラスターの停止 |
Stop-DAS | stop_DAS | DASの停止、停止確認を行います。 異常が発生した場合、「as0015」メッセージを出力し、関数を異常終了します。 | 8. DASの停止 |
Stop-PCMI | stop_PCMI | PCMIサービスの停止、停止確認を行います。 異常が発生した場合、「as0015」メッセージを出力し、関数を異常終了します。 | 9. PCMIサービスの停止 |
Invoke-Iscollectinfo | invoke_iscollectinfo | 「as0016」メッセージ出力後、一括情報採取ツール(iscollectinfo)を実行します。 正常に終了した場合、「as0017」メッセージを出力します。 異常が発生した場合、「as0018」メッセージを出力し、関数を異常終了します。 | 「10. 一括情報採取ツールの実行、ログの収集」のうち、「iscollectinfo実行」 |
New-Archive | new_archive | 本スクリプトのログ(isautoscale.log)、IP・ホスト一括変更ツール(ismodifyhostinfo)のログ(ismodifyhostinfo.log)、iscollectinfoで採取した調査資料を一時ディレクトリーにコピーし、一時ディレクトリー配下を圧縮します。 圧縮形式は、Windowsの場合はzip、Linuxの場合はtgzです。 異常が発生した場合、「as0025」メッセージを出力し、関数を異常終了します。 | 「10. 一括情報採取ツールの実行、ログの収集」のうち、「退避ファイル圧縮」 |
Save-Logs | save_logs | 「as0020」メッセージを出力後、退避ファイル圧縮で圧縮されたファイルをAmazon S3へコピーします。コピーには、AWS CLIを使用します。 正常に終了した場合、「as0021」メッセージを出力します。 異常が発生した場合、「as0022」メッセージを出力し、関数を異常終了します。 | 11. オブジェクトストレージに退避 |
Complete-Lifecycleaction | complete_lifecycleaction | VM起動時やVM終了時のライフサイクルアクション完了通知を出します。 異常が発生した場合、関数を異常終了します。 | 起動時ライフサイクルアクション完了処理 終了時ライフサイクルアクション完了処理 |
Test-Variable | test_variable | 定義した変数確認を行います。 AWS CLIが存在しない場合、「as0023」メッセージを出力し、オートスケーリングスクリプトを異常終了します。 その他、変数確認で異常が発生した場合、「as0003」メッセージを出力し、関数を異常終了します。 | 変数確認 |
New-Temporarydirectory | new_temporarydirectory | Invoke-Iscollectinfo実行前に、ログ収集のための一時ディレクトリーの作成を行います。一時ディレクトリー名は、以下の形式です。
invoke_iscollectinfo実行前に、ログ収集のための一時ディレクトリーの作成を行います。一時ディレクトリー名は、以下の形式です。
異常が発生した場合、関数を異常終了します。 | 「10. 一括情報採取ツールの実行、ログの収集」のうち、「ログ収集のための一時ディレクトリー作成」 |
Save-Resources | save_resources | 以下の関数を実行します。 New-Temporarydirectory、Invoke-Iscollectinfo、New-Archive、Save-Logsを順番に実行します。 new_temporarydirectory、invoke_iscollectinfo、new_archive、save_logsを順番に実行します。 異常が発生した場合、「as0012」メッセージを出力し、関数を異常終了します。 | - |
ポイント
Auto Scaling グループがロードバランサーのターゲットグループに設定されており、終了時ライフサイクルアクション完了処理後も「ハートビートタイムアウト」経過までVMが削除されない場合は、以下のように終了時ライフサイクルアクション完了処理の変更を検討してください。
AWS コマンドラインインターフェイス(AWS CLI)のcomplete-lifecycle-action コマンド実行前に、AWS コマンドラインインターフェイス(AWS CLI)のdescribe-target-health コマンドを使用して、ターゲットグループからVMが登録解除されたことを確認する。
1の確認後、complete-lifecycle-action コマンドを実行する。complete-lifecycle-action コマンドの実行が成功するまでリトライする。
IP・ホスト一括変更ツール(ismodifyhostinfo)で使用する変更後のIPアドレス、ホスト名は、スケールアウトで作成されたVMのプライベートIPアドレス、ホスト名を設定します。オートスケーリングスクリプトでは、プライベートIPアドレス、ホスト名を以下の方法で取得しています。
IPアドレス(プライベートIPv4の場合)
インスタンスメタデータサービス(IMDS)の以下のURLに接続します。
http://169.254.169.254/latest/meta-data/local-ipv4
注) 169.254.169.254はインスタンスメタデータサービス(IMDS)と通信するための仮想パブリックIPアドレスです。インスタンスメタデータサービス(IMDS)の詳細は、AWSの公式ドキュメントを参照してください。
ホスト名(プライベートIP DNSの場合)
$env:computername
hostname
オートスケーリングスクリプトでは以下の方法でVMのターゲットライフサイクル状態を取得しています。
VMのターゲットライフサイクル状態
インスタンスメタデータサービス(IMDS)の以下のURLに接続します。
http://169.254.169.254/latest/meta-data/autoscaling/target-lifecycle-state
[変数定義]
オートスケーリングスクリプトでは、以下の変数を指定してください。
変数名 | 記入例 | 説明 |
---|---|---|
APPSRV_SHARED_DIR | "C:\Interstage\glassfish5\var" "/var/opt/FJSViaps/glassfish5" | 運用資産格納ディレクトリーを設定します。 設定値はスケールアウトで使用するVMイメージ作成時に事前に確認してください。 |
LOG_DIR | "C:\Logs" "/root" | 本スクリプトのログ(isautoscale.log)の出力先を設定します。出力先は存在するディレクトリーを指定してください。ASCIIコード範囲内で指定可能です。 isautoscale.logの詳細は、「8.2.3 ログ情報」を参照してください。 |
ISMODIFYHOSTINFO_LOG | "$LOG_DIR\ismodifyhostinfo.log" "${LOG_DIR}/ismodifyhostinfo.log" | IP・ホスト一括変更ツール(ismodifyhostinfo)のログの出力先とファイル名を設定します。ASCIIコード範囲内で指定可能です。 |
ORG_IP | "192.0.2.1" | スケールアウトで使用するVMイメージが持っているIPアドレスを設定します。設定値はIP・ホスト一括変更ツール(ismodifyhostinfo)の変更前の値に使用します。 スケールアウトで使用するVMイメージ作成時に事前に確認してください。 |
ORG_HOST | "host1" | スケールアウトで使用するVMイメージが持っているホスト名を設定します。設定値はIP・ホスト一括変更ツール(ismodifyhostinfo)の変更前の値に使用します。設定値はスケールアウトで使用するVMイメージ作成時に事前に確認してください。 |
WEB_SERVER_DIRS | ("/opt/FJSVahs") | Webサーバ資源の格納ディレクトリを配列で設定します。 複数Webサーバの運用の場合、配列は以下のように半角空白区切りで、単数行で宣言してください。 ("/opt/FJSVahs" "/servers/www1") 設定値はスケールアウトで使用するVMイメージ作成時に事前に確認してください。 |
WEB_SERVICE_NAMES | @("Interstage HTTP Server 2.4") | Webサーバのサービス名を配列で設定します。 複数Webサーバの運用の場合、配列は以下のようにカンマ区切りで、単数行で宣言してください。 @("Interstage HTTP Server 2.4","Interstage HTTP Server 2.4(web001)") 設定値はスケールアウトで使用するVMイメージ作成時に事前に確認してください。 |
MAX_PCMISTAT_LOOP_NUM | 10 | PCMIサービスの状態確認をする最大ループ回数を設定します。ループ間隔(3秒)は固定です。 |
MAX_PCMIPROCESSES_LOOP_NUM | 10 | PCMIサービスが監視しているプロセス(DAS、またはGlassFish Serverインスタンス)の状態確認をする最大ループ回数を設定します。ループ間隔(3秒)は固定です。 |
MAX_WEBSERVICE_LOOP_NUM | 10 | Webサーバーの状態確認をする最大ループ回数を設定します。ループ間隔(3秒)は固定です。 |
AS_ADMIN_NAME | admin | asadminコマンドのログイン認証時で使用される管理ユーザーIDを設定します。 設定値はスケールアウトで使用するVMイメージ作成時に事前に確認してください。 |
AS_ADMIN_PASSWORD | adminadmin | asadminコマンドのログイン認証時で使用される管理者パスワードを設定します。 設定値はスケールアウトで使用するVMイメージ作成時に事前に確認してください。 |
GRACEFUL_SHUTDOWN_TIMEOUT | 30 | Webサーバー停止後のスリープ時間(秒)を設定します。 |
AUTO_SCALING_GROUP_NAME | auto_scaling_group_name | Amazon EC2 Auto Scalingで設定した、Auto Scalingグループ名を設定します。 |
LIFECYCLE_HOOK_INSERVICE | lifecycle_hook_inservice | Amazon EC2 Auto Scalingで設定した、スケールアウト時用のライフサイクルフック名を設定します。 |
LIFECYCLE_HOOK_TERMINATED | lifecycle_hook_terminated | Amazon EC2 Auto Scalingで設定した、スケールイン時用のライフサイクルフック名を設定します。 |
S3_BUCKET_NAME | bucket_name | ログを退避するAmazon S3のバケット名を設定します。 |
オートスケーリングスクリプトのサンプルスクリプト
Azure用のオートスケーリングスクリプトのサンプルスクリプトは以下に格納されています。
マニュアルパッケージの「Sample」-「autoscale」-「Azure」フォルダー配下
サンプルスクリプト名 | 用途 |
---|---|
scale_in.ps1 | スケールインスクリプト(PowerShell) |
scale_out.ps1 | スケールアウトスクリプト(PowerShell) |
scale_in.sh | スケールインスクリプト(Bash) |
scale_out.sh | スケールアウトスクリプト(Bash) |
オートスケーリングスクリプトの利用イメージ
スケールアウトスクリプトの利用イメージを以下に示します。
スケールアウトスクリプトは、カスタムスクリプト拡張機能によってAzure Blob Storageから仮想サーバー(VM)に転送され、VMのスケールアウト時に1度だけ実行されます。(図中1~3)
スケールアウトスクリプトは、Jakarta EEアプリケーションの運用開始に必要な以下の手順を行います。
IP・ホスト一括変更ツール(ismodifyhostinfo)の実行
Webサーバー、Webサーバコネクタ、GlassFishの各定義ファイル内のIPアドレスやホスト名を変換します。
PCMIサービスの起動
DASの起動
GlassFish Serverクラスターの起動
Webサーバーの起動
スケールアウトスクリプトの実行が正常に完了し、スケールアウトが完了すると、増加したVMが負荷分散装置の振り分け先に登録されます。(図中4)
スケールアウトスクリプト実行時に引数、オプションの指定はありません。
スケールアウトスクリプトのメッセージは、isautoscale.logに出力します。
isautoscale.logは、「8.2.3 ログ情報」を参照してください。
出力するメッセージは、「8.5.1 オートスケーリングスクリプトのメッセージ」を参照してください。
IP・ホスト一括変更ツール(ismodifyhostinfo)のメッセージはismodifyhostinfo.logに出力します。
ismodifyhostinfo.logは、「8.2.3 ログ情報」を参照してください。
出力するメッセージは、「8.5.2 IP・ホスト一括変更ツールのメッセージ」を参照してください。
次に、スケールインスクリプトの利用イメージを以下に示します。
スケールインスクリプトは、OSのジョブスケジューリング(Windowsの場合はタスクスケジューラ、Linuxの場合はcron)によってVM起動時に開始されます。(図中1)
スケールインが開始されると、VMが負荷分散装置の振り分け先から解除され、VM終了通知(Terminate)が通知されます。(図中2)
スケールインスクリプトは、VM終了通知(Terminate)を検出し、Jakarta EEアプリケーションの運用停止に必要な以下の手順を行います。(図中3)
Webサーバーの停止
GlassFish Serverクラスターの停止
DASの停止
PCMIサービスの停止
一括情報採取ツール(iscollectinfo)の実行、ログの収集
iscollectinfoで収集したログ、オートスケーリングスクリプトが出力するログ、IP・ホスト一括変更ツール(ismodifyhostinfo)が出力したログを収集し、圧縮ファイルにします。
5.で圧縮ファイルをVM外のオブジェクトストレージに退避
スケールインスクリプトの実行が正常に完了し、スケールインが完了すると、VMが削除されます。
スケールインスクリプト実行時に引数、オプションの指定はありません。
スケールインスクリプトのメッセージは、isautoscale.logに出力します。
isautoscale.logは、「8.2.3 ログ情報」を参照してください。
出力するメッセージは、「8.5.1 オートスケーリングスクリプトのメッセージ」を参照してください。
オートスケーリングスクリプトの処理内容
スケールアウトスクリプトの処理内容について説明します。
[全体処理フローと関数一覧]
スケールアウトスクリプトの全体処理フローを以下に示します。
スケールアウトスクリプトの処理が開始すると、IP・ホスト一括変更ツール(ismodifyhostinfo)用入力ファイル作成開始時(変数確認が正常終了した後)に「as0001」メッセージを出力し、正常に終了した場合、「as0002」メッセージを出力します。異常が発生した場合、終了前に「as0003」メッセージを出力します。
注意
スケールアウトスクリプトの異常の有無に関係なく、スケールアウトスクリプトが終了するとAzureのスケールアウトは完了します。Microsoft Azure portalのAzure Virtual Machine Scale Sets(VMSS)画面にエラーメッセージが出力されていないことを確認してください。
スケールアウトスクリプトで使用する関数の一覧と、全体処理フローとの対応を以下に示します。
PowerShell | Bash | 説明 | 全体処理フローとの対応 |
---|---|---|---|
Output-Log | output_log | スケールアウトスクリプトのログ(isautoscale.log)を出力します。 | - |
Start-PCMI | start_PCMI | PCMIサービスの起動、起動確認を行います。 異常が発生した場合、「as0009」メッセージを出力し、関数を異常終了します。 | 2. PCMIサービスの起動 |
Start-DAS | start_DAS | DASの起動、起動確認を行います。 異常が発生した場合、「as0009」メッセージを出力し、関数を異常終了します。 | 3. DASの起動 |
Start-Instance | start_instance | GlassFish Serverクラスターの起動、起動確認を行います。 異常が発生した場合、「as0009」メッセージを出力し、関数を異常終了します。 | 4. GlassFish Serverクラスターの起動 |
Start-Webserver | start_webserver | Webサーバーの起動、起動確認を行います。 異常が発生した場合、「as0009」メッセージを出力し、関数を異常終了します。 | 5. Webサーバーの起動 |
Start-Interstage | start_interstage | 「as0007」メッセージ出力後、以下の関数を実行します。 Start-PCMI、Start-DAS、Start-Instance、Start-Webserverを順番に実行します。 start_PCMI、start_DAS、start_instance、start_webserverを順番に実行します。 正常に終了した場合、「as0008」メッセージを出力します。異常が発生した場合、関数を異常終了します。 | - |
New-Hostinfo | new_hostinfo | IP・ホスト一括変更ツール(ismodifyhostinfo)の入力ファイルを作成します。 変更前のIPアドレス、ホスト名は、ORG_IP、ORG_HOSTを使用します。変更後のIPアドレス、ホスト名はスケールアウトで作成されたVMのIPアドレス、ホスト名を使用します。 | 「1. IP・ホスト一括変更ツールの実行」のうち、「IP・ホスト一括変更ツール用入力ファイル作成」 |
Invoke-Ismodifyhostinfo | invoke-ismodifyhostinfo | 「as0004」メッセージを出力後、ismodifyhostinfoコマンドを実行します。ismodifyhostinfoコマンドが正常に終了した場合、「as0005」メッセージを出力します。異常が発生した場合、「as0006」メッセージを出力します。ismodifyhostinfoコマンド異常時はismodifyhostinfo.logに異常内容を出力します。 | 「1. IP・ホスト一括変更ツールの実行」のうち、「IP・ホスト一括変更ツール(ismodifyhostinfo)実行」 |
ポイント
IP・ホスト一括変更ツール(ismodifyhostinfo)で使用する変更後のIPアドレス、ホスト名は、スケールアウトで作成されたVMのプライベートIPアドレス、ホスト名を設定します。スケールアウトスクリプトでは、プライベートIPアドレス、ホスト名を以下の方法で取得しています。
IPアドレス(プライベートIPv4の場合)
インスタンスメタデータサービス(IMDS)の以下のURLに接続します。
http://169.254.169.254/metadata/instance/network/interface/0/ipv4/ipAddress/0/?api-version=2021-12-13
http://169.254.169.254/metadata/instance/network/interface/0/ipv4/ipAddress/0/privateIpAddress?api-version=2021-12-13&format=text
注) 169.254.169.254はインスタンスメタデータサービス(IMDS)と通信するための仮想パブリックIPアドレスです。“api-version”には、最新のAPIバージョンを指定してください。インスタンスメタデータサービス(IMDS)の詳細は、Azureの公式ドキュメントを参照してください。
ホスト名(プライベートIP DNSの場合)
$env:computername
hostname
[変数定義]
スケールアウトスクリプトでは、以下の変数を指定してください。
変数名 | 記入例 | 説明 |
---|---|---|
APPSRV_SHARED_DIR | "C:\Interstage\glassfish5\var" "/var/opt/FJSViaps/glassfish5" | 運用資産格納ディレクトリーを設定します。 設定値はスケールアウトで使用するVMイメージ作成時に事前に確認してください。 |
LOG_DIR | "C:\Logs" "/root" | 本スクリプトのログ(isautoscale.log)の出力先を設定します。出力先は存在するディレクトリーを指定してください。ASCIIコード範囲内で指定可能です。 isautoscale.logの詳細は、「8.2.3 ログ情報」を参照してください。 スケールインスクリプトで指定するLOG_DIRと同じ出力先を指定してください。 |
ISMODIFYHOSTINFO_LOG | "$LOG_DIR\ismodifyhostinfo.log" "${LOG_DIR}/ismodifyhostinfo.log" | IP・ホスト一括変更ツール(ismodifyhostinfo)のログの出力先とファイル名を設定します。ASCIIコード範囲内で指定可能です。 スケールインスクリプトで指定するISMODIFYHOSTINFO_LOGと同じ出力先を指定してください。 |
ORG_IP | "192.0.2.1" | スケールアウトで使用するVMイメージが持っているIPアドレスを設定します。設定値はIP・ホスト一括変更ツール(ismodifyhostinfo)の変更前の値に使用します。 スケールアウトで使用するVMイメージ作成時に事前に確認してください。 |
ORG_HOST | "host1" | スケールアウトで使用するVMイメージが持っているホスト名を設定します。設定値はIP・ホスト一括変更ツール(ismodifyhostinfo)の変更前の値に使用します。設定値はスケールアウトで使用するVMイメージ作成時に事前に確認してください。 |
WEB_SERVER_DIRS | ("/opt/FJSVahs") | Webサーバ資源の格納ディレクトリを配列で設定します。 複数Webサーバの運用の場合、配列は以下のように半角空白区切りで、単数行で宣言してください。 ("/opt/FJSVahs" "/servers/www1") 設定値はスケールアウトで使用するVMイメージ作成時に事前に確認してください。 |
WEB_SERVICE_NAMES | @("Interstage HTTP Server 2.4") | Webサーバのサービス名を配列で設定します。 複数Webサーバの運用の場合、配列は以下のようにカンマ区切りで、単数行で宣言してください。 @("Interstage HTTP Server 2.4","Interstage HTTP Server 2.4(web001)") 設定値はスケールアウトで使用するVMイメージ作成時に事前に確認してください。 |
MAX_PCMISTAT_LOOP_NUM | 10 | PCMIサービスの状態確認をする最大ループ回数を設定します。ループ間隔(3秒)は固定です。 |
MAX_PCMIPROCESSES_LOOP_NUM | 10 | PCMIサービスが監視しているプロセス(DAS、またはGlassFish Serverインスタンス)の状態確認をする最大ループ回数を設定します。ループ間隔(3秒)は固定です。 |
MAX_WEBSERVICE_LOOP_NUM | 10 | Webサーバーの状態確認をする最大ループ回数を設定します。ループ間隔(3秒)は固定です。 |
AS_ADMIN_NAME | admin | asadminコマンドのログイン認証時で使用される管理ユーザーIDを設定します。 設定値はスケールアウトで使用するVMイメージ作成時に事前に確認してください。 |
AS_ADMIN_PASSWORD | adminadmin | asadminコマンドのログイン認証時で使用される管理者パスワードを設定します。 設定値はスケールアウトで使用するVMイメージ作成時に事前に確認してください。 |
次に、スケールインスクリプトの処理内容について説明します。
[全体処理フローと関数一覧]
スケールインスクリプトの全体処理フローを以下に示します。
スケールインスクリプトの処理が開始すると、変数・コマンド確認が正常終了した後に「as0010」メッセージを出力し、正常に終了した場合「as0011」メッセージを出力します。異常が発生した場合、終了前に「as0012」メッセージを出力します。
「as0011」メッセージはオブジェクトストレージへの退避資産作成後に出力されるため、退避したログファイルには含まれません。
Webサーバーの停止、GlassFish Serverクラスターの停止、DASの停止、PCMIサービスの停止のどれかで異常が発生した場合は、スクリプトは終了せず、一括情報採取ツールの実行、ログの収集の処理に進みます。
スケールインスクリプトの処理が開始されてから、スケールインが開始されるまで(VM終了通知の検出まで)の流れを以下に示します。
注意
スケールインスクリプトの異常の有無に関係なく、スケールインスクリプトが終了するとAzureのスケールインは完了します。
スケールアウトスクリプトの実行で異常が発生した場合は、スケールアウトスクリプト正常終了通知ファイルを作成しないため、VM終了通知(Terminate)の監視は開始されません。
Azure Virtual Machine Scale Sets(VMSS)の「終了の遅延(分)」を超えた場合は、VMが削除されます。以下の場合には一括情報採取ツール(iscollectinfo)による採取時間がかかるため、採取完了を待たずにVMが削除される可能性があります。その場合は、処理性能の高いVMに変更するなどの対応を行ってください。
採取対象のアプリケーションの資材やログ(GlassFish Serverクラスターのserver.logなど)のサイズが大きい場合
採取するファイル数が多くなる(運用するGlassFish Serverインスタンスが多いなど)場合
スケールインスクリプトで使用する関数の一覧と、全体処理フローとの対応を以下に示します。
PowerShell | Bash | 説明 | 全体処理フローとの対応 |
---|---|---|---|
Output-Log | output_log | スケールインスクリプトのログ(isautoscale.log)を出力します。 | - |
Stop-Webserver | stop_webserver | Webサーバーの停止を行います。 Windowsサービスの最大待ち時間(デフォルト30秒)を超過した場合は強制停止になります。 GRACEFUL_SHUTDOWN_TIMEOUTで指定した時間(秒)待機後、後続の処理を継続します。 異常が発生した場合、「as0015」メッセージを出力し、関数を異常終了します。 | 1. Webサーバーの停止 |
Stop-Instance | stop_instance | GlassFish Serverクラスターの停止、停止確認を行います。 異常が発生した場合、「as0015」メッセージを出力し、関数を異常終了します。 | 2. GlassFish Serverクラスターの停止 |
Stop-DAS | stop_DAS | DASの停止、停止確認を行います。 異常が発生した場合、「as0015」メッセージを出力し、関数を異常終了します。 | 3. DASの停止 |
Stop-PCMI | stop_PCMI | PCMIサービスの停止、停止確認を行います。 異常が発生した場合、「as0015」メッセージを出力し、関数を異常終了します。 | 4. PCMIサービスの停止 |
Stop-Interstage | stop_interstage | 「as0013」メッセージ出力後、以下の関数を実行します。 Stop-Webserver、Stop-Instance、Stop-DAS、Stop-PCMIを順番に実行します。 stop_webserver、stop_instance、stop_DAS、stop_PCMIを順番に実行します。 正常に終了した場合、「as0014」メッセージを出力します。異常が発生した場合、関数を異常終了します。 | - |
Invoke-Iscollectinfo | invoke_iscollectinfo | 「as0016」メッセージ出力後、一括情報採取ツール(iscollectinfo)を実行します。 正常に終了した場合、「as0017」メッセージを出力します。 異常が発生した場合、「as0018」メッセージを出力し、関数を異常終了します。 | 「5. 一括情報採取ツールの実行、ログの収集」のうち、「iscollectinfo実行」 |
New-Archive | new_archive | 本スクリプトのログ(isautoscale.log)、IP・ホスト一括変更ツール(ismodifyhostinfo)のログ(ismodifyhostinfo.log)、iscollectinfoで採取した調査資料を一時ディレクトリーにコピーし、一時ディレクトリー配下を圧縮します。 圧縮形式はzipです。 異常が発生した場合、「as0025」メッセージを出力し、関数を異常終了します。 | 「5. 一括情報採取ツールの実行、ログの収集」のうち、「退避ファイル圧縮」 |
Save-Logs | save_logs | 「as0020」メッセージを出力後、退避ファイル圧縮で圧縮されたzipファイルをAzure Blob Storageへコピーします。コピーには、azcopyコマンドを使用します。 正常に終了した場合、「as0021」メッセージを出力します。 異常が発生した場合、「as0022」メッセージを出力し、関数を異常終了します。 | 6. オブジェクトストレージに退避 |
Terminate | terminate | 「as0010」メッセージを出力後、以下の関数を実行します。 Stop-Interstage、Invoke-Iscollectinfo、New-Archive、Save-Logsを順番に実行します。 Invoke-Iscollectinfo実行前に、ログ収集のための一時ディレクトリーの作成を行います。一時ディレクトリー名は、以下の形式です。
stop_interstage、invoke_iscollectinfo、new_archive、save_logsを順番に実行します。 invoke_iscollectinfo実行前に、ログ収集のための一時ディレクトリーの作成を行います。一時ディレクトリー名は、以下の形式です。
正常に終了した場合、「as0011」メッセージを出力します。 異常が発生した場合、「as0012」メッセージを出力し、関数を異常終了します。 | - |
ポイント
VM終了通知(Terminate)を監視するために、監視対象のVM名とのVMのイベント状態が必要です。
スケールインスクリプトでは以下の方法でVM名、VMのイベント状態(Terminate)を取得しています。
VM名
インスタンスメタデータサービス(IMDS)の以下のURLに接続する。
http://169.254.169.254/metadata/instance/compute/name?api-version=2021-12-13&format=text
VMのイベント状態
インスタンスメタデータサービス(IMDS)の以下のURLに接続する。
http://169.254.169.254/metadata/scheduledevents?api-version=2020-07-01
[変数定義]
スケールインスクリプトでは、以下の変数を指定してください。
変数名 | 記入例 | 説明 |
---|---|---|
APPSRV_SHARED_DIR | "C:\Interstage\glassfish5\var" "/var/opt/FJSViaps/glassfish5" | 運用資産格納ディレクトリーを設定します。 設定値はスケールアウトで使用するVMイメージ作成時に事前に確認してください。 |
LOG_DIR | "C:\Logs" "/root" | 本スクリプトのログ(isautoscale.log)の出力先を設定します。出力先は存在するディレクトリーを指定してください。ASCIIコード範囲内で指定可能です。 isautoscale.logの詳細は、「8.2.3 ログ情報」を参照してください。 スケールアウトスクリプトで指定するLOG_DIRと同じ出力先を指定してください。 |
AZCOPY_PATH | "C:\Tools" "/root" | azcopyコマンドのインストール先を設定します。ASCIIコード範囲内で指定可能です。 設定値はスケールアウトで使用するVMイメージ作成時に事前に確認してください。 |
ISMODIFYHOSTINFO_LOG | "$LOG_DIR\ismodifyhostinfo.log" "${LOG_DIR}/ismodifyhostinfo.log" | IP・ホスト一括変更ツール(ismodifyhostinfo)のログの出力先とファイル名を設定します。ASCIIコード範囲内で指定可能です。 スケールアウトスクリプトで指定するISMODIFYHOSTINFO_LOGと同じ出力先を指定してください。 |
WEB_SERVER_DIRS | ("/opt/FJSVahs") | Webサーバ資源の格納ディレクトリを配列で設定します。 複数Webサーバの運用の場合、配列は以下のように半角空白区切りで、単数行で宣言してください。 ("/opt/FJSVahs" "/servers/www1") 設定値はスケールアウトで使用するVMイメージ作成時に事前に確認してください。 |
WEB_SERVICE_NAMES | @("Interstage HTTP Server 2.4") | Webサーバのサービス名を配列で設定します。 複数Webサーバの運用の場合、配列は以下のようにカンマ区切りで、単数行で宣言してください。 @("Interstage HTTP Server 2.4","Interstage HTTP Server 2.4(web001)") 設定値はスケールアウトで使用するVMイメージ作成時に事前に確認してください。 |
CONTAINER_URL | "https://<ストレージアカウント名>.blob.core.windows.net/<コンテナー名>" | Azure Blob StorageのコンテナーのURLを設定します。 Microsoft Azure portal画面の「ストレージアカウント」-「コンテナー」-「プロパティ」から取得できます。 |
SAS_TOKEN | "<SASトークン名>" | SASトークンを設定します。 Microsoft Azure portal画面の「ストレージアカウント」-「セキュリティとネットワーク」-「Shared Access Signature」で作成できます。 |
JQ_PATH | "/root" | jqコマンドのインストール先を設定します。ASCIIコード範囲内で指定可能です。 設定値はスケールアウトで使用するイメージ作成時に事前に確認してください。 |
POLL_INTERVAL | 1 | VM終了通知(Terminate)の監視間隔(秒)を設定します。 ポーリング頻度は毎秒1回を推奨します。 |
MAX_PCMISTAT_LOOP_NUM | 10 | PCMIサービスの状態確認をする最大ループ回数を設定します。ループ間隔(1秒)は固定です。 |
MAX_PCMIPROCESSES_LOOP_NUM | 10 | PCMIサービスが監視しているプロセス(DAS、またはGlassFish Serverインスタンス)の状態確認をする最大ループ回数を設定します。ループ間隔(3秒)は固定です。 |
GRACEFUL_SHUTDOWN_TIMEOUT | 30 | Webサーバー停止後のスリープ時間(秒)を設定します。 |
AS_ADMIN_NAME | admin | asadminコマンドのログイン認証時で使用される管理ユーザーIDを設定します。 設定値はスケールアウトで使用するVMイメージ作成時に事前に確認してください。 |
AS_ADMIN_PASSWORD | adminadmin | asadminコマンドのログイン認証時で使用される管理者パスワードを設定します。 設定値はスケールアウトで使用するVMイメージ作成時に事前に確認してください。 |