public note

poetry publish コマンドで keyring の ModuleNotFoundError が起きたときの対応メモ

Poetry は依存するパッケージの管理だけでなく、PyPI に公開するのも簡単にできるのでとても便利です。 そんな中、poetry publish コマンドでエラーが発生するようになってしまいました。暫定対応により、現在は publish できています。そのときの対応メモが…

AWS Database Migration Service による Change Data Capture: 後編

Amazon RDS から Google BigQuery への CDC 後編です。後編では、S3 に格納された Parquet ファイルのデータを BigQuery に登録する部分を扱います。 構成図 前編はこちらをご覧ください。 ts223.hatenablog.com ソースコードは、前回同様にこちらで公開して…

AWS Database Migration Service による Change Data Capture: 前編

AWS

AWS Database Migration Service (以下、DMS) で Change Data Capture(CDC) を試してみました。 目的 構成 DMS のしくみ DMS の概要図 MigrationType 環境構築のポイント RDS パラメータグループ RDS への接続情報は SecretsManager に入れると便利 Replicat…

Stairlight v0.3.0: データソースとして Redash に対応しました

データリネージツール Stairlight の v0.3.0 を公開しました。 Stairlight とは テーブルレベルのデータリネージツールです。詳しくはこちらの記事をご参照ください。 ts223.hatenablog.com ts223.hatenablog.com 主なアップデート データソースとして Redas…

AWSのインターフェイス型VPCエンドポイントはAZごとに1つだけ設定できる

AWS

AWS のインターフェイス型 VPC エンドポイント (以下、Interface endpoint)を作成する際に、気になったことがあったのでまとめます。 サブネットの設定でエラーになった 例として、ECR エンドポイントを作成する CloudFormation のコードを挙げます。 ECREnd…

Stairlight v0.2.0 を公開しました

データリネージツール Stairlight の v0.2.0 を公開しました。 Stairlight とは テーブルレベルのデータリネージツールです。詳しくはこちらの記事をご参照ください。 ts223.hatenablog.com ts223.hatenablog.com 主なアップデート ラベル機能 同じテーブル…

データリネージツール Stairlight でテーブルの依存関係をグラフにする

この記事は、datatech-jp Advent Calendar 2021 の6日目の記事です。 こんにちは、GMOペパボ株式会社でデータエンジニアをしています、@tosh2230 と申します。 5日目は よしむらさんのデータマネジメント成熟度アセスメント、データ利活用機運アセスメントを…

workload identity federation での認証は Cloud SDK CLI に制限がある

GCP

結論 2021/11/22 現在、google-github-actions/auth など GCP の workload identity federation ログインで利用できるのは gcloud コマンドのみで、gsutil や bq は対象外になっています。 確認したこと この制限に気づかずに、GitHub Actions にて google-g…

Stairlight というデータリネージツールをつくった

Stairlight*1 という、テーブルレベルのデータリネージができるツールをつくりましたので、その特徴や使い方について書きます。 github.com 背景 ETL(Extract, Transform, Load) と呼ばれる一連のデータ加工プロセスにおいて、バッチ処理での Transform は、…

"Loggingモジュールではじめるログ出力入門" で PyCon JP 2021 に登壇した

この度、PyCon JP 2021 で発表をするという機会に恵まれました。 発表内容やプロポーザルを出した動機、感想と振り返り、そして多方面への謝辞を述べます。 発表資料 ソースコード 発表内容 プロポーザルを出した動機 感想と振り返り 謝辞 @amedama さま、@n…

Google Cloud Professional Data Engineer の資格を取得した

ここ数年、毎年ひとつ以上は何かの資格を取ることを目安に動いているのですが、今年は Google Cloud の Professional Data Engineer にしました。 2021/9/19 に受験し、翌日の 2021/9/20 に認定を受けました。資格の有効期間は 2年間です。再受験のときには…

AWS CloudFormationスタックのドリフトを検出してSlackに通知する

AWS

AWS CloudFormation(以下、Cfn) のスタックドリフトを検出して、Slackに通知してみました。 ドリフト検出とは Cfn で定義したスタック内のリソースについて、定義した内容から変更が加わっていないかをチェックする機能です。Cfn で管理していることを知らず…

Python logging levelを示す数値とその名称はlogging.getLevelNameで相互変換できる

