Closed13

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という名前のネットワークが自動で作成されている。

参考

https://zenn.dev/google_cloud_jp/articles/google-cloud-vpc-101

ぱんだぱんだ

instance group

ロードバランサーを作成する。

  • インスタンスのテンプレートを作成する。
  • インスタンスグループを作成する。
    指定のインスタンス数かオートスケーリングの設定の範囲でインスタンスが起動する。
  • ロードバランサにはHTTP、TCP、UDPと種類がある。
  • ロードバランサにはバックエンドサービスとフロントサービスを設定する必要がある。
  • バックエンドサービスはインスタンスグループにリクエストを流す役割。
  • フロントサービスは入ってきたリクエストを受けて、バックエンドサービスに転送する。
ぱんだぱんだ

Cloud Firestore

NoSQLのデータベース。もともと、GCPにCloud Datasoreがあって、firebaseの方にCloud Firestoreがあったのが統合されたっぽい。Cloud FirestoreはネイティブモードとDatastoreモードの2つから選ぶ必要がある。それぞれAPIが違っている。

これから新規ならネイティブモードを選んでおけばよさそう。

https://zenn.dev/google_cloud_jp/articles/a0a6b5f855fe90

gcloudでコレクションの作成の仕方がわからない。できないのか?とりあえずコンソールで作成。

ぱんだぱんだ

Cloud Functions

第一世代と第二世代がある。新規で作るなら第二世代でたぶん大丈夫。
第二世代はCloudRun上で構成されるのとビルドにCloud Buildなどが内部的に使用されているのでAPIを有効にしておく必要がある。

あとGoのビルドした実行バイナリをzipにしてGCSにあげてしまったのだけど、ビルドしないでプロジェクトそのままzip化すればよかった。GCPが各ランタイムごとに適切にビルドしてくれる。すごすぎ

このスクラップは2023/04/13にクローズされました