Open3

[TIL] 15. AWS CodeSeries

wakakawakaka

<IMAGE1_NAME>, <TASK_DEFINITION>が定義される流れ

DeployステージにおけるProviderとしてCodeDeployToECSを指定している場合、
taskdef.jsonに<IMAGE1_NAME>, appspec.ymlに<TASK_DEFINITION>というプレースホルダを定義しておくとCodeDeployが置換してくれる。

https://docs.aws.amazon.com/codepipeline/latest/userguide/action-reference-ECSbluegreen.html#action-reference-ECSbluegreen-input
https://blog.serverworks.co.jp/cicd-ecs-build-deploy-flow

wakakawakaka

Docker HubのPullレート制限による429 Too Many Requestsを回避する

CodeBuildにおいてDockerfileからコンテナイメージをビルドする際に429 Too Many Requestsが発生することがある。これはDocker Hubからのコンテナイメージの Pull 回数にレート制限が設定されていることが原因である。

Dockerfileからコンテナイメージをビルドする際には、FROM ubuntu:20.04などのようにして定義されるベースイメージをDocker HubからPullする必要があり、この回数が「CodeBuild環境に割り当てられるGlobal IP当たり100回/6時間」というレート制限を抵触した場合に429エラーが発生する(8つのGlobal IPを全ユーザで共有している事が肝)。

ユーザ認証することで「200回/6時間」というレート制限を占有することができるため、CodeBuildを利用してコンテナイメージをビルドする際には、基本的にDocker Hubにユーザ認証する。

Dockerfile
FROM ubuntu:20.04
RUN apt-get update
COPY ./hello.sh /hello.sh
CMD [ "/hello.sh" ]

https://dev.classmethod.jp/articles/codebuild-has-to-use-dockerhub-login-to-avoid-ip-gacha/

wakakawakaka

Buildステージでビルド実行環境に複製するコードの格納場所

CodePipelineのBuildステージとしてCodeBuild Projectを指定すると、BuildステージとCodeBuild Projectの両方でコード格納場所を指定することとなる。この際には、CodeBuild Projectで定義された値よりも、CodePipeline Buildステージで定義された値が優先される。つまり、CodeBuild ProjectでGitHubリポジトリをコード格納場所として指定したとしても、BuildステージでS3バケットを指定していた場合には、S3バケットに格納されているソースアーティファクトがビルド実行環境に複製される。

https://nobelabo.hatenablog.com/entry/2022/05/21/202517