sbt-native-packagerとsbt-ecrを使って、ビルド→ECRログイン→ECRへのプッシュまで行います。
https://github.com/sbt/sbt-native-packager https://github.com/sbilinski/sbt-ecr
ECRを作成する
レジストリを作る。作成後 以下のようなURIが取得できます。
123456789012.dkr.ecr.ap-northeast-1.amazonaws.com/j5ik2o/thread-weaver-api-server
sbtプラグインの設定の設定
project/plugins.sbt
// ... addSbtPlugin("com.mintbeans" % "sbt-ecr" % "0.14.1") addSbtPlugin("com.typesafe.sbt" % "sbt-native-packager" % "1.3.10") // ...
build.sbtの設定
repositoryName
は、上記で得られたURIのホスト名を除く文字列(j5ik2o/thread-weaver-api-server
)を指定すること
import com.amazonaws.regions.{Region, Regions} val ecrSettings = Seq( region in Ecr := Region.getRegion(Regions.AP_NORTHEAST_1), repositoryName in Ecr := "j5ik2o/thread-weaver-api-server", repositoryTags in Ecr ++= Seq(version.value), // タグを付ける場合は指定する localDockerImage in Ecr := "j5ik2o/" + (packageName in Docker).value + ":" + (version in Docker).value, push in Ecr := ((push in Ecr) dependsOn (publishLocal in Docker, login in Ecr)).value ) val `api-server` = (project in file("api-server")) .enablePlugins(AshScriptPlugin, JavaAgent, EcrPlugin) .settings(baseSettings) .settings(ecrSettings) .settings( name = "thread-weaver-api-server", dockerBaseImage := "adoptopenjdk/openjdk8:x86_64-alpine-jdk8u191-b12", maintainer in Docker := "Junichi Kato <j5ik2o@gmail.com>", dockerUpdateLatest := true, dockerUsername := Some("j5ik2o"), bashScriptExtraDefines ++= Seq( "addJava -Xms${JVM_HEAP_MIN:-1024m}", "addJava -Xmx${JVM_HEAP_MAX:-1024m}", "addJava -XX:MaxMetaspaceSize=${JVM_META_MAX:-512M}", "addJava ${JVM_GC_OPTIONS:--XX:+UseG1GC}", "addJava -Dconfig.resource=${CONFIG_RESOURCE:-application.conf}" ), // ... )
実行
profileを使う場合は以下のようにする
$ AWS_DEFAULT_PROFILE=xxxxx sbt api-server/ecr:push