[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

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

*