メインコンテンツまでスキップ

環境変数

MBC CQRS サーバーレスフレームワークには、環境変数のサポートが組み込まれており、次のことが可能になります。

  • .env を使用して環境変数をロードします
  • 環境変数を検証する

Loading Environment Variables

MBC CQRS サーバーレスフレームワークには、環境変数を .env* ファイルから process.env にロードするためのサポートが組み込まれています。

コア変数とアプリケーション変数

以下に記載する環境変数は2つのタイプに分類されます:

  • コア変数: フレームワークの基底EnvironmentVariablesクラスで検証される変数です。フレームワークが動作するために必須です。
  • アプリケーション変数: 使用する機能に応じてアプリケーションが必要とする変数です。カスタムのEnvValidationクラスでこれらの検証ルールを追加してください。

「必須」列は一般的なアプリケーションでの想定を示しています。特定のアプリケーションが依存するすべての変数に対して検証ルールを追加してください。

コア設定

変数説明必須デフォルト
NODE_ENV実行環境: local, dev, stg, prodはい-local
APP_NAMEテーブルプレフィックスに使用されるアプリケーション名はい-demo
APP_PORTLambda以外の環境でのアプリケーションポートいいえ30003000
LOG_LEVELログレベル: debug, verbose, info, warn, error, fatalはい-verbose
EVENT_SOURCE_DISABLEDAPI Gateway統合用のイベントソースルートを無効にするはい-false
REQUEST_BODY_SIZE_LIMITJSONおよびURLエンコードデータのリクエストボディサイズ制限いいえ100kb100kb

AWS 認証情報

変数説明必須
AWS_ACCESS_KEY_IDローカル開発用のAWSアクセスキーIDいいえlocal
AWS_SECRET_ACCESS_KEYローカル開発用のAWSシークレットアクセスキーいいえlocal
AWS_DEFAULT_REGIONデフォルトのAWSリージョンいいえap-northeast-1

DynamoDB 設定

変数説明必須
DYNAMODB_ENDPOINTローカル開発用のDynamoDBエンドポイントURLいいえhttp://localhost:8000
DYNAMODB_REGIONDynamoDBリージョンいいえap-northeast-1
ATTRIBUTE_LIMIT_SIZEDynamoDBアイテム属性の最大サイズ(バイト)はい389120

S3 設定

変数説明必須
S3_ENDPOINTローカル開発用のS3エンドポイントURLいいえhttp://localhost:4566
S3_REGIONS3リージョンいいえap-northeast-1
S3_BUCKET_NAME大きなDynamoDB属性を保存するためのS3バケット名はいlocal-bucket

Step Functions 設定

変数説明必須
SFN_ENDPOINTローカル開発用のStep FunctionsエンドポイントURLいいえhttp://localhost:8083
SFN_REGIONStep Functionsリージョンいいえap-northeast-1
SFN_COMMAND_ARNコマンド処理用のStep Functionsステートマシン ARNはいarn:aws:states:ap-northeast-1:101010101010:stateMachine:command

SNS 設定

変数説明必須
SNS_ENDPOINTローカル開発用のSNSエンドポイントURLいいえhttp://localhost:4002
SNS_REGIONSNSリージョンいいえap-northeast-1
SNS_TOPIC_ARNイベント通知用のデフォルトSNSトピックARNはいarn:aws:sns:ap-northeast-1:101010101010:CqrsSnsTopic
SNS_ALARM_TOPIC_ARNアラーム通知用のSNSトピックARN(エラーアラート)いいえarn:aws:sns:ap-northeast-1:101010101010:AlarmSnsTopic

Cognito 設定

変数説明必須
COGNITO_URLローカル開発用のCognitoエンドポイントURLいいえhttp://localhost:9229
COGNITO_USER_POOL_IDCognito ユーザープール IDはいlocal_2G7noHgW
COGNITO_USER_POOL_CLIENT_IDCognito ユーザープールクライアント IDはいdnk8y7ii3wled35p3lw0l2cd7
COGNITO_REGIONCognitoリージョンいいえap-northeast-1

