ようへいの日々精進XP

よかろうもん

初老丸を支えた技術 2022 〜 2022 年の振りかへり、ブラボーな一年だったかな? 〜

tl;dr

2022 年を振り返ってみたいと思います。

ちなみに、去年の振り返りの記事は以下の通りです。

inokara.hateblo.jp

inokara.hateblo.jp

コロナ禍

コロナは続くよいつまでも。。。まだまだ収まる様子を見せないコロナウィルス感染症の影響。我々夫婦は幸い感染することなく今年一年を過ごすことが出来ました。これも一重に医療従事者の皆さんをはじめ、多くの人たちの努力によって支えられている結果だと思います。引き続き、私たちは、うがい、手洗い、密を避けるといった、小さい努力を重ねていきながら収束を祈り続けます。

骨粗鬆症

引き続き、経過観察は続いていて、ビタミン E の投薬治療は続いています。当初は治そうと思っていましたが、これから年齢を重ねていく上で完治ということはなさそうなので、食事や運動等のバランスをとりながらうまく付き合っていこうと思います。

ケガとランニング

今年一年の Fitbit で計測しているアクティビティは以下のような感じでした。

https://pixe.la/v1/users/inokappa/graphs/fitbit-activity

Strava で計測しているアクティビティは以下の通りです。

年間で 1700 キロくらいしか走れませんでした。。。原因はやはりケガ。右足股関節の痛みに続き、左足のシンスプリントと本当に悩まされました。ケガの間はクロストレーナーやエアロバイクを漕ぎまくりましたが、補強を積極的に取り入れるようにしました。また、最近になって、毎日走ることを諦めて、週に三回から四回に抑えるように心がけています。加齢により回復に時間を要するということもありますが、間を開けることで、走りたい欲が高まって、質の高い走りが出来るような気がしています。

そして、今年は、久しぶりに福岡マラソンにも参加しました。ケガで全くトレーニングが出来ていなかったので、ゴールは目指さずに走れる喜びを嚙み締めつつ今宿でゴール、来年のサブスリー返り咲きを誓いました。

とにかく、来年はケガ無く (毛が無いのにケガはよくする) 走り続ける為の努力は惜しまないつもりです。

仕事

YAMAP  四年目。今年はインフラチームに仕事の出来る新メンバーにジョインして頂き、自分ひとりでは手が回らなかったことに、チームとしてチャレンジ出来ました (ほとんど新メンバーに任せっきりでしたが...汗)。

また、チームリーダーとして、チームメンバーの育成にも取り組みました。まだまだ、リーダーとして試行錯誤が続き、「自分にリーダーなんて勤まるんだろうか」と思う日が続き、エンジニアリングとの両立に悩むこともありますが、来年も、チームメンバーの力を借りつつ、出来るだけマネジメントとエンジニアリングの両立で頑張ってみようと思います。

英会話

12 月はちょっとサボってしまいましたが、引き続き、レッスンは続けていきます。

正直、なかなか上達はしませんが、日本語だけの日常に、たった 30 分間だけの異国体験、異国の方と会話する行為そのものが楽しいのでこれからも続けられそうです。

家族

たまにケンカありますが、引き続き、夫婦二人で仲良く暮らしています。書道で食べていきたいという強い信念で日々努力を続ける妻にはすごく刺激を貰っています。

春先に車を乗り換えました。7 年間乗ったミニクーパーとの別れはとても寂しく、涙無しでは語れませんが、新しい息子のロードスターで九州各地を走り周り、ライトウエイトスポーツカーの楽しさを満喫しています。

そして、今年最大のビックイベント、11 月に引っ越しました。一念発起して購入したマンションです。この歳なって、大きな借金を抱えることになって震えが止まりませんが、マンションのリビングから見える夜景が綺麗なので、これからも頑張って働いて借金を返そうと夜景に誓った次第です。

以上

そろそろ 2022 年が終わろうとしています。

こうやって大晦日を迎えることが出来たのも、妻をはじめ、父や母、会社のメンバー等の支えがあったからだと思います。

こうやって、ざっくりと振り返ると概ねブラボーな一年だったような気がします。

本当にありがとうございました。

良いお年をお迎えください。

2022 年 12 月 30 日 (金)

アクティビティ (今までの走行 (歩行) 距離)

https://pixe.la/v1/users/inokappa/graphs/fitbit-activity

Fitibit Charge2 のアクティビティから走行 (歩行) 距離を Fitbit Web API で取得して Pixela で草生やしている。色が濃くなれば濃くなる程強度が高い (歩行、走行距離が長い) ということで。実装の詳細はこちら

最近、Fitbit Charge2 が壊れてしまったので、データが収集出来ていないことに気づきました。アクティビティの表示はしばらくお休みします...

