メインコンテンツまでスキップ
最新27d ago

Redash セットアップ

Body:

AWS ECS (Fargate) への Redash デプロイ — IaC 仕様

AWS ECS Fargate に Redash をデプロイするための完全なリソース仕様です。これを AI に与えて、Terraform、CDK (TypeScript)、Pulumi、CloudFormation を生成するよう依頼してください — 必要な詳細情報がすべて含まれています。


アーキテクチャ

ECS Fargate Task (単一タスク、localhost を共有する 2 つのコンテナ)
├── Redash コンテナ (:5000) ──► RDS PostgreSQL (:5432)
└── Redis コンテナ (:6379、サイドカー)

イメージソース: Docker Hub (デフォルト) または Amazon ECR (本番環境では推奨)。


各サービスの役割

Amazon ECS (Elastic Container Service) — AWS のコンテナオーケストレーションサービス。サーバーを管理することなく Docker コンテナを実行します。Fargate はサーバーレスモード — 「このコンテナを CPU X、メモリ Y で実行する」と指定すれば、AWS が残りを処理します。

AWS Fargate — ECS の背後にある計算エンジン。EC2 インスタンスを管理する必要がなくなります。コンテナを定義すると、Fargate がサーバーをプロビジョニングして実行し、スケーリングします。コンテナが使用する CPU/メモリに対してのみ料金が発生します。

Amazon RDS (Relational Database Service) — マネージド PostgreSQL データベース。AWS がパッチ適用、バックアップ、フェイルオーバーを処理します。Redash はこれを使用して、ユーザーアカウント、保存されたクエリ、ダッシュボード定義、設定などのメタデータを保存します。

Redis — インメモリキー値ストア。Redash はこれをメッセージブローカーおよびキャッシュとして使用します — バックグラウンドジョブ (クエリ実行など) をキューに入れ、結果をキャッシュします。同じ Fargate タスク内のサイドカーコンテナとして実行するため、localhost を介して Redash と通信します。

Amazon ECR (Elastic Container Registry) — AWS のプライベート Docker イメージレジストリ。Docker Hub (パブリックインターネット) からイメージをプルする代わりに、ECR にプッシュして AWS 内からプルします — 高速で、レート制限がなく、どのバージョンがデプロイされるかを完全に制御できます。

AWS Secrets Manager — パスワード、API キー、その他のシークレットを安全に保存するサービス。タスク定義にデータベースパスワードをハードコーディングする代わりに、Secrets Manager に保存して ECS がランタイムにプルします。

Application Load Balancer (ALB) — ECS コンテナの前に位置して、受け入れるトラフィックを分散します。HTTPS (SSL)、カスタムドメイン、高可用性のための複数の Redash コンテナ実行に必要です。

ACM (AWS Certificate Manager) — ドメイン用の無料 SSL/TLS 証明書を提供します。証明書を ALB にアタッチすると、ユーザーは HTTPS 経由で Redash にアクセスできます。

IAM (Identity and Access Management) — AWS の権限システム。ECS タスク実行ロールにより、コンテナに ECR からイメージをプル、Secrets Manager からシークレットを読み取り、CloudWatch にログを書き込む権限が与えられます。

CloudWatch Logs — AWS のログ集約サービス。コンテナの stdout/stderr がここにストリーミングされるため、何かにログインすることなくイシューをデバッグできます。

VPC (Virtual Private Cloud) — AWS 内のアイソレートされたネットワーク。セキュリティグループはファイアウォールのような役割を果たします — どのポートが開いているか、誰が何にアクセスできるかを定義します。RDS はプライベートサブネット (インターネットアクセスなし) に、ECS はパブリックサブネット (または ALB の背後) に配置されます。


リージョン

ap-northeast-1 (東京) すべてのリソースをこのリージョンに作成する必要があります。


リソース 1 — VPC とネットワーク

デフォルト VPC を使用するか、以下を含む新しい VPC を作成します:

  • 最小 2 つのアベイラビリティゾーン

  • パブリックサブネット (ECS タスク用、パブリック IP)

  • プライベートサブネット (RDS 用)

  • ECS にプライベートサブネットを使用する場合は 1 つの NAT Gateway (コスト節約のためパブリックサブネットを使用する場合は 0)

  • アタッチされたインターネットゲートウェイ


