App Runnerを使用してSpring BootアプリからVPC内のElastiCache(Redis)へアクセスする – 【AWS】
GitHubリポジトリにpushしたSpring BootアプリをApp Runnerでデプロイします。
前提
同一VPC内にElastiCache(Redis)があること
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

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

KHI入社して退社。今はCONFRAGEで正社員です。関西で140-170/80~120万から受け付けております^^
得意技はJS(ES20xx),Java,AWSの大体のリソースです
コメントはやさしくお願いいたします^^
座右の銘は、「狭き門より入れ」「願わくは、我に七難八苦を与えたまえ」です^^








コメント