web-dev-qa-db-ja.com

AWS CodeDeployの失敗:指定されたファイルがこの場所にすでに存在するため、デプロイメントは失敗しました

AWSコードのデプロイをGithubで設定して、私の導入を自動化しようとしています。私が抱えている問題は、ec2インスタンスが既にアクティブであり、Webアプリのコードがあることです。問題は、ソース管理下にしたくないインスタンスのコンテンツが他にもあることです。コードのデプロイは次のエラーで失敗します:

The deployment failed because a specified file already exists at this location

これは、ソースコードがインスタンス上にあり、リビジョンとして追加されなかったためです。

だから私の質問は、コードのデプロイにインスタンスの現在のファイルを初期リビジョンとして認識させる方法はありますか?

15
Lonergan6275

これは可能です!これは、デプロイ時のオプションです。「コンテンツオプション:ターゲットインスタンス上のファイルが、同じターゲットロケーションのアプリケーションリビジョン内のファイルと同じ名前である場合に、デプロイ中にAWS CodeDeployが実行するアクションを選択します。」

失敗、上書き、保持を選択できます。保持は、おそらくあなたの場合には最良の選択です。

あなたはより多くの情報を見つけることができます

13
Seirddriezel

Webルートのコンテンツ全体を削除して、CodeDeployにそれを更新させるだけです。どのタイプのデプロイメントでも、コンテンツ全体が置き換えられます。

確信が持てない場合は、webrootを別のフォルダーにコピーしてください。万一障害が発生した場合は、すべて元に戻すことができます。

ディスク上のファイルが変更されていると、デプロイメントが失敗することがよくあります。CodeDeployがファイルの変更時刻をチェックしていると思います。

1
Nico Westerdale

エラーを解消したい場合は、以前のライフサイクルフックスクリプト(BeforeInstall多分)のいずれかを使用して、ソースが後のフックに再度追加される前にそのフォルダーを削除できます。ソースが後のフックで再度追加されない場合は、自分で追加します。

新しいインスタンスでもこのエラーが発生していました。そのため、CodeDeployはそのフォルダーを何らかの方法でキャッシュしている必要があり、そうすることで動揺しています。

1

EC2インスタンスを使用したCodeDeployで作業するときにも同じ問題が発生しました。

  • AWS CodeDeployデプロイメントグループからEC2インスタンスを削除しました。新しいEC2インスタンスをデプロイメントグループに追加しました。
  • それ以外の場合は、新しい展開グループを既存の展開グループに置き換えます。
0

問題は、CodeDeployが毎回の展開後に更新するクリーンアップファイルを維持することです。これらは、新しいファイルをインストールする前に削除するファイルです。もちろん、自分で作成することもできますが、それは難しいことです。 CodeDeployのポイントは、物事を簡単にすることです。これは私がやったことです(注:私のアプリには多くのファイルがあり、実際に苦痛で愚かではなく簡単に移行できるようにするCodeDeploy以外のものを見つけようとしていたので、このアプローチを定式化しました。ファイルの数。BeforeInstallスクリプトを作成するか、手動で削除する方が簡単な場合があります)。

  1. 無料枠EC2インスタンス(t2.micro)を作成します。アプリが巨大な場合は、より多くのディスク容量が必要になる可能性があるため、必要に応じて調整してください。これはあなたのアプリを実行していません!

  2. その新しいインスタンスを指す新しいデプロイメントグループを作成します。

  3. 実際にBeforeInstallまたはAfterInstallタスクを実行しない新しいYAMLを作成します。アプリを実行しようとしていません。文字通りファイルを移動しています。これは、そのクリーンアップファイルを取得できるようにするためです。

  4. デプロイ後、ec2インスタンスにsshして(セキュリティグループでSSHを許可することを忘れないでください!)、/ opt/codedeploy-agent/deployment-root/deployment-instructions /に移動します。

  5. {deployment-group-identifier} -cleanupが表示されます。これを実際にアプリを実行したいec2インスタンスにscpします。または、FileZillaをメインマシンに配置してから、メインec2インスタンスに配置します。私のローカルマシンには既に適切なキーがすべて揃っていたため、これが私にとって最も簡単な選択でした。

  6. メインのec2インスタンスにSSHで接続し、クリーンアップファイルが/ opt/codedeploy-agent/deployment-root/deployment-instructions /にない場合は移動します。失敗した{deployment-group-identifier}をメモし、クリーンアップファイルの{deployment-group-identifier}を失敗した識別子に置き換えます。

  7. デプロイメントを再実行します。

8。???

  1. 利益。

時間があるときは、これらの各ステップについてより詳細な説明を提供します(8と9 ...はなくなります)。

0
TurnipEntropy