ラベル GCP の投稿を表示しています。 すべての投稿を表示
ラベル GCP の投稿を表示しています。 すべての投稿を表示
2016年11月20日日曜日

Google App Engine/Go(Go apps on App Engine) でWEBアプリを作るために

  • 2015年にGoがサポートされ、最近東京リージョンが発表されるなどGAEの取り巻く環境は、改善されてきています。また、AWS Lambdaのような、Paas的なサービスがリリースされPaas的なサービスが増えてきています。
  • Paasの古参GAE/GO でWebアプリを作るための情報収集をしました。

概要

まずは公式から

公式GAEのサービス概要

Google App Engine は拡張可能なウェブ アプリケーションとモバイル バックエンドを作成するためのプラットフォームです。App Engine には、NoSQL データストアや Memcache、ほとんどのアプリケーションで使用されているユーザー承認 API など、さまざまな API と組み込みサービスが用意されています。

App Engine は、受信したトラフィック量に応じて自動的にアプリケーションを拡張するので、未使用のリソースに対して費用が発生することはありません。 コードをアップロードするだけで、Google がアプリの可用性を管理します。サーバーのプロビジョニングやメンテナンスを行う必要はありません。

まとめると↓

コンセプトと機能

  • スケーラビリティとアベイラビリティ
  • Web/MobileアプリプラットフォームのPAAS
  • (Webアプリのスタックで)Httpサーバレイヤー以下を提供
  • 加えて、認証など通常アプリサーバレイヤーで実現する機能も提供

ざっくりとしたイメージだと、Javaでいうサーブレットレベルのところまで独自開発したPAAS。特定の用途に特化したため、DBやキャッシュ、ロードバランシングなども全て独自のものを作ってある。また、一般的なレイヤーにとらわれず、認証など必要なものは入れた感じです。

コストが下がる要素

  • インフラの物理的なコスト
  • インフラ構築・運用コスト
  • インフラ設計コスト(※GAEの構成を理解して適切な設定をする必要はあるが、従来に比べれば低い)

コストが上がる要素

  • GAEの構成を理解する必要がある
    • HTTPサーバの特性、負荷分散のしくみなど
    • HTTPSやドメイン関連で実現できないことがある
  • GAEの各サービスを理解する必要がある
    • NoSQL(Datastore), Memcacheなど
  • GAEの開発手法を理解する必要がある
    • 開発環境、テストフレームなど
  • (上記特性を生かした)GAE向けの設計にする必要がある
  • 情報が古い場合がある。最新の情報は1次情報を確認する

情報源

GAEの書籍は他にもいくつか出ているので、1冊手元にあるといいと思います。

また、ネット記事は2013年くらいまでのが多いですが、大体出てくるので、個別のトピックに関しては、都度検索する方が良さそうです。

Sample

実際に

GAEは特定用途に特化したGoogleらしいサービスです。確かにゲームなど想定するアクセス数のレンジがかなり広い場合は有効だと思います。

GAEの紹介ケースで、メディアなど突発的ににアクセスが増えた場合に自動でスケールするというのがあります。GAEが出た当初はそうかもしれませんが、現在は状況によりけりかと思います。上記の本にもありますが、GAEはサーバ1台でまかなえなくなったときに真価を発揮するですが、Iaasのバランシングの制御も今はかなり楽に柔軟にできるので。

実際に開発する場合は、GAEの設計モデルとDatastore(GAE向けに開発されたKVS)、各種API群をよく理解して使いこなすのが肝です。

AWSのLambdaでもそうですが、Paasでは設計モデルと各種サービスとの連携の理解が不可欠です。従来のWEBフレームワークを使うのと同様に、しっかりと習熟するレベルになっておけば、モデル自体はシンプルなので開発効率が高まります。

単純にWebアプリを作るだけならば、得意なWAF+Iaasで作った方が簡単です。 また、PaasだとOSSではないため、動作がわからないときは、ソースを見るのは通じないですね。

「得意なWebアプリ開発プラットフォームにGAEを加えよう」という考え方で取り組む方が、しっくりきそうです。

ではよきGAEライフを!

2016年10月10日月曜日

