GCP入門：個社別トレーニングで学んだことまとめ

# 1.はじめに
先日、会社別で開催されているGoogle Cloud Platform（GCP）のトレーニングに参加させて頂きました。
GCP初学者やGCPをこれから活用したい方を対象としたトレーニングで、GCPの基礎と主要サービスについて、座学とハンズオンを通して学習することができました。

# 2.記事の目的
この記事では、このトレーニングで得られた知識を整理することで、
今後のGCP関連業務に役立てることを目的とします。
また、私と同様にGCP初心者の方々にとって、少しでも参考になる情報を提供できれば幸いです。


# 3. Google Cloud Platform(GCP)の概要
GCPはGoogleが提供するクラウドサービスです。

※クラウドサービス...
　インターネットを使ってコンピュータの機能やデータを提供するサービスのこと。

GCPは、他のクラウドサービスと同様に、サーバーやストレージなどの機能を提供します。
加えて、Google Workspaceとの連携や、高度なデータ分析が可能です。
日常生活でも慣れ親しんだGoogleの技術を、クラウド上で最大限に活用できるのが特徴です。


# 4.クラウドコンピューティングの歴史とGCPの立ち位置
クラウドコンピューティングは、インターネットの普及と共に発展しました。
そして、企業のITインフラストラクチャを大きく変革してきました。
初期のクラウドサービスは、主にサーバーやストレージといった基本的なインフラストラクチャ（IaaS）の提供が中心でした。
しかし、GCPはGoogleが長年培ってきたインフラストラクチャに加え、データ分析や機械学習といった最先端の技術も提供します。
これにより、クラウドコンピューティングの可能性を大きく広げ、独自の成長を遂げています。

# 5.クラウドサービスの提供モデル（IaaS, PaaS, SaaS, CaaS）

クラウドサービスには、IaaS、PaaS、SaaS、CaaSなどの種類があります。 

| 提供モデル | 説明 |
|:-:|:-:|
|**IaaS**<br>（Infrastructure as a Service）|サーバーやストレージなどの<br>基本的なインフラ機能を提供するサービス|
|**PaaS**<br>（Platform as a Service）|アプリケーションを開発・実行<br>するための環境を提供するサービス|
|**SaaS**<br>（Software as a Service）|ソフトウェアをインターネット経由で<br>利用できるようにするサービス|
|**CaaS**<br>(Containers as a Service)|コンテナ技術を利用して<br>アプリケーションを実行するためのサービス|

（ちなみに、私はCaaSについて本トレーニングで初めて知りました。）


# 6.GCP独自のネットワーク（リージョン、ゾーン）
GCPのネットワークは、**リージョン**と**ゾーン**という単位で構成されています。

+ **リージョン**
　地理的な場所のこと（例：東京、大阪）
+ **ゾーン**
　リージョン内にあるデータセンターのこと
（イメージとして、渋谷、新宿、梅田、心斎橋とかにデータセンターがある感じでしょうか。）

GCPでは、これらの**リージョン**と**ゾーン**を組み合わせて、
冗長性と可用性を高め、安定したシステムを構築できます。


# 7.Googleの取り組みについて
**環境保護への取り組み**
Googleは、データセンターの省エネ化や再生可能エネルギーの利用など、
環境問題に積極的に取り組んでいるとのことでした。

**セキュリティへの取り組み**
GCPは、Googleが長年培ってきた高いセキュリティ技術を基に構築されており、安全に利用することができます。

**オープンソースへの取り組み**
Googleでは、Kubernetesなどのオープンソース技術の開発にも貢献しています。
GCPでもこれらの技術を活用できます。
※Kubernetes…
　コンテナを用いてアプリケーションを実行、管理するソフトウェア


# 8. GCPリソースの整理と管理
GCPでは、仮想マシンやストレージなどの「リソース」を効率的に管理するために、階層構造を採用しています。


| 階層 | 名称 | 説明  |
|:-:|:-:|:-:|
|  1 | **リソース** | GCPで使う個々の要素のこと。<br>例：仮想マシン（Compute Engineインスタンス）<br>ストレージ（Cloud Storage）<br>データベース（Cloud SQLインスタンス）など|
|  2 | **プロジェクト** |リソースをまとめるための単位。<br>例：Webサイト用、アプリ開発用など、<br>目的ごとにプロジェクトを作って管理します。|
|  3 | **フォルダ** |複数のプロジェクトをまとめるための単位。<br>例：部署ごと、チームごとにフォルダを作り、<br>関連するプロジェクトをまとめます。|
|  4 |  **組織ノード** |フォルダをまとめるための最上位の単位。<br>企業全体でGCPを使う場合に、全体を管理するためのものです。|

これらの階層構造を利用することで、
GCPのリソースの整理、アクセス権限やコストなどを効率的に管理できます。


# 9.GCPのIAM
GCPのIAM（Identity and Access Management）は、
誰がどのGCPリソースにアクセスできるかを管理するための仕組みです。

