ENGINEERING ARTICLE
CodeDeployで「Error deleting directories: 2」が発生する原因と対処法
この記事は約2分で読めます
こんにちは、 @Manabu です。
CodeDeploy・CodePipelineを使用したCI/CD構成を使っていたのですが、突然エラーが発生しうまくデプロイできなくなってしまいました。
日本語の解決記事があまり見つからなかったので、残しておきます。
突然デプロイ時にエラーが発生した場合、同じ内容の可能性がありますので、ぜひ参考にしてください。
今回の構成
以前の記事で載せていているとおり、CodeCommitのマージをトリガーとして、EC2にソースの変更をリリースするようにしています。
構成図は以下です。

使用したサービス
- CodeCommit:ソースコードのバージョン管理
- CodeDeploy:EC2にアプリケーションをデプロイ
- CodePipeline:自動デプロイのパイプライン管理
発生したエラーについて
今回発生したエラーは、CodeDeployでEC2にソースをデプロイするタイミングで以下のエラーが発生しました。
Error deleting directories: 2

詳細を確認すると以下のような表示になっていました。

エラーの原因
エラーのメッセージをみると、CodeDeployがディレクトリを削除できなかったということがわかります。
色々記事を確認すると、以下の記事がありました。
中身をみると、/usr/lib/systemd/system/codedeploy-agent.serviceにあるCodeDeployエージェントの設定の"-a"オプションが原因で、rmコマンドなどによるディレクトリ削除処理が正常に動作しなくなっているようでした。
ExecStart=/bin/bash -a -c '[ -f /etc/profile ] && source /etc/profile; /opt/codedeploy-agent/bin/codedeploy-agent start'
解決方法
今回の原因は、上記の通り-aオプションになるため、こちらのオプションを外すことで解決しました。
## 以下のファイルを修正
sudo vi /usr/lib/systemd/system/codedeploy-agent.service
## コメントアウト
#ExecStart=/bin/bash -a -c '[ -f /etc/profile ] && source /etc/profile; /opt/codedeploy-agent/bin/codedeploy-agent start'
## -aオプションを外したものを追加
ExecStart=/bin/bash -c '[ -f /etc/profile ] && source /etc/profile; /opt/codedeploy-agent/bin/codedeploy-agent start'
設定変更後に、再度デプロイすると成功しました。
まとめ
今回は、CodeDeployエージェントのオプションが悪さをしていたようです。
特に設定を加えたりしていないため、同様の事象が発生する可能性は大きいです。
みなさまも同じ問題が発生した時はこちらの記事を参考に解決されることを願っています。