GCP入門

# 概要
・ Google Cloud Platformの略
・ Googleのサービスで動いているインフラを使えるサービス
・ GCP上のコンピュータ資源をリソースという(仮想サーバーとか)

## 歴史
・2008年 GAE(Google App Engine)リリース
PaaS。簡単にdeployできるサービス。最初はPythonしかサポートしてなかったけど今はJava、PHP、Node.js、Python、C#、.Net、Ruby、Goが使える。

・2012年 BigQueryリリース
Googleのデータ分析基盤が使えるようになった。

・2013年 GCE(Google Compute Engine)リリース

・2014年 アジアリージョン誕生

・2016年 東京リージョン登場

## プロジェクトと課金アカウント
プロジェクトという枠組みを作成し、その中にGCPの各サービスを入れて1つのサービスを作成する。
課金はプロジェクト単位で行われ、各プロジェクトに課金アカウントを登録する。1つの課金アカウントで複数のプロジェクトを登録できる。

## リージョンとゾーン
リージョン : データセンターが大陸のどこにあるかを示す。(e.x. 東京リージョン, 東アメリカリージョン等)
ゾーン : リージョン内の具体的な場所を示す。各リージョンごとに3つゾーンがある。
日本向けサービスなら東京リージョンを選ぶ。レイテンシを気にしなくて良いなら東アメリカリージョンを使うと安い。

## クォータ制限
大量課金で破産しないようにクォータという制限が最初からかかっている。
必要があれば解除申請をする。クォータはリージョンごとに申請が必要。

## 操作
Web管理画面, コマンド, APIから操作できる。

# Google Cloud SDK
Google Cloud SDKを使ってコマンドからGCPを操作する。
Linux, macOS, Windowsで動作する。Python(3.5over or 2.7.9over)
現在はデフォルトでPython2系が使用されるが、まもなくPython3系に移行する。
Google Cloud SDKをインストールすると、gcloud, gsutil, bqコマンドが使用可能になる。

## インストール
対話型インストールと非対話型インストールがある。
特定のバージョンをインストールしたい場合はバージョニングされたアーカイブを使うこと。

### 対話型インストール
```
$ curl https://sdk.cloud.google.com | bash
$ exec -l $SHELL
$ gcloud init
```

### 非対話型インストール
```
$ curl https://sdk.cloud.google.com > install.sh
$ bash install.sh --disable-prompts
```

### バージョニングされたアーカイブからのインストール
Cloud SDK を CI（継続的インテグレーション）プロセスや本番環境システムの一部として使用しており、システムのパーツ間の互換性を確保するために依存関係を制御したい場合に使う。
参照。
https://cloud.google.com/sdk/docs/downloads-versioned-archives?hl=ja

## アップデート
インストール済みの全コンポーネントを最新版にアップデートする。
バージョン指定することも可能。

```
$ gcloud components update
$ gcloud components update --version=1.2.3
```

## コマンド形式

```
$ gcloud 操作カテゴリ 操作 ターゲット オプション
```

## yesオプション
コマンドのオプションに-q (quit?)をつけるとコマンド対話時に全てデフォルトで回答してくれる。


# Cloud IAM
Google Cloud Identity and Access Managment。
GCPのサービスごとに権限管理を行う。
管理者が特定のユーザーに対し権限を付与する。無料で使用可能。

## メンバー
GCPリソースのアクセス権限を付与する対象
Googleアカウント : 個人
Googleグループ : 集団
G Suiteドメイン : 集団
サービスアカウント : GCPのサービスごとに用意されたアカウント
他にも全Userを表す特別アカウントがある。

## 役割
複数のアクセス権限をまとめたもの。
オーナー, 編集者, 参照者, 閲覧者等の役割やサービスごとに特殊な役割がある。

## ポリシー
ユーザーがどのアクセス権限を持つかを表すポリシーを作成することでユーザーに役割を付与できる。

## ポリシー追加
「IAMと管理」のIAMから追加/削除ができる。
最小限のポリシーのみを追加すること。
<img width="648" alt="IAM – IAM と管理 – Study – Google Cloud Platform 2020-03-25 16-36-30.jpg" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/278474/bd8b5f2c-1ba3-9758-ece5-3ded13c33b9a.jpeg">


# 課金
利用した分だけ支払う従量課金型。
継続割引もある。
料金計算ツール
https://cloud.google.com/products/calculator/

・利用時間料金
1秒単位で課金される。

・ストレージ量料金

・データ通信量料金
通信先によっては料金がかからないものもある。データ受信, リージョン内通信(GCPサービス間通信)等は料金がかからない。ゾーン間通信をする場合は料金がかかる。

・データ処理料金
に分類される。

# GCE(Google Compute Engine)
IaaS。数分で仮想マシンが立ち上がる。
・1秒単位で課金される。
・ストレージ量料金はなし。
・長期間(1ヵ月等)使用時に自動で値引き。
・高性能でスケールさせやすい。

## LiveMigration
Live : 中継
Migration : 移行
再起動なしでハードウェアの移行ができる機能。


# GCS(Google Cloud Storage)
Blob(Binary Large Object)用ストレージサービス
画像や動画といった静的ファイルだけでなくGCPサービスのアウトプットを保存することも可能。
プロジェクトに紐づくためプロジェクトを削除するとGCSのファイルも削除される。

## バケット
データの入れ物のこと。バケットを作り、その中にデータを入れる。
バケット名は重複禁止。パケット名は一般公開される。

## オブジェクト
ファイルやフォルダ等のGCS上にあるデータのこと。
1オブジェクトの最大サイズは5TB。
オブジェクト = オブジェクトデータ + メタデータ

## ストレージクラス
保存するストレージの種類によって料金が異なる。
Multi-Regional : 頻繁に複数のregionからアクセスされるデータ向け。
Regional : 頻繁に単一regionからアクセスされるデータ向け。
Nearline : 月1程度にアクセスされるデータ向け。
Coldline : 年1程度にアクセスされるデータ向け。めっちゃ安い

## 料金
1GB/月の保存料金とダウンロード料金がかかる。
NearlineとColdlineは最低料金が設定されている(30日と90日)