Google DevFest Tokyo 2016 に行ってきました

1000人を超える申し込みがあったようで、午後から雨が上がったこともあり、かなりの人出でした。

DevFestはこんな感じのイベントです。

DevFest は、Google Developer Group (GDG) コミュニティによって世界各地で開かれるデベロッパー向けイベントです。DevFest Tokyo 2016 は、普段は別々に活動している複数のコミュニティが集まり、新しいノウハウや最新情報を共有するだけではなくコミュニティやプロダクトを超えた交流の場となる「技術者の祭典」となることを⽬指して開催されます。どうぞみなさんも一緒に盛り上がりましょう!

対象はどちらかというと、初心者向けと、最近のGoogleの動向が多かったです。 各発表が基本20分だったので、一通り表面をなぞるのにはちょうど良かったです。

Android関連が半分以上あり、特にFirebaseの話題が多かったです。

普段GCPしか触ってないので新鮮でした。

GCPはGCPUGが1会場を通してやっていました。

気になった話題

ざっくりですが、気になった話題です。GCPばかりです。

  • GCPのIaasの強化
    • サブネット対応
    • Google Cloud SQL v2
  • GCEでPerconaクラスタ最強説
    • インスタンスは安いし、性能は良いし、Perconaならクラスタリングも楽。
    • バックアップなどの運用系は用意する必要あり。
  • Cloud Machine Leaning
    • Tensorflowのマネージド
    • 別の環境で学習させたTensorflowのモデルをそのまま使える
    • これまでクラスター立ち上げてた必要がなくなるか?
  • プリエンティブルVM
    • GAE + キュー+ プリエンティブルでクラスター作れば、安価にかなりのコンピューティングができる
    • Firebaseと組み合わせれば、モバイルのサービスに。
  • GAEが枯れてきた
    • GAEの機能強化は落ち着いた。
    • GCPの各種サービスとの連携は強化。
    • GCPのフロントとしての地位を固めてる。
  • GKE
    • 最小構成(3台)でも十分使える。
    • 構成管理もまとめてできるのが良い。

日本Androidの会

基本、GCPの話ばかり聞いてたのですが、このセッションだけ、Androidの話を聞きました。

Androidは随分裾野が広いですね。 教育の話は、実践の中で作り上げたプラクティスの話でした。

例えば、「他人に教える」が最も教育効果が高いとかの話は聞いたことある方が多いと思いますが、それを実践して、さらに、ならではのノウハウを取り入れているのでとても参考になりました。

エンジニアのスキルアップといえども、楽しいというのは重要ですね!

ROOM A 15:30-16:10
TensorFlow on Android
古川 新
日本Androidの会 学生部
メイドさんと一緒に楽しく学ぶ、ソフトウェア技術者教育方法論
鈴峰 きり
日本Androidの会 /株式会社テクモード

全て参加費無料ということで、各ユーザグループと電気大の学生さん?のボランティアの方がかなり参加していたようです。このような大規模なものになると相当大変かと思います。ありがとうございました!

2016年10月8日土曜日

GCPUG Beginners Tokyo で LTしてきました。

先週の金曜日(2016/10/7)に渋谷道玄坂のロフトワークさんで行われたGCPUG Beginners Tokyo #1でLTしてきました。

当日は、GASエキスパートのサントリーさん(@soundTricker318)が、メインのハンズオンを担当され、その後の懇親会のLTセッションの一人として参加しました。

GCPを使い始めた方が対象のハンズオンということで、bdutil を使ってクラスター構築など試してはどうでしょうか?という内容で話してきました。

資料は、SpeakerDeckで公開しています。

bdutilで3d大Hadoopディストリビュータイッキ試し

bdutilとDataProc

サントリーさんに、「bdutilの日本語情報はほとんどないので貴重なLT笑」とおっしゃっていただいたり、LTの後には、DataProcとbdutilどちらがいいの?という話にまで発展したりと会を盛り上げるのに多少なりとも役に立ったようでよかったです。

その時の話をまとめると、Hadoopクラスタをマネージド的に使いたい時はDataProcで、Iaas的に使いたい時は、bdutilが良いというところです。