AppSync 設定

変数説明必須
APPSYNC_ENDPOINTAppSync GraphQL エンドポイントURLいいえhttp://localhost:4001/graphql
APPSYNC_API_KEYローカル開発用のAppSync APIキーいいえda2-fakeApiId123456

SES メール設定

変数説明必須
SES_ENDPOINTローカル開発用のSESエンドポイントURLいいえhttp://localhost:8005
SES_REGIONSESリージョンいいえap-northeast-1
SES_FROM_EMAILデフォルトの送信者メールアドレスはいemail@example.com

データベース設定 (Prisma)

変数説明必須
DATABASE_URLPrisma ORM用のデータベース接続URLいいえmysql://root:RootCqrs@localhost:3306/cqrs?schema=public&connection_limit=1

.env ファイルの例

# AWS 認証情報
AWS_ACCESS_KEY_ID=local
AWS_SECRET_ACCESS_KEY=local
AWS_DEFAULT_REGION=ap-northeast-1

# コア設定
NODE_ENV=local
APP_NAME=demo
APP_PORT=3000
LOG_LEVEL=verbose
EVENT_SOURCE_DISABLED=false
REQUEST_BODY_SIZE_LIMIT=100kb

# DynamoDB 設定
DYNAMODB_ENDPOINT=http://localhost:8000
DYNAMODB_REGION=ap-northeast-1
ATTRIBUTE_LIMIT_SIZE=389120

# S3 設定
S3_ENDPOINT=http://localhost:4566
S3_REGION=ap-northeast-1
S3_BUCKET_NAME=local-bucket

# Step Functions 設定
SFN_ENDPOINT=http://localhost:8083
SFN_REGION=ap-northeast-1
SFN_COMMAND_ARN=arn:aws:states:ap-northeast-1:101010101010:stateMachine:command

# SNS 設定
SNS_ENDPOINT=http://localhost:4002
SNS_REGION=ap-northeast-1
SNS_TOPIC_ARN=arn:aws:sns:ap-northeast-1:101010101010:CqrsSnsTopic
SNS_ALARM_TOPIC_ARN=arn:aws:sns:ap-northeast-1:101010101010:AlarmSnsTopic

# Cognito 設定
COGNITO_URL=http://localhost:9229
COGNITO_USER_POOL_ID=local_2G7noHgW
COGNITO_USER_POOL_CLIENT_ID=dnk8y7ii3wled35p3lw0l2cd7
COGNITO_REGION=ap-northeast-1

# AppSync 設定
APPSYNC_ENDPOINT=http://localhost:4001/graphql
APPSYNC_API_KEY=da2-fakeApiId123456

# SES 設定
SES_ENDPOINT=http://localhost:8005
SES_REGION=ap-northeast-1
SES_FROM_EMAIL=email@example.com

# データベース設定
DATABASE_URL="mysql://root:RootCqrs@localhost:3306/cqrs?schema=public&connection_limit=1"

Validate Environment Variables

必要な環境変数が指定されていない場合、または環境変数が特定の検証ルールを満たしていない場合、アプリケーションの起動中に例外をスローするのが標準的な方法です。 @mbc-cqrs-serverless/core パッケージを使用すると、これを簡単に行うことができます。

まずはじめに定義しなければいけないもの

  • 検証制約のあるクラス
  • EnvironmentVariables 拡張クラス
// env.validation.ts
import { EnvironmentVariables } from "@mbc-cqrs-serverless/core";
import { IsUrl } from "class-validator";

export class EnvValidation extends EnvironmentVariables {
@IsUrl({
require_tld: false,
})
FRONT_BASE_URL: string;
}

これを配置したら、次のように EnvValidation クラスを createHandler 関数の構成引数として渡します。

import { createHandler } from "@mbc-cqrs-serverless/core";

import { EnvValidation } from "./env.validation";
import { MainModule } from "./main.module";

export const handler = createHandler({
rootModule: MainModule,
envCls: EnvValidation,
});