North Detail / ノースディテール

BLOG ブログ

ブログ
CATEGORY
TECH

CodeDeployでLifeCycleがスキップされた話

今回の学び

Extended Attributesが付加されたファイルをCodeDeployで実行しようとするとスキップされる。
Macで書いたシェルスクリプトがスキップされたらパーミッションに"@"が付いていないかMac上で確認しましょう。

状況

AWSの自動デプロイサービスであるCodeDeployにはLifeCycle Hookという機能がありまして、
用意したシェルスクリプトを特定のタイミングで実行させることができます。

そのシェルスクリプトを作成、動作確認、修正ということを繰り返していますと
あるとき3つ用意したシェルスクリプトの内、1つだけが実行されなくなりました。

関係する箇所を調査しまして、以下のことを確認できました。

  • 実行シェルスクリプトとタイミングを指定する appspec.ymlに記載漏れはない
  • EC2上に展開されたデプロイ資材ディレクトリに該当のシェルスクリプトファイルは存在している
  • CodeDeploy Agentの実行ログに該当シェルスクリプトに関する記述はない
    (その他のシェルスクリプトは実行ログあり)

原因

スキップされたシェルスクリプトファイルにだけ見慣れないパーミッションが付加されていました。

% ls -la
-rw-r--r--@ ... filename.sh

今回スキップされたシェルスクリプトが上記のパーミッション設定となっていました。
一番右端のアットマークは、MacにおいてExtended Attributesという拡張属性であり
これが付加されているファイルはバイナリとして扱われるそうです。

Macでシェルスクリプトを作成し、何度か実行を確認していたのですが修正を繰り返している間に
どこかのタイミングでExtended Attributesを付加してしまったようです。

対策と結果

対策として、問題のシェルスクリプトファイルを作成し直しExtended Attributesが付加されていない状態にすることで、CodeDeployで意図した通りに動かせるようになりました。

xattrコマンドを使用することで付加されたExtended Attributesを除外することも可能ですが、gitに上げるに当たって綺麗にしておきたいと思いファイルを作成し直しで対応することにしました。

まとめ

今回の問題はLinuxでパーミッションを確認してもアットマークは表示されない、という点が少し厄介な問題でした。

Macで作成したファイルが意図しない動きをしたときはパーミッションも確認してみましょう。
そこにアットマークが付いているかもしれません。

Fuji
WRITER:Fuji
主な記事 一覧へ

一覧へ

IS 501383 / ISO 27001