DataProcは、Googleの各種サービスをフル活用したクラスターを立ち上げることができ、スムーズにアプリが完成するのに対し、bdutilは、簡単にディストリビュータの提供するHadoopクラスタが立ち上がりますが、それを使って何をどうするかは、ユーザに任されています。

Hadoopsディストリビュータのそのままのクラスタが欲しい時や、既存のDataProcでは、対応できないレベルのチューニングやアーキテクチャを採用したい時はbdutilの方が向きそうです。

ハンズオンのクオリティが半端なかったです

ハンズオンの資料(一部GCPの入門用の資料参照)が非常に秀逸でした。

Google Cloud Platform ハンズオン

簡単スタートアップガイド

多少画面が変わっているとかはあったのですが、とにかく1ステップ1ステップが丁寧で、はまりようがないと言っていいくらいわかりやすいものでした。

今回のテーマである、GoogleCloudComputingの他にBigQueryなども含んだ資料ですが、総ページ数は、300ページをに迫る分量です。

チューターとして待機していたのですが、サントリーさんのインストラクションのうまさもあって、ほとんど出番がない状態でした。

新しい技術をスムーズに導入するのは、相応のコストがかかりますが、しっかりやれば、必ずしも難しいものではないと思えました。

GCPUGの皆様のおかげです!

GCPUGさんのイベントにスタッフ参加したのは初めてでしたが、初心者の方でも気楽に参加できるゆるい雰囲気があってよかったです。

また、当日参加された方向けの無料クーポン(60日無料トライアルとは別のものです)が用意されていたりと至れり尽くせりでした。

GCPUGの皆様、特にこの会の発起人の安藤さんのおかげで、GCPを使ってみようという方がまた増えたと思います!

2016年9月24日土曜日

GCPでProjectのQuota追加をしました

Google Cloud Platform にはQuota(割り当て)という制限があります。

このQuota以上に使用することはできず、それ以上に使う場合は、 随時、Quota追加申請をする必要があります。

今回は、ProjectのQuota(割り当て)追加申請をしました。

実際にやったところ簡単でした。あっさり数日で増えました。

Projectについてはほぼ情報がなかったため、簡単に記事にしました。

ProjectのQuotaについて

ProjectのQuotaは、課金対象のプロジェクト数の制限です。

初期設定は、3でお試しレベル以上になったら、明らかに足りません。

Projectは、システム別、環境別などで分けたくなると思いますが、Quotaが足りなくなるので、追加を申請します。

実施手順について

課金設定をしようとすると、Quota申請ページへのリンクが出るので、そこから申請します。

Company、Websiteを登録する箇所があります。

個人で契約していたので、ブログを登録しましたが問題ありませんでした。

数日(基本2営業日内とのこと)でメールが来るので、そのメールに必要事項を書いて返信します。

さらに数日で、追加完了の通知メールがきます。

あとは、コンソールから設定すれば、課金設定できるようになっています!

GCPUGの初心者部屋で聞きました。

Quotaの対応や、Projectの使い方感などちょっと気になったので、Slackで質問させてもらいました。

かなり基本的な話でしたが、即答していただいたので非常に助かりました。

ありがとうございました!

2016年9月22日木曜日

GCPUG(Google Cloud Platform ユーザーグループ )の情報

GCPを使う上で強い味方となってくれるのが、GCPUG(GCPのユーザグループ)です。 日本語でGCPの情報交換や、質問ができる貴重な場所です。

GCPUG

Google Groups

  • GCPUG参加の窓口です。
  • GCPUG Groups
  • Slackの案内があります。

Slack

  • チャンネル豊富
  • 特に初心者向けの質問部屋もあります。

おすすめチャンネル

使っているサービスや活動拠点によってチャンネルが使えます。

  • g-cloudで始まるチャンネルは、機能別。
  • x-で始まるチャンネルは、各地方のgcpug。

他には、こちらがおすすめです。

  • 初心者向けQA question_ja
  • 障害情報 hell-inferno_ja

twitter

  • #gcpug
  • 公式チャンネルはないようです。

イベント

  • 各地のGCPUGで定期的に開催しています。
