[Spring Boot] EC2 以外から AWS を使うときの設定

JavaAWS,SpringBoot

ローカル開発環境から AWS SDK for Java と Spring Cloud AWS を利用して、AWS サービスにアクセスする時の設定ファイルへの記述をメモ。

環境

Windows
Java 11
Spring Boot 2.4.2 (Gradle)
Spring Cloud AWS
AWS SDK for Java

認証情報の設定

AWS SDK for Java から AWS リソースにアクセスするには、認証情報を設定する必要がある。今回はローカル PC 上の開発環境での設定なので、公式ガイド 開発用の AWS 認証情報とリージョンのセットアップにあるローカルに認証ファイルを作成する方法にした。
この方法だと、AWS SDK for Java が自動で認証情報を読み込んでくれる。
※ 環境変数に認証情報を設定しても、自動的にロードされる。

AWS コンソールから IAM ユーザーを作成し、作った IAM ユーザーでアクセスキーを作成する。アクセスキー作成後、認証情報をダウンロードするか、認証情報を表示して、アクセスキー ID とシークレットアクセスキーを取得する。
公式ガイド AWS にサインアップし、IAM ユーザーを作成する

認証プロファイルファイルを作成

以下の場所に credentials というファイル名でファイルを作成する。
Linux, Mac, Unix -> ~/.aws/credentials
Windows -> C:\Users\USERNAME\.aws\credentials

認証情報を記述する

[default]
aws_access_key_id = your_access_key_id
aws_secret_access_key = your_secret_access_key

application.properties の設定

application.properties に必要な設定情報を記述する。

# 1. スタック名の自動検出を無効化
cloud.aws.stack.auto=false
# 2. リージョン名の自動検出を無効化
cloud.aws.region.auto=false
# 3. リージョン名の設定
cloud.aws.region.static=ap-northeast-1

1. スタック名の自動検出を無効化
Spring Cloud AWS の設定で、 AWS CloudFormation のスタック名を自動検出するようになっていることが原因のよう。EC2 を使っていない場合は、この自動検出を無効にする必要がある。

2. リージョン名の自動検出を無効化
リージョン名を自分で設定しても、リージョンの自動検出が有効になっているとエラーが発生する。

3. リージョン名の設定
ローカル環境(または一部 AWS サービスで他とは異なるリージョンを使用)の場合には、リージョン名を自分で設定する。EC2 を使っているなら、自動で検出できる。

※ これらを設定しないと、サーバー起動時にエラーが発生した。

org.springframework.beans.factory.BeanCreationException: Error creating bean ...
.....
 [org.springframework.cloud.aws.core.env.stack.config.StackNameProvider]: Factory method 'autoDetectingStackNameProvider' threw exception; nested exception is java.lang.IllegalArgumentException: No valid instance id defined 
org.springframework.beans.factory.UnsatisfiedDependencyException:....

Posted by Agopeanuts