こんにちは、Kです。
普段エディタは何を使われてますか?
自分は元々vimを使っていたんですが、今はVSCodeを使っています。
今回はVSCodeのDevContainer拡張機能を使って、dbtの実行環境を作る手順について紹介していこうと思います。
DevContainerはVSCodeの環境機能の1つで、Dockerイメージをもとにコンテナを立ち上げ、VSCodeの画面上でコンテナの中に入り作業を行えるものになります。
複数人で開発を行う、かつ全員VSCodeを使っている状況であれば、DevContainerを使うことで簡単に共通の開発環境を立ち上げることができます。
以下のディレクトリ構成を想定しています。
├.devcontainer/
│ └devcontainer.json
│
├your_dbt_project_name/
│ ├models/
│ ├profiles.yml
│ └dbt_project.yml
│
├Dockerfile
└requirements.txt
まずはこちらから拡張機能をインストールしてください。
続いていくつか必要なファイルを用意します。
# requirements.txt
dbt-core==1.9.1
dbt-bigquery==1.8.2
dbt-osmosis==1.1.7
# Dockerfile
ARG PY_VERSION=3.11
FROM python:${PY_VERSION}-slim
ENV DEPENDENCIES="git curl apt-transport-https ca-certificates gnupg"
RUN apt-get update && \
apt-get install -y --no-install-recommends ${DEPENDENCIES} && \
apt-get clean && \
rm -rf /var/lib/apt/lists/*
RUN echo "deb [signed-by=/usr/share/keyrings/cloud.google.gpg] http://packages.cloud.google.com/apt cloud-sdk main" | tee -a /etc/apt/sources.list.d/google-cloud-sdk.list && \
curl https://packages.cloud.google.com/apt/doc/apt-key.gpg | apt-key --keyring /usr/share/keyrings/cloud.google.gpg add - && \
apt-get update && \
apt-get install -y --no-install-recommends google-cloud-sdk && \
apt-get clean && \
rm -rf /var/lib/apt/lists/*
COPY requirements.txt .
RUN python -m pip install --no-cache-dir -r requirements.txt
COPY your_dbt_project_name ./your_dbt_project_name
RUN dbt deps --project-dir=your_dbt_project_name
# .devcontainer/devcontainer.json
{
"name": "Dev Container",
"build": {
"dockerfile": "../Dockerfile"
},
"features": {
"ghcr.io/devcontainers/features/sshd:1": {}
},
"postCreateCommand": "mkdir -p ~/.ssh && chmod 700 ~/.ssh",
"customizations": {
"vscode": {
"settings": {
"git.enabled": true,
"git.ssh.enable": true,
"files.insertFinalNewline": true,
"dbt.dbtPythonPathOverride": "/usr/local/bin/python",
"files.associations": {
"*.sql": "jinja-sql"
}
}
}
},
"containerEnv": {
"DBT_PROJECT_DIR": "/workspaces/your_repository_name/your_dbt_project_name",
"DBT_PROFILES_DIR": "/workspaces/your_repository_name/your_dbt_project_name"
},
"mounts": [
"source=${localEnv:HOME}/.config/gcloud,target=/root/.config/gcloud,type=bind"
]
}
ここまでできたら Cmd + Shift + pでコマンドパレットを開き、Reopen in Container(コンテナで再度開く)を選択して、コンテナの中に入ります。
無事に入れたら、dbt -v
でdbtがインストールされているかを確認しましょう。
以上でDevContainerを使ったdbtの実行環境の構築手順は終わりです。
ローカルでssh-agentを起動させ秘密鍵を登録しておくことで、devcontainer内でも認証情報を呼び出しSSH接続を可能にしてくれます。
まずは、公開鍵と秘密鍵を生成します。
$ mkdir ~/.ssh
$ cd ~/.ssh
$ ssh-keygen -t rsa
続いて、ssh-agentを起動させ、秘密鍵を登録します。
$ ssh-agent -s
$ ssh-add ~/.ssh/id_rsa
$ ssh-add -l
最後に、公開鍵をGitHubに登録します。
ここまでできたら、コンテナ内に接続しgit pull
できるか確認してみましょう。