AWS CodeDeploy
ユーザーガイド (API バージョン 2014-10-06)

CodeDeploy を使用した再デプロイおよびデプロイのロールバック

CodeDeploy は、以前にデプロイされたアプリケーションのリビジョンを新しいデプロイとして再デプロイすることによって、デプロイをロールバックします。これらのロールバックされたデプロイは、前のデプロイのバージョンを復元するのではなく、新しいデプロイ ID を使用する技術的に新しいデプロイです。

デプロイは、自動または手動でロールバックできます。

自動ロールバック

デプロイが失敗した場合、または指定した監視しきい値に達した場合、自動的にロールバックするように、デプロイグループまたはデプロイを設定できます。この場合、アプリケーションリビジョンの最後の既知の正常なバージョンがデプロイされます。自動ロールバックは、アプリケーションを作成するとき、またはデプロイグループを作成または更新するときに設定します。

新しいデプロイを作成するとき、デプロイグループに指定された自動ロールバック設定をオーバーライドすることもできます。

注記

デプロイが自動的にロールバックされるときには、Amazon Simple Notification Service を使用して通知を受け取ることができます。詳細については、Amazon SNS イベント通知を使用したデプロイのモニタリング を参照してください。

自動ロールバックの設定の詳細については、「デプロイグループの詳細オプションの設定」を参照してください。

手動ロールバック

自動ロールバックをセットアップしていない場合は、以前にデプロイされたアプリケーションリビジョンを使用する新しいデプロイを作成し、リビジョンを再デプロイする手順に従うことによって、デプロイを手動でロールバックすることができます。アプリケーションが不明な状態になった場合、これを行う場合があります。トラブルシューティングに多くの時間を費やすのではなく、アプリケーションを既知の動作状態に再デプロイすることができます。詳細については、「CodeDeploy を使用してデプロイを作成する」を参照してください。

注記

デプロイグループからインスタンスを削除する場合、CodeDeploy はそのインスタンスにすでにインストールされているものはアンインストールしません。

ロールバックおよび再デプロイのワークフロー

自動ロールバックが開始された場合、または再デプロイまたは手動ロールバックを手動で開始した場合、CodeDeploy は、まず、最後に正常にインストールされたすべてのファイルを各参加インスタンスから削除しようとします。CodeDeploy は、これを行うためにクリーンアップファイルをチェックします。

/opt/codedeploy-agent/deployment-root/deployment-instructions/deployment-group-ID-cleanup ファイル (Amazon Linux、Ubuntu Server、および RHEL インスタンスの場合)

C:\ProgramData\Amazon\CodeDeploy\deployment-instructions\deployment-group-ID-cleanup ファイル (Windows Server インスタンスの場合)

存在する場合、CodeDeploy は、クリーンアップファイルを使用して、新しいデプロイを開始する前にリストされたすべてのファイルをインスタンスから削除します。

たとえば、最初の 2 つのテキストファイルおよび 2 つのスクリプトファイルは、Windows Server を実行している Amazon EC2 インスタンスにデプロイ済みであり、スクリプトによってデプロイライフサイクルイベント中にさらに 2 つのテキストファイルが作成されました。

c:\temp\a.txt (previously deployed by CodeDeploy) c:\temp\b.txt (previously deployed by CodeDeploy) c:\temp\c.bat (previously deployed by CodeDeploy) c:\temp\d.bat (previously deployed by CodeDeploy) c:\temp\e.txt (previously created by c.bat) c:\temp\f.txt (previously created by d.bat)

クリーンアップファイルは、最初の 2 つのテキストファイルおよび 2 つのスクリプトファイルのみが表示されます。

c:\temp\a.txt c:\temp\b.txt c:\temp\c.bat c:\temp\d.bat

新しいデプロイの前に、CodeDeploy は最初の 2 つのテキストファイルおよび 2 つのスクリプトファイルのみを削除し、最後の 2 つのテキストファイルはそのまま残します。

c:\temp\a.txt will be removed c:\temp\b.txt will be removed c:\temp\c.bat will be removed c:\temp\d.bat will be removed c:\temp\e.txt will remain c:\temp\f.txt will remain

