dbtをECS Fargateにデプロイ
この記事では、dbtをECS Fargateにデプロイする方法を紹介します。次のアーキテクチャとなります。
ソースコードは、次のリポジトリで確認できます。
次の知識がソースコードを理解するのに必要です。
- dbt
- Terraform
- AWS
- Docker
ソースコードのクローン
次のコマンドでソースコードをクローンしてください。
bash
$ git clone https://github.com/ryuseikakujo/dbt-on-fargate.git
セットアップ
以下は、dbtをECS Fargate上で実行するためのインフラストラクチャを構築する手順です。
- ECRのプロビジョニング
- Terraform Backend用のS3とDynamoDBの作成
- dbt DockerイメージをECRにプッシュ
- Terraform設定の適用
1. ECRのプロビジョニング
/provisioning/ecr.sh
を実行します。
- envを入力するように求められます(例:
prod
)。 - 次に、app nameを入力するように求められます(例:
my-elt
)。 - 最後に、image nameを入力するように求められます(例:
dbt
)。
bash
$ sh provisioning.ecr.sh
Enter environment name for ECR:
Enter app name:
Enter image name:
<env>-<app name>-<image name>
という名前のECRリポジトリが作成されます。
2. Terraform Backend用のS3とDynamoDBの作成
/provisioning/backend.sh
を実行します。
- Terraformのバックエンド用に一意なS3バケット名を入力します(例:
prod-my-elt
)。 - Terraformのバックエンド用のDynamoDBテーブル名を入力します(例:
prod-my-elt
)。 - Terraformのバックエンド用のCloudFormationスタック名を入力します(例:
prod-my-elt
)。
bash
$ sh provisioning.backend.sh
Enter unique S3 bucket name for Terraform Backend:
Enter dynamodb name for Terraform Backend:
Enter Cloudformation stack name for Terraform Backend:
S3バケットとDynamoDBテーブルの名前は、prod-my-elt
となります。
3. dbt DockerイメージをECRにプッシュ
/dbt/Dockerfile
を使用してdbt Dockerイメージを作成してECRにプッシュします(<prod-my-elt-dbt>
はECR作成時に使用した名前に従ってください)。
bash
$ cd dbt
$ aws ecr get-login-password --region ap-northeast-1 | docker login --username AWS --password-stdin 123456789012.dkr.ecr.ap-northeast-1.amazonaws.com
$ docker build --platform amd64 -t <prod-my-elt-dbt> .
$ docker tag dev-elt-dbt:latest 123456789012.dkr.ecr.ap-northeast-1.amazonaws.com/<prod-my-elt-dbt>:latest
$ docker push 123456789012.dkr.ecr.ap-northeast-1.amazonaws.com/<prod-my-elt-dbt>:latest
4. Terraform設定の適用
terraform apply
を実行して、次のリソースを作成します。
- VPC
- パブリックサブネット
- インターネットゲートウェイ(IGW)
- セキュリティグループ
- CloudWatch
- ECSクラスター
- ECSタスク定義
- EventBridge:Step FunctionsのCronトリガー
- Step Functions:ELTのためのDAG(dbtの実行)
bash
$ cd terraform/aws/dev
$ terraform init
$ terraform apply
参考
AlloyDB
Amazon Cognito
Amazon EC2
Amazon ECS
Amazon QuickSight
Amazon RDS
Amazon Redshift
Amazon S3
API
Autonomous Vehicle
AWS
AWS API Gateway
AWS Chalice
AWS Control Tower
AWS IAM
AWS Lambda
AWS VPC
BERT
BigQuery
Causal Inference
ChatGPT
Chrome Extension
CircleCI
Classification
Cloud Functions
Cloud IAM
Cloud Run
Cloud Storage
Clustering
CSS
Data Engineering
Data Modeling
Database
dbt
Decision Tree
Deep Learning
Descriptive Statistics
Differential Equation
Dimensionality Reduction
Discrete Choice Model
Docker
Economics
FastAPI
Firebase
GIS
git
GitHub
GitHub Actions
Google
Google Cloud
Google Search Console
Hugging Face
Hypothesis Testing
Inferential Statistics
Interval Estimation
JavaScript
Jinja
Kedro
Kubernetes
LightGBM
Linux
LLM
Mac
Machine Learning
Macroeconomics
Marketing
Mathematical Model
Meltano
MLflow
MLOps
MySQL
NextJS
NLP
Nodejs
NoSQL
ONNX
OpenAI
Optimization Problem
Optuna
Pandas
Pinecone
PostGIS
PostgreSQL
Probability Distribution
Product
Project
Psychology
Python
PyTorch
QGIS
R
ReactJS
Regression
Rideshare
SEO
Singer
sklearn
Slack
Snowflake
Software Development
SQL
Statistical Model
Statistics
Streamlit
Tabular
Tailwind CSS
TensorFlow
Terraform
Transportation
TypeScript
Urban Planning
Vector Database
Vertex AI
VSCode
XGBoost