Greenplum の Dockerfile を作り、Testcontainersから起動
· 3 分で読めます
Greenplum をベースのアプリケーション開発にはPostgresなどで代替することが多かったです。 ただ、Greenplumにしかないクエリとかを試すのに不便でした。 そこでGreenplumをコンテナで起動できるDockerfileを開発しました。 おまけでTestcontainersでSpringと連携したよ。
はじめに
GreenplumはPostgresをベースとしたRDBです。 Postgresで開発したアプリをGreenplumで動かす、は大抵OKなのですが、Greenplumにしかないクエリをベースに開発したい時に困ります。
いままでは、テスト環境を作り、そこで検証、といった手順がメインでしたが、コンテナでできないものか?ということで開発しました。
コード
ここにあります。READMEに細かい手順も書いているので、そちらを参照。 PostGIS, MADLib などの拡張やPXFなどの機能をいれています。
https://github.com/mhoshi-vm/greenplum-learn/tree/main/docker/gp78
なお、このDockerfileはあくまで検証向けであり、それを使って本番とかでは使わないでください。
SpringのTestcontainersで試す
Docker イメージがあれば、Springのテストコンテナから呼び出すことも可能です。
pom.xmlにはこの依存関係が必要です。
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-testcontainers</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.testcontainers</groupId>
<artifactId>testcontainers-postgresql</artifactId>
<scope>test</scope>
</dependency>
こんな感じのコードを入れます。
import org.springframework.boot.test.context.TestConfiguration;
import org.springframework.boot.testcontainers.service.connection.ServiceConnection;
import org.springframework.context.annotation.Bean;
import org.testcontainers.containers.wait.strategy.Wait;
import org.testcontainers.postgresql.PostgreSQLContainer;
import org.testcontainers.utility.DockerImageName;
@TestConfiguration(proxyBeanMethods = false)
class GreenplumTestcontainersConfiguration {
@Bean
@ServiceConnection
PostgreSQLContainer postgresContainer() {
return new PostgreSQLContainer(DockerImageName.parse("gp7").asCompatibleSubstituteFor("postgres"))
.waitingFor(Wait.forLogMessage("^.*statement: GRANT ALL PRIVILEGES ON DATABASE.*\\n", 1))
.withReuse(true);
}
}
おわりに
DockerでGreenplumで起動できれば、Testcontainersで使えて便利です。