【AWS】API Gateway × Spring Boot × ECS × 統合プロキシ構成でのCORS対応メモ
🎯 対象読者
- API Gateway のバックエンドが ECS 上の Spring Boot
- 統合プロキシ(HTTP Proxy Integration) を使っている
- フロントエンドからの クロスオリジン通信(CORS) を許可したい
- API Gateway 側の CORS 設定でハマった人
🏗 構成概要
要素 | 内容 |
---|---|
呼び出し | API Gateway(REST API) |
バックエンド | ECS(Fargate)+ Spring Boot |
💡 結論:Spring Boot 側で CORS 許可すれば OK
統合プロキシ(proxy integration)が有効な場合、API Gateway はリクエストをそのままバックエンドに流すだけ。
👉 CORS の制御はすべて Spring Boot 側で行う。API Gateway 側の設定は不要
🛠 Spring Boot 側の CORS設定方法(Spring Security なしの場合)
@Configuration
を使って CORS をグローバルに許可します。
@Configuration
public class WebConfig implements WebMvcConfigurer {
@Override
public void addCorsMappings(CorsRegistry registry) {
registry.addMapping("/**") // すべてのエンドポイントに適用
.allowedOrigins("*") // 任意のオリジンを許可(必要に応じて絞って)
.allowedMethods("GET", "POST") // 必要なメソッドのみ許可
.allowedHeaders("*")
.allowCredentials(true)
.maxAge(3600); // プリフライト応答のキャッシュ時間(秒)
}
}
OPTIONS メソッドのハンドリングはどうなる?
CORSでPOSTメソッドなどを実行する場合、前段にプリフライトリクエスト(これがOPTION)が実行される。
上記の CORS 設定をすると、Spring Boot は自動で OPTIONS リクエスト(プリフライト)に対応してくれます。
特にハンドラやコントローラで OPTIONS を明示的に処理する必要はありません。
✅ API Gateway 側の設定
✅ 必要なこと
- 統合リクエスト → プロキシ統合を有効化(Use Proxy Integration = true)
❌ 不要なこと
- リソースごとの CORS 設定(OPTIONS メソッドの定義)
- レスポンスヘッダーのマッピング
📝 まとめ
項目 | 対応内容 |
---|---|
CORS 設定の場所 | Spring Boot 側で完結 |
OPTIONS メソッドの対応 | Spring Boot が自動で処理 |
Spring Securityの有無 | 今回は なし の例(必要なら別途対応) |
📝 余談:Spring BootのCORS処理の仕組み
Spring Boot(正確にはSpring MVC)は、WebMvcConfigurer
で設定したCORSマッピングを元に、リクエストのプリフライト(OPTIONS)に自動対応します。
- フロントエンドから送られてくるプリフライトリクエスト(
OPTIONS
)に対し、 - Springは内部的に自動で必要なCORSレスポンスヘッダー(
Access-Control-Allow-Origin
など)を付与し、 - これによりブラウザはリクエストを許可してくれます。
この仕組みがあるため、明示的にコントローラーでOPTIONS
メソッドの処理を実装する必要はありません。
処理の流れイメージ
- ブラウザからクロスオリジンのAPI呼び出しが来る
- 事前にプリフライトリクエスト(
OPTIONS
)を送る - Springが
WebMvcConfigurer
の設定に基づきCORSヘッダーを付与して応答 - ブラウザが応答を受けて本リクエスト(GETやPOST)を送る
- Springは本リクエストにもCORSヘッダーを付与して返す
ポイント
- Spring Securityを使っている場合は、セキュリティフィルターでCORS設定が必要になることもある
- 使っていなければ、
WebMvcConfigurer
の設定だけでCORSが完結する -
allowCredentials(true)
を設定すると、クッキーや認証情報を含むリクエストも許可できる