リソース 2 — セキュリティグループ

ECS セキュリティグループ (redash-ecs-sg)

方向ポートソース目的
インバウンド50000.0.0.0/0 (またはお客様の IP/CIDR に制限)Redash Web UI
アウトバウンドAll0.0.0.0/0インターネット + DB アクセス

RDS セキュリティグループ (redash-rds-sg)

方向ポートソース目的
インバウンド5432セキュリティグループ ID で redash-ecs-sg を参照ECS → Database
アウトバウンドAll0.0.0.0/0デフォルト

リソース 3 — シークレット (AWS Secrets Manager)

シークレット 1: データベース認証情報

  • シークレット名: redash/db-credentials

  • パスワード自動生成: はい、30 文字、句読点を除外

  • ユーザー名: redash

シークレット 2: Redash シークレットキー

  • シークレット名: redash/secret-key

  • 自動生成: はい、64 文字、句読点を除外


リソース 4 — RDS PostgreSQL

設定
識別子redash-analysis-db
エンジンPostgreSQL 15
インスタンスクラスdb.t3.micro (チームサイズ別に選択するには料金ガイドを参照)
割り当てストレージ20 GB
ストレージタイプgp3
データベース名postgres
認証情報Secrets Manager から (redash/db-credentials)
VPC サブネットプライベートサブネット
セキュリティグループredash-rds-sg
Multi-AZいいえ (コスト削減のため単一 AZ)
パブリックアクセスいいえ
バックアップ保持期間7 日
削除保護開発環境ではいいえ、本番環境でははい
削除ポリシー開発環境では破棄、本番環境では保持

リソース 5 — ECS クラスター

設定
クラスター名redash-analysis-cluster
インフラストラクチャAWS Fargate (サーバーレス、EC2 インスタンスなし)

リソース 6 — IAM タスク実行ロール

設定
ロール名ecsTaskExecutionRole
信頼できるエンティティAWS サービス → ECS Tasks
マネージドポリシーAmazonECSTaskExecutionRolePolicy
追加の権限上記の両方のシークレットに対する secretsmanager:GetSecretValue

リソース 7 — ECS タスク定義

設定
ファミリーredash-analysis-task
起動タイプFargate
OS / アーキテクチャLinux / X86_64
CPU1024 (1 vCPU) — チームサイズ別に調整するには料金ガイドを参照
メモリ2048 MB — チームサイズ別に調整するには料金ガイドを参照
タスク実行ロールecsTaskExecutionRole
ネットワークモードawsvpc (Fargate のデフォルト)

コンテナ 1: Redash

設定
名前redash
イメージredash/redash:latest (Docker Hub) または ECR URI
必須はい
ポート5000/tcp
メモリハード制限1536 MB
メモリソフト制限1024 MB
ロギングCloudWatch Logs、ストリームプレフィックス redash、保持期間 14 日

環境変数:

キーソース
REDASH_DATABASE_URLpostgresql://redash:\\<PASSWORD>@<RDS_ENDPOINT>:5432/postgresSecrets Manager + RDS エンドポイントから構築
REDASH_REDIS_URLredis://localhost:6379/0ハードコード (Redis は同じタスク内のサイドカー)
PYTHONUNBUFFERED0ハードコード
REDASH_SECRET_KEYredash/secret-key からの値Secrets Manager

コンテナ 2: Redis

設定
名前redis
イメージredis:7-alpine (Docker Hub) または ECR URI
必須いいえ
ポート6379/tcp
メモリハード制限512 MB
メモリソフト制限256 MB
ロギングCloudWatch Logs、ストリームプレフィックス redis、保持期間 14 日
環境変数なし

リソース 8 — ECS サービス

設定
サービス名redash-analysis-service
クラスターredash-analysis-cluster
タスク定義redash-analysis-task (最新リビジョン)
起動タイプFargate
望ましい数1
サブネットパブリックサブネット (RDS と同じ VPC)
セキュリティグループredash-ecs-sg
パブリック IP の自動割り当てはい
最小ヘルシーパーセント0
最大ヘルシーパーセント200
デプロイメントタイプローリングアップデート

