GCP入門の雑メモ
GCPに入門するにあたっての雑メモ。
GCPの登録
無料トライアルの有効化。
90日間300$の無料枠。
どうでもいいけど無料枠の残高と残り日数がダッシュボードで確認できるし、無料期間終わった後はアップグレードしないと課金されないようになってるのとても親切設計。
お支払い
予算とアラート
予算アラートの設定
請求アカウント
各GCPプロジェクトには請求アカウントを紐づける必要がある。
個人でやる場合、個人のgoogleアカウントを請求アカウントにしてもいいのではと思ったが一応請求用アカウントは別で作った。
terraformで管理する時、どこまで管理するのがいいのかわかんないがとりあえず請求用アカウントの紐付けは手動でやった。
見積もり
ここで予算見積もりができる。
ダッシュボードの支払いにも見積もりできそうな項目があったのでそこら辺をみるとよさそう。
Cloud Shell
GCPの操作をするのに必要なものが最初からそろっているブラウザ上で使用できるターミナル環境。これがあるならローカルに直接gcloudインストールしなくてもよかったのかも?どっちのが開発しやすいんだろうか。
ローカルからgcloud使う場合、認証jsonを指定するか
gcloud auth application-default login
みたいな認証ログインが必要。
Cloud Shellがマジ便利
GCE(Google Compute Engine)
AWSでいうEC2だと思う。
秒単位で課金されるサーバーを自由にたてたり壊せたり。
継続して利用すると継続利用割引などがつく。
スナップショット
AWSでいうAMI。インスタンスのその時の状態をスナップショットとしてコピーできる。
そのスナップショットをもとにインスタンスを生成することができる。
外部IP
AWSのEC2同様インスタンスは再起動すると外部IPが動的に変わる。
固定にしたい場合はインスタンスの外部IPタイプをエフェメラルから静的に変更する。
無料枠
e2-microインスタンスが1台まで無料で使える。
terraformメモ
GCPというかterraformのメモ
tflint
modulesディレクトリまではlintしてくれないのでmodulesディレクトリまでlintしたい場合は以下を.tflint.hcl
に追記する。
config {
module = true
}
plugin "google" {
enabled = true
version = "0.22.2"
source = "github.com/terraform-linters/tflint-ruleset-google"
}
サブディレクトリがある場合は--recursive
オプションをつければlintしてくれるけど、ディレクトリごとにtflintを実行するようで、例えば、ルートにversion.tfとかprovider.tfとかを配置していたら、required_versionやproviderがないよという警告がでた。moduleのディレクトリにversionやprovider情報を記載しなきゃいけない?
tfstate
tfstateはGCSなどに保存することが多い。terraformでtfstate用のバケットを作成する場合、作成したバケットのバケット名を参照してterraformブロック内で指定することができない。(変数の参照がinit時にできない)なので、backendブロックのbucket名にはハードコードで指定した。
Autoscaling + Loadbalanser
なんかいろんなところで書いてあることが微妙に違くて正解がわからない。
instance group
負荷分散するのだから複数インスタンスにリクエストを割り振る。なのでインスタンスは複数あるはずでそれをまとめて管理するのがgoogle_compute_instance_groupリソースという理解。
google_compute_instance_group_managerリソースもあって混乱したのだけども、異種類のインスタンスプールを管理するのがgoogle_compute_instance_groupで同一インスタンスプールを管理するのがmanagerの方なんじゃないかと思う。
target_poolはたぶんTCP / UDP用のロードバランサリソースを作成するときに指定するやつ。
GCS(Google Cloud Storage)
AWSでいうS3。
バケット名は世界で一意である必要がある。
ロケーションタイプ
- Multi-Reagion
- Dual-Reagion
- Readion
の三つがある。(スクラップ記入時点で)
ストレージタイプ
- Standardストレージ
- Nearlineストレージ(アクセス頻度の低い30日以上保存される予定のデータ)
- Coldlineストレージ(アクセス頻度の低い90日以上保存される予定のデータの保存)
- Archiveストレージ(365日以上保存される予定のデータのアーカイブ、バックアップなど)
ライフサイクル
さまざまな条件でライフサイクルの設定をすることができ、アーカイブバケットに移動させたり削除したりできる。
無料枠
米国リージョンのみ毎月5G無料。
gsutils
gsutil -m rsync ./resources gs://$(GCS_BUCKET_NAME)
の形式でファイルをアップロードできる。
gsutil cp ./resources gs://$(GCS_BUCKET_NAME)
雑にcpでもいけるけどディレクトリ名でprefixついちゃうので。
gcsfuse
サードパーティー製のコマンド。GCSのマウントできる。
gcsfuse --implicit-dirs <バケット名> <マウントするパス>
VPC
AWSの場合、VPC内にパブリックサブネットとプライベートサブネットのような構成を作成していたが GCPの場合両方作ることはできないよう。
同じネットワーク内のGCPリソース間の通信をprivateでやりたい場合はプライベートサービス接続
の設定が必要となる。
また、AWS同様defaultという名前のネットワークが自動で作成されている。
参考
instance group
ロードバランサーを作成する。
- インスタンスのテンプレートを作成する。
- インスタンスグループを作成する。
指定のインスタンス数かオートスケーリングの設定の範囲でインスタンスが起動する。 - ロードバランサにはHTTP、TCP、UDPと種類がある。
- ロードバランサにはバックエンドサービスとフロントサービスを設定する必要がある。
- バックエンドサービスはインスタンスグループにリクエストを流す役割。
- フロントサービスは入ってきたリクエストを受けて、バックエンドサービスに転送する。
Google App Engine(GAE)
様々なランタイムを提供してくれるPaaS。
以下の記事がわかりやすい。
Cloud Firestore
NoSQLのデータベース。もともと、GCPにCloud Datasoreがあって、firebaseの方にCloud Firestoreがあったのが統合されたっぽい。Cloud FirestoreはネイティブモードとDatastoreモードの2つから選ぶ必要がある。それぞれAPIが違っている。
これから新規ならネイティブモードを選んでおけばよさそう。
gcloudでコレクションの作成の仕方がわからない。できないのか?とりあえずコンソールで作成。
Cloud Functions
第一世代と第二世代がある。新規で作るなら第二世代でたぶん大丈夫。
第二世代はCloudRun上で構成されるのとビルドにCloud Buildなどが内部的に使用されているのでAPIを有効にしておく必要がある。
あとGoのビルドした実行バイナリをzipにしてGCSにあげてしまったのだけど、ビルドしないでプロジェクトそのままzip化すればよかった。GCPが各ランタイムごとに適切にビルドしてくれる。すごすぎ