[fluetd] S3にアップロードされたキー名でルーティングする

S3にアップロードされたファイルをfluentdでBigQueryにinsertする際、S3キー名に応じてテーブルを振り分けるサンプルを掲載します。 ここではフォーマットはs3://my-bucket/{BigQueryデータセット名}/{テーブル名}/{uuid}.csv.gz とします。 fluent.conf 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 <source> tag s3 @type s3 s3_bucket my-bucket s3_region ap-northeast-1 <sqs> queue_name my-queue </sqs> </source> <match s3> @type rewrite_tag_filter <rule> key s3_key pattern ^(....

October 26, 2021

kubectl logsに任意のログを表示する

kubectl logsはPID1の標準出力を表示するため、直接書き込んでしまえばなんでも表示できる。 1 2 3 $ kubectl exec -it pod-xxx bash # echo 'show as stdin' > /proc/1/fd/1 # echo 'show as stderr' > /proc/1/fd/2 1 2 3 4 $ kubectl logs pod-xxx show as stdin show as stderr

September 8, 2021

VSCode Remote ContainerからGitHubにssh接続する

公式ドキュメントの Sharing Git credentials with your containerに色々と記載があるが、非常に簡単なソリューションがあったためメモ Mac 1 2 3 4 5 $ sudo vi ~/.ssh/config Host github.com AddKeysToAgent yes UseKeychain yes Windows 1 2 3 > Set-Service ssh-agent -StartupType Automatic > Start-Service ssh-agent > ssh-add $HOME/.ssh/id_rsa WSL2 1 sudo apt install keychain ~/.bashrc 1 2 keychain -q --nogui $HOME/.ssh/id_rsa source $HOME/.keychain/$(hostname)-sh

September 2, 2021

自作キーボードYMDK/SP64ビルドログ

