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(ES6),Java,AWSの大体のリソースです
コメントはやさしくお願いいたします^^
座右の銘は、「狭き門より入れ」「願わくは、我に七難八苦を与えたまえ」です^^
コメント