前記事「WordPress:pythonのAPIサーバーでスクレイピング」で Amazon の商品ページをスクレイピングしてみようと始めたのですが、Xserver のレンタルサーバーでは動的サイトをスクレイピングするためのブラウザをインストールできないことが判明しました。
さて、どうしましょう?
01Google Cloud とは
結局、自前で API サーバーを立てられない以上、VPS にするか外部のクラウドサービスに頼るしかなく、いろいろ調べますと Google Cloud に無料枠というものがあり、想定しているものならその枠内に収まりそうですので試してみることにしました。
いやー、ここ2、3日、暇があれば上のサイトを覗いているんですが、なんだか広大な荒野にぽつんとひとり取り残されたような気分になります。できる(らしい…)ことがあまりに多く、知らないカタカナ言葉が溢れていますし、どこから手を付けていいのか訳がわかりません。それに Google の説明はどれもわかりにくいです(人によります(笑)…)。
なんてことを言っていても始まりませんのでとりあえずやってみることにしました。Google アカウントの作成や Google Cloud への登録は済んでいるものとします。
まず、個人ができるだけ費用をかけずに Google Cloud を利用するには、
- Google Cloud には無料トライアルと無料枠がある
- 全体では 150 以上の Google Cloud プロダクトがある
- 無料枠はプロダクトが20程度に限定され、使用量に上限がある
ということを理解し、無料枠のあるプロダクトの中に python と selenium を使って API サーバーを立てられるサービスがあるかです。Chrome で検索してみますと、
Google Cloud(GCP)には Python と Selenium を使って API サーバーを構築し、無料枠(Always Free)の範囲内で運用できるサービスが存在します。最も適しているのは Google Cloud Run です。
- 理由: Docker コンテナをサポートしているため、Selenium に必要な Chrome ブラウザや WebDriver を環境にインストールしてイメージ化し、API サーバー(Flask/FastAPI等)として動かすのに最適です。
- 無料枠 (Always Free): 毎月一定の CPU/メモリ時間、および200万リクエストまで無料。
- 特徴: リクエストが来たときだけコンテナが起動するため、小規模〜中規模のAPIであれば無料で運用しやすいです。
と Gemini が答えてきます。Chrome も優先的に Gemini が答えるようになっているようです。
他にもサーバーレスな関数実行サービスとして Cloud Run Functions があるようですが、現在では Cloud Run に統合されて(正確ではないので調べてね…)いるらしく、とりあえずは Cloud Run は Docker コンテナで実行し、Cloud Run Functions は関数で実行する程度の理解でいけそうです。
02サンプルコンテナで試す
実際にはローカルのターミナルから Google Cloud を操作する gcloud CLI というツールを利用することになりますが、まずは Google Cloud コンソール(以下、コンソール)上のサンプルコンテナを試してみます。
コンソールにログインします。

ログインしたときの状況によって表示は違うかもしれませんが、新しくプロジェクトを作成すれば同じです。My First Project が選択されているかもしれませんし、新規にプロジェクトをつくるのであれば、その My First Project をクリックするか、ハンバーガーメニューから「IAM と管理 > プロジェクトを作成」をクリックします。
スクロールして「テストサービスを作成」をクリックします。

「既存のコンテナイメージから…」のチェックを確認し、「サンプルコンテナでテスト」をクリックしますと「コンテナイメージの URL 」が自動で入ります。続いて、
- リージョン -> asia-northeast1(東京)
- 認証 -> 公開アクセスを許可する
- 課金 -> リクエストベース
- サービスのスケーリング -> 自動スケーリング
- Ingress -> すべて
と入れて作成をクリックします。認証は後回しにしてとりあえず進んでみます。

サービスの作成やリビジョンの作成がぐるぐると回り、1分程度でデプロイされます。表示されているアクセス URL のリンクをクリックしてみます。

成功しています。
03IAM 認証を試す
一般公開の API を考えているわけではなく自分だけアクセスできればいいわけですので認証をどうすればいいかをチェックします。
それにしても IAM やら IAP やらプリンシパルやらロールやらと、まずそれが何を指しているのわかりません(笑)。それにプリンシパルってバレエ用語ではなく、「主要な、中心的な、最も重要な」という一般的な形容詞だったんですね。Gemini に聞いてみました。
Google Cloudにおける「プリンシパル」と「ロール」は、IAM(Identity and Access Management)と呼ばれる権限管理の仕組みにおける中核要素であり、「誰が(プリンシパル)」「何に(ロール)」「どうやって(リソース)」アクセスできるかを定義するためのものです。
とにかくやってみるということでググりますといろいろ情報はあるのですが、やはり本家のドキュメントにたどり着いての情報じゃないと心配ということで、Google Cloud のガイドに沿って試してみます。
上のリンク先の次のページ「公開(未認証)アクセスを許可する」にあります。

「セキュリティ」をクリックします。

「認証が必要」にチェックを入れ、「Identity and Access Management (IAM)」を選択して保存します。そして試しに先程のアクセス URL をクリックしてみます。

アクセス権限がないと返ってきます。
続いてプリンシパルにロールを与えます(これであってるかな…)。ただ、現在は管理者でログインしていますのでこのまま認証トークンを取得すればサービスにアクセスできます。やってみます。

Cloud Shell を立ち上げます。

上のリンク先の「curl を使用する」にある
curl -H “Authorization: Bearer $(gcloud auth print-identity-token)” SERVICE_URL
のように SERVICE_URL をサービスのアクセス URL に差し替えて Cloud Shell に打ち込みます。

認証が通り、ブラウザでアクセスしたページの html ソースが返ってきます。
なお、私が想定しているケースの場合は管理者のままでいいとは思いますが、上のリンク先には新しいプリンシパルを追加し、デベロッパー権限など限定的な権限を与える方法が説明されています。
また、この方法は開発目的に使用すべきとの但し書きがあります。
開発目的の場合は、gcloud CLI で生成された ID トークンを使用します。ただし、このようなトークンにはオーディエンス クレームがないため、リプレイ攻撃を受けやすくなります。本番環境では、適切な対象を指定したサービス アカウントに対して発行された ID トークンを使用します。
本番用はどうしたらいいかはまた後日です。
ということで最初は雲を掴むような Google Cloud でしたがなんとかなりそうです。今回のテスト用のサービスを削除して次は Docker コンテナの作成です。
04Google Cloud CLI をインストールする
今後の作業のために Google Cloud CLI をインストールしておきましょう。
リンク先の手順に従えば問題なくインストールできます。
以上です。