LoginSignup
0
0

More than 1 year has passed since last update.

【備忘】GKEにAPIをデプロイしてみる【Java】

Last updated at Posted at 2022-01-03

GKEにAPIをデプロイする

経緯

仕事でJavaで作成したAPIをGKEにデプロイしてくださいと言われた際に、色々やってデプロイしたのでその時の記憶を備忘として載せます。

 前提

・Mavenプロジェクトで作成したアプリであること(違う場合は都度読み替える必要あり)
・デプロイする対象のワークロードが存在すること
・Cloud SDKのインストールを済ませていて対象のプロジェクトの認証が済んでいること
(参考:https://qiita.com/Quasar9/items/c5c633078ae091328260)
・Dockerのインストールが済んでいること

デプロイしたいAPI

Sample4Controller.java
@RestController
@RequestMapping("/sample4")
public class Sample4Controller {

    @GetMapping("/hoges")
    public ResponseEntity<SampleResponse> getHogeResponses() {
        SampleResponse response = new SampleResponse();

        List<Hoge> hogeList = new ArrayList<>();
        hogeList.add(new Hoge("1", "hoge1", "explanation1"));
        hogeList.add(new Hoge("2", "hoge2", "explanation2"));
        response.setHogeList(hogeList);

        return new ResponseEntity<>(response, new HttpHeaders(), HttpStatus.OK);
    }
}
SampleResponse.java
@Data
@NoArgsConstructor
public class SampleResponse {
    private List<Hoge> hogeList;
}
Hoge.java
@Data
@AllArgsConstructor
public class Hoge {
    private String id;
    private String name;
    private String explanation;
}

GKEへデプロイする方法

次の2つが主な手順となる。
・DockerイメージをContainer Registryに登録する
・Container Registryに登録したイメージをワークロードのデプロイメントに指定する

DockerイメージをContainer Registryに登録する

今回はJibを使ってDockerイメージを作成する。
使い方としてはpomに下記を追加する。

pom.xml

            <plugin>
                <groupId>com.google.cloud.tools</groupId>
                <artifactId>jib-maven-plugin</artifactId>
                <version>2.8.0</version>
                <configuration>
                    <allowInsecureRegistries>true</allowInsecureRegistries>
                    <to>
                        <image>asia.gcr.io/project-id/test:tag</image>
                    </to>
                    <container>
                        <environment>
                            <TZ>Asia/Tokyo</TZ>
                            <LANG>C.UTF-8</LANG>
                        </environment>
                    </container>
                </configuration>
            </plugin>           

下記の部分はContainer Registryのパスを指定する。
また、:の後はイメージのタグを任意の名称でつける。

<to>
  <image>asia.gcr.io/project-id/test:tag</image>
</to>

:の前の部分は下記画像の赤枠をコピーすればよい。
image.png

Jibの設定をしたら下記のコマンドを実行してイメージの作成&Container RegistryへのPUSHをする。※

mvn compile jib:build

下記オプションでタイムアウト値も設定できる。

-D jib.httpTimeout=80000

こんな感じになれば成功
image.png

Container Registryを見てimageがPUSHされているかを確認する。

※ コマンドを実行した際にエラーがあった場合、認証情報を確認する。
また、下記のコマンドを実行してDockerにContainer RegistryにPUSHするための認証情報を設定する。

gcloud auth configure-docker

Container Registryに登録したイメージをワークロードのデプロイメントに指定する

ここまでの手順でContainer Registryにimageの登録が済んでいるので、デプロイ対象のワークロードを選択してデプロイメントにimageを設定して保存する。

    spec:
      containers:
        image: <imageのpath>:<tag名>

変更を保存すれば最新のイメージでワークロードが更新される。

ロードバランサを作成して公開する

Kubernetes Engine >> ワークロード >> 対象のワークロードを選択 >> 公開タブをクリック >> 任意のPORTを指定してサービスタイプをロードバランサを選択して公開をクリック

上記で作成されたIPとPORTとAPIで指定したEnd Pointに対してリクエストを送ってレスポンスが返れば成功。

下記はブラウザを直接たたいた例
image.png

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0