2016年9月20日火曜日

Hadoop クラスタ管理ツール ambari を試す

ambariを使ったhadoopクラスタ構築は、1からHadoopクラスタを構築するよりもかなり楽ですが、実際には色々とハマリどころがあります。ネット上に情報も少ないので、意外と手間取ります。

Hadoopクラスタ管理ツールのAmbariをGCPで試す場合、最もおすすめの方法は、bdutilです。

HORTONWORKSとGCP謹製のambari構築用エクステンションが用意されています。

GCPを日常的に使っている方ならば、ごく簡単にambariを試すことができます。

bdutil HDP

手順

基本は、上記の通りですが、いろいろと説明が含まれてるので、手順をまとめます。

  1. projectIdをセットする

    gcloud config set project ${projectId}
  2. Storageでバケットを作る

    gsutil mb -p ${projectId} gs://${bucketName}
  3. bdutilをクローンする

    git clone https://github.com/GoogleCloudPlatform/bdutil
    cd bdutil
  4. バケットを以下のように設定します

    grep BUCKET= bdutil_env.sh
    CONFIGBUCKET=${bucketName}
    
  5. ambari.confを確認する
    ambari.conf

    # チェックすべき箇所は、ワーカー数(+1マスターが立ち上がる)と、マシンタイプです。
    デフォルトで起動すると、月間110ドル程度のインスタンスが5個立ち上がります。
    NUM_WORKERS=4 
    GCE_MACHINE_TYPE='n1-standard-4'
  6. deployする

    # bdutil以下で。
    ./bdutil -e ambari deploy
  7. SSHトンネルを設定する

    gcloud compute config-ssh
    ssh -L 8080:127.0.0.1:8080 hadoop-m
  8. 管理画面にアクセスする

    open http://localhost:8080/
  9. インスタンスにアクセスする

    gcloud compute ssh hadoop-m
    # ここでHadoopクラスタを使うことができます
  10. deleteする

    # bdutil以下で。
    ./bdutil -e ambari delete

公式ambari をDebian 8に入れる時に

ambari 2.2.2 install ambari 2.2.2 は、Debian7のリポジトリしか載っていませんが、Debian8でもそのままインストールできます。

BigQueryや、トレジャーデータなど、フルマネージドのサービスでは、ニーズに合わないということで、自前のクラスタを立ち上げる場合に、このような管理ツールはかなり役立ちます。

2016年9月4日日曜日

Pandas で BigQuery を使うときのメモ

PandasからGoogle BigQueryを使うのは、かなり便利です。 そのときのメモをまとめました。

日付処理

  • BigQueryはUTCです。
  • Pandasのto_datetimeにTimeZone情報を入れる必要がある。
  • 現在の時刻を取る場合

    pd.to_datetime('now').tz_localize('UTC').tz_convert('Asia/Tokyo').to_datetime64()
  • 日本時間を読み取って入れる場合

    pd.to_datetime(datestr, format='%Y年%m月%d日 %H時%M分').tz_localize('Asia/Tokyo').to_datetime64()
  • 扱う方針を決める。
  • UTCに変換する
  • JSTの値をそのまま入れて、タイムゾーンを完全にユーザが管理する

Insert(to_gbq)

  • カラム定義、カラム順など揃える必要がある。
  • 既存のテーブルにto_gbqで、入れるのは調整が手間。
  • 可能なら、最初からto_gbqでテーブルを作った方が良い。
  • 定期的に追加するなら、if_existsを使う。
df.colomns
['gcol2','no_append','gcol1']
# 必要なカラムだけ指定
gdf = df[['gcol1', 'gcol2']]
gdf.to_gbq(table, projectid, private_key, if_exists='append')

pandas からgenerate_bq_schema は使わない

  • スキーマ作成だけ行うgenerate_bq_schemaですが、Duplicateになっています。
  • Creating BigQuery Tables
  • 代わりに上記to_gbqで行います。
  • もしくはbq loadで行います。
  • bq quickstart

import gcpとは

検索すると出てくる

import gcp.bigquery ad bq

これはDataLabの組み込みライブラリです。DataLabから使用します。

