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の連携の一助となれば幸いです。