Fivetran を触ってみて思ったことたち

はじめに 前回に引き続きELツールであるFivetranを試しており、ちょいちょい触って気づいたことを書き留めておきます。 一般的な話はドキュメントによく書かれているので、さわる中で気になった点にフォーカスして書いてみます。 所感 Transformations(dbt連携) 今回はfivetranのdbt連携を使い、オープンデータから稲作に関するデータと天気情報を持ってきてゴニョろうとする、みたいなデモを作ってみました。 Github 生データをlakeにいれ、少し加工したものをwarehouse、分析に使う段をmartとわけてます。 fivetran側でconnector/destinationの設定をして、githubにdbtのコードをアップロード、fivetran側で連携の設定を入れればあとは簡単に動作するようになります。 dbtを連携させるとこんな感じでソースからmartまでいい感じに可視化できました。 (文字等はあとから書き込んでいます) 手軽に使えるのはとても良いですね。 ログについて ログは以下のようにWeb UI上から確認できます。 また、ログの転送設定も可能で、例えば成功時のログは以下のようにjsonで構造化されてcloudlogginから確認できます。 dbtのログさえちゃんと構造化されているので、サクッとメトリックを作ったり通知するのもやりやすそうに見えます。 { "insertId": "9g7n20g1atrvd6", "jsonPayload": { "event": "dbt_run_succeeded", "created": "2022-09-10T07:14:44.435Z", "data": { "startTime": "2022-09-10T07:14:17.900Z", "result": { "stepResults": [ { "step": { "processBuilderCommand": [ "dbt", "test", "--models", "+sunshine_time", "+temperature" ], "name": "Scheduled: Test" }, "failedModelRuns": 0, "successfulModelRuns": 0, "success": true, "commandResult": { "error": "", "exitCode": 0, "output": "07:14:39 Running with dbt=1.2.0\n07:14:39 Partial parse save file not found....

2022-09-10

FivetranをTerraformで構成する方法

はじめに ELツールであるFivetranを試す機会があり、terraformも使えるということでどこまで使えるのか試してみました 構成 データの転送は CloudSQL(GCP) -> Fivetran -> BigQuery という経路で行うことにしました。 CloudSQLの準備 CloudSQLはコンソール上から適当に作成しています。 その上でデータは面倒だったのでこの手順で用意し、その上で以下のようにしてユーザを作成します。 CREATE USER 'fivetran'@'%' IDENTIFIED BY 'ぱすわーど' GRANT SELECT, REPLICATION CLIENT, REPLICATION SLAVE ON *.* TO 'fivetran'@'%' Terraform provider.tf api_key, api_secretはWebUI上から発行しておいてください terraform { required_providers { fivetran = { source = "fivetran/fivetran" version = "0.6.3" } } } provider "fivetran" { api_key = "APIKEY" api_secret = "APISECRET" } main.tf resource "fivetran_group" "group" { name = "Terraform" } resource "fivetran_connector" "mysql" { group_id = fivetran_group....

2022-09-08

Pytest

はじめに pytestの書き方をよく忘れるのでまとめておく なお、自分が思っている使い方的な側面もあるので必ずしもこの書き方でなくて良いし、もっと良い書き方があるかもしれない。 気づいたときに追記していきます。 使い方色々 Mockオブジェクトを作成する Pythonなので、適当なオブジェクトを作ってMockとして呼び出すということも可能だが、管理が面倒なので基本はMagicMockして作れば良い。 mocked = MagicMock(spec=...) 属性値のMockをする PropertyMockを使えば良い from unittest.mock import PropertyMock from google.cloud import storage def test_hoge(): mocked_blob = MagicMock(spec=storage.Blob) suze = PropertyMock(return_value=10) type(mocked_blob).size = size mockに対してではなく、mockのtypeに対して設定するのがミソである。 インポートされたパッケージ内の特定のクラスをモックしたい モックをするときはpatchを使って基本的に以下のような形でできる from unittest.mock import patch ... def test_hoge(): ... with patch(..., autospec=True) as mocked: ... このpatchに何を指定するかがちょっと悩みがちだが、その名前空間におけるオブジェクトを上書きするみたいな気持ちでやると良い。 例えば、hoge/fuga/main.pyで定義されるモジュールがあったときに、以下のようにしてimport 文が書かれていたとする from google.cloud import storage これの storage.Client をモックしたいとしたときは from unittest.mock import patch ... def test_hoge(): ... with patch("hoge.fuga.main.storage.Client", autospec=True) as mocked: ....

2022-07-10

CloudBuild内でビルドするコンテナ内からプライベートリポジトリを参照する方法

結論 先日、cloudbuild上でdocker buildするときに--sshを渡す方法だとうまく動作しないと書きましたが、再検証したら動いたのでメモします。 おそらく、known_hostsを追加していなかったとかそんな感じだと思われます・・・ださい。 追検証の体なので、そういう形式で書いていますので、結論だけ知りたい方は最下部に行ってください。 検証ログ on Local 適当なプライベートリポジトリ marufeuille/privare_repository_test を用意しローカル環境で以下を実行すると問題なくクローンできます(公開鍵は設定済みです) # git clone git@github.com:marufeuille/privare_repository_test.git Cloning into 'privare_repository_test'... remote: Enumerating objects: 3, done. remote: Counting objects: 100% (3/3), done. remote: Total 3 (delta 0), reused 0 (delta 0), pack-reused 0 Receiving objects: 100% (3/3), done. では、このRepositoryを docker build 時にcloneすることを考えます。 次のようなDockerfileを考えます。 FROM ubuntu:22.04 RUN apt update && apt install -y openssh-client git RUN git clone git@github.com:marufeuille/privare_repository_test.git そしてこれをbuildすると当然落ちます。 # docker build -t test ....

2022-06-27

CloudBuild内でビルドするコンテナ内のpoetryからプライベートリポジトリを参照する方法

注意事項 その後の検証で --ssh オプションでも同等に動作することの検証が取れたのでこちらを参照してください。 はじめに 長いタイトルになってしまいましたが、表題のとおりです笑 cloudbuild内でプライベートリポジトリを参照する方法も、docker build内でプライベートリポジトリを参照する方法もどちらも色々と記事があったのですが、併せると中々なかったのでメモしておきます やったこと 結論 ざっくりいうと、以下のようにすれば動きます。 ポイントは private repositoryの秘密鍵はSecretManager経由で渡す docker buildはBUILDKITを有効化した上で、秘密鍵を–secretオプションでマウントする Dockerfile内では--mountオプションで秘密鍵を利用する steps: - name: 'gcr.io/cloud-builders/git' secretEnv: ['SSH_KEY'] entrypoint: 'bash' args: - -c - | echo "$$SSH_KEY" >> /root/.ssh/id_rsa chmod 400 /root/.ssh/id_rsa ssh-keyscan -t rsa github.com > /root/.ssh/known_hosts volumes: - name: 'ssh' path: /root/.ssh - name: gcr.io/cloud-builders/docker:latest dir: k8s_pipelines entrypoint: bash args: - -c - |- set -eux docker build --secret id=ssh,src=/root/.ssh/id_rsa -f Dockerfile -t tag-name:latest ....

2022-06-26

First Posts

hi there

2022-06-25