2016年8月28日日曜日

GCPのBigQueryを使ってみました

BigQueryを使ってみたので、関連情報をまとめました

GCP NoSQL を使ってデータ処理したい時

主なサービスはこの辺りだと思います。

今回は、格安で比較的枯れているBigQueryを使ってみました。 以降の記事はBigQueryについてです。

オライリー本もあります。 Google BigQuery

課金について

ビッグデータをCloudサービスで使う時、課金方式をよく把握しておくのは必須です。

  • データ保存による: 1TB 1ヶ月 $20
  • スキャンデータ量による
  • BigQueryで150万円溶かした人の顔
  • 300GBに対して、フルスキャンを数百回繰り返した。(テーブル切り分けのために、select insert)
  • 価格体系が今後変わる。computing量による感じに。
  • ストリーミングは課金: 10万行単位などバルクインサートより高い。
  • 費用的には、Cloud Storageなどにデータを置いて、バルクインサートが良い。
  • ストリーミングの方が手間は少ない(Fluentdや、以下のPandasなどで直接インサートできる)
  • ストリーミングはデータ落ちなどが発生する模様。

BigQuery の課金仕様と注意点をまとめてみた(2015-07 時点)

課金対策ツール

使い方

Pythonから使う場合がメインです。

データ分析基盤としての BigQuery 運用のベストプラクティス Python使いのためのBigQuery連携

また、SDKが提供されてない言語でも、REST APIから使えます。 BigQuery クライアント ライブラリ

その場合、OAUTH2認証が必要です。

CLIで使う

Googleが提供している、基本のbqコマンドです。

bq コマンドライン ツール クイックスタート

インタラクティブに使う

GCPのコンソールからのやり方です。

Quickstart Using the Web UI

Jupyter(IPython)ベースのインタラクティブツールもあります。
Betaですが、Jupyterはかなり使いやすいので、こちらもオススメです。

Google Cloud Datalab 上のページのCLOUD DATALAB を起動は使えなくなってる模様。立ち上げはこちらから。dockerを使って起動する。 quickstart

アプリで使う(ライブラリ)

  • Pandas: io.gbqパッケージがあり、read_gbqto_gbqが用意されてます。pandas使っている方ならこれ一択かと。かなり使いやすいです。
  • Pythonのclientライブラリ: BigQuery-Pythonがあります。Pandas使ってない方はこちらが候補になると思います。使いやすいです。
  • 公式API:上記でできないことがある場合以外、直接触ることはないです。ライブラリ作成者向けだと思います。
Pandas

to_gbqinsertすると、ストリーミングになり、課金対象になります。
大量データを入れる場合は計算した方が良いです。

pandas連携が詳しく載ってるので再掲します。

Python使いのためのBigQuery連携 pandas.io.gbq.read_gbq pandas.io.gbq.to_gbq

Python client

BigQuery-Python PythonからBigQueryを操作するときは BigQuery-Python が便利だった

公式API

BigQuery API クイックスタート BigQuery API Client Library for Python getting_started.py Google Application Default Credentials

Google Compute Engine インスタンス間でやり取り(service account と mysql in Debian)

Google Compute Engine間でやり取りをするときの設定です。

gcloudを既存のインスタンスで使う

Service Accountsを作って、その認証情報をgcloudに設定します。

認証エラーが出ます

認証設定してない時は、このようなエラーが出ます。

$ gcloud compute instances list
ERROR: (gcloud.compute.instances.list) Some requests did not succeed:
 - Insufficient Permission

auth loginでセットアップしようとすると...

$ gcloud auth login

You are running on a Google Compute Engine virtual machine.
It is recommended that you use service accounts for authentication.

service accountsを使った方が良いと勧められます。

サービスアカウントを作成

今回は、コンソールからサービスアカウントを追加しました。 詳細手順は、公式ドキュメントのCONSOLEタブにあります。

Creating and Managing Service Accounts

gcloudの設定

上記で取得した、キーファイルをインスタンス上に設置して、アクティベイトします。

$ vi ~/.cred.json
$ chmod 400 ~/.cred.json
$ gcloud auth activate-service-account --key-file ~/.cred.json
$ gcloud compute instances list
...

