GAミント至上主義

Web Monomaniacal Developer.

2020-04-01から1ヶ月間の記事一覧

@google-cloud/pubsubをTypeScriptで使おうとしたらエラー

@google-cloud/pubsub": "^1.7.2"を使い、tscしたところ下記のエラーが出た。www.npmjs.com node_modules/@grpc/grpc-js/build/src/call.d.ts:68:5 - error TS2416: Property '_write' in type 'ClientWritableStreamImpl<RequestType>' is not assignable to the same pr</requesttype>…

シニアジョブのデータ基盤のETLとしてApache AirflowをGKEで構築した理由

これまで小ネタは書いたけど、なぜApache Airflow (以下Airflow)使ってるのか、Cloud Composerを使わずGoogle Kubernetes Engine(以下GKE)を使っているのか等そもそも論的なことは書いてなかったので、忘れないうちにまとめ。 データ基盤を作る理由 シニア…

AirflowでImportError: cannot import name 'HTMLString' from 'wtforms.widgets'

AirflowをCloud Buildでビルドして動かしたら突然、下記のようなエラーが起きた。 Traceback (most recent call last): File "/usr/local/bin/airflow", line 26, in <module> from airflow.bin.cli import CLIFactory File "/usr/local/lib/python3.7/site-packages</module>…

AirflowのSlack通知で実行にかかった時間を表示する

Airflowを使っていてタスク完了時、失敗時にSlack通知を自作する必要があるけど、そこで実行にかかった時間を表示したかった。結論としてコールバックに渡されるcontextのdag_runにstart_date, end_dateが入っているので引き算すれば出せる。Airflowのバージ…

AirflowのwebserverでLBを通すとhttpにリダイレクトされてしまう問題

Cloud Composerを使わず、GKEでAirflowを構築し、ロードバランサーにGCP HTTPS Load Balancer+Google管理の証明書を使用した。通常の管理画面表示には問題なかったものの、VariablesなどのPOST系のアクションをすると、http接続に戻ってしまう問題があった…

Cloud BuildでGKEにデプロイするときに「Error: secret "key-name" not found」で死ぬ

手動でkubectlコマンドでデプロイは問題ないのに下記を参考にCloud BuildでGKEのデプロイをしたら「CreateContainerConfigError」でなかなかビルドが終了しなかった。podの状態をみると下記のような感じ $ kubectl get po NAME READY STATUS RESTARTS AGE ai…

Kubernetesの「converting YAML to JSON」エラーメッセージは信じるな

結論 npm install -g yaml-lint yamllint filename.yaml使うKubernetesを使ってるとyamlからは逃れられない。本当はJSONでやりたいけどだいたいのサンプルはyamlなので使わざるを得ない。自分で書いていて長くなってくるとどうしても構文エラーを起こしてし…

AirflowでGoogleアカウント認証を使う。RBAC使うのは諦めた

Airflowでは通常のメールアドレス+パスワード認証以外にOAuthが使えます。 会社でG Suiteを使っているのでGoogleアカウント認証が良さげ。パッケージのインストールが必要なのと、airflow.cfgの変更が必要。 Security — Airflow Documentation 基本的に上記…

AirflowのGoogleCloudStorageToBigQueryOperatorでAlready Existsエラー

差分だけ追記しようとしたら下記のエラーがでた。 Exception: BigQuery job failed. Final error was: {'reason': 'duplicate', 'message': 'Already Exists: Table project_id:airflow_local.table'}AirflowというよりはBigQueryの設定でwrite_disposition…

AirflowのMySqlToGoogleCloudStorageOperatorで実行時刻などをSQLで使う

ローカルで立てたAirflowで開発中のアプリDB→BigQueryのDAGがざっくり動いたので、今度は前回の更新日以降を差分同期したいと思った。 DBの種類がMySQLなのでちょっと違うけどやりたいのはまさにこれ。tech.enigmo.co.jp 前回実行時間と今回の実行時間があれ…

AirflowでMySQLの文字化けを直す

シニアジョブのデータ基盤を構築するべく、アプリケーションのDBデータをBigQueryに入れて活用しようとしてます。データを移すワークフロー管理にAirflowを使おうとまずはローカルであれこれしています。とりあえず下記のレポジトリを参考にしつつ、バージョ…

Node.jsでSlackのIncoming Webhooksを使う

検索結果に出てくる記事が古かったりして時間をロスしてしまうのでメモ。 結論 公式のパッケージを使おう。 www.npmjs.com npmでインストールできる $ npm install @slack/webhook公式のサンプルコードを見ればわかるけどURLを渡してsendするだけで使えてし…

Raspberry Pi + MH-Z19B + Firebaseで二酸化炭素濃度をウォッチする

仕事中眠くなったり、ぼーっとすることがあったら二酸化炭素が原因です(確信)。濃度によってこのような影響が明らかになっており、オフィスや学校など法律でも一定以下にするよう決められているそうです。特に新型コロナのご時世、テレワークをしている家…