VercelとAWS Secrets ManagerをTerraformで連携!安全な環境構築を徹底解説
1. はじめに:なぜVercelとAWS Secrets Managerを連携させるのか?
Vercelは、フロントエンド開発者にとって非常に強力なプラットフォームです。しかし、APIキーやデータベースのパスワードといった機密情報(シークレット)を安全に管理する必要があります。そこで登場するのが、AWS Secrets Managerです。
AWS Secrets Managerは、AWSが提供するシークレット管理サービスで、機密情報を安全に保管し、必要な時にアプリケーションに提供することができます。
なぜ連携が必要なのか?
- セキュリティ向上: 機密情報をコードや環境変数に直接記述するリスクを回避できます。
- 自動化: Terraformを使うことで、インフラ構築と設定をコードで管理し、自動化できます。
- 開発効率向上: シークレットの管理が容易になり、開発者はアプリケーションのロジックに集中できます。
2. 前提知識:Vercel、AWS Secrets Manager、Terraformとは?
連携手順に入る前に、それぞれの技術について簡単に確認しておきましょう。
- Vercel: フロントエンド開発・デプロイに特化したプラットフォーム。高速なデプロイと簡単な設定が特徴です。
- AWS Secrets Manager: AWSが提供するシークレット管理サービス。APIキー、パスワード、証明書などを安全に保管・管理できます。
- Terraform: HashiCorp社が開発したInfrastructure as Code(IaC:コードによるインフラ管理)ツール。インフラの構築、変更、管理をコードで行うことができます。
3. Terraformの設定:AWSプロバイダーの準備
TerraformでAWSリソースを操作するためには、AWSプロバイダーを設定する必要があります。main.tf
ファイルを作成し、以下のコードを記述します。
terraform {
required_providers {
aws = {
source = "hashicorp/aws"
version = "~> 4.0" # AWSプロバイダーのバージョンを指定
}
}
}
provider "aws" {
region = "ap-northeast-1" # AWSリージョンを指定 (例: 東京リージョン)
# AWS認証情報は環境変数から取得することを推奨
# access_key = "YOUR_ACCESS_KEY"
# secret_key = "YOUR_SECRET_KEY"
}
ポイント:
required_providers
ブロックで、使用するAWSプロバイダーとそのバージョンを指定します。provider "aws"
ブロックで、AWSリージョンを指定します。- AWS認証情報は、環境変数 (
AWS_ACCESS_KEY_ID
,AWS_SECRET_ACCESS_KEY
) から取得することを推奨します。ハードコードは絶対に避けてください。
4. AWS Secrets Managerの設定:シークレットの作成
次に、AWS Secrets Managerでシークレットを作成します。Terraformでシークレットを作成するコードは以下の通りです。
resource "aws_secretsmanager_secret" "example" {
name = "vercel-example-secret" # シークレットの名前
}
resource "aws_secretsmanager_secret_version" "example" {
secret_id = aws_secretsmanager_secret.example.id
secret_string = jsonencode({ # シークレットの値をJSON形式で指定
API_KEY = "YOUR_API_KEY",
DATABASE_PASSWORD = "YOUR_DATABASE_PASSWORD"
})
}
ポイント:
aws_secretsmanager_secret
リソースで、シークレットの名前を定義します。aws_secretsmanager_secret_version
リソースで、シークレットの値をJSON形式で定義します。secret_string
には、Vercelで使用する環境変数をキーバリュー形式で記述します。
5. Vercelの設定:環境変数のインポート
VercelでAWS Secrets Managerから環境変数をインポートするためには、Vercel CLI(コマンドラインインターフェース)を使用します。
まず、Vercel CLIをインストールします。
npm install -g vercel
次に、Vercelにログインします。
vercel login
そして、以下のコマンドを実行して、AWS Secrets Managerから環境変数をインポートします。
vercel env pull .env.production --environment=production --token=$VERCEL_TOKEN --scope=$VERCEL_ORG_ID --project=$VERCEL_PROJECT_ID --aws-secrets-manager-arn=arn:aws:secretsmanager:ap-northeast-1:YOUR_ACCOUNT_ID:secret:vercel-example-secret-RANDOM_STRING
解説:
.env.production
: 環境変数を保存するファイル名--environment=production
: 環境を指定 (production, preview, development)--token=$VERCEL_TOKEN
: Vercelの認証トークン--scope=$VERCEL_ORG_ID
: Vercelの組織ID--project=$VERCEL_PROJECT_ID
: VercelのプロジェクトID--aws-secrets-manager-arn
: AWS Secrets ManagerのARN (Amazon Resource Name)
注意:
VERCEL_TOKEN
,VERCEL_ORG_ID
,VERCEL_PROJECT_ID
は、Vercelのダッシュボードから取得できます。arn:aws:secretsmanager:ap-northeast-1:YOUR_ACCOUNT_ID:secret:vercel-example-secret-RANDOM_STRING
は、AWS Secrets Managerで作成したシークレットのARNです。
6. Terraformの実行:インフラ構築の自動化
Terraformの設定が完了したら、以下のコマンドを実行してインフラを構築します。
tf init # Terraformの初期化
tf plan # 実行計画の確認
tf apply # インフラの構築
ポイント:
terraform init
は、Terraformが使用するプラグインをダウンロードし、初期化します。terraform plan
は、Terraformが実行する変更内容を表示します。terraform apply
は、実際にインフラを構築します。
7. Vercelへのデプロイ:環境変数の確認
Terraformの実行が完了したら、Vercelにデプロイします。デプロイ後、Vercelのダッシュボードで環境変数が正しく設定されていることを確認してください。
8. まとめ:VercelとAWS Secrets Manager連携のメリット
この記事では、VercelとAWS Secrets ManagerをTerraformで連携させる方法を解説しました。最後に、連携のメリットを再確認しましょう。
- セキュリティ向上: 機密情報を安全に管理し、コードや環境変数に直接記述するリスクを回避できます。
- 自動化: Terraformを使うことで、インフラ構築と設定をコードで管理し、自動化できます。
- 開発効率向上: シークレットの管理が容易になり、開発者はアプリケーションのロジックに集中できます。
次のステップ:
- Vercelのドキュメントを読んで、Vercelの機能をさらに深く理解しましょう。
- AWS Secrets Managerのドキュメントを読んで、シークレット管理のベストプラクティスを学びましょう。
- Terraformのドキュメントを読んで、IaCのスキルを向上させましょう。
この記事が、あなたのVercelとAWS Secrets Managerの連携の一助となれば幸いです。