スキップしてメイン コンテンツに移動

投稿

2014の投稿を表示しています

Google Compute Engineが10%OFFに

Announcing across-the-board price cuts on Compute Engine 嬉しいニュースですね。 6ヶ月前の発表 どおり、ムーアの法則に従った結果の値下げのようです。 ハードの値段が下がった結果とはいえ、自社でコストカットできた結果を、こんなに早いタイミングでユーザーに還元する企業ってそんなに無いのではないでしょうか。 この調子だと、来年の春にはまた嬉しいニュースが聞けるかもしれませんね。その時はGoogle App Engineも値下げてくれると嬉しいなぁ。 あとは、良いサービス作るだけだ。。。(2回目)

HTTPロードバランサが公開プレビューに

本家ブログ記事(英語) : HTTP Load Balancing Now Open for Preview 限定プレビュー版だったGoogle Cloud Platform のロードバランサが誰でも使える公開プレビュー版になったようです。 このロードバランサの凄いところは、Google検索やGmail、Youtube等の主要Googleサービスと同じインフラに乗っかっているので、圧倒的なパフォーマンスを低価格(約1800円/月)で提供できているという事。また、ロードバランサに対しての監視や設定もRESTful APIが用意されているので、アプリケーション側から動的&柔軟な対応もできる。 リリースされれば、今後Google Cloud Platformの目玉のひとつになるかもしれない。 それにしても、インフラのコストはどんどん安くなるなぁ・・・あとはこのロードバランサに不満を持つほどのWebサービスを作るだけだ。 以下、関連記事まとめ。 Googleの中の人による解説: GoogleのHTTPロードバランサーの破壊力があり過ぎる #gcpja 国内メディア記事: Google Cloud PlatformのHTTPロードバランサーがオープンプレビューに。ウォームアップなしで100万リクエスト/秒に対応する性能、1つのグローバルIPで複数リージョンに分配

Google Custom Search を使って評価の低い(高い)レビューを検索する

前回記事 に続き、Google Custom Search API を使って、もっと詳細に条件を指定する方法をメモ。 Google Custom Searchの公式ドキュメント によると、構造化データの情報を指定して、さらにフィルタリングができるみたい。 To filter by attribute, add a more:pagemap:TYPE-NAME:VALUE operator to a search query. とあるので、検索キーワードに、 more:pagemap:属性名:属性値 を追加すればOK。 APIの戻り値を見てみると、価格.comのレビューの評価数の属性値は、 review-ratingstars でとれるので、例えば、評価数3のレビューのみ取得したい場合は、検索キーワード more:pagemap:review-ratingstars:3.0 とすることで、フィルタリングすることができる。また、値をカンマで区切る事でOR条件も指定できる。例えば、評価4と5も含めたい場合は more:pagemap:review-ratingstars:3.0,4.0,5.0 と書ける。前回のフォームに、評価数を指定するプルダウンを設置してみた。ソースはこんな感じ。 入力フォーム <form class="form-horizontal" role="form" action="search" method="post">     <div class="form-group">       <label class="col-sm-2 control-label" for="keyword">キーワード</label>       <div class="col-sm-10">         <input type="text" id="keyword" name="keyword" class="form-control...

Google App Engine SDK Version 1.9.12 リリース

Google App Engine SDK のバージョン 1.9.12 が ダウンロード可能 になっています。 が、、、 リリースノート は更新されていない様子。更新されたら追記します。 【追記】 リリースノート更新されてました。pythonは以下の2点が更新されたようです。 libxsltライブラリのバージョンがv1.1.22からv1.1.28に。 NDBでクエリを実行した時に「AugmentedQuery’ object has no attribute ‘filter_predicate’」というエラーが発生する問題を対応。 Python版については、ここしばらくマイナーアップデートが続いていますね。そろそろアジアリージョン来て欲しい!

Google App Engine Version 1.9.11 リリース(Python)

4日前ですが、Google App Engine SDK Version 1.9.11 がリリースされています。今後はリリース情報も掲載していく予定です。とりあえずPythonのみ。 Python版では、Search API の日付順の結果が正しく返却されるようになったようです。 Google App Engine Python and PHP SDK Release Notes

Google Compute Engine入門を読んで

