すべてのプロダクト
Search
ドキュメントセンター

Elastic Compute Service:サービスの自動復元

最終更新日:Aug 08, 2024

プログラムの例外、インスタンスの再起動、または停電により、サービスまたはスクリプトの実行が停止する場合があります。 サービスまたはスクリプトができるだけ早い機会に再開できない場合、オンラインビジネスは損失を被る可能性があります。 Cloud Assistantプラグインecs-tool-servicekeepaliveを使用して、中断されたサービスまたはスクリプトをすばやく再開できます。 これにより、サービスの信頼性と継続性が保証されます。

ソリューションの概要

このソリューションは、Linuxオペレーティングシステムが提供するsystemdサービスを使用して実装されます。 ecs-tool-servicekeepaliveプラグインを使用する場合は、サービスまたはプログラムを起動できるコマンドを入力するだけで済みます。 たとえば、python /home/root/main.pyコマンドを入力します。 systemdサービスが有効化されると、プラグインは、入力した起動コマンドに基づいてsystemdサービス構成を自動的に生成します。 これにより、systemdサービスを設定することなく、サービスまたはスクリプトを自動的に起動できます。

説明

systemdサービスはLinuxコンポーネントであり、サービスを自動的に管理するために使用できます。 たとえば、systemdサービスは、インスタンスの起動時にサービスやスクリプトを開始したり、予期しない停止後にサービスを再起動したりできます。 詳細については、「systemdドキュメント」をご参照ください。

手順

  1. サービスまたはプログラムがデプロイされたら、Cloud Assistantのecs-tool-servicekeepaliveプラグインをrootユーザーとして起動します。

    rootユーザーとしてサービスまたはスクリプトを実行する

    sudo acs-plugin-manager --exec --plugin ecs-tool-servicekeepalive --params "start,'cmd'"

    cmd: パラメーターを、サービスまたはスクリプトを起動するコマンドに置き換えます。 たとえば、スクリプトの実行に使用する /bin/bash /home/work/debug/debug.shコマンド、またはプログラムの実行に使用するpython /home/root/main.pyコマンドを入力できます。

    重要

    スクリプトまたはプログラムファイルのパスはルートパスである必要があります。

    ユーザー名を指定してサービスまたはスクリプトを実行する

    sudo acs-plugin-manager --exec --plugin ecs-tool-servicekeepalive --params "start,execstart='cmd',user=user_name,group=group_name"
    • cmd: パラメーターをサービス起動コマンドに置き換えます。 たとえば、/bin/bash /home/work/debug/debug.shコマンドを使用してスクリプトを実行したり、python /home/root/main.pyコマンドを使用してプログラムを実行したりします。

      重要

      スクリプトまたはプログラムファイルのパスはルートパスである必要があります。

    • user_name: パラメーターを、サービスの実行に使用するユーザー名に置き換えます。 作成したユーザーを表示するには、cut -d: -f1 /etc/passwdコマンドを実行します。

    • group_name: パラメーターを、サービスが実行されているユーザーグループの名前に置き換えます。 作成したユーザーグループを表示するには、cut -d: -f1 /etc/groupコマンドを実行します。

  2. 次のコマンドを実行して、サービスの自動復元が有効になっているかどうかを確認します。

    sudo acs-plugin-manager --exec --plugin ecs-tool-servicekeepalive --params "status"

    設定が成功すると、次の図に示すレスポンスが返されます。

    image

  3. (オプション) サービスまたはスクリプトの自動復元を無効にするには、次のコマンドを実行します。

    sudo acs-plugin-manager --exec --local --plugin ecs-tool-servicekeepalive --params "stop service_name"

    service_name: パラメーターをサービスの名前に置き換えます。 手順2で出力されたコマンドのservice_name列に表示されているサービス名を取得できます。

  1. 環境を準備します。

    /home/work/debugフォルダーを作成し、そのフォルダーにdebug.shスクリプトを作成します。 スクリプトは、指定されたログファイルに1秒間に1行のログデータを出力します。

    sudo mkdir -p /home/work/debug && \
    sudo tee /home/work/debug/debug.sh > /dev/null << 'EOF'
    #!/bin/bash
    while true
    do
       sudo echo "$(date '+%Y-%m-%d %H:%M:%S') progress is alive" >> $1
        sleep 1
    done
    EOF

    ps aux | grep debug.shコマンドを実行します。 コマンド出力は、スクリプトが実行されていないことを示します。

    image

  2. Cloud Assistantプラグインを起動します。

    sudo acs-plugin-manager --exec --plugin ecs-tool-servicekeepalive --params "start,'/bin/bash /home/work/debug/debug.sh /home/work/debug/debug.log'"

    ps aux | grep debug.shコマンドを実行します。 コマンド出力は、スクリプトが実行中であることを示します。 プロセス番号は2572です。

    image

  3. スクリプトが自動的に再開できるかどうかを確認します。

    ECSインスタンスを再起動し、スクリプトが期待どおりに再開されるかどうかを確認します

    ECSコンソールでElastic Compute Service (ECS) インスタンスを再起動します。 ECSインスタンスが復元された後、インスタンスにログインし、次のコマンドを実行します。

    ps aux |grep debug.sh

    サービスのdebug.shプロセスが期待どおりに実行され、プロセス番号が764に更新されます。これは、スクリプトが再起動されたことを示します。

    image

    プロセスを終了し、スクリプトが期待どおりに再開するかどうかを確認します

    1. 次のコマンドを実行して、debug.shプロセスの番号を確認します。

      ps aux |grep debug.sh

      次の出力が表示されます。 debug.shのプロセス番号が2572です。

      image

    2. 次のコマンドを実行して、debug.shプロセスを終了します。

      sudo date && kill -9 <Process number>
    3. 次のコマンドを実行します。 コマンド出力は、debug.shプロセスがまだ実行中であり、プロセス番号が4220に更新されていることを示しています。

      ps aux |grep debug.sh

      image

参考資料

ビジネスが成長するにつれて、データ要求と同時実行ページビューの数は増加します。 複数のECSインスタンスをデプロイして、ゾーンレベルのディザスタリカバリを実装し、データの可用性と継続性を確保できます。 詳細については、「高可用性アーキテクチャのデプロイ」をご参照ください。