IAMにはポリシーとロールがあります。

+ **IAMポリシー**
「誰」が、どの 「リソース」に「アクセス」できるか？を定義したルールです。
 　
+ **IAMロール**
IAMポリシーの中で使用される、「役割」です。
「閲覧者」「編集者」「管理者」などの「役割」ごとに、許可される操作が定義されています。
IAMポリシーでアクセス権を定義する際に、どのIAMロール（役割）を割り当てるかを指定することができます。

少しややこしいですが、ポリシーにロールをアタッチしていくイメージで、権限を管理できます。
IAMポリシーとIAMロールを適切に設定することで、GCPリソースへの不正アクセスを防ぎ、安全なシステムを構築できます。


# 10.GCPへのアクセス方法
GCPは、以下の方法で操作できます。    

+ **Google Cloud コンソール**
　WebブラウザからGCPを操作
+ **Cloud SDK**
　コマンドラインツールでGCPを操作
+ **Cloud Shell**
　ブラウザ版のCloud SDK
+ **API**
　プログラム（ソフトウェア）使ってGCPを操作
+ **Google Cloud アプリ**
　モバイルアプリからGCPを操作

# 11. GCPの主要サービスの紹介
| サービス名| 説明 |
|:-:|:-:|
|  Compute Engine | GCPで仮想マシンを提供するサービスです。|
| VPC<br>（Virtual Private Cloud）  | GCP内に作成できるプライベートなネットワークのことです。ルーティングやファイアウォールなどのネットワーク設定を自由に行えます。  |
|Cloud Storage|GCPでオブジェクトストレージを提供するサービスです。オブジェクトストレージは、データを「オブジェクト」という単位で管理するストレージ方式です。様々な種類のデータを保存するために利用できます。|
|Cloud SQL|GCPでリレーショナルデータベースを提供するサービスです。|
|Cloud Spanner|分散リレーショナルデータベースを提供するサービスです。 |
|Firestore|NoSQLドキュメントデータベースを提供するサービスです。|
|Cloud Bigtable|NoSQLビッグデータのデータベースを提供するサービスです。|
|BigQuery<br>|データ分析プラットフォームを提供するデータウェアハウスサービスです。|
|Google Kubernetes Engine|GKEとも。GCPでKubernetesを利用するためのサービスです。Kubernetesは、コンテナ化されたアプリケーションを管理するためのオープンソースのプラットフォームです。|
|Cloud Run関数|コンテナ化されたイベント駆動型コード実行サービスです。データ処理やAPIの実行など、様々な用途に利用されています。Cloud FunctionsとCloud Runが統合され、Cloud Run関数となりました。|

# 12. ハンズオン演習の内容

QwikLabs というシステムを利用し、実際にGCPを操作することが出来ました。
当時GCPを操作したことがなかった私にとって、この演習はとても有意義な時間となりました。
以下がハンズオン演習の内容となります。

**1\. Cloud Marketplaceの利用**
GCP上で利用できる様々なツールやソフトウェアを探す方法を体験しました。

**2\. Compute EngineとVPCネットワーキングの設定**
仮想サーバー（Compute Engineインスタンス）の作り方・動かし方を学び、
ネットワークの設定（VPCの作成、サーバー間の通信設定など）を体験しました。

**3\. Cloud StorageとCloud SQLの利用**
データを保存する場所（Cloud Storageバケット）の作り方や、
データベース（Cloud SQLインスタンス）の作り方を学び、
作ったデータベースにデータを保存したり、取り出したりする方法を体験しました。

**4\. Cloud Runの利用** 
Cloud Runを利用し、作成したプログラムを、サーバー等のインフラ構築を気にせず実行する方法を学びました。
また、プログラムをCloud Runで動かすための準備（コンテナイメージのアップロードなど）を体験しました。


# 13.トレーニング中に分からなかった単語
トレーニング中に分からなかった単語があったので、メモに残しておきます。

+ **ステートレス**
コンピューターシステムやアプリケーションにおいて、過去の処理や状態を記憶しない、または依存しない性質のこと

+ **ステートフル**
コンピューターシステムやアプリケーションにおいて、過去の処理や状態を記憶して、それに基づいて動作する性質のこと

+ **Artifact Registry**
GCP上でコンテナイメージやその他のビルド成果物を安全に保存、管理、デプロイするためのサービスのこと

+ **マイクロサービス**
アプリケーションを「小さな部品」ごとに分解し、それぞれの部品を独立して開発・管理できるようにする考え方

+ **イベントドリブン**
何か出来事（イベント）が起こったら、それに応じてプログラムが自動的に反応する仕組みのこと

# 14. まとめ
このトレーニングでは、GCPの基礎から主要サービスまで、幅広い内容を学ぶことができました。
特に、GCPを触ったことがなかった私にとって、ハンズオン演習でGCPを実際に操作できたことが貴重な経験となりました。
この経験を活かし、今後の業務に役立てると共に、GCPのさらなる活用に挑戦していけたらなと思います。