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 で構築したいところではある。