ジョギング

完全休養。当面、一日おきくらいに走るようにしようかな。

夕飯

ららぽーとの酒屋さんで買った日本酒とルミエールで買ったお刺身の盛り合わせで乾杯。〆で二日目の豚汁。美味しゅうございました。

自宅の片づけ

ずっと妻にまかせっきりだったので、少しでも力になれればと。こまごましたガラクタの片づけをいっきにやっつけた。

2022 年 12 月 29 日 (木)

アクティビティ (今までの走行 (歩行) 距離)

https://pixe.la/v1/users/inokappa/graphs/fitbit-activity

Fitibit Charge2 のアクティビティから走行 (歩行) 距離を Fitbit Web API で取得して Pixela で草生やしている。色が濃くなれば濃くなる程強度が高い (歩行、走行距離が長い) ということで。実装の詳細はこちら

最近、Fitbit Charge2 が壊れてしまったので、データが収集出来ていないことに気づきました。アクティビティの表示はしばらくお休みします...

ジョギング

夕飯

とんとん豚汁に、二日目ブリブリ大根。温まって美味しゅうございました。

仕事納め

ほぼ出勤がないので、街の「年末だからなんとなく慌ただしい」感を感じることが無い分、今日で仕事納めなのかー?という気持ち。今年一年、お疲れ様でした。

JAWS-UG 福岡もくもく会 #108

jaws-ug-kyushu.doorkeeper.jp

「煩悩の数と一緒の 108 回目ということで...」と開会の言葉を切り出す木村さんに「うまいこと言うなー」と思いつつ、Cost Explorer についてもくもくした。二次会もやったりして、そちらのほうが盛り上がった。久しぶりに違う意味のもくもく会 (雑談等で盛り上がる) を堪能出来た。

2022 年 12 月 28 日 (水)

アクティビティ (今までの走行 (歩行) 距離)

https://pixe.la/v1/users/inokappa/graphs/fitbit-activity

Fitibit Charge2 のアクティビティから走行 (歩行) 距離を Fitbit Web API で取得して Pixela で草生やしている。色が濃くなれば濃くなる程強度が高い (歩行、走行距離が長い) ということで。実装の詳細はこちら

最近、Fitbit Charge2 が壊れてしまったので、データが収集出来ていないことに気づきました。アクティビティの表示はしばらくお休みします...

ジョギング

完全休養。

夕飯

ブリブリ大根。作ったばかりだったので味しみではなかったけど美味しゅうございました。

東那珂 N 日目

LIVING HOUSE で発注していたおしゃれな棚が届いた。

ドアエッジモール

先日のドライブで助手席のドアの角をぶつけて凹ませてしまったけど、ディーラーに持ち込んで確認してもらったら、ドアエッジモールを付けていたおかげでボディまで傷が入っていなくて良かった。

ということで、ドアエッジモールの交換費用 6,600 円で事なきを得た。

着るコタツ

武川さんに教えてもらった。

amzn.asia

足が出せるのもポイント。良さそう。

2022 年 12 月 27 日 (火)

アクティビティ (今までの走行 (歩行) 距離)

https://pixe.la/v1/users/inokappa/graphs/fitbit-activity

Fitibit Charge2 のアクティビティから走行 (歩行) 距離を Fitbit Web API で取得して Pixela で草生やしている。色が濃くなれば濃くなる程強度が高い (歩行、走行距離が長い) ということで。実装の詳細はこちら

最近、Fitbit Charge2 が壊れてしまったので、データが収集出来ていないことに気づきました。アクティビティの表示はしばらくお休みします...

ジョギング

夕飯

里芋のから揚げやら鶏むね肉の野菜炒めやらガッツリと美味しゅうございました。

あっという間の 2022 年

今年も残すところ 4 日ということに気づいた。はやいなー。特に 11 月後半からはあっという間過ぎた。

東那珂 N 日目

ランチに近所の行きつけの回転寿司屋さんに妻と一緒に行った。

genkaimaru.com

ここのおすすめはあら汁。お値段もリーズナブル。そして、いつものように納豆巻きと鉄火巻きでしめた。美味しゅうございました。

2022 年 12 月 26 日 (月)

アクティビティ (今までの走行 (歩行) 距離)

https://pixe.la/v1/users/inokappa/graphs/fitbit-activity

Fitibit Charge2 のアクティビティから走行 (歩行) 距離を Fitbit Web API で取得して Pixela で草生やしている。色が濃くなれば濃くなる程強度が高い (歩行、走行距離が長い) ということで。実装の詳細はこちら

最近、Fitbit Charge2 が壊れてしまったので、データが収集出来ていないことに気づきました。アクティビティの表示はしばらくお休みします...

ジョギング

夕飯