結論 Python の logging.getLevelName 関数で、ログレベルを表す数値とその名称に当たる文字列を相互変換することができます。関数名の印象だと 数値 -> 名称 の一方向っぽいのですが 、実は双方向で変換できます。 $ python Python 3.8.11 (default, Jul 31…

Streamlit on Cloud Run with Identity-Aware Proxy (IAP)

GCP

タイトルのとおり、Cloud Run で Streamlit を動かしてみました。また、特定の人のみがアクセスできるように、Identity-Aware Proxy(IAP) での保護を試しましたので、その設定やコードを紹介します。 Cloud Run で動かすのはすぐにできたのですが、複数の St…

Cloud Dataflow と Cloud Pub/Sub で Exactly-once なストリーミングインサートを

[前回の記事](https://ts223.hatenablog.com/entry/dataflow-beam) では、Cloud Dataflow と Apache Beam に入門しました。その続きとして、今回は BigQuery に対してストリーミングインサートをしてみます。また、Cloud Pub/Sub と組み合わせることで Exact…

Cloud Dataflow と Apache Beam に入門した

BigQuery にストリーミングインサートしたい気持ちが高まってきて Cloud Dataflow と Apache Beam に入門しました。Cloud Pub/Sub -> Cloud Dataflow -> BigQuery のルートで取り込むにあたり、事前知識を得ることが目的です。 Apache Beam 特徴 Tour of Bea…

NaN というSQL演算結果

はじめに 先日、BigQueryで「SUM関数の演算対象にNULLが含まれるときに結果はどうなるか?」という話になって、NULLになるんじゃないかな?とその時思ったけど、リファレンスを見たら普通に違った。 標準 SQL の集計関数 | BigQuery | Google Cloud NULL 以…

gcloudコマンドの実行結果が標準エラー出力に流れるときの対処法

GCP

はじめに GCP のサービスの中には、gcloud コマンドの実行結果がなぜか標準エラー出力に流れてしまうケースがあります。私が把握している限りでは、Cloud Composer がこれに該当します。 エラーハンドリングをしようとしても正常終了時のメッセージが邪魔を…

AWS Cloud Formation で作成した IAM を Miam DSL として出力する

はじめに AWS の IAM を Miam で管理している中で、AWS Cloud Formation で IAM を別途作成した場合にどのように管理するか、という課題について考えます。 対応方法 対応方法には、2通りあると考えました。 Miam の管理対象として DSL に追加する --exclude…

AWS Lambda カスタムイメージと Runtime Interface Clients

AWS Lambda に乗せるコンテナのベースイメージを自分でつくりたいときは、”Runtime Interface Clients” をイメージにインストールするとできます、というお話です。 AWSが提供しているベースイメージ docs.aws.amazon.com 2021年5月時点で、6言語のイメージ…

CentOS 7 に PyAudio をインストール

Cent OS 7 に PyAudio を インストールしたときにちょっともたついたのでメモ。 PyAudio は、マイクから得た音声データを Python でリアルタイムに取得できるライブラリ。 pypi.org pip install pyaudio や poetry add pyaudio すればいいと思いきやだめだっ…

(機能拡張)リングフィットアドベンチャーの運動ログをほぼ自動的に収集・可視化する

3週間ほど前に書いた以下の記事ですが、最後に「これからやりたいこと」をいくつか挙げていました。 ts223.hatenablog.com このうち、2つを実現することができましたので、それらを紹介するとともに、最近の運用状況について書きます。 機能拡張 1. GCP Secr…

AWS Batch のシークレットを AWS Secrets Manager から取得する

AWS

AWS Batch で使うシークレットを AWS Secrets Manager から取得したのでメモ。 設定は、前回の Step Functions → Batchの AWS Cloud Formation テンプレートに追加して、動作を確認しています。 GitHub - tosh223/practice-aws-batch: Sample code of AWS Ba…

AWS Step Functions → AWS Batch on Fargate を SAM で定義する

AWS

AWS Step Functions から AWS Batch を呼び出す構成を AWS SAM で定義しました。 AWS Batch のジョブは、Fargate で動くようにしています。 すんなり定義できなかったところがいくつかありましたので、ひっかかったところをまとめました。 つくったテンプレ…

リングフィットアドベンチャーの運動ログをほぼ自動的に収集・可視化する

目的は自己管理と習慣化 システム要件 完成図 必要なもの 運用コスト グラフ Goプログラム help ツイート検索 画像内のテキスト解析 解析結果の登録 これからやりたいこと pixelaで草を生やす 過去データ移行 GCP Secret Manager 対応 英語対応 風来のシレン…

Go開発環境の構築 (goenv, Go Modules, Visual Studio Code)

適当につくってしまったGoの開発環境を再構築した手順のまとめ。 環境 OS: CentOS 7 (VirtualBox on Windows 10 pro) IDE: Visual Studio Code Macからの Remote Explorer による SSH接続 構築手順 goenv インストール git clone https://github.com/syndbg/…

Amazon SQS と Cloud Pub/Sub のインターフェースを統一する

はじめに 小品ですが、ライブラリをつくっています。 その特徴やつくっている背景、解決したいことについてまとめています。 github.com 特徴 名前のとおり、キューのハブです。 Amazon SQS と Google Cloud Pub/Sub を同一のインターフェースで扱うことがで…

Goで書いたCloud FunctionsをTerraformでデプロイする

春になったし Cloud Workflows の検証でもしようかと思って、その部品として Cloud Functions を作るぞとなったので、最近入門したGoでやってみようと思いました。しかし、検索してもこの組合せのサンプルが全然出てこなかった。 結論 Terraform では、Go で…

AWS Step Functions が yaml に対応したので試した

AWS

2021/3/4 に以下の記事が出ました。待望のyaml対応! aws.amazon.com これで、Cloud Formation の Template と同じく yaml で統一できます。 どんな感じなのか、以前に json で作成したステートマシンを yaml で定義しなおして確認してみました。 対象とした…

Cloud Scheduler と Cloud Tasks

GCP

Cloud Scheduler からリクエストをどのように送信するのか気になったので調べていたら、結局表題の内容になった。 Cloud Scheduler リクエストを送信する際の特徴は以下である。 cronで指定したスケジュールでリクエストを送信する --max-retry-attempts で…