ラベル gcp の投稿を表示しています。 すべての投稿を表示
ラベル gcp の投稿を表示しています。 すべての投稿を表示

2021/01/05

Health Planet と Fitbit 連携 Web サービス開発日記 : 全体アーキテクチャの紹介

 hp2fit.app のアーキテクチャを備忘録として紹介。

特徴はすべて Google Cloud Platform 上で動かしていて、以下の製品を組み合わせています。

バックエンドで動く Cloud Run と Cloud Functions 上のアプリケーションの開発言語は golang です。

以下が全体概要図です。

2020/05/30

Health Planet と Fitbit 連携 Web サービス開発日記 5/30

先週に気がついた Firestore でのデータの保持方法の設計ミスを改修。それに合わせて各コードも修正をしたのだけれど、基本的には Firebase の変更をトリガーに動作する、Cloud Functions 側のコードを基本的に修正すればよかったので、ちょっと助かった。

それに合わせて UI の作りも変更になったので、Client 側の HTML と Javascript のコードも修正して、思いがけず Single Page Application になった。

各ユーザーが Token を取得する際に Client_id にアクセスする必要はあるが、secret は基本サーバーサイド、しかも Firestore をトリガーに動く Cloud Functions からしかアクセスしないので、Firestore のセキュリティルールをつけやすくするため、client_id と secret をドキュメントでわけ、client_id にだけ Read のルールを設定。secret には Firebase のクライアントからのアクセスはできないルールとする。

一通りコードの修正とテストが完了し、新たに追加した refresh_token による access_token の更新処理も実装及び動作確認完了。

2020/05/24

healthplanet と fitbit 連携 Web アプリ開発日記

一通り動作確認のためのコーディングが終了し、モジュールごとにコードの分割も終えたとこまできて、各 API に登録した際の認証情報の保管先を、根本的に間違えていた事実に気がついてしまった。

そもそも、Client ID と Client Secret はユーザーデータの Path 上においてはいけないのに、各ユーザーごとに入手して登録する仕組みにしてしまっていた。なんていう初歩的なミス。

来週もコードのリファクタリングに費やすか。

2020/05/11

サーバーレスを使い倒して月額 4 円 の Web サービスを構築中

昨年末以来、空いた時間に Web アプリを開発中です。

タニタの体組成計 RD-800 を購入して毎日体重とか体脂肪率とかを図り、それを Fitbit に手動で入力しているのが面倒なので、これを自動化することを狙っています。ネットで調べるとちゃちゃっと作っている人とかもいるのですが、せっかくなのでこれを機会に新しいものを学びながら作ることにします。ということで開発言語は go 言語にします。昨年末に仕事で簡単なでもアプリを作ってみたので、これを機会に新しい言語でもう少し凝ったものを作って学習したいと思います。

万が一多くの人が使いたいという希望が出ることを想定し、ある程度は勝手にスケールする仕組みにします。でも1日の間でそんなに稼働する仕組みでもないので、基本的にはサーバーレスのコンポーネントを最大限に活用し、ランニングコストを下げることにします。

2019/01/05

Spinnaker on GKE の本番環境用インストールを Halyard on Docker でどうやるかを検証してみた

一年以上ぶりの投稿は、2018-2019 の年末年始に調べた Spinnaker の Halyard コンテナ経由のインストールについての覚書。

Spinnaker は、PoC 目的とかで検証する程度なら GCP の Cloud Launcher とかで簡単に構築できるのだが、いざ本番運用を考えると Spinnaker のウェブサイトにある Install and Configure Spinnaker に従い構築するほうがベター。しかも、クラウドにサービスを展開するための Continuous Delivery (継続デリバリー)用のツールをローカルのオンプレ環境で構築するのはあまり意味がないので、Spinnaker を GCE 上のコンテナの Halyard から GKE 上にインストールする方法を探る。

2017/08/22

GAE で GCS 上のファイルを添付してメール送信する

前回までに、Calibre が設定された VM を起動すると Kindle 用の mobi ファイルを作成して GCS に保管するまでが設定できた。

今回と次回の2回に分けて、GCS に mobi ファイルが追加されたことをトリガーに、mobi ファイルをメール送信する仕組みを作る。