参考: gcloud auth activate-service-account Creating and Enabling Service Accounts for Instances

MySQLをインスタンス間で接続する

MySQLを設定して、インスタンス間のネットワークを設定します。

とりあえずつなぐと疎通出来ませんでした。

$ telnet 10.240.0.4 3306
Trying 10.240.0.4...
telnet: Unable to connect to remote host: Connection refused

Compute Engine

  • インスタンスのネットワーク設定を確認する
  • デフォルトで、default-allow-internalがついてる。変えて無ければOK。

How to Set Up Remote Access to MySQL on Google Compute Engine Google Compute Engineのファイヤーウォールを理解する

mysqlの設定

クライアント側でmysql-clinetをインストール

sudo apt-get install mysql-client

Debianでは、セキュリティ上の理由から、MySQLサーバは、デフォルトでリモートアクセスを停止しています。

  • /etc/my.cnfbind-address=${instance-ip}に設定します
  • mysqlをリスタートします。

    $ sudo systemctl restart mysql
    $ systemctl status mysql

mysql server

あとは、ユーザの権限を確認します

select user, host from mysq.user

確認

クライアント側のtelnetで疎通確認

$ telnet XXX 3306
Trying XXX...
Connected to XXX.
Escape character is '^]'.

クライアント側のmysqlコマンドで接続

mysql -u xxx -p -h xxx
2016年8月14日日曜日

Google Container Engine(kubernates)をDebianで試すときのポイント

kubernatesは現在も活発に開発が進んでいるプロダクトです。

コンテナを日常的に使っていると前提条件になっていることは省略されていて、意外とまとまったものが出てきません。

初めてセットアップするときのポイントをまとめました。

セットアップの流れ

  1. dockerのインストール
  2. Google Cloud Platformのクライアント(gcloud)をインストール
  3. kubernates(kubectl)のインストール(gcloudで入らない場合)
  4. Googleの公式ドキュメントに従う
  5. kubernatesのサンプルに従う

その他注意点

  • 数百MB〜数GBのデータ通信が発生する
  • dockerイメージを使ってるとすぐに数GB~数十GB使う

参考

kubectl リファレンス Quickstart Google Container Engine

dockerのインストール

  • apt-get では、docker.ioをインストールする必要がある。

    $ sudo apt-get install docker.io
  • インストールしたら、rebootしてください。(日常的に使ってないとつい忘れて諸々エラーが出る)

    $ sudo reboot
  • dockerグループに追加しておく。

    $ sudo gpasswd -a ${user} docker 
  • dockerコマンドはきちんと設定すれば、基本sudoなくてOKです。

    $ docker info

ここまでやったら、Googleの公式ドキュメントに従って進める。

Container Engine 開始方法

  • gcloudからkubectlを入れる箇所がありますが、できない場合は、次のkubernatesのインストールをします。

    $ gcloud components update kubectl
    $ rehash
    $ kubectl version
  • gcloud とGKEを組み合わせるとかなり簡単にクラスターを作れる。
  • CoreOSを複数立ち上げて、その上にクラスターを乗せるのは、GKEができてからでいいと思います。

kubernates(と関連ツール)のインストール

kubectlのインストールをしておきます。

gcloudコマンドでkubectlがインストールできれば、この箇所は飛ばして問題ないです。

  • パッケージ管理では提供されてないです。
  • githubのリリースから取ってきます。(以下はv1.3.5)

    $ curl -OL https://github.com/kubernetes/kubernetes/releases/download/v1.3.5/kubernetes.tar.gz
    $ tar xzvf kubernetes.tar.gz
  • リリースには、ビルド後の全てが入ってます。
  • kubectlのインストールです。

    $ sudo cp kubernetes/platforms/linux/amd64/kubectl /usr/local/bin/kubectl
    $ sudo chmod +x /usr/local/bin/kubectl
  • 参考: Installing and Setting up kubectl

kubernates サンプルを試す。

上記ページの一番下に、kubernatesのサンプルのリンクがあります。 例えばnode.jsを使ってみるなどがあります。

node.jsを使う例