2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Japan AWS Top EngineersAdvent Calendar 2024

Day 23

AWS CodePipelineのコンテナビルドが簡単に!?

Last updated at Posted at 2024-12-22

はじめに

こんにちは、株式会社ディーネットの大向井です。
本記事はJapan AWS Top Engineers Advent Calendar 2024の23日目の記事です。

この時期はre:Invent2024での画期的なアップデートに目が向きがちですが、折角なので確実に便利になっていて地味に嬉しいやつを拾っていきます。

CodePipelineでコンテナイメージのビルドとECRへの公開が自動でできるようになりました。
(Inspectorの方はこの記事では触れないので注意)

これまでもCodeBuildを使えばできましたがCodeBuildすらも要らなくなって簡単になっていますので紹介します!!

これまでのやりかた

これまではどうやっていたかと言うと、CodeBuildでビルドしてECRにプッシュするパターンが一般的かと思います。
例としては以下のようなbuildspecを用意してその中でコンテナイメージのビルドやECRへのプッシュをコマンドラインで定義します(実際の運用方法とか対象とかで変わると思いますが一番シンプルな感じで記載)。

version: 0.2
phases:
  pre_build:
    commands:
      - aws ecr get-login-password --region ap-northeast-1 | docker login --username AWS --password-stdin {ECRのURI}
      - REPOSITORY_URI={ECRリポジトリのURI}

  build:
    commands:         
      - docker build -t $REPOSITORY_URI:latest .
      - docker tag $REPOSITORY_URI:latest

  post_build:
    commands:
      - docker push $REPOSITORY_URI:latest

この程度の内容であればこれ、もう要らないんですよ。

アップデートについて

CodePipelineのアクションとして「ECRBuildAndPublish」というアクションが追加されました。
このアクション一つでコンテナイメージのビルドとECRへの公開をパパっとやってくれるようになるのでただコンテナイメージをビルドするだけならCodeBuildは要らなくなります。

必要な対応

以下の対応が必要です。

  • CodePipelineのパイプラインにアクションを追加、設定
  • CodePipelineで利用するIAMロールに必要な権限を設定

まずアクションの設定ですがアクションプロバイダーに「ECRBuildAndPublish」を設定して、入力アーティファクト、対象のECRリポジトリ、設定するタグ、Dockerfileのパス、環境変数を指定するだけです。
簡単ですね。

IAM権限については内容自体は基本的にCodeBuildで実施する場合と同じです。
CodePipelineのロールに権限を設定する必要がある点は注意です。

必要な権限は以下のドキュメントに記載があります。これに追加して「ecr:DescribeRepositories」も必要です。

やってみた

最後にやってみたと称してスクショで操作イメージを共有します。

ソースリポジトリ

まずは今は亡きCodeCommitに適当なリポジトリを作ってソースをプッシュします。

commit.png

プロジェクト直下にDockerfileを置いています。

ECRリポジトリ

公開先のコンテナイメージリポジトリとしてECRリポジトリを作成します。
現時点では空です。

ecr1.png

パイプライン

CodeCommitをソースとしてパイプラインを作成しました。
「ECRBuildAndPublish」アクションの設定はこんな感じになっています。

buildandpublish.png

プロジェクト直下にDockerfileがない場合はパスを指定する必要があるので注意です。

これを実行します。
パイプラインの実行に成功しました。

pipeline.png

余談ですが最初はベースのイメージとしてDockerHubからコンテナイメージをプルするようにしていましたが、リクエスト数制限による接続IPガチャで検証が進まなくなってしまったのでECR Public Galleryからプルするように変更しました。
CodeBuildでやってたときより大変かも。

閑話休題、パイプラインの実行が完了して、無事にコンテナイメージもECRに登録されています。

ecr2.png

ここまで圧倒的スピード感で出来ました。

最後にApp Runnerからコンテナの動作確認をして締めとします。

santa.png

サ、サンタさん……顔が……!!

おわりに

buildspecを書かなくてもコンテナのビルドできるようになったのは地味に嬉しいですね。
私が初めて触ったときは書き方も全然分からないしbuildspecとappspecって何が違うのみたいな感じだったので初学者さん的にもよりコンテナ開発がやりやすくなったのかなと思いました。

以上、ありがとうございましたー。

2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?