GCS (Google Cloud Storage) にファイルが置かれた際にアクションを起こすには、GCS の「オブジェクト変更通知 」を使用する。オブジェクト変更の通知先として、Google App Engine の URI を指定して、呼び出された GAE の処理の中で、 GCS 上の mobi ファイルを添付ファイルとしてメール送信する。

まずは GAE 側の処理を作るところから始める。オブジェクト変更通知を設定するには呼び出す先の URI を用意しておく必要がある。

2017/07/24

GCE で起動スクリプトとカスタムメタデータを活用

前回までに、Google Compute Engine (GCE) の VM インスンタンス上で Calibre を使って記事のダウンロードして、そのダウンロードしたファイルを一時的に保管する GCS のバケットを用意

今回は、この VM にシェルスクリウプトを配置して、次の動作を自動的に処理できるように設定する。
  1. VM が起動したら、Calibre で目的の記事をダウンロードし mobi ファイルを作成する
  2. mobi ファイルを Google Cloud Storage (GCS) にコピーする
  3. VM をシャットダウンする

2017/07/23

GCS のバケット作成とライフサイクル管理設定

前回までに、Google Compute Engine (GCE) の VM インスンタンス上で Calibre を使って記事のダウンロードができるまでを確認した。

今回はダウンロードした mobi ファイルを Google Cloud Storage (GCS) にコピーする処理の準備。

まずは GCS 上にダウンロードした mobi ファイルをコピーして一時的に保管しておくバケットを作成する。

2017/07/18

calibre の nikkei.recipe をデバッグ

GCE でインスタンスを作成したら、calibre のインストールと設定を行う。

calibre のインストールは、普通に apt-get install でインストールする。

インストールをしたら試しに日経新聞のレシピを指定して mobi ファイルを作成してみる。(以前の記事をご参考)

/opt/calibre/ebook-convert input_file output_file [options]
例)
/opt/calibre/ebook-convert '日本経済新聞(朝刊・夕刊).recipe' /tmp/nikkei.mobi --username=USERNAME -password=PASSWORD

2017.06.20 時点では、たぶんエラーが出て mobi ファイルが作成できなかいはずだ。今ももしかしたら、apt-get でインストールできるバージョンではエラーが出るかもしれない。今回はこの問題をデバッグした話。

2017/07/17

calibre の実行環境用 GCE インスタンスの作成

前回解説した calibre on raspberry pi 環境の GCP 移行計画。

なにはともあれ、calibre の実行環境が必要。

GCP 上で何か処理をさせるとなると、GAE、GKE (Google Container Engine)、または GCE の中から選択することになる。コードを書くだけで動かせる GAE はシンプルなのだが、3rd party のライブラリを動かしたりすることは難しい。今回のように、特定処理をするアプリケーションがすでにある場合は、IaaS (Infrastructure as a Service) である GCE を使うのがソリューションとなる。

ちなみに今回の場合、必要な時だけ立ち上げるという用途であって、個人的に使うだけなのでオートスケールしたりする必要がないので、GKE も不要。

 まずは calibre を起動できる環境構築。コストを極力下げるため、以下の構成で GCE のインスタンスを作成する。

2017/07/16

calibre 環境をクラウド (GCP) に作り直してみた

1年前に Calibre を使って日経新聞をKindleで読む環境構築について投稿したが、稼動後しばらくして、raspberry pi を停止していた。

その後しばらく経ってから再開させようとしたら、エラーが発生して Kindle 用の Mobi ファイルが作成されなくなってしまった。色々調べてみたのだが、その時は初代 raspberry pi で動くライブラリに問題があって、calibre のアップデートで動かなくなった、と思って一旦放置とした。スマホを機種変して、大きめの画面にしたこともあり、紙面アプリで読むほうが便利になったことも一つの理由。

ところが、春先に旅行に行くことになり、どうしても Kindle で新聞が読みたい衝動に駆られ、久しぶりに環境の再構築をすることにした。で、せっかくなので、クラウド上で全てできないか試してみることにした。 Calibre 動かす為だけに、24 時間 raspberry pi 動かすのも阿呆らしいので。