【AWS】Spring Bootプロジェクトをjibを使ってDockerイメージを作成しCodePipelineでBeanstalkへデプロイする

2020年3月2日

CodePipelineの構成

 CodeCommitからソースコードを取得しビルド、デプロイを行う。ビルドステージでは以下の2点を行う。

  1. Dockerイメージを作成とECRへプッシュ
  2. Beanstalkのデプロイ設定ファイルであるDockerrun.aws.jsonをアーティファクトとして出力

 デプロイステージではDockerrun.aws.jsonを使用しBeanstalkへのデプロイを実行する。 AWSアカウントIDはCodeBuildの環境変数から取得している。DockerイメージはECRへプッッシュし、Dockerrun.aws.jsonはアーティファクトとして出力している。
codepipeline.png

Buildステージの構成

 CodeBuildを使用しビルドを行う。codepipeline_build_jib.png
Codebuildで使用するbuildspec.ymlを以下のように作成する。
AWSアカウントIDはCodeBuildの環境変数から読み込むようにしている。
Spring BootプロジェクトのDockerイメージを作成するためにJIBを使用している。

 GradleコマンドでDockerイメージを作成しECRへイメージをプッシュする。その後、Dockerrun.aws.json中のAWSアカウントIDをsedコマンドを使用し実際の値に書き換える。


version: 0.2

phases:
  install:
    runtime-versions:
      docker: 18
  pre_build:
    commands:
      - $(aws ecr get-login --no-include-email)
  build:
    commands:
      - ./gradlew test
      - ./gradlew jibDockerBuild
      - docker images
  post_build:
    commands:
      - docker push $AWS_ACCOUNT_ID.dkr.ecr.ap-northeast-1.amazonaws.com/api
      - sed -i s/AWS_ACCOUNT_ID/${AWS_ACCOUNT_ID}/ Dockerrun.aws.json
  artifacts:
    files:
      - 'Dockerrun.aws.json'

デプロイステージの構成

 アクションプロバイダーでBeanstalkを選択すればよい。
CodePipeline_deploy_beanstalk.png

AWS, Java, Spring

Posted by fanfanta