Google Cloud Platform(GCP)関連の情報をWeb検索すると、ほとんどと言っていいほどヒットする会社のサイトがある。 吉積情報株式会社 さんの関連サイトだ。Google関連の事業に力を入れられているようで、このたび、代表の方がGoogle Compute Engineの入門書「 Google Compute Engine入門 」を出版されたとの事で早速読んでみた。 内容はざっくりとこんな感じ。 Google Compute Engineの概要と導入手順 コマンドリファレンス AWSとの比較 その他 まず、Web公式ドキュメントは全て英語なので、日本語での解説本というのはありがたい。書いてあるとおりにやれば、簡単にGCPのインスタンスにログインするところまではできる。 コマンドリファレンスまでが本書のページ数の8割強を占める。GCPはガッツリ使っていないので、リファレンス本としてはまだ出番は無さそうかな。 個人的には、機能、価格、性能(ベンチ)までとったAWSとの比較はとても参考になった。仕事でも「AWSでいいじゃん」とよく言われる事があるので、このAWSとの比較記事だけでも本書の値段分の価値はあると思っている。 先日Googleが、日本でも本格的にGCPを展開すると明らかにしていたけれど、まだまだWebや書籍の情報量が少ない。特に日本語の。だ。国内で本格的に展開するには、日本語のドキュメントが充実しているかどうかにかかっていると個人的には考えている。あとは国内の導入事例やサポート体制の情報が欲しい。 それにしてもGoogle関連の技術書の陳腐化は早い(iOSもだけど)。しょうがないことだけど、この本も来年には「こないだまではそうだったね」という部分がでてくるだろう。その時はぜひ第2版を!

無料でGoogle検索を自動化する

プログラムから自動でGoogle検索して、結果を収集したい時がたまにある。 今回は、Google App Engine と、Google Custom Search APIを使って、Google検索を自動化する方法をメモ。サンプルでは、価格.comのレビューのみを取得するフォームを作ってみた。 Google Custom Search API は、 Google Custom Search サービスを外部から操作できるAPI。100リクエスト/日まで無料だ。それ以上リクエストしたい場合は、1000リクエスト毎に5ドル支払えば検索可能となる。1日100件ぐらいであれば、Google Appe Engine側も無料範囲で十分まかなえる量だ。 Custom Search APIを有効にする まずは、Custom Search APIが使えるように、有効化とAPIキーを取得する。 Google Developers Console にログインして、該当のプロジェクトを選択し、「APIと認証」から「API」メニューを選択する。 APIの一覧からCustom Search APIを探し、右のボタンを押す。 ちなみに、100リクエスト/日以上検索したい場合は、API名を選択後に表示される画面で割り当てを選択し・・・ ここのSet billable limitsから、1日のリクエスト可能数を引き上げる事ができる。(※プロジェクトの課金を有効にしておく必要がある。) 続いてAPIにアクセスするためのキーを取得する。「APIと認証」から「認証情報」を選択する。 次に表示される画面で、「新しいキーを作成」から「サーバーキー」を選択する。OAuthは、例えばユーザー情報を取得するようなAPIを使用する時に選択する。今回は検索のみを使用するので、サーバーキーでOKだ。 許可IPアドレスの設定は今回空欄とした。特定のIPアドレスのサーバーからのみキーを有効としたい場合は設定する。 これでキーが作成できた。このキーはプログラムからAPIへ接続する際に使用する。 Google Custom Searchを作成する APIキーを取得したら次は Google Custom Search で検索エンジンを作成する。Custom ...

Google App Engineでファイルを保存する方法3つ

