環境
- AWS CodeStar
- AWS CodeDeploy
- AWS CodeBuild
- Django: 2.1.4
はじめに
- どうやらここ数日に,テンプレートアプリが変わった
- CodeStar製アプリで発生しました
- ある条件をクリアすると,エラー沼にハマった話
- あくまで備忘録程度です
The overall deployment failed because too many individual instances failed deployment, too few healthy instances are available for deployment, or some instances in your deployment group are experiencing problems.
このエラーは,CodeDeploy上で発生します.意味は分かるんですけど,原因はわからない....
そこで,素直にDeployにおけるどのイベント中に発生したか確認します.
ApplicationStop
中にエラーが発生したことが確認できました.これは,前回デプロイしたアプリを正常に終了できなかったことを表しています(間違っているかもしれません...)
つまり,エラーが起きた原因は,直前のデプロイ内容にあります.
エラー原因:appspec.ymlとbuildspec.ymlにfileを追記しなかった
Djangoでは,新規アプリを作成する際に下記のコマンドを打ちます.
python manage.py startapp myapp
その後,'settings.py'に追記します.
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'myapp', 追記箇所
]
ここから忘れていたがために,沼にハマったポイントです.
appspec.yml
に下記を追記
files:
- source: /myapp/ 追記箇所
destination: /home/ec2-user/myapp 追記箇所
buildspec.yml
に下記を追記
files:
- "myapp/**/*" 追記箇所
エラーを強行突破する
これでファイルの修正は完了です.しかし,このままデプロイしてもエラーが出続けます....
そこで,CodeDeploy上から強行突破します.
まず,アプリケーション
からアプリ名を選択して,アプリケーションをデプロイする
を選択します.
次にリビジョンタイプ
を選択します.ちなみに,CodeDeployとGitHubの接続は,自分のユーザーネームをGitHubトークン名の欄に入力すると.GitHubのページヘ遷移してうまくできます.
あとは,リポジトリ名やコミットIDを入力します.
最後に,追加のデプロイ動作設定
を行います
ApplicationStopなどライフサイクル中のエラーを無視するなら,最初の欄にチェックを入れます.また,同一ファイルの存在によるエラーであれば,コンテンツの上書きにチェックを入れます.
以上で,強行突破できるはずです.
感想
codedeploy上以外にも,aws cliコマンドからも強行突破ができます.本当は,こんなエラーが出ないようにコーディングしましょうという話ですよね(精進します).
たどり着くまでにまる1日を要しました.エラーが発生した後にSSHでログを見たり....まぁ,そもそもREADMEを見ると,ymlに追記してね!と書いてあったんですけどね....
インフラ周りお勉強するぞー!