ルンミーのから揚げやらお刺身を買ってきて妻と乾杯。美味しゅうございました。

2022 年 12 月 25 日 (日)

アクティビティ (今までの走行 (歩行) 距離)

https://pixe.la/v1/users/inokappa/graphs/fitbit-activity

Fitibit Charge2 のアクティビティから走行 (歩行) 距離を Fitbit Web API で取得して Pixela で草生やしている。色が濃くなれば濃くなる程強度が高い (歩行、走行距離が長い) ということで。実装の詳細はこちら

最近、Fitbit Charge2 が壊れてしまったので、データが収集出来ていないことに気づきました。アクティビティの表示はしばらくお休みします...

ジョギング

今日も完全休養。走るモチベーションが落ちてきている。明日は走ろうかな。

夕飯

ツーリングの帰りに香椎のリューイチで担々麺を頂く。美味しゅうございました。

東那珂 N 日目

同僚の森脇さんの納車祝を兼ねて角島までツーリング。昨日までの天気と打って変わって、晴れ間に伸びるの角島大橋は最高だった。川棚温泉で瓦そばを食べたり、自分で計画を立てた割には良い感じでまとまったので良かった。

2022 年 12 月 24 日 (土)

アクティビティ (今までの走行 (歩行) 距離)

https://pixe.la/v1/users/inokappa/graphs/fitbit-activity

Fitibit Charge2 のアクティビティから走行 (歩行) 距離を Fitbit Web API で取得して Pixela で草生やしている。色が濃くなれば濃くなる程強度が高い (歩行、走行距離が長い) ということで。実装の詳細はこちら

最近、Fitbit Charge2 が壊れてしまったので、データが収集出来ていないことに気づきました。アクティビティの表示はしばらくお休みします...

ジョギング

今日も完全休養。寒すぎて体を動かせない。終日、椅子に座っていたので右股関節周りに突っ張りがある。。。

夕飯

イカとキャベツとパスタを作った。晩酌に昨晩のハンバーグを頂く。美味しゅうございました。

東那珂 N 日目

終日寒かった。。。ずっと夫婦ふたり、リビングで肩を寄せ合って過ごした。

Google Drive API の Push Notification を利用して Google Drive 上の変更を AWS Lambda で受け取る (試み)

これは

YAMAP エンジニア Advent Calendar 2022 の第 24 日目の記事になる予定です。

qiita.com

経緯

Google Drive の変更をプログラムで受け取れないか調べていたら Google Drive API に Push Notification という機能が提供されていることを知りました。

developers.google.com

この Push Notification (以後、Push 通知) を AWS Lambda の Functions URLs で受け取れるか試してみました。

Google Drive API に Push Notification を理解する

概念図

Push 通知の動作は以下のようなイメージです。

ページトーク

概念図には出てきませんが、ページトークンは Google Drive 全体の変更通知を受け取る際には必要となるパラメータになります。

ページトークンは、Google Drive の変更をどこまで通知しているかを示すマーカーのようなもので、変更一覧を取得リクエストのレスポンスに newStartPageToken が含まれていて、次回、変更一覧を取得する際のリクエストパラメータにセットする必要があります。

チャンネル

チャンネルは、変更通知の送信先 URL (事前に作成する必要がある) をパラメータ (address) の一つとして作成します。今回は、変更通知の送信先 URL を Lambda の Function URL に指定します。

以下、ドキュメントより引用したリクエスト例です。

POST https://www.googleapis.com/drive/v3/changes/watch
Authorization: Bearer auth_token_for_current_user
Content-Type: application/json

{
  "id": "4ba78bf0-6a47-11e2-bcfd-0800200c9a77", // Your channel ID.
  "type": "web_hook",
  "address": "https://mydomain.com/notifications", // Your receiving URL.
  ...
  "token": "target=myApp-myChangesChannelDest", // (Optional) Your channel token.
  "expiration": 1426325213000 // (Optional) Your requested channel expiration time.
}

変更内容の通知

変更内容はリクエストヘッダやリクエストボディに記録されます。

以下、ドキュメントより引用したリクエスト例です。

# ヘッダーに記録されるパターン
POST https://mydomain.com/notifications // Your receiving URL.
Content-Type: application/json; utf-8
Content-Length: 0
X-Goog-Channel-ID: 4ba78bf0-6a47-11e2-bcfd-0800200c9a66
X-Goog-Channel-Token: 398348u3tu83ut8uu38
X-Goog-Channel-Expiration: Tue, 19 Nov 2013 01:13:52 GMT
X-Goog-Resource-ID:  ret08u3rv24htgh289g
X-Goog-Resource-URI: https://www.googleapis.com/drive/v3/files/ret08u3rv24htgh289g
X-Goog-Resource-State:  update
X-Goog-Changed: content,properties
X-Goog-Message-Number: 10

