App Runnerを使用してSpring BootアプリからVPC内のElastiCache(Redis)へアクセスする – 【AWS】

App Runnerを使用してSpring BootアプリからVPC内のElastiCache(Redis)へアクセスする – 【AWS】

GitHubリポジトリにpushしたSpring BootアプリをApp Runnerでデプロイします。

前提

同一VPC内にElastiCache(Redis)があること

GitHub

GitHub - takahashi-h5/apprunner-springboot-redis
Contribute to takahashi-h5/apprunner-springboot-redis development by creating an account on GitHub.

DemoApplication.javaにGETとPOSTを追加しています。POSTでキャッシュしてGETでElastiCache(Redis)へアクセスしてキャッシュを取得します。

package jp.co.confrage.demo;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.core.ValueOperations;
import org.springframework.lang.NonNull;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RestController;


@SpringBootApplication
@RestController
public class DemoApplication {
    private final RedisTemplate<String, String> redisTemplate;

    DemoApplication(final RedisTemplate<String, String> redisTemplate) {
        this.redisTemplate = redisTemplate;
    }
    public static void main(String[] args) {
        SpringApplication.run(DemoApplication.class, args);
    }

    @GetMapping("/get")
    public String get() {
        ValueOperations<String, String> ops = redisTemplate.opsForValue();
        return "Status: " + ops.get("cache");
    }

    @PostMapping("/post/{data}")
    public String post(@PathVariable @NonNull final String data) {
        ValueOperations<String, String> ops = redisTemplate.opsForValue();
        ops.set("cache", data);
        return "Status: " + ops.get("cache");
    }
}

ElastiCache(Redis)の接続情報はapplication.yamlで持ち、環境変数で設定します。

application.yaml

spring:
  redis:
    host: ${CACHE_HOST:localhost}
    port: ${CACHE_PORT:6379}
    password: ${CACHE_PASSWORD:}

App Runnerでデプロイする為にあらかじめgradlewファイルに実行権限を追加しておく必要があります。

C:\>git update-index --chmod=+x gradlew
C:\>git ls-files -s
100644 c2065bc26202b2d072aca3efc3d1c2efad3afcbf 0       .gitignore
100644 b81fe9c14aedb15cab8f82df2c8baf0a966e76fa 0       build.gradle
100644 d64cd4917707c1f8861d8cb53dd15194d4248596 0       gradle/wrapper/gradle-wrapper.jar
100644 1af9e0930b89b3294ea6a195f0808aafd36fafe8 0       gradle/wrapper/gradle-wrapper.properties
★100755 1aa94a4269074199e6ed2c37e8db3e0826030965 0       gradlew
100644 93e3f59f135dd2dd498de4beb5c64338cc33beeb 0       gradlew.bat
100644 0a383dd8406758cd236169dcba8fe6c397f13115 0       settings.gradle
100644 17bb60efd8ad7c38c2538f032c1b9a4de91f59d7 0       src/main/java/jp/co/confrage/demo/DemoApplication.java
100644 a9e2c8da6e20138b80f63f9a90490c6b4d0ebf19 0       src/main/resources/application.yaml
100644 9b3b6be46391d0c3e5850db4d673e440ba2cd9b1 0       src/test/java/jp/co/confrage/demo/DemoApplicationTests.java
gradlew: Permission Denied
I am attempting to run gradlew from my command line, but am constantly facing the following error.Brendas-MacBook-Pro:ap...

App Runner

サービス作成します。ソースコードリポジトリ、プロバイダーはGitHubにします。

デプロイトリガーを「自動」にします。これでpushをトリガーとしてデプロイがされるようになります。

構築設定を行います。

Amazon Corretto 11までしか対応していないので「Corretto 11」を選択します。
※Lambdaだと21が使えます

構築コマンドです。

./gradlew bootJar && cp build/libs/demo-0.0.1-SNAPSHOT.jar ./

開始コマンドです。

java -jar ./demo-0.0.1-SNAPSHOT.jar

ポートは8080にします。

サービスを設定します。

「test」という名前にして、環境変数を設定します。

環境変数名
CACHE_HOST ElastiCache(Redis)エンドポイント
CACHE_PORT 6379

ネットワーキングの設定を行います。

「パブリックエンドポイント」、「カスタムVPC」を選択してVPCコネクタを新規作成します。

VPCコネクタを作成します。

「作成とデプロイ」を押してデプロイします。5分強かかります。

テスト

デフォルトドメインが表示されるので、それに/get,/postをつけてcurlでテストします。

C:\>curl -i -X GET https://d2mmtkp9rv.ap-northeast-1.awsapprunner.com/get
HTTP/1.1 200 OK
content-length: 12
content-type: text/plain;charset=UTF-8
date: Thu, 07 Mar 2024 03:14:33 GMT
x-envoy-upstream-service-time: 1471
server: envoy
connection: close

Status: null
C:\>curl -i -X POST https://d2mmtkp9rv.ap-northeast-1.awsapprunner.com/post/hoge
HTTP/1.1 200 OK
content-length: 12
content-type: text/plain;charset=UTF-8
date: Thu, 07 Mar 2024 03:14:41 GMT
x-envoy-upstream-service-time: 27
server: envoy

Status: hoge
C:\>curl -i -X GET https://d2mmtkp9rv.ap-northeast-1.awsapprunner.com/get
HTTP/1.1 200 OK
content-length: 12
content-type: text/plain;charset=UTF-8
date: Thu, 07 Mar 2024 03:14:47 GMT
x-envoy-upstream-service-time: 8
server: envoy

Status: hoge
C:\>curl -i -X POST https://d2mmtkp9rv.ap-northeast-1.awsapprunner.com/post/fuga
HTTP/1.1 200 OK
content-length: 12
content-type: text/plain;charset=UTF-8
date: Thu, 07 Mar 2024 03:14:55 GMT
x-envoy-upstream-service-time: 10
server: envoy

Status: fuga
C:\>curl -i -X GET https://d2mmtkp9rv.ap-northeast-1.awsapprunner.com/get
HTTP/1.1 200 OK
content-length: 12
content-type: text/plain;charset=UTF-8
date: Thu, 07 Mar 2024 03:14:59 GMT
x-envoy-upstream-service-time: 7
server: envoy

Status: fuga

コメント

株式会社CONFRAGE ITソリューション事業部をもっと見る

今すぐ購読し、続きを読んで、すべてのアーカイブにアクセスしましょう。

続きを読む

タイトルとURLをコピーしました