標準的な配列の分割キーボードをようやく見つけたためAliExpressで購入。 PCBは予めソケット化されており、差し込むだけで完成なので組み立て手順は割愛。 HHKB liteっぽくキーマップを実装。 左スペースキー横は日英切り替え(`Alt + ``)にしてみる。 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 #include QMK_KEYBOARD_H enum layer_names { BASE, // default layer _FN, // function layer }; enum custom_keycodes { M_KANA = SAFE_RANGE, }; bool process_record_user(uint16_t keycode, keyrecord_t *record) { if (record->event....

June 26, 2021

Airflowで後続のOperatorに配列を渡す

Apache AirflowにおいてOperator間で値を渡すにはXCOMを使用しますが、 Airflow macroで文字列として取得する PythonOperatorでtask_instanceから取得する の2通りの方法があります。 しかし、例えば GoogleCloudStorageListOperatorでファイルのリストを取得 » GoogleCloudStorageToBigQueryOperator でリストされたファイルをBigQueryにロードする といったことをやりたい場合、XCOMからファイルのリストを配列として取得しコンストラクタに渡さなければならないためすこし工夫が必要になります。 本稿ではその実装について記載します。 NG 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 ... list_files = GoogleCloudStorageListOperator( task_id='list_files', bucket='my_bucket', prefix='path/to/file/', xcom_push=True, dag=dag ) gcs_to_bigquery = GoogleCloudStorageToBigQueryOperator( task_id='gcs_to_bigquery', bucket='my_bucket', source_objects="{{ ti.xcom_pull(task_ids='list_files') }}", destination_project_dataset_table='project:dataset.table', autodetect=True, dag=dag ) list_files >> gcs_to_bigquery ... ファイル名の配列がデシリアライズされた状態で source_objects に渡されてしまうため動作しません。 OK 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 ....

May 20, 2021

KubernetesのCronJobからJobを手動作成する

1 kubectl create job 作成するJob名 --from=cronjob/CronJob名 https://kubernetes.io/docs/reference/generated/kubectl/kubectl-commands#-em-job-em-

November 30, 2020

terraform非対応リソースをlocal-execで管理する

terraformに対応していないクラウドリソースを local-exec を用いてterraform化してみます。 今回はBigQueryのユーザー定義関数(UDF)でやってみます。 実装 さて早速。 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 variable project{} resource "null_resource" "bigquery-udf" { <- #1 triggers = { query = "CREATE OR REPLACE FUNCTION my_dataset.TEST_FUNCTION(x INT64) AS (x + 1);" <- #2 } provisioner "local-exec" { <- #3 interpreter = ["bq", "query", "--use_legacy_sql=false", "--project_id=${var.project}"] <- #4 command = self.triggers.query on_failure = fail <- #5 } provisioner "local-exec" { when = destroy <- #6 interpreter = ["bq", "query", "--use_legacy_sql=false", "--project_id=${var....

September 14, 2020

GCPでカスタムロールをサービスアカウントにbindingしようとしてエラーになる場合

1 2 3 4 $ gcloud projects add-iam-policy-binding myproject --member=serviceAccount:myserviceaccount@myproject.iam.gserviceaccount.com --role='roles/mycustomrole' ERROR: Policy modification failed. For a binding with condition, run "gcloud alpha iam policies lint-condition" to identify issues in condition. ERROR: (gcloud.projects.add-iam-policy-binding) INVALID_ARGUMENT: Role roles/mycustomrole is not supported for this resource. --role の指定を roles/mycustomrole ではなく projects/myproject/roles/mycustomroleにすればOK 1 2 3 $ gcloud projects add-iam-policy-binding myproject --member=serviceAccount:myserviceaccuont@myproject.iam.gserviceaccount.com --role='projects/myproject/roles/mycustomrole' Updated IAM policy for project [myproject].

March 3, 2020

自作キーボード JJ50 ビルドログ

HHKB Professionalを終のキーボードにしようと思っていましたが、 長時間コーディングをしていると小指が痛くなる なんだかんだ矢印キーは欲しい という事で、最近流行りの自作キーボードをやってみようかという運びになりました。 パーツ購入 1 ~ = が上段に並んでいて欲しい 小指で押していたShift、Enter、Deleteを親指付近に移動させたい という理由によりサイズは12列5行に決定、このサイズのPCBを探したところAliExpressで JJ50 という製品を見つけました。 同時にステンレス製ケース、キーキャップ、CherryMX銀軸を購入。 総額は¥14800(PCB¥3700、ケース¥4100、キーキャップ¥3600、スイッチ¥3400)程度でした。 説明書なんてものは当然ありません。ドキュメントの類はこれが全て。 組み立て ケースにスイッチを取り付ける PCBを載せて半田付け キーキャップを取り付けてハードウェアは完成 表面実装部品は予めついていたため拍子抜けするほど簡単でした。 ファームウェア焼き ビルド環境セットアップ (Mac) 1 2 3 4 $ git clone https://github.com/qmk/qmk_firmware $ cd qmk_firmware $ util/qmk_install.sh $ make git-submodule キーマップの作成 マクロや3つ以上のレイヤーは使う予定が無いので、とてもシンプルなコードです。 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 #include QMK_KEYBOARD_H #define ______ KC_TRNS #define _DEFLT 0 #define _FN 1 bool process_record_user(uint16_t keycode, keyrecord_t *record) { return true; }; const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { /* Default * ,-----------------------------------------------------------------------------------....

February 23, 2020

BigQueryで重複レコードを削除するSQL

オペミスやat-least-onceセマンティクスによってINSERTされてしまった重複レコードを消すSQLです。 完全に同一な重複レコードを消す やる事は 重複レコードのうち最古のものを一時テーブルに退避 重複レコードを全て削除 一時テーブルから再度INSERT です。 Schema 1 2 3 4 5 6 7 8 9 10 11 12 [ { "mode": "REQUIRED", "name": "id", "type": "INTEGER" }, { "mode": "NULLABLE", "name": "value", "type": "STRING" } ] 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 CREATE TABLE project_name....

February 5, 2020