# ボディに記録されるパターン
POST https://mydomain.com/notifications // Your receiving URL.
Content-Type: application/json; utf-8
Content-Length: 118
X-Goog-Channel-ID: 8bd90be9-3a58-3122-ab43-9823188a5b43
X-Goog-Channel-Token: 245t1234tt83trrt333
X-Goog-Channel-Expiration: Tue, 19 Nov 2013 01:13:52 GMT
X-Goog-Resource-ID:  ret987df98743md8g
X-Goog-Resource-URI: https://www.googleapis.com/drive/v3/changes
X-Goog-Resource-State:  changed
X-Goog-Message-Number: 23

{
  "kind": "drive#changes"
}

本題 (変更通知を AWS Lambda で受け取る)

構成

シンプルに下図のような構成を手動で構築しました。

Lambda 関数を作成し、Function URLs を払い出した後に、払い出された URL を利用して、手元の環境から Python スクリプトでチャンネルを作成しています。

コード

一応、チャンネルを作成したり停止するスクリプト (main.py) と Lambda 関数 (handler.py) は、以下のリポジトリにアップしておきました。ちなみに、久しぶりに Python を使ってプログラムを書いてみました。

github.com

以後の実験については、このコードを利用して進めます。

実験

事前の準備

  • Lambda 関数を作成する
    • SSM パラメータストアを利用するので、SSM パラメータストアにアクセス出来る権限を付与する
    • Function URL を払い出しておく
  • SSM パラメータストアにトークンをストア出来るようにする
  • GCP のプロジェクトを作成し、各種設定を行う
    • OAuth の同意画面を作成する
    • OAuth Client ID を払い出す (main.py) で利用する
    • サービスアカウントを払い出す (Lambda 関数) で利用する

チャンネル作成

以下のように main.py を実行してチャンネルを作成します。

$ python main.py create
xxxxxxx-8359-11ed-9dc6-xxxxxxxxxxxxxxxxx # チャンネル ID
xxxxxxxxxxxxxxxxxxxxxxxxxxx # リソース ID

ファイル追加

ファイル (higesan.png) を Google Drive にアップロードしました。

下図のように Lambda 関数にアップロードされたファイル名が記録されました。

ファイル削除

ファイル (higesan.png) を Google Drive から削除してみました。

わかりづらくなったことを反省していますが、削除されたファイル名が記録されました。

ファイルの追加も削除も drive#change になってしまうのが気になりますね。。。

アクセス権の付与や削除

Google Drive 上のとあるフォルダを外部のユーザーに共有してみました。

下図のように通知が飛んできました。どうやら、フォルダやファイルにアクセス権を付与した場合にも通知が飛んできてくれるようです。

チャンネル停止

以下のように main.py を実行してチャンネルを停止します。

$ python main.py ${チャンネル ID} ${リソース ID}

ちなみに、本来であれば、上記を実行することでチャンネルが削除されて通知は止まるはずなんですが、検証でむやみやたらにチャンネルを作ってしまったので、引き続き通知が飛んできてしまう状況です。。。

ということで

Google Drive API の Push 通知を利用して、Google Drive 上の各種変更を AWS Lambda で受け取ってみました。Lambda の Function URL は、ちょっとした Webhook を受け取りたい場合等に便利でした。

尚、Push 通知については、ドキュメント等をちゃんと読み込めていない為、挙動をちゃんと把握しきれてはいませんが、これを利用してやりたいこと (変更が発生したファイルを S3 バケットにバックアップしたり、フォルダやファイルの共有をモニタリング等) が出来そうな気がしましたので、引き続き検証を進めていきたいと思います。

以上、現場からの報告でした。

参考資料

2022 年 12 月 23 日 (金)

アクティビティ (今までの走行 (歩行) 距離)

https://pixe.la/v1/users/inokappa/graphs/fitbit-activity

Fitibit Charge2 のアクティビティから走行 (歩行) 距離を Fitbit Web API で取得して Pixela で草生やしている。色が濃くなれば濃くなる程強度が高い (歩行、走行距離が長い) ということで。実装の詳細はこちら

最近、Fitbit Charge2 が壊れてしまったので、データが収集出来ていないことに気づきました。アクティビティの表示はしばらくお休みします...

ジョギング

完全休養。寒すぎて体を動かせない。

夕飯

久しぶりの妻の手作りハンバーグ。新居のガスレンジは火加減が難しいとのことだったけど、安定のおいしさでした。お御馳走様でした。

東那珂 N 日目

朝から雪がチラついていて、寒さに震えながら仕事をしていた。エアコンの設定温度も上げるだけ上げて何とか耐え忍んだ。