接続ルール (サービス作成後に適用)

  • ECS サービスへの 0.0.0.0/0 からのポート 5000 のインバウンドを許可

  • ECS サービスが RDS にポート 5432 でリーチできるようにする


(オプション) リソース 9 — ECR リポジトリ

Docker Hub からイメージをプルする代わりにプライベートでイメージをホストする場合にのみ必要です。

リポジトリプッシュするイメージタグ
redashredash/redash:latestlatest または 10.1.0 のようにバージョンをピン留め
redisredis:7-alpine7-alpine

脆弱性スキャン用に scanOnPush: true を有効にします。 ECR を使用する場合、タスク定義のコンテナイメージ URI を以下に更新します:
<ACCOUNT_ID>.dkr.ecr.ap-northeast-1.amazonaws.com/redash:\\<TAG>


(オプション) リソース 10 — Application Load Balancer (本番環境)

開発/テストではスキップしてください。本番環境、HTTPS、水平スケーリングに必要です。

ALB

設定
名前redash-alb
スキームインターネット向け
タイプApplication (ALB)
VPCECS および RDS と同じ VPC
サブネットパブリックサブネット (最小 2 つの AZ)
セキュリティグループredash-alb-sg (以下を参照)

ALB セキュリティグループ (redash-alb-sg)

方向ポートソース目的
インバウンド800.0.0.0/0HTTP (HTTPS へリダイレクト)
インバウンド4430.0.0.0/0HTTPS
アウトバウンド5000redash-ecs-sgALB → ECS

ALB を使用する場合、ECS セキュリティグループ (redash-ecs-sg) を更新してください

方向ポートソース目的
インバウンド5000redash-alb-sg (セキュリティグループ ID で、0.0.0.0/0 ではない)ALB → ECS のみ
アウトバウンドAll0.0.0.0/0インターネット + DB アクセス

ターゲットグループ

設定
名前redash-tg
ターゲットタイプIP (Fargate に必須)
プロトコルHTTP
ポート5000
VPC同じ VPC
ヘルスチェックパス/ping
ヘルスチェック予期応答200 OK (PONG を返す)
ヘルシーしきい値3
アンヘルシーしきい値3
ヘルスチェック間隔30 秒
ヘルスチェックタイムアウト10 秒
登録解除遅延60 秒

リスナー — HTTPS (ポート 443)

設定
ポート443
プロトコルHTTPS
証明書ドメインの ACM 証明書 (例: redash.yourcompany.com)
デフォルトアクションredash-tg に転送

リスナー — HTTP (ポート 80)

設定
ポート80
プロトコルHTTP
デフォルトアクションHTTPS へリダイレクト (ポート 443、ステータス 301)

ACM 証明書

設定
ドメインお客様のドメイン (例: redash.yourcompany.com)
検証方法DNS (CNAME レコードを DNS プロバイダーに追加)
リージョンap-northeast-1 (ALB リージョンと一致する必要があります)

DNS (Route 53 または外部 DNS)

ドメインを ALB DNS 名にポイントする A レコード (エイリアス) または CNAME を作成します。

ALB を使用する場合の ECS サービス変更

ALB が有効な場合、リソース 8 (ECS サービス) を以下で更新します:

設定
パブリック IP の自動割り当ていいえ (ALB がパブリックアクセスを処理)
サブネットプライベートサブネット (アウトバウンド用 NAT Gateway)
ロードバランサーredash-alb をアタッチ
ターゲットグループredash-tg
コンテナ名redash
コンテナポート5000

デプロイ後の手順

ALB なし (開発/テスト)

  1. ECS コンソール → クラスター → タスク → ネットワークで パブリック IP を確認

  2. ヘルスチェック: http://<PUBLIC_IP>:5000/pingPONG を返す

  3. Redash を開く: http://<PUBLIC_IP>:5000

  4. 初回起動には 5~15 分 かかります (データベースマイグレーション)

  5. 管理者アカウントを作成し、組織名を設定し、データソースを追加します

