[A-00179]JavaでCloudRunを作成する
Javaを使ってCloudRunを作成したいと思います。
・JibでCloudRunをMavenからデプロイしてみる
jib-pluginでmvnコマンドからcloudrunをGCP環境にデプロイしてみたいと思います。
mvnプロジェクトを作成します。シンプルアーキテクチャです。
波括弧は適当に書き換えてください。今回はcloudruntestにしました。
mvn archetype:generate \
-DarchetypeArtifactId=maven-archetype-quickstart \
-DinteractiveMode=false \
-DgroupId={group-id} \
-DartifactId={project-name}
まずgcloudの設定を行います。
gcloud auth configure-docker
pom.xmlを下記の内容に書き換えます。
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>cloudruntest</groupId>
<artifactId>cloudruntest</artifactId>
<packaging>jar</packaging>
<version>1.0-SNAPSHOT</version>
<name>cloudruntest</name>
<url>http://maven.apache.org</url>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<maven.compiler.target>17</maven.compiler.target>
<maven.compiler.source>17</maven.compiler.source>
<spring-boot.version>3.2.1</spring-boot.version>
</properties>
<dependencyManagement>
<dependencies>
<dependency>
<!-- Import dependency management from Spring Boot -->
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>${spring-boot.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.junit.vintage</groupId>
<artifactId>junit-vintage-engine</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<version>${spring-boot.version}</version>
<executions>
<execution>
<goals>
<goal>repackage</goal>
</goals>
</execution>
</executions>
</plugin>
<plugin>
<groupId>com.google.cloud.tools</groupId>
<artifactId>jib-maven-plugin</artifactId>
<version>3.4.0</version>
<configuration>
<to>
<image>gcr.io/<your-project-id>/helloworld</image>
</to>
</configuration>
</plugin>
</plugins>
</build>
</project>
defaultで作成されるApp.javaを下記のように変更します。
package cloudruntest;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.bind.annotation.GetMapping;
@SpringBootApplication
public class App {
@Value("${NAME:world}")
String name;
/**
*
* GreetingController
*/
@RestController
public class GreetingController {
@GetMapping("/")
public String greeting() {
return new StringBuilder().append("Guten ").append(name).toString();
}
}
public static void main( String[] args ) {
SpringApplication.run(App.class, args);
}
}
上記の作業が終わったらmvnコマンドでjibからcontainer-registryに登録します。
mvn compile jib:build
BUILD SUCCESS すれば完了です。
Artifact Registryに下記の通り登録されます。

・CloudRunにデプロイする
gcloudコマンドでデプロイします。
gcloud run deploy greeting-service \
--image gcr.io/<your-project-id>/helloworld \
--platform managed
上記が成功するとServiceURLが表示されます。下記のコマンドでアクセスしてみます。
curl -H "Authorization: Bearer $(gcloud auth print-identity-token)" https://greeting-service-<your-number>-an.a.run.app
上記がうまくいくと「Guten world」というレスポンスが得られます。
CloudRunの削除は下記のコマンドを実行してください。
gcloud run services delete greeting-service
・Appendix
公式ドキュメントはこちら
https://cloud.google.com/java/getting-started/jib?hl=ja
https://github.com/GoogleCloudPlatform/java-docs-samples/tree/main/run/helloworld
コメントを残す