###### tags: `GCP` `GCE` `go` # GCE にGoプロジェクトをデプロイ 1. GCEインスタンスを作る 2. Ubuntuを使う 3. 依存パッケージのインストール ```bash= sudo apt update && apt upgrade # snapじゃないとgo modが使える最新版がインストールできない sudo snap install --classic go sudo snap install docker sudo snap install virtualbox bash # パスを読み込み ``` ## プロジェクトのダウンロード git cloneする。 goが1.12以降なら、go.modに書いてある依存関係を引っ張ってきてbuildできる ```bash= git clone http://repository cd repogitory go build ``` ## docker実行 何故か、sudoをつけないと実行できない docker-machine で仮想マシンを作る旨のメッセージが出るが 作らなくてもできる ```bash= sudo docker-compose up -d go run main.go ``` ## ファイアウォールルール編集(port開放) 開発用に8080portとかを使ってると、APIサーバーにアクセスできないので編集 1. VPCネットワーク > ファイアウォールルール 2. 新規作成 3. 方向 : 上り - 上りを設定すれば下りも自動で設定される 4. IP範囲 0.0.0.0/0 5. 対象 : gcp上のすべてのインスタンスに対して 6. ポート範囲 : 8080 # ストレージを使う やり方 http://www.irohabook.com/go-upload-google-cloud-storage 必要なもの - ストレージにフルアクセスできるサービスアカウント=プログラム用のクレデンシャル(認証) 1. GCP > APIとサービス > 認証情報 2. 認証情報を作成 > サービスアカウントキー 3. ストレージのフルアクセス(管理者) 4. .json のクレデンシャルをダウンロードしてmain.goと同じフォルダに置く 5. GOOGLE_APPLICATION_CREDENTIALS環境変数に、 .jsonへのパスを書く(相対パスでも絶対パスでもok) - export GOOGLE_APPLICATION_CREDENTIALS="./path/to/json" - os.Setenv("GOOGLE_APPLICATION_CREDENTIALS", "...json") で、プログラム中にosパッケージで環境変数を設定するのがおすすめ ## cloud.google.com/go/storage パッケージ Goで cloud strage を使うためのライブラリ bucket objectを取得して、file writerを作成する。 このとき、bucket内に存在しないファイル名を指定しても、新規作成されるので大丈夫 writerをClose()するときにcloudstorageにアップロードされるようなので、 忘れずClose()する。 ```go= // Cloud Storage クライアント作成 ctx := context.Background() client, err := storage.NewClient(ctx) // バケットオブジェクトを取得 bkt := client.Bucket(bucketname) obj := bkt.Object(objName) writer := obj.NewWriter(ctx) // // コピー io.Copy(writer, image) writer.Close() ```