Category Archives: GCP

gcp コマンド

// update
gcloud components update

// アカウントの切り替え
gcloud auth login

// プロジェクトの切り替え
gcloud config set project {プロジェクト名}

// firewallのリスト確認
gcloud beta app firewall-rules list

gke go

インストール

gcloud components update kubectl

手順

// イメージアップロード
gcloud docker -- push asia.gcr.io/rls-airpay/gke-test

gcloud container clusters create gke-test --zone asia-northeast1-a \
  --scopes cloud-platform \
  --num-nodes 2

gcloud container clusters get-credentials gke-test --zone asia-northeast1-a

kubectl create -f deployment.yaml

kubectl create -f service.yaml

kubectl describe service gke-test

参考

http://blog.kaneshin.co/entry/2016/12/15/133943

gcp, gae 初期設定

go

go env でインストール

gcloud

  1. binフォルダに、tarフォルダをダウンロード。解凍。
  2. インストール実行
    パスなどは自動で通る
~/bin/google-cloud-sdk/install.sh

参考

app engine sdk

gcloudを使う場合

gcloud components install app-engine-go

// 削除する場合は以下
gcloud components remove app-engine-go

直接インストールする場合

  1. インストール
    以下の最下部の、「Or, you can download the original App Engine SDK for Go.」をクリックして直接インストール。
    ~/bin/go_appengine に配置
    https://cloud.google.com/appengine/docs/standard/go/download

  2. パスを通す

export PATH="$HOME/bin/go_appengine/:$PATH"

参考

bigquery gae

workers/bigquery.go

package workers

import (
    "cloud.google.com/go/bigquery"
    "golang.org/x/net/context"
)

// BigQuery ...
type BigQuery struct {
    ctx       context.Context
    projectID string
    client    *bigquery.Client
}

// CreateNewBigquery ...
func CreateNewBigquery(ctx context.Context, projectID string) (*BigQuery, error) {
    b := BigQuery{ctx: ctx, projectID: projectID}
    client, err := bigquery.NewClient(b.ctx, b.projectID)
    if err != nil {
        return nil, err
    }
    b.client = client
    return &b, nil
}

// CreateDataset ...
func (b *BigQuery) CreateDataset(datasetName string) error {
    dataset := b.client.Dataset(datasetName)
    if err := dataset.Create(b.ctx); err != nil {
        return err
    }
    return nil
}

// User ...
type User struct {
    Name string
}

// PutUser ...
func (b *BigQuery) PutUser(user *User, datasetName, tableName string) error {
    var users []*User
    users = append(users, user)
    u := b.client.Dataset(datasetName).Table(tableName).Uploader()
    if err := u.Put(b.ctx, users); err != nil {
        return err
    }
    return nil
}

handlers/bigquery.go

package handlers

import (
    "camera-raspi/app/workers"
    "net/http"

    "google.golang.org/appengine"
)

// BigQuery ...
type BigQuery struct{}

// CreateDataset ...
func (BigQuery) CreateDataset(w http.ResponseWriter, r *http.Request) {
    ctx := appengine.NewContext(r)
    b, err := workers.CreateNewBigquery(ctx, "camera-raspi")
    if err != nil {
        panic(err)
    }
    b.CreateDataset("my_new_dataset")
}

// PutUser ...
func (BigQuery) PutUser(w http.ResponseWriter, r *http.Request) {
    ctx := appengine.NewContext(r)
    b, err := workers.CreateNewBigquery(ctx, "camera-raspi")
    if err != nil {
        panic(err)
    }
    type user struct{ Name string }
    u := workers.User{Name: "yohei"}
    b.PutUser(&u, "my_new_dataset", "users")
}

参考

https://cloud.google.com/bigquery/docs/reference/libraries?hl=ja
https://cloud.google.com/bigquery/streaming-data-into-bigquery?hl=ja#bigquery-stream-data-go

go google api auth

サービスアカウント作成

  1. GCPにプロジェクト作成
  2. API画面でサービスアカウント作成
  3. JSONダウンロード

