[TIL] 15. AWS CodeSeries

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

429 Too Many Requests
を回避する
Docker HubのPullレート制限による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にユーザ認証する。
FROM ubuntu:20.04
RUN apt-get update
COPY ./hello.sh /hello.sh
CMD [ "/hello.sh" ]

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