Traffine I/O

日本語

2023-07-22

dbtをECS Fargateにデプロイ

dbtをECS Fargateにデプロイ

この記事では、dbtをECS Fargateにデプロイする方法を紹介します。次のアーキテクチャとなります。

dbt on ECS Fargate architecture

ソースコードは、次のリポジトリで確認できます。

https://github.com/ryuseikakujo/dbt-on-fargate

次の知識がソースコードを理解するのに必要です。

  • dbt
  • Terraform
  • AWS
  • Docker

ソースコードのクローン

次のコマンドでソースコードをクローンしてください。

bash
$ git clone https://github.com/ryuseikakujo/dbt-on-fargate.git

セットアップ

以下は、dbtをECS Fargate上で実行するためのインフラストラクチャを構築する手順です。

  1. ECRのプロビジョニング
  2. Terraform Backend用のS3とDynamoDBの作成
  3. dbt DockerイメージをECRにプッシュ
  4. 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

参考

https://github.com/ryuseikakujo/dbt-on-fargate

Ryusei Kakujo

researchgatelinkedingithub

Focusing on data science for mobility

Bench Press 100kg!