■ はじめに
https://dk521123.hatenablog.com/entry/2020/01/23/231827
でも触れた AWS CodeBuild について、 使うことになったので、勉強
目次
【1】AWS CodeBuild 【2】公式サイト 【3】使用上の注意 【4】大雑把な流れ 【5】buildspec ファイル(buildspec.yml) 【6】Hello World 1)手順 2)フォルダ構成 【7】主な環境変数
【1】AWS CodeBuild
* 完全マネージド型のビルドサービス * 以下をまずは、ざっくり読むといいかも
https://www.slideshare.net/ssuser8125c5/codebuild-82151957
成果物例
* Dockerイメージ をビルドして、Amazon ECR に プッシュする => Amazon ECR について、以下の関連記事を参照のこと。
https://dk521123.hatenablog.com/entry/2020/05/22/165711
【2】公式サイト
ユーザズガイド
https://docs.aws.amazon.com/ja_jp/codebuild/latest/userguide/welcome.html
https://docs.aws.amazon.com/ja_jp/codebuild/latest/userguide/codebuild-user.pdf
Github / アクセストークン
https://docs.aws.amazon.com/ja_jp/codebuild/latest/userguide/sample-access-tokens.html
【3】使用上の注意
シェルや外部モジュールなどが、Exit code 0 以外が返した場合 異常が発生したとみなし、処理が中断する。 以下の関連記事でも触れているが
CodeBuildに flake8 を組み込む
https://dk521123.hatenablog.com/entry/2020/02/17/220545
コードチェックするモジュール flake8 は、 規約違反があった場合に、Exit code = 1 を返す。 つまり、一件でも規約違反があった場合に、異常が発生したとみなし、 処理が中断する。 => 分かってしまえば、なんてことはないが、 作業してると気が付かず、はまる...
【4】大雑把な流れ
1)Github などからコードを取得 2)好きなDockerコンテナを作成 3)2)上で buildspec.yml に指定したコマンドを実行 => CodeBuild は、この「buildspec.yml」がキモになる
【5】buildspec ファイル(buildspec.yml)
* YAML形式で記入 => YAML については、以下の関連記事を参照
https://dk521123.hatenablog.com/entry/2019/10/13/000000
公式サイト
https://docs.aws.amazon.com/ja_jp/codebuild/latest/userguide/build-spec-ref.html
サンプル:buildspec.yml
# version: ビルド仕様のバージョン # (「0.2 を使用することをお勧めします」だそうだ) version: 0.2 # env : カスタム環境変数(任意) env: variables: HELLO: "Hello world!" # phases : 各ビルドイベントのコマンドを指定(必須) phases: # インストール時イベント install: runtime-versions: # Amazon Linux 2:2.0 および Ubuntu Standard:3.0 なら「3.8」 # それ以外は「3.7」 python: 3.8 commands: - echo "Entered the install phase... $HELLO." - apt-get update -y - pip install pipenv finally: # finallyで各イベント完了をハンドリングできる - echo "Done the install phase..." # ビルド前イベント pre_build: commands: - echo 'pre_build' # ビルドイベント build: commands: - echo 'build' # ビルド後イベント post_build: commands: - echo 'post_build'
【6】Hello World
感じを掴むために、Hello world的なことをやる (やってることは意味がない)
1)手順
[1] 準備
[1] 以下の「フォルダ構成」をZIPファイルとして固める => 「hello_world.zip」とする [2] 任意のS3(s3://hello-world-xxx)にZIPファイルをアップする
[2] プロジェクト作成
[1] AWSマネージメントコンソールからAWS CodeBuildに移動 [2]「プロジェクトの作成」を選択 [3] 以下を入力 + Project Name:hello-world-codebuild + ソースプロバイダー:Amazon S3 + Bucket (バケット):ZIPファイルを保存しているS3バケット名(hello-world-xxx) + S3 オブジェクトキー:ZIPファイル(hello_world.zip) + 環境イメージ:AWS CodeBuildによって管理されたイメージの使用 + オペレーティングシステム:Ubuntu + ランタイム:Python 他は任意。以下を参考
[4] [Create build project (ビルドプロジェクトの作成)] を選択
[3] 動作確認
https://docs.aws.amazon.com/ja_jp/codebuild/latest/userguide/getting-started-run-build-console.html
[1] [Build projects] を選択 [2] ビルドプロジェクトのリストで、[hello-world-codebuild]-[ビルドの開始] の順に選択 [3] [ビルドの開始] ページで、[ビルドの開始] を選択 => 「success」になればOK!
2)フォルダ構成
+ buildspec.yml + src + hello_world.py + libs + requirements.txt
buildspec.yml
version: 0.2 phases: install: runtime-versions: python: 3.8 commands: - apt-get update -y - pip install --upgrade pip - pip install -r libs/dependency.txt build: commands: - echo 'Starting' - python3 src/hello_world.py # ↓ こんな感じでS3にアップすることもできる #- aws s3 cp src/hello_world.py s3://hello-world-xxx/src/hello_world.py # 複数行は以下のように記述する (YAMLフォーマットに従う) #- > # aws s3 cp # src/hello_world.py # s3://hello-world-xxx/src/hello_world.py
YAMLについては、以下の関連記事を参照のこと
https://dk521123.hatenablog.com/entry/2019/10/13/000000
hello_world.py
print('Hello World')
requirements.txt
awscli boto3
【7】主な環境変数
https://docs.aws.amazon.com/ja_jp/codebuild/latest/userguide/build-env-ref-env-vars.html
環境変数 | 説明 |
---|---|
AWS_DEFAULT_REGION | |
AWS_REGION | ビルドが実行されているリージョン (ex: us-east-1) |
CODEBUILD_RESOLVED_SOURCE_VERSION | ビルドのソースコードのバージョン(ソースリポジトリによって異なる) |
CODEBUILD_SOURCE_VERSION | バージョン(ソースリポジトリによって異なる) |
CODEBUILD_WEBHOOK_EVENT | |現在のビルドをトリガーした Webhook イベント |
参考文献
https://ohke.hateblo.jp/entry/2019/07/06/230000
https://qiita.com/numa08/items/8cbb602dea429c1c494b
https://dev.classmethod.jp/cloud/aws/codebuild-github-pullrequest-settings/
https://dev.classmethod.jp/cloud/aws/codebuild-with-github-on-cfn/
https://qiita.com/notsatoru/items/f02eca44122528fdcd32
https://qiita.com/oguchy/items/f7a9b537396dad606881
https://www.wakuwakubank.com/posts/660-aws-codepipeline/
https://hackerslab.aktsk.jp/codebuild-batch-operation
https://ohke.hateblo.jp/entry/2019/07/06/230000
https://tech.actindi.net/2018/08/31/120906
https://www.scsk.jp/sp/sysdig/blog/sysdig_secure/aws_codepipelineaws_codebuild.html
関連記事
CodeBuild 関連
CodeBuild ~ Boto3編 ~
https://dk521123.hatenablog.com/entry/2021/12/21/134528
CodeBuildに flake8 を組み込む
https://dk521123.hatenablog.com/entry/2020/02/17/220545
CodeBuild で パラメータストア / Secrets Manager を使う
https://dk521123.hatenablog.com/entry/2020/02/18/230358
CodeBuild で Python のバージョンを切り替える
https://dk521123.hatenablog.com/entry/2020/02/19/230909
CodeBuild で カスタムDockerイメージを使ってビルドする
https://dk521123.hatenablog.com/entry/2020/05/23/080655
CodeBuild ~ 各開発フェーズで設定を切り替えることを考える ~
https://dk521123.hatenablog.com/entry/2020/06/06/120734
その他
CodePipeline ~ 入門編 ~
https://dk521123.hatenablog.com/entry/2020/01/23/231827
CodeDeploy ~ 入門編 ~
https://dk521123.hatenablog.com/entry/2021/10/26/224812
AWS CloudFormation ~ 入門編 ~
https://dk521123.hatenablog.com/entry/2021/10/26/224812
Amazon ECR ~ 入門編 ~
https://dk521123.hatenablog.com/entry/2020/05/22/165711
Terraform ~ 入門編 ~
https://dk521123.hatenablog.com/entry/2019/12/09/222057
機密データの管理 ~ パラメータストア / Secrets Manager ~
https://dk521123.hatenablog.com/entry/2020/01/31/231636
Github ~ Webhook 編 ~
https://dk521123.hatenablog.com/entry/2020/01/25/224402
Github ~ Github Actions 編 ~
https://dk521123.hatenablog.com/entry/2021/11/04/142835
YAML (YAML Ain't Markup Language)
https://dk521123.hatenablog.com/entry/2019/10/13/000000