はじめに
Webアプリケーションを開発する際、CORS(Cross-Origin Resource Sharing)の設定は重要なポイントの一つです。
本記事では、Go言語のWebフレームワークであるEchoのMiddlewareによるCORS設定と、Terraformを用いた環境変数の設定方法について解説します。
書こうと思ったきっかけ
同じチームメンバーの方にバックエンド側のCORS制限をしてもらった際に、フロントエンドとの連携で問題が発生しました。
環境ごとに異なるCORS設定を適用する必要があり、その解決策としてEchoとTerraformを活用する方法を採用しました。
この方法を整理し、再利用可能な形で残しておくために記事としてまとめました。
EchoのMiddleware設定
Go言語のWebフレームワークであるEchoでは、Middlewareを使用することで、リクエストのログ記録、エラーハンドリング、CORS(Cross-Origin Resource Sharing)の設定を行うことができます。
Middlewareの設定
以下のコードは、Echoのrouter.go
におけるMiddlewareの設定の一部を抜粋したものです。
/*
* Middleware設定
*/
e.Use(middleware.Logger())
e.Use(middleware.Recover())
e.Use(middleware.CORSWithConfig(middleware.CORSConfig{
AllowOrigins: []string{os.Getenv("CORS_ALLOWED_ORIGIN")},
AllowMethods: []string{http.MethodGet, http.MethodPost, http.MethodPut, http.MethodDelete, http.MethodPatch, http.MethodOptions},
AllowHeaders: []string{echo.HeaderOrigin, echo.HeaderContentType, echo.HeaderAccept, echo.HeaderAuthorization},
AllowCredentials: true,
}))
設定内容
-
middleware.Logger()
: リクエストのログを記録する。 -
middleware.Recover()
: アプリケーションがパニックを起こした場合に適切に処理する。 -
middleware.CORSWithConfig()
: CORSの設定をカスタマイズして適用する。
特にCORSの設定において、AllowOrigins
の値を環境変数 CORS_ALLOWED_ORIGIN
から取得している点がポイントです。
これにより、環境ごとに異なるオリジン(許可するドメイン)を設定できます。
TerraformのCORS設定
Terraformを用いてAWS上にデプロイする場合、環境変数の設定をTerraformのmain.tf
で行います。以下はその一部抜粋です。
name = "my-app-repo"
image = "xxx.dkr.ecr.ap-northeast-1.amazonaws.com/my-app-repo"
entryPoint = ["/bin/sh", "-c", "/app/migrate_app && /app/server"]
environment = [
# MySQL 環境変数
# CORS 設定
{
"name": "CORS_ALLOWED_ORIGIN",
"value": "xxx"
},
]
設定内容
-
CORS_ALLOWED_ORIGIN
変数にhttps://xxx
を指定。 - これにより、EchoのCORS設定でこの値を読み込み、指定のオリジンのみリクエストを許可。
連携のポイント
-
環境変数の利用
-
main.tf
でCORS_ALLOWED_ORIGIN
を指定し、環境変数としてコンテナ内に渡す。 -
router.go
でos.Getenv("CORS_ALLOWED_ORIGIN")
を参照し、CORS設定を動的に変更。
-
-
デプロイ時の管理
-
main.tf
側で環境変数を変更すれば、デプロイ後のアプリケーションのCORS設定も更新可能。 - 本番環境と開発環境で異なるオリジンを設定する場合に便利。
-
まとめ
- EchoのMiddlewareでログ、エラーハンドリング、CORS設定を実装。
- CORSの許可オリジンは
CORS_ALLOWED_ORIGIN
環境変数を使用して管理。 - Terraform
main.tf
で環境変数を指定し、デプロイ時に適用。 - 環境ごとに異なるCORS設定を容易に管理可能。
この方法を採用したことで、環境ごとにCORS設定を簡単に切り替えることができ、開発・運用の負担を軽減できました。
Terraformを活用することで、設定の管理がしやすくなり、チーム全体での運用もスムーズになりました。
今後もこの方法を発展させ、より柔軟な構成を考えていきたいです。