Spring Boot バッチをコンテナ化して ECR に push するまで

本ブログのブックマークデータを整理するため、簡易的なバッチアプリをつくりたい。
Spring Boot + CommandLineRunner を使って実装し、それを ECR に push するところまでをメモしておく。

アプリを用意

依存関係は最小構成。spring-boot-starter だけを入れて、CommandLineRunner を実装した。
いつものサイト。https://start.spring.io/index.html

<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter</artifactId>
</dependency>

実装はこんな感じ。

@SpringBootApplication
public class HogeBatchApplication implements CommandLineRunner {
  public static void main(String[] args) { SpringApplication.run(App.class, args); }

  @Override
  public void run(String... args) throws Exception {
    System.out.println("Hello Batch!");
  }
}

これで ./mvnw spring-boot:run をすると「Hello Batch!」が出て終わる。

Jar のビルド

./mvnw -DskipTests package

すると target/hogehoge-0.0.1.jar ができる。

Docker で起動

FROM eclipse-temurin:21-jre-alpine
WORKDIR /app
COPY target/hogehoge-0.0.1.jar app.jar
ENTRYPOINT ["java","-jar","/app/hogehoge.jar"]

ローカルで試す。

docker build -t hogehoge:latest .
docker run --rm hogehoge:latest

「Hello Batch!」が出れば OK。

ECR リポジトリの作成と push

ECR にリポジトリを作って、そこに push する。

aws ecr create-repository --repository-name api-runner --region ap-northeast-1

次にログイン。

ACCOUNT_ID=$(aws sts get-caller-identity --query Account --output text)
ECR_URI=$ACCOUNT_ID.dkr.ecr.ap-northeast-1.amazonaws.com/api-runner

aws ecr get-login-password --region ap-northeast-1 \
  | docker login --username AWS --password-stdin $ECR_URI

push する。

docker tag api-runner:latest ${ECR_URI}:latest
docker push ${ECR_URI}:latest

終わり

これで「Spring Boot バッチアプリをコンテナ化して ECR に push」まで完了。
あとは実際に AWS 上で動かすところまでやりたい。ECS on Fargate かな?AI の力を借りて terraform で構築したいところではある。