Google App Engineでは、通常のWebアプリケーションのように、サーバー上のファイルシステムへアクセスすることができない。別の方法でファイルの読み書きをする事になるけど、方法はいくつかあるので、それぞれの方法と長所短所をまとめてみた。サンプルと全てのソースコードはこちら。( サンプル / ソースコード ) 方法1:BlobPropertyを使う ndb(db)のBlobProperty(https://developers.google.com/appengine/docs/python/ndb/properties)ではバイナリデータをそのまま格納できる。 まずは保存するModelの定義を実装する。 from google.appengine.ext import ndb class UserFileModel(ndb.Model):     """     ファイル格納モデル     """     file_data = ndb.BlobProperty()                  # ファイルデータ 続いて、アップロードフォーム。 <form> <div class="form-group"> <input id="exampleInputFile" name="file_data" type="file" />     </div> <button class="btn btn-default" type="submit">保存</button> </form> アップロードハンドラを実装。リクエストされたデータをそのまま突っ込むだけ。 def post(self):         file_data = self.request.get('file_data')         user_file = UserFileMod...

Managed Virtual Machine に望むこと

先日2014年4月22日に行われた、Google Cloud Platformセッションの模様がYoutubeに公開されてた。 地方民はこういうイベントになかなか参加できないので、動画配信はほんとに助かる。ありがたや。。。 動画の中で語られている Managed VM は地味だけど、なにげにすごい機能だと思う。GAEでできなかったほとんどの事がこれで解決できるかもしれない。 ただ、個人的に Managed VMでは、(スケールアウトしなくていいので)固定IPも使えるようになってほしい。なぜなら、Google App Engineで外部のシステムと連携するとき、相手側でIPアドレス制限されている事がある。だから、連携前にあらかじめこちらのIPアドレスを教えておくのだけど、GAEはPaaSなのでその範囲も広いし、いつ変わるかわからない。まぁ、IPアドレス制限という方法自体がすでに時代遅れな感じではあるけど。 ともかく、GAEではそういうシステムと連携する時は、間にGAEでないサーバーを中継させておく必要がある。なので、このためだけにOSやApacheのメンテが発生する。これは、ほんとにアホらしいことだ。もし、Managed VMで固定IPが使えれば、対外部システムとの処理だけそのインスタンスで行えばいいし、中継サーバーも不要になるので、だいぶ楽になるのだ。 Googleさん、よろしくおねがいします。

Google Cloud Storage上の非公開動画を特定の人にだけ公開する

Google App Engine単体では(Blobstoreを使う以外)ファイルの読み書きはできないが、GCPのクラウドストレージ製品Google Cloud Storageを使えば、簡単にファイルを取り扱うことができる。今回は、ある特定の人にだけ動画を見せたい場合を想定して、Google Cloud Storageに置いた非公開な動画ファイルを、OpenIDでログインしている人にだけ見せる方法をメモしておく。 動画ファイルの配置 GCPのコンソール からGoogle Cloud Storageにファイルをアップロードする。(アップロード方法はまたの機会に。)ちなみに、動画ファイルは NHKクリエイティブ・ライブラリー から拝借した。 今回保存したファイルパス(非公開) /gcp-memo.appspot.com/movies/meteorite.mp4 動画再生ページの作成 videoタグを配置するページ(/member/movie)を作成。こちらもログイン必須のページにしておく。app.yamlでログイン必須指定する。 - url: /member/(.*) script: controllers.front.member.application secure: optional login: required 今回も認証まわりの制御はGoogle App Engineの Usersライブラリ を使う。 過去記事参照 。また、videoタグのsrcには、動画ダウンロードを行うスクリプト(/member/play_movie)を指定する。 <video autoplay="" controls="" src="/member/play_movie"> </video> 動画ダウンロードスクリプトの作成 /member/play_movie を実装する。上のapp.yamlで、/member配下は認証必須指定しているので、必ず認証された状態でアクセスされる。あとはダウンロード処理を実装すればいいだけ。 from google.appengine.ext import blobstore from google.appengin...

Moduleをdispach.yamlで振り分ける方法

Google App Engineには、アプリケーション内の機能をグループ化できる Modules というしくみがある。Moduleごとに、インスタンスのスペックやスケールのルールが設定できるため、フロントエンドとバックオフィス、バックグラウンドジョブといった用途別にModuleを作成すると良さそうだ。また、どのModuleが使われるかは、URL(パス)で振り分けることができる。今回はその方法のメモ。 Moduleのyamlファイルの作成 今回は、以下の3つのModuleを作ってみる。 ・フロントエンド用(app.yaml) default ・バックオフィス用(back.yaml) ・JOB用(job.yaml) まずは各Moduleのyamlファイルを作成する。 app.yaml application: gcp-memo module: default version: 1 runtime: python27 api_version: 1 threadsafe: true instance_class: F1 (以下省略) admin.yaml application: gcp-memo module: admin version: 1 runtime: python27 api_version: 1 threadsafe: true instance_class: F1 (以下省略) job.yaml application: gcp-memo module: job version: 1 runtime: python27 api_version: 1 threadsafe: true instance_class: B1 basic_scaling: max_instances: 2 idle_timeout: 10m (以下省略) dispatch.yamlファイルの作成 続いて、これらのModuleを振り分けるdispatch.yamlを作成する。今回は、パスが/admin/に一致すればadminモジュールへ、/job/に一致すればjobモジュールが使用されるようにする。dispatch.yamlは、アプリケーションのルートディレクトリに配置する必要がある。Moduleのyamlファイルについては、ルート...