ALB を使用 (本番環境)

  1. ALB ターゲットグループがターゲットを healthy として表示するまで待ちます

  2. ヘルスチェック: https://redash.yourcompany.com/pingPONG を返す

  3. Redash を開く: https://redash.yourcompany.com

  4. 初回起動には 5~15 分 かかります (データベースマイグレーション)

  5. 管理者アカウントを作成し、組織名を設定し、データソースを追加します


Redash の更新

  1. ECR を使用している場合: ローカルで新しいイメージをプル、タグ付け、ECR にプッシュ

  2. 更新されたイメージでタスク定義の新しいリビジョンを作成

  3. ECS サービスを新しいリビジョンを使用するように更新 (または強制的に新しいデプロイメントを実行)

  4. ECS が自動的にローリングデプロイメントを処理します


トラブルシューティング

タスクが継続的に再起動している: CloudWatch Logs を確認してください。通常、DB パスワードが間違っているか、RDS セキュリティグループが ECS からのポート 5432 アクセスを許可していません。

Redis 接続拒否: 両方のコンテナが同じタスク定義内にある必要があります。Redis URL は redis://localhost:6379/0 である必要があります。

ポート 5000 に到達できない: パブリック IP が割り当てられていること、タスクがパブリックサブネット内にあること、ECS セキュリティグループがインバウンド 5000 を許可していることを確認してください。

初回起動が長時間かかっている: 正常です — Redash はデータベースマイグレーションを実行しています。10~15 分待ってください。


スケーリング

  • 水平: ECS サービスの desired count を増やして、複数の Redash タスクを実行 (トラフィック分散用に ALB が必要)

  • 垂直: 新しいタスク定義リビジョンで CPU/メモリを増やす — サービスを更新して新しいリビジョンを選択

  • データベース: RDS インスタンスクラスを変更 (変更中に短い不可用時間が発生)


バックアップとリカバリ

  • RDS 自動バックアップが有効化されています (上記で設定した 7 日間の保持) — ポイントインタイムリカバリをサポート

  • Redash UI を介して重要なダッシュボードとクエリを定期的にエクスポート

  • すべてのデータソース接続文字列をドキュメント化 — これらは Redash DB 内に存在し、IaC では存在しません


セキュリティベストプラクティス

  • RDS: パブリックインターネットに公開しないでください (publicAccess: false)

  • シークレット: DB パスワードと Redash シークレットキーに常に AWS Secrets Manager を使用 — タスク定義にハードコーディングしないでください

  • ネットワーク: RDS にはプライベートサブネットを使用; 本番環境では ECS にプライベートサブネット + ALB の使用を検討

  • IAM: 最小権限タスク実行ロールを使用

  • イメージ: 再現可能性のため、latest の代わりに特定のイメージバージョンをピン留め

  • 監視: ECS クラスターで CloudWatch Container Insights を有効化して、CPU/メモリ/ネットワークメトリクスを確認

  • HTTPS (本番環境): ACM 証明書を使用して Application Load Balancer を ECS サービスの前に配置; ECS セキュリティグループを ALB からのトラフィックのみを受け付けるように制限


料金ガイド — ap-northeast-1 (東京)

東京リージョンは us-east-1 と比較して約 15~20% 高い。以下の価格はオンデマンド推定値です。

RDS PostgreSQL — チームサイズ別に選択

インスタンスvCPURAM最適なユース時間料金 (東京)月間料金 (東京)
db.t3.micro21 GB1~3 ユーザー、テスト~¥3.30~¥2,400
db.t3.small22 GB3~10 ユーザー~¥6.60~¥4,800
db.t3.medium24 GB10~30 ユーザー~¥13.20~¥9,600
db.t3.large28 GB30~100 ユーザー~¥26.40~¥19,200
db.r6g.large216 GB100+ ユーザー、本番環境~¥40.50~¥29,400

20 GB gp3 ストレージごとに ~¥360/月を追加。

ECS Fargate — チームサイズ別に選択

東京での Fargate 料金: ~¥7.58/vCPU/時間 + ~¥0.83/GB/時間。

