0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

個人的備忘録:EchoのMiddleware + TerraformでCORS設定を自動化するベストプラクティス

Last updated at Posted at 2025-02-25

はじめに

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,
}))

設定内容

  1. middleware.Logger(): リクエストのログを記録する。
  2. middleware.Recover(): アプリケーションがパニックを起こした場合に適切に処理する。
  3. 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設定でこの値を読み込み、指定のオリジンのみリクエストを許可。

連携のポイント

  1. 環境変数の利用

    • main.tfCORS_ALLOWED_ORIGIN を指定し、環境変数としてコンテナ内に渡す。
    • router.goos.Getenv("CORS_ALLOWED_ORIGIN") を参照し、CORS設定を動的に変更。
  2. デプロイ時の管理

    • main.tf 側で環境変数を変更すれば、デプロイ後のアプリケーションのCORS設定も更新可能。
    • 本番環境と開発環境で異なるオリジンを設定する場合に便利。

まとめ

  • EchoのMiddlewareでログ、エラーハンドリング、CORS設定を実装。
  • CORSの許可オリジンは CORS_ALLOWED_ORIGIN 環境変数を使用して管理。
  • Terraform main.tf で環境変数を指定し、デプロイ時に適用。
  • 環境ごとに異なるCORS設定を容易に管理可能。

この方法を採用したことで、環境ごとにCORS設定を簡単に切り替えることができ、開発・運用の負担を軽減できました。

Terraformを活用することで、設定の管理がしやすくなり、チーム全体での運用もスムーズになりました。

今後もこの方法を発展させ、より柔軟な構成を考えていきたいです。

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?