ソースコード

package main

import (
    "encoding/base64"
    "io/ioutil"
    "log"

    "golang.org/x/net/context"
    "golang.org/x/oauth2/google"
    "google.golang.org/api/vision/v1"
)

func main() {
    jsonData, err := ioutil.ReadFile("./auth.json")
    if err != nil {
        panic(err)
    }

    // 前述のJSONファイルを読み込んでJWTのConfigを作成
    cfg, err := google.JWTConfigFromJSON(jsonData, vision.CloudPlatformScope)
    if err != nil {
        panic(err)
    }

    // OAuth2の認可を付与したHTTPクライアントを作る
    client := cfg.Client(context.Background())

    // Vision APIのサービスを作る
    svc, err := vision.New(client)
    if err != nil {
        panic(err)
    }

    // 画像ファイルを読み込んでBASE64エンコード
    imgData, err := ioutil.ReadFile("./cat.jpeg")
    if err != nil {
        panic(err)
    }

    enc := base64.StdEncoding.EncodeToString(imgData)
    img := &vision.Image{Content: enc}

    // 使いたいVisionの機能
    feature := &vision.Feature{
        Type:       "LABEL_DETECTION",
        MaxResults: 10,
    }

    // 1つの画像に対して複数のFeatureを指定できる
    req := &vision.AnnotateImageRequest{
        Image:    img,
        Features: []*vision.Feature{feature},
    }

    // 1回の呼び出しで複数の処理を要求できる
    batch := &vision.BatchAnnotateImagesRequest{
        Requests: []*vision.AnnotateImageRequest{req},
    }

    // 実際のAPIコールを実行
    res, err := svc.Images.Annotate(batch).Do()

    b, err := res.MarshalJSON()
    if err != nil {
        panic(err)
    }
    log.Print(string(b))
}

godotenv

パッケージダウンロード

go get github.com/joho/godotenv

kintone.env

app.yamlと同階層に配置

KINTONE_DOMAIN="{値をセット}"
KINTONE_USER="{値をセット}"
KINTONE_PASSWORD="{値をセット}"

ファイル読込

func init() {
    err := godotenv.Load("kintone.env")
    if err != nil {
        log.Fatal("Error loading .env file")
    }
    log.Print(os.Getenv("KINTONE_DOMAIN")) // 値の読み込みが可能
}

参考

https://github.com/joho/godotenv

compute engine 初期設定

インスタンスにSSH接続

gcloud compute ssh {インスタンス名} --zone {リージョン名} 

各種インストール

// apt-get update
sudo apt-get update

// git
sudo apt-get install git

// go
sudo apt-get install golang
sudo mkdir -p ~/go
echo "export GOPATH=$HOME/go" >> ~/.bashrc
echo "export PATH=$PATH:$HOME/go/bin:/usr/local/go/bin" >> ~/.bashrc
source ~/.bashrc
go version //確認
go env // 確認

// npm
sudo apt-get install nodejs
sudo apt-get install nodejs-legacy
sudo apt-get install npm

// phantomjs
npm install -g phantomjs
which phantomjs // 確認

参考

http://qiita.com/kent_ocean/items/5bfb7b69973f78b8c843

datastore keyで検索(GQL, GAE GO)

GQLの場合

// KEYを使用する必要がある
select * from form where __key__= KEY(form, 5629499534213120)

GAE GOの場合

ctx := appengine.NewContext(c.Request)

// idはint64型
id, err := strconv.ParseInt(c.Param("recordID"), 10, 64)
    if err != nil {
    panic(err)
}

// keyを発行
k := datastore.NewKey(ctx, "form", "", id, nil)

// クエリ作成
q := datastore.NewQuery("form").Filter("__key__ =", k)

type form struct {
    ID       uint64
    RecordID int
}
var form []form
_, err = q.GetAll(ctx, &form)
if err != nil {
    panic(err)
}

// 値を取得することができる
recordID := uint64(form[0].RecordID)

参考

http://qiita.com/kimihiro_n/items/0963b94425c92a541542