カピバラ好きなエンジニアブログ

興味ある技術とか検証した内容を赴くままに書いていきます。カピバラの可愛さこそ至高。

CodeBuildのbuildspec.ymlの読み込み時にエラーが発生する

検証でAWSのCodeBuildを使用しているときに想定外のエラーが遭遇したので解決方法を書いておきます。

実施作業

エラー内容

詳細なログは詳細しますが、エラー内容としてはbuildspec.ymlファイルの記法が間違っているというものでした。

[Container] 2023/11/07 03:08:09.136329 YAML location is /codebuild/output/src2776259476/src/runtest-buildspec.yml
[Container] 2023/11/07 03:08:09.141915 Phase complete: DOWNLOAD_SOURCE State: FAILED
[Container] 2023/11/07 03:08:09.141949 Phase context status code: YAML_FILE_ERROR Message: could not find expected ':' at line 11


トラブルシュート

まず確認したのはbuildspec.ymlファイルの11行目付近を見てみました。
ただ、catコマンドで表示した感じは特に問題なさそうに見えます。

可能性がありそうなものを調べて試すのは時間かかりそうだったので、ChatGPTに聞いてみると以下のような回答がありました。

※DeepL翻訳済み
あなたが遭遇しているエラーメッセージは、YAMLパーサーがbuildspec.ymlファイルの11行目でコロン : 文字を期待していることを示しています。

提供されたbuildspec.ymlを見ると、このエラーを引き起こす可能性のある1つの一般的な問題は、タブとスペースが混在していたり、区切りのないスペースなど、非標準の空白文字を使用していることです。YAMLはインデントにとても敏感で、インデントには一貫したスペースの使用が必要です。

それを見てcatコマンドに-Aオプションを付けて非表示文字を出力した結果が以下になります。
所々で「M-BM-」という文字が表示されていることがわかります。

「M-BM-」が何者か調べてみると以下のページがヒットしました。
半角スペースのように見えていたので何故エラーが出ているかわからなかったのですが、読む限りは通常のスペース文字とは異なる文字になっていたようです。(よくわかってない)

M-BM-文字は、バイトシーケンス0xc2 0xa0をASCIIで表現したもので、ユニコード文字A0(改行しないスペース文字)のUTF8エンコードです。この文字は、LibreOfficeMicrosoft Wordの両方の文書で、Ctrl+ Shift+SPACEのキーシーケンスを使って挿入できます。

https://askubuntu.com/questions/357248/how-to-remove-special-m-bm-character-with-sed

手動で該当箇所を修正して再度CodeBuildを動かすとエラーが発生せずに正常終了するようになりました。


感想及び所感

最初調べても原因が思いつかず困ってましたが、ChatGPTのおかげで解決へのヒントをもらえました。
もうChatGPTがない生活に戻れる気がしません。笑

この記事がどなたかの参考になれば幸いです。