Category Archives: GCP

datastore gce

管理画面

gceのインスタンス設定画面ですべてのAPIを有効に変更

add

import "cloud.google.com/go/datastore"

func main(){
  datastoreClient, err := datastore.NewClient(ctx, ProjectID)
  if err != nil {
    panic(err)
  }
  e := Entry{
    Price: EntryPrice(1400000),
    Size:  2.2,
  }
  key := datastore.NameKey("Entry", "entry1", nil)
  _, err := c.Put(ctx, key, &e)
  if err != nil {
    panic(err)
  }
}

get

import "cloud.google.com/go/datastore"

func main(){
  datastoreClient, err := datastore.NewClient(ctx, ProjectID)
  if err != nil {
    panic(err)
  }
  var e Entry
  key := datastore.NameKey("Entry", "entry1", nil)
  err := c.Get(ctx, key, &e)
  if err != nil {
    panic(err)
  }
}

gcp stackdriver

実装

// Sample stdlogging writes log.Logger logs to the Stackdriver Logging.
package main

import (
        "log"

        // Imports the Stackdriver Logging client package.
        "cloud.google.com/go/logging"
        "golang.org/x/net/context"
)

func main() {
        ctx := context.Background()

        // Sets your Google Cloud Platform project ID.
        projectID := "YOUR_PROJECT_ID"

        // Creates a client.
        client, err := logging.NewClient(ctx, projectID)
        if err != nil {
                log.Fatalf("Failed to create client: %v", err)
        }
        defer client.Close()

        // Sets the name of the log to write to.
        logName := "my-log"

        logger := client.Logger(logName).StandardLogger(logging.Info)

        // Logs "hello world", log entry is visible at
        // Stackdriver Logs.
        logger.Println("hello world")
}

参考

https://cloud.google.com/logging/docs/setup/go?hl=ja

gce バッチ処理

gce

インスタンス作成

os: centos

起動スクリプト
startup-script

#! /bin/bash
sudo systemctl start nginx.service
go run /var/app/go/main.go

goインストール

// wgetインストール
yum install wget

// golangインストール
// 方法1
sudo yum install -y golang

// 方法2
cd /usr/local/src
sudo wget https://storage.googleapis.com/golang/go1.8.linux-amd64.tar.gz
sudo tar -C /usr/local/ -xzf go1.8.linux-amd64.tar.gz
export PATH=$PATH:/usr/local/go/bin

// nginx install
sudo yum install -y nginx
sudo chkconfig nginx on
sudo systemctl start nginx.service

nginx

インストール

sudo yum install -y nginx
sudo chkconfig nginx on

設定

/etc/nginx/nginx.conf

server {
    listen       80;
    server_name  hostname;

    location / {
        fastcgi_pass  127.0.0.1:9000;
        include       fastcgi_params;
    }
}

起動

sudo systemctl start nginx.service

スクリプト

helloworld

package main
import (
    "fmt"
    "net"
    "net/http"
    "net/http/fcgi"
)
func handler(w http.ResponseWriter, r *http.Request) {
    fmt.Fprintf(w, "Hello, World!")
}
func main() {
    l, err := net.Listen("tcp", "127.0.0.1:9000")
    if err != nil {
        return
    }
    http.HandleFunc("/", handler)
    fcgi.Serve(l, nil)
}

slack通知

package main

import (
    "bytes"
    "log"
    "net/http"
)

func main() {
    const url = "https://hooks.slack.com/services/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"
    body := []byte(`{"text":"hello from gcp"}`)
    req, err := http.NewRequest("POST", url, bytes.NewBuffer(body))
    if err != nil {
        log.Print(err)
    }
    req.Header.Set("Content-Type", "application/json; charset=UTF-8")

    client := &http.Client{}
    resp, err := client.Do(req)
    if err != nil {
        log.Print(err)
    }
    defer resp.Body.Close()
}

gce起動スクリプト

startup-script

#! /bin/bash
// nginx 起動
sudo systemctl start nginx.service

// golang 起動
go run /var/app/go/main.go

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"

参考