構成最適なユース月間料金 (東京)
0.25 vCPU / 0.5 GB個人的使用、1~2 ユーザー~¥1,650
0.5 vCPU / 1 GB2~5 ユーザー~¥3,300
1 vCPU / 2 GB5~15 ユーザー~¥6,600
2 vCPU / 4 GB15~50 ユーザー~¥13,200
4 vCPU / 8 GB50+ ユーザー~¥26,400

総月間推定コスト (東京)

環境RDSECSその他合計
個人/テストdb.t3.micro (~¥2,400)0.5 vCPU / 1 GB (~¥3,300)~¥5,700 (~$38)
小規模チーム (5~15)db.t3.small (~¥4,800)1 vCPU / 2 GB (~¥6,600)~¥11,400 (~$76)
中規模チーム (15~50)db.t3.medium (~¥9,600)2 vCPU / 4 GB (~¥13,200)ALB ~¥3,000~¥25,800 (~$172)
大規模チーム (50+)db.t3.large (~¥19,200)4 vCPU / 8 GB (~¥26,400)ALB + HTTPS ~¥3,750~¥49,350 (~$329)

JPY 推定値は ~¥150/USD を仮定。実際のレートは変動します。ECR ストレージは無視できます (~$0.10/GB/月)。AWS 料金計算ツールで現在の料金を確認してください。


すべてが接続される方法 — 完全なフロー図

開発/テストセットアップ (ALB なし)

                         インターネット


┌───────────────┐
│ パブリック IP │
│ :5000 │
└───────┬───────┘

┌─────────────▼──────────────┐
│ ECS Fargate タスク │
│ (パブリックサブネット) │
│ │
│ ┌────────┐ ┌──────────┐ │
│ │ Redash │◄─►│ Redis │ │
│ │ :5000 │ │ :6379 │ │
│ └───┬────┘ └──────────┘ │
│ │ (localhost) │
└──────┼──────────────────────┘

│ ポート 5432

┌──────────────┐
│ RDS │
│ PostgreSQL │
│ (プライベート│
│ サブネット) │
└──────────────┘

本番環境セットアップ (ALB + HTTPS)

                         インターネット

┌─────▼──────┐
│ Route 53 │ redash.yourcompany.com
└─────┬──────┘

┌───────▼────────┐
│ ALB │
│ :443 (HTTPS) │──── ACM 証明書
│ :80 → 301 │
│ (パブリック │
│ サブネット) │
└───────┬────────┘

│ ポート 5000 (内部)

┌─────────────────────────────┐
│ ECS Fargate タスク │
│ (プライベートサブネット) │
│ │
│ ┌────────┐ ┌──────────┐ │
│ │ Redash │◄──►│ Redis │ │
│ │ :5000 │ │ :6379 │ │
│ └───┬────┘ └──────────┘ │
│ │ (localhost) │
└──────┼───────────────────────┘

│ ポート 5432

┌──────────────┐ ┌──────────────────┐
│ RDS │ │ Secrets Manager │
│ PostgreSQL │ │ - DB パスワード │
│ (プライベート│ │ - Redash シークレット
│ サブネット) │ └──────────────────┘
└──────────────┘
┌──────────────────┐
┌──────────────┐ │ CloudWatch Logs │
│ ECR │ │ - redash ログ │
│ (オプション) │ │ - redis ログ │
└──────────────┘ └──────────────────┘

リクエストフロー (ステップバイステップ)


1. ユーザーが https://redash.yourcompany.com を開く


2. DNS (Route 53) が ALB に解決


3. ALB が SSL を終了し、HTTP をターゲットグループ (ポート 5000) に転送


4. ターゲットグループが Redash コンテナのプライベート IP にルーティング


5. Redash コンテナがリクエストを処理:
├── メタデータを読み取り/書き込み → RDS PostgreSQL (ポート 5432)
├── バックグラウンドジョブをキューイング → Redis (localhost:6379)
└── HTML/JSON をユーザーに返す (ALB 経由)


6. ユーザーが Redash ダッシュボードを表示

セキュリティグループフロー

インターネット ──► ALB SG (80, 443 許可) ──► ECS SG (ALB SG からの 5000 のみ許可) ──► RDS SG (ECS SG からの 5432 のみ許可)

Related Articles