このプロセスの一部として、CodeDeploy は、手動または自動ロールバックであっても、その後の再デプロイの間に以前のデプロイのスクリプトによって実行されるアクションを元に戻したり、一致させたりしません。たとえば、c.bat および d.bat ファイルが、既に存在している e.txt および f.txt ファイルを再作成しないロジックを含んでいる場合、その後のデプロイで CodeDeploy が c.bat および d.bat を実行するたびに、e.txt および f.txt の古いバージョンはそのまま残ります。c.bat および d.bat にロジックを追加して、新しいバージョンを作成する前に e.txt および f.txt の古いバージョンを常にチェックして削除することができます。

既存のコンテンツでのロールバック動作

デプロイプロセスの一環として、CodeDeploy エージェントは、前回のデプロイでインストールされたすべてのファイルを各インスタンスから削除します。前回のデプロイに含まれていないファイルがデプロイ先に表示された場合は、次回のデプロイ時にこれらのファイルを CodeDeploy で処理する方法を選択できます。

  • [Fail the deployment] — エラーが報告され、デプロイのステータスが「Failed (失敗)」に変更されます。

  • コンテンツの上書き — アプリケーションリビジョンのファイルのバージョンにより、インスタンスの既存のファイルのバージョンが置き換えられます。

  • コンテンツの保持 — デプロイ先のファイルは保持され、アプリケーションリビジョンのバージョンはインスタンスにコピーされません。

ファイルを保持して次回のデプロイの一部とすることを選択すると、そのファイルはアプリケーションリビジョンパッケージに追加する必要がなくなります。たとえば、デプロイに必要なファイルでもアプリケーションリビジョンバンドルには追加しないで直接インスタンスにアップロードできます。または、アプリケーションが既に本番稼働環境にあっても CodeDeploy を初めて使用してデプロイする場合は、ファイルをインスタンスにアップロードできます。

ロールバックでは、デプロイの失敗が原因で前回の成功したデプロイのアプリケーションリビジョンが再デプロイされますが、その前回の成功したデプロイのコンテンツ処理オプションがロールバックデプロイに適用されます。

ただし、失敗したデプロイの設定がファイルを保持せずに上書きするようになっていた場合、ロールバックは予期しない結果になる可能性があります。特に、保持しようとしていたファイルが、失敗したデプロイによって削除される可能性があります。ロールバックデプロイを実行したときに、ファイルは、ロールバック時にインスタンス上ではなくデプロイが実行されます。

次の例では 3 つのデプロイがあります。失敗したデプロイ 2 で上書き (削除) されたファイルは、デプロイ 3 でアプリケーションリビジョン 1 が再度デプロイされたときには使用不能 (保持不能) です。

デプロイ

アプリケーションリビジョン

コンテンツ上書きオプション

デプロイのステータス

動作と結果

デプロイ 1

アプリケーションリビジョン 1

保持

成功

CodeDeploy は、前回のデプロイでデプロイされなかったファイルをデプロイ先で検出します。これらのファイルは、現在のデプロイの一部とするために意図的に置かれている場合があります。これらのファイルは今回のデプロイパッケージの一部として保持および記録されます。

デプロイ 2

アプリケーションリビジョン 2

上書き

失敗

デプロイプロセス中に、CodeDeploy は前回の成功したデプロイに含まれているすべてのファイルを削除します。これには、デプロイ 1 で保持されたファイルも含まれます。

ただし、デプロイが失敗する原因は、これとは無関係です。

デプロイ 3

アプリケーションリビジョン 1

保持

デプロイまたはデプロイグループに対して自動ロールバックが有効になっているため、CodeDeploy は正常であることが判明している前回のアプリケーションリビジョン (アプリケーションリビジョン 1) をデプロイします。

ただし、デプロイ 1 で保持することにしたファイルはデプロイ 2 の失敗前に削除されており、AWS CodeDeploy で回復することはできません。これらのファイルは、アプリケーションリビジョン 1 に必要であれば、自分でインスタンスに追加できます。または、新しいアプリケーションリビジョンを作成できます。