この記事では、dbt(dbt-snowflake)を ECS で実行する方法について紹介します。環境構築は terraform で行います。
構成
この記事で作成する環境です。
ECR に docker イメージを配置し、それを使用して ECS タスクを実行することで、dbt-snowflake を処理します。

まず、terraform を使用して、環境構築を行います。
ここで構築するリソースは下記の通りです。
- ECR リポジトリ
- ECS タスク定義
- ECS クラスター
- ECS 用 IAM ロール
terraform apply して環境構築します。
Docker
次に、ECS タスクで実行する Docker イメージを作成します。
dbt の処理内容はSnowflake と dbtと同様のものを使用しています。
.dbt/profiles.yml
リポジトリ内に.dbt/
ディレクトリを作成して、snowflake 接続用の profile を記述しておきます。
Dockerfile
docker-entrypoint.sh
最後に、上記の Docker イメージを ECR へ push するため下記コマンドを実行します。リージョンは適宜変更してください。
ECS タスク実行
ECS タスク定義を更新し、ECS タスクを実行してみると dbt を実行できていることが確認できます。

CICD
GitHub Actions を使用してイメージのビルドや、ECR への push、タスク定義の更新を行う場合は下記の Workflow で実現できます。詳細はHakky | GitHub Actions 経由で AWS の ECR/ECS を更新を参照してください。
.github/workflows/deploy-docker-image-to-ecr.yml
まとめ
この記事では、dbt-snowflake を ECS で実行する方法について紹介しました。ECS スケジュールタスク等で dbt を定期実行することで、dbt を用いたデータ加工を自動化することができます。
参考

備考
Hakky ではエンジニアを募集中です!まずは話してみたいなどでも構いませんので、ぜひお気軽に採用ページからお問い合わせくださいませ。
