Auto Scaling のアプリケーション公開機能を使用すると、スケーリンググループ内の Elastic Compute Service (ECS) インスタンスにビジネスアプリケーションを継続的にデプロイできます。この機能は、アプリケーションの公開プロセスを自動化し、Auto Scaling のライフサイクルフックと統合することで、自動公開とグレースフルシャットダウンを可能にします。
概要
Auto Scaling (ESS) のアプリケーション公開機能は、アプリケーションのソースファイルと起動/停止スクリプトをデプロイメントにカプセル化します。このデプロイメントは、標準的なプロセスを通じてスケーリンググループ内のインスタンスに公開されます。
サポートされるデプロイメントタイプ
アプリケーションのソースファイルが保存されている場所に基づいて、デプロイメントタイプを選択できます:
タイプ | 説明 | シナリオ |
OSS ファイル | JAR や ZIP パッケージなどのアプリケーションファイルは OSS に保存されます。公開中にファイルが自動的にダウンロードされ、スクリプトが実行されます。 | Java アプリケーションなどの従来のアプリケーションデプロイメント。 |
ECS イメージ | アプリケーションは ECS イメージにプリインストール済みです。公開中に、インスタンスのシステムディスクが置き換えられます。 | 高速な起動や複雑な環境を必要とするアプリケーション。 |
Docker イメージ | アプリケーションイメージは Container Registry (ACR) に保存されます。公開中に、イメージが自動的にプルされ、コンテナーが起動されます。 | コンテナー化されたアプリケーションのデプロイメント。 |
コマンド実行のみ | ソースファイルは指定されません。シェルスクリプトのみが実行されます。 | 柔軟なスクリプトによるデプロイメント、またはサードパーティのソースを使用する場合。 |
リリース機能
リリースモード:すべてのインスタンスに公開するフルリリースと、検証のために特定のインスタンスに公開するカナリアリリースをサポートします。
バッチコントロール:リリースバッチを設定し、バッチ間に一時停止を構成することで、リリース中のリスクを軽減できます。
Auto Scaling との統合:
スケールアウト時の自動公開:スケールアウト中に作成された新しいインスタンスは、最新のアプリケーションバージョンを自動的にデプロイし、バージョンの一貫性を確保します。
スケールイン時のグレースフルシャットダウン:スケールインの前に、停止スクリプトが実行され、インスタンスがリリースされる前にビジネスプロセスが完了することを保証します。
制限事項
オペレーティングシステム:Linux の ECS インスタンスのみがサポートされます。
スクリプト言語:起動/停止スクリプトでは、シェルスクリプトのみがサポートされます。
デプロイメントフロー:デプロイメントフローは、停止してから開始の原則に従います。各デプロイメントで、まず停止スクリプトが実行され、前のデプロイメントのアプリケーションが停止していることを確認します。その後、起動スクリプトが実行されます。
データリスク:ECS イメージのデプロイメントタイプを使用する場合、インスタンスのシステムディスクが置き換えられます。事前に重要なデータをバックアップする必要があります。
デプロイメントの作成
-
Auto Scaling コンソールにログインします。
左側のナビゲーションウィンドウで、[スケーリンググループ] をクリックします。
上部のナビゲーションバーで、Auto Scaling が有効化されているリージョンを選択します。
[スケーリンググループ ID] をクリックして、スケーリンググループの詳細ページに移動します。[アプリケーションの公開] タブで、 を選択します。
シナリオに基づいてデプロイメントタイプを選択し、設定します。
OSS ファイル
このタイプは、JAR、WAR、ZIP ファイルなどのアプリケーションパッケージが OSS に保存されている場合に使用します。公開中、システムは指定された作業ディレクトリにファイルを自動的にダウンロードします。その後、停止スクリプトを実行して以前のアプリケーションバージョン (もしあれば) を停止し、次に起動スクリプトを実行して新しいアプリケーションを起動します。
設定項目:
OSS 情報:[OSS リージョン] と [OSS バケット] を設定します。[OSS ファイル] フィールドに、バケット内のファイルへのパス (例:
apps/sample-spring-1.0-SNAPSHOT.jar) を入力します。内部ネットワーク経由でダウンロード:ご利用の ECS インスタンスと OSS バケットが同じリージョンにある場合、このオプションを有効にするとダウンロード速度が向上します。
起動/停止スクリプトの例:
アプリケーション起動スクリプト:
start_application() { set -e yum install -y maven-3.5.4 java -jar ./sample-spring-1.0-SNAPSHOT.jar & } start_applicationアプリケーション停止スクリプト:
重要停止操作を実行する必要がない場合は、停止スクリプトを空のままにすることができます。デプロイメント中に停止スクリプトはスキップされます。
### アプリケーションを停止します (存在する場合) stop_application() { PID=$(ps -ef | grep "sample-spring-1.0-SNAPSHOT.jar" | grep -v "grep" | awk '{print $2}') if [ -n "$PID" ]; then kill -9 $PID fi } stop_application
ECS イメージ
このタイプは、複雑な環境を持つアプリケーションや、高速な起動が必要な場合に使用します。公開中、システムはスケーリンググループ内のインスタンスのシステムディスクを指定されたイメージに置き換えます。
デプロイメントタイプとして [ECS イメージ] を選択した場合、[追加] をクリックし、スケーリンググループと同じリージョンのイメージを選択します。
設定項目:
リージョン:スケーリンググループと同じリージョンを選択します。
イメージ ID:デプロイされたアプリケーションを含み、スケーリンググループと同じリージョンにあるカスタムイメージを選択します。
重要[ECS イメージ] のデプロイメントは、アプリケーションの起動/停止スクリプトをサポートしていません。アプリケーションを自動的に起動するには、アプリケーションを起動時に開始するように設定するか、ライフサイクルフックを手動で設定することができます。
Docker イメージ
このタイプは、コンテナー化されたアプリケーションに使用します。公開中、システムは ACR からイメージを自動的にプルします。その後、停止スクリプトを実行して以前のコンテナーバージョン (もしあれば) を停止し、次に起動スクリプトを実行して新しいコンテナーを起動します。
重要Container Registry (ACR) Enterprise Edition の Docker イメージのみがサポートされます。ACR Personal Edition またはサードパーティのイメージリポジトリのイメージについては、コマンド実行のみのデプロイメントタイプを使用してください。
設定項目:
Docker イメージ情報: [Container Registry リージョン]、[Container Registry インスタンス ID]、[名前空間]、[リポジトリ名]、および[イメージバージョン]を設定できます。
内部ネットワーク経由でプル:内部ネットワーク経由でイメージをプルするには、イメージリポジトリと ECS インスタンスが同じ VPC にあることを確認してください。詳細については、「VPC のアクセスの制御を設定」をご参照ください。
起動/停止スクリプト:
アプリケーション起動スクリプト:
重要ターゲットマシンに Docker がインストールされていることを確認してください。
公開中、スクリプトが実行される前に Docker イメージは自動的に ECS インスタンスにプルされます。スクリプトにイメージのプル操作を含める必要はありません。
### 公開中、Docker イメージは自動的に ECS インスタンスにプルされます。コンテナーを直接起動できます。 ### 現在のバージョンのコンテナーを起動します ### 使用する際は、<image_name> を実際のイメージアドレスに置き換えてください start_application() { image_name="<image_name>" container_name="my-container" docker run -d -p 8080:8080 --name ${container_name} ${image_name} } start_applicationアプリケーション停止スクリプト:
重要停止操作を実行する必要がない場合は、停止スクリプトを空のままにすることができます。デプロイメント中に停止スクリプトはスキップされます。
stop_application() { # 名前でコンテナーを検索します。存在する場合は削除します。 container_name="my-container" container_id=$(docker ps -aq -f name=${container_name}) if [ -n "$container_id" ]; then docker rm -f $container_id fi } stop_application
コマンド実行のみ
このタイプは、サードパーティのソースからコードをダウンロードするなど、特定のソースファイルを必要とせず、シェルスクリプトのみを必要とするデプロイメントに使用します。公開中、システムは停止スクリプトを実行して以前のアプリケーションバージョン (もしあれば) を停止し、次に起動スクリプトを実行して新しいアプリケーションを起動します。
設定項目:デプロイメントソースを設定する必要はありません。[作業ディレクトリ] を指定するだけです。
起動/停止スクリプトの例 (パブリックイメージのプル):
アプリケーション起動スクリプト:
### 現在のバージョンのアプリケーションを起動します start_application() { repo="<repo>" image="<image>" container_name="my-container" docker login --username=${username} --password=${password} $repo docker pull $image docker run -d -p 8080:8080 --name $container_name $image } start_applicationアプリケーション停止スクリプト:
重要停止操作を実行する必要がない場合は、停止スクリプトを空のままにすることができます。デプロイメント中に停止スクリプトはスキップされます。
### コンテナーを停止します (存在する場合) stop_application() { # 名前でコンテナーを検索し、存在する場合は削除します。 container_name="my-container" container_id=$(docker ps -aq -f name=${container_name}) if [ -n "$container_id" ]; then docker rm -f $container_id fi } stop_application
設定が完了したら、[作成して公開] または [作成のみ] をクリックします。
[作成して公開] をクリックすると、[デプロイメントの公開] 設定に移動します。
デプロイメントの公開
[アプリケーションの公開] タブで、 を選択します。
公開する [デプロイメント ID] を選択できます。
リリースポリシーを設定します:
リリースモード:
フルリリース:グループ内のすべてのインスタンスに公開します。
カナリアリリース:手動で選択したインスタンスに公開します。
バッチポリシー:[バッチ数] (例:2) を設定し、[バッチモード] (一時停止なし、最初のバッチ後に一時停止、または各バッチ後に一時停止) を選択します。
スケーリングシナリオ: [スケールアウト時の自動公開] と [スケールイン時のグレースフルシャットダウン] のデフォルト設定を有効のままにします。
スケールアウト時の自動公開:このオプションが有効な場合、アプリケーションはスケールアウト中に作成された新しい ECS インスタンスに自動的に公開されます。公開プロセス中に、スケールアウトの ライフサイクルフックが自動的に設定されます。
スケールイン時のグレースフルシャットダウン:このオプションが有効な場合、スケールインが完了する前に、スケールインされる ECS インスタンスでデプロイメントの停止スクリプトが実行されます。公開プロセス中に、スケールインの ライフサイクルフックが自動的に設定されます。
[OK] をクリックして公開を開始します。リストの [詳細] をクリックすると、実行ステータスと出力ログを表示できます。
本番環境での利用
本番環境での安定性を確保するために、以下のベストプラクティスに従ってください:
リリースリスクの軽減:
まず、カナリアリリースを使用して、少数のインスタンスで新しいバージョンを検証します。
バッチでフルリリースを実行するには、段階的リリースを有効にし、[最初のバッチ後に一時停止] を選択します。最初のバッチが公開され、検証された後、残りのバッチを続行できます。
業務継続性の確保:[スケールイン時のグレースフルシャットダウン] を有効にします。デプロイメントの停止スクリプトを作成し、リクエストの処理が完了するのを待ち、接続を閉じることで、スケールイン中の業務中断を防ぎます。
バージョンの一貫性の確保:[スケールアウト時の自動公開] を有効にすると、スケーリンググループによって作成された新しいインスタンスが古いアプリケーションバージョンを実行するのを防ぎます。
よくある質問
アプリケーション公開機能は Windows インスタンスをサポートしていますか?
いいえ、サポートしていません。Linux の ECS インスタンスのみがサポートされます。
公開プロセス中に、スケーリンググループはスケーリングアクティビティをトリガーしますか?
はい、トリガーされます。アプリケーションの公開プロセスは、スケーリングアクティビティをブロックしません。
アプリケーション公開のログと結果はどのように表示できますか?
公開タスクが開始された後、[デプロイメントの公開] リストの [実行 ID] をクリックすると、各インスタンスの実行ステータスと詳細なスクリプト出力ログを表示できます。
デプロイメントが失敗した場合、既存のインスタンスへの影響はどうなりますか?
スクリプトの実行に失敗した場合、そのインスタンスの公開ステータスは「失敗」に設定されます。[各バッチ後に一時停止] または [最初のバッチ後に一時停止] が有効になっている 段階的リリースでは、後続のバッチは実行されません。これにより、影響が限定されます。フルリリースの前に、カナリアリリースを使用して少数のインスタンスでデプロイメントを検証できます。
アプリケーションの起動/停止スクリプトの実行ディレクトリはどこですか?
スクリプトは、デプロイメント作成時に指定した作業ディレクトリで実行されます。