Beeeat’s log

Beeeat’s log

プログラミングで出くわした知識やツール、日常生活、働き方その他色々なことをメモしていくブログ

「ゆるWeb勉強会@札幌 OnLine #11」で5分LTをしました

今月の28日(月)に「ゆるWeb勉強会@札幌 OnLine #11」で5分LTをしました.

mild-web-sap.connpass.com

今年は帰省せず,家での時間が比較的あったのと5分ぐらいで話せるネタがあったため思い切って参加してみました.

登壇資料

今回は「Amazon ECR を利用していたと思ったら、Docker Hub を利用し続けていた」というタイトルで登壇しました.

AWS CodeBuild(以下,CodeBuild) で CI 環境を構築した時にミスった内容についてまとめております. だいぶ細かすぎて伝わらない内容ではありますが補足します.

CI の構成

昨年の6月くらいから CI 環境を Circle CI から CodeBuild へ移行しました.以下が CodeBuild での CI 環境の構成です. 基本的にはローカル開発環境で利用している Docker イメージを使って CodeBuild で CI 環境を構築しています.

CodeBuild は Circle CI のように設定ファイル(Circle CI でいうconfig.yml,CodeBuild の場合はbuildspec.yml)で複数コンテナーを指定することができません.そのため,あらかじめ docker-compose がインストールされている「CodeBuild に用意されている Docker イメージ」というAWS 公式が提供している Docker イメージを利用して,複数コンテナーを指定するようにして,CI 環境を構築しています.

f:id:bake0937:20201231214825p:plain

「CodeBuild に用意されている Docker イメージ」についての詳細は過去に書いたのでもし良ければ

bake0937.hatenablog.com

ちなみに「CodeBuild に用意されている Docker イメージ」を知ったのは先月くらいで,それまでは CodeBuild で Docker in Docker に対応した Docker イメージを指定し, buildspec.yml 内で docker-compose をインストールするようにしていました.当時(去年の6月頃)は AWS と Docker はちょっと触ったくらいで知識や経験はそこまでありませんでした(これが後々関係します.)

Docker Hub で Pull 回数の制限についての記事をたまたま見かける

f:id:bake0937:20201231220726p:plain

CodeBuild を CI 環境として利用してから約一年くらい経った時にDocker Hub で Pull 回数の制限についての記事をたまたま見かけました.

見た直後は「ヤバ!なんとかしないと!」と思いましたが,数秒後には「そもそも Docker Hub ではなく Amazon ECR 使っているから問題ないじゃん」と思い,安心していました.

あれ? pull で Error になってる!?

数日後にプルリクエスト上で CI が突然 Error になり,見てみると「Too Many Requests」... Docker Hub に接続しているようでした.あれ?どういうこと?

f:id:bake0937:20201231222321p:plain

定数 COMPOSE_FILE という罠...

CI 用に用意している.envを見てみたら,COMPOSE_FILE という定数を設定してしまっていました.COMPOSE_FILE はdocker-compose.ymlのパスを設定するための定数です.buildspec.yml で CodeBuild 用のdocker-compose.ymlを使うように設定を書いていましたが,COMPOSE_FILEはローカル開発環境用のdocker-compose.ymlを指定してしまっていました.そしてローカル開発環境用のdocker-compose.ymlは Docker Hub のDockerイメージ用を pull して build するようにしています.

つまり,いくらbuildspec.yml で CodeBuild 用のdocker-compose.ymlであーだこーだしようとしても COMPOSE_FILEでローカル開発環境用のdocker-compose.ymlを指定してしたら Docker Hub に接続してしまうということです.

正直,「AWS Console で CodeBuild のログ見たら build してるのはすぐわかるだろ」とこの記事を見て思うかもしれませんが構築した当時の私は少し違和感を感じたもののチームでのコードレビューが通っちゃったのと CodeBuild がやっと動いたことで頭がいっぱいになり,「まぁ良いか」と思ってしまいました.

f:id:bake0937:20201231222631p:plain

f:id:bake0937:20201231222649p:plain

f:id:bake0937:20201231222718p:plain

CI 用のdocker-compose.ymlを利用するように修正

原因がやっとわかったのであとは修正です.やり方は色々ありますが,私の場合はローカル開発環境用のdocker-compose.yml を CI 用のdocker-compose.yml で上書きして対応しました.cpコマンドは普通に使うと確認メッセージが表示され,止まってしまうため強制的にコピーするには\(バックスラッシュ)を付ける必要があるのは今回の対応で知ることができました.

f:id:bake0937:20201231224303p:plain

やっと理想の構成に...

修正し,やっと理想の構成になりました.修正前と構成がだいぶ違いますね...

実際(修正前) 修正後
f:id:bake0937:20201231224816p:plain f:id:bake0937:20201231224859p:plain

今回の学び

内容をふりかえるとだいぶややこしい内容だとは思いますが,シンプルに言うとただの「凡ミス」です笑.ローカル開発環境で使っていたdocker-compose.ymlや設定ファイルを流用して CI 環境を構築していたのが主な要因です.

気づくのに約1年も掛かってしまい非常に悔しい思いをしたが,躓く度に AWS や Docker の仕組みについての興味関心がより持てるようになっているため気を落とさずに引き続きキャッチアップしていこうと思います.正直この1年で開発環境構築周りでの Docker に対する知識はだいぶ手に入れられていることを実感しています.

f:id:bake0937:20201231225234p:plain

当日の様子

当日の様子は主催者のtacckさんの方でまとめてくださりました.ありがとうございます. さまざまなバックグラウンドを持った方がたくさん登壇していたこともあり,あっという間な3時間でした.また私の出身大学の先生や現役生も参加しており,オンライン上ではありますが久しぶりに触れ合えて嬉しかったです.

togetter.com

まとめと所感

「ゆるWeb勉強会@札幌 OnLine #11」で5分LTをしました.今回はだいぶ細かい内容でしたが,どこかで軽く話しておきたいとちょうど思っていたので登壇できてとても良かったです.

ゆるWeb勉強会@札幌は通常回が2か月に1回,LTは半年に1回開催予定とのことなので,次回もまたチャンスがあれば登壇したいと思います.