GCP Associate Cloud Engineer の取得

# 目的
- 仕事はAWSメインだが、マルチクラウドな人材になるため、GCPも少し勉強しようと思い、成果の明確化のため、GCP資格の中で一番初心者向けの「Associate Cloud Engineer」を取得することとした。
- あまり参考書もなく手探りだったため、後続の人の参考になればと思い、実施した内容を整理しておきたい。

# 技術レベル(試験勉強着手前)
- AWSは「AWS 認定ソリューションアーキテクト – プロフェッショナル」、Azureは「AZ-103(Microsoft Azure Administrator)」を保有。ただペーパー（机上知識だけ）なので、実際の構築はWordpressサイト立てるくらいしかできない。
- GCP Associate Cloud Engineerのレベル感はAWSの「認定ソリューションアーキテクト – アソシエイト」や、Azureの「AZ-103(Microsoft Azure Administrator)」くらいかな？という想定で勉強に着手。

# 勉強法
## Linux Academy
- Linux Academy での勉強
    - [Linux Academy](https://linuxacademy.com/) は、各種IT資格の取得支援コンテンツを提供する有料サイト。
    - Associate Cloud Engineer 対応のコースがあり、説明動画の視聴、ハンズオンを全て実施すると所要時間は13時間。
    - 説明内容毎に動画は分割されているため、「この機能は何となく大丈夫」というところは視聴をスキップ。
    - ハンズオンや模擬テストは全て実施。
    - 不明な点は公式ドキュメントや実機で補足確認。

## 模擬試験
- 「[公式サイト: Associate Cloud Engineer 模擬試験](https://cloud.google.com/certification/practice-exam/cloud-engineer?hl=ja)」で何度でも模擬試験を受けることができる。ただ何度受けても問題は同じなので、3回目くらいで覚えてしまい満点に。

## 出題範囲の各項目への到達度の事前確認

- 「 [公式サイト: Associate Cloud Engineer 認定試験ガイド](https://cloud.google.com/certification/cloud-ngineer?hl=ja)」にかなり細かく出題範囲が定義されているため、それぞれの出題範囲について自分がきちんとフォローできているかを確認した。○は実機確認、△はドキュメントのみ確認。
- 【2020/7/7 記事更新】公式サイトのURLが変更になり、出題範囲の定義も一部変更になっている。以下の表は、「2020/6時点で公開されていた試験範囲の項目に対し、自分がどこまで事前に確認したか」を記載しているもの。
    - [公式サイト(2020/7～): Associate Cloud Engineer 認定試験ガイド](https://cloud.google.com/certification/guides/cloud-engineer?hl=ja)


|項目  |実施内容  |
|---|---|
|1. クラウド ソリューション環境の設定  | -- |
|1.1 クラウド プロジェクトとアカウントを設定する。以下のような作業があります。   | -- |
|プロジェクトを作成する | ○プロジェクトを作成した。|
|プロジェクト内で事前定義された IAM ロールにユーザーを割り当てる |○メンバーとロール(オーナーとか)の紐づけをした。|
|Cloud Identity でユーザーを管理する（手動および自動）|○Cloud Identityを一から申し込んで組織管理をした。|
|プロジェクトで API を有効にする |○いろんなAPIを有効にした。|
|Stackdriver ワークスペースをプロビジョニングする |○モニタリングワークスペースを作成した。| 
|1.2 課金構成を管理する。以下のような作業があります。| -- |
|請求先アカウントを作成する|○請求先アカウントを作成した。|
|プロジェクトを請求先アカウントにリンクする|○プロジェクトと請求先アカウントのリンクをした。|
|課金の予算とアラートを設定する|○予算とアラートを作成した。|
|日 / 月単位の料金見積もりを目的として請求関連のエクスポートを設定する|○課金データ(csv)をCloud Storageにエクスポートした。|
|1.3 コマンドライン インターフェース（CLI）、具体的には Cloud SDK をインストールして構成する（デフォルト プロジェクトの設定など）。 | ○AWSのAmazon Linux 2のインスタンスにCloud SDKのインストール、初期設定を行いgcloudコマンドが使えるようにした。
|2. クラウド ソリューションの計画と構成| -- |
|2.1 料金計算ツールを使用して GCP プロダクトの使用量を計画し、見積もる|○料金計算ツールでGCEの料金を見積もってみた。 |
|2.2 コンピューティング リソースを計画し、構成する。以下のような検討事項があります。| -- |
|ワークロードに適したコンピューティング サービスを選択する（Compute Engine、Google Kubernetes Engine、App Engine、Cloud Run、Cloud Functions など）|○GCE, GKE, GAE, Cloud Run, Cloud Functionsをクイックスタート(チュートリアルレベル)まで実施。|
|必要に応じてプリエンプティブル VM とカスタム マシンタイプを使用する|○プリエンプティブルかつカスタムマシンタイプでインスタンスを作成。プリエンプティブルは低価格だが勝手に停止することを確認。
|2.3 データ ストレージ オプションを計画し、構成する。以下のような検討事項があります。| -- |
|プロダクトの選択（Cloud SQL、BigQuery、Cloud Spanner、Cloud Bigtable など）|○BigQuery, Cloud Spannerはデータ読み込み、クエリを実施。他は机上確認のみ。|
|ストレージ オプションの選択（Standard、Nearline、Coldline、Archive など）|△[公式ドキュメント:ストレージクラス](https://cloud.google.com/storage/docs/storage-classes?hl=ja)を読んで確認した。|
|2.4 ネットワーク リソースを計画し、構成する。以下のようなタスクがあります。|--|
|負荷分散オプションの違いを見分ける|○[公式ドキュメント:Cloud Load Balancing のドキュメント](https://cloud.google.com/load-balancing/docs?hl=ja)で仕様を確認、外部https負荷分散は実機確認した。|
|可用性を考慮してネットワーク内のリソースのロケーションを決定する|△リージョン、ゾーンでのリソースの分散の考え方を確認した。|
|Cloud DNS を構成する|△Route53相当と考え概要のみ確認した。|
|3. クラウド ソリューションのデプロイと実装| -- |
|3.1 Compute Engine リソースをデプロイし、実装する。以下のようなタスクがあります。|--|
|Cloud Console と Cloud SDK（gcloud）を使用してコンピューティング インスタンスを起動する（ディスクの割り当て、可用性ポリシー、SSH 認証鍵など）|○Consoleとgcloudコマンドでインスタンスの起動や削除を実施した。|
|インスタンス テンプレートを使用して、自動スケーリングされるマネージド インスタンス グループを作成する|○インスタンステンプレート及びインスタンスグループを作成した。|
|インスタンス用のカスタム SSH 認証鍵を生成、アップロードする|△キーペアを作成し、公開鍵をインスタンスに登録し、sshで接続する手順をドキュメントで確認した。|
|VM で Stackdriver Monitoring と Stackdriver Logging の構成を行う|○[【GCP入門編・第17回】 Stackdriver Monitoring で Google Compute Engine を監視しよう！](https://www.topgate.co.jp/gcp17-stackdriver-monitoring-gce)をそのまま実施した。|
|コンピューティングの割り当てを評価し、割り当ての増加をリクエストする|○「割り当て」の意味がよく分からないが、CPU利用率を見て、マシンタイプを変更した。|
|モニタリングとロギング用に Stackdriver Agent をインストールする|○モニタリングとロギングのAgentをインストールした。|
|3.2 Google Kubernetes Engine リソースをデプロイし、実装する。以下のようなタスクがあります。|--|
|Google Kubernetes Engine クラスタをデプロイする|○GKEクラスタをデプロイした。|
|Pod を使用して Google Kubernetes Engine にコンテナ アプリケーションをデプロイする|○nginx Podをデプロイした。|
|Google Kubernetes Engine アプリケーションのモニタリングとロギングを構成する|○GKEのインフラやPodがモニタリング、ロギングできることを確認した。|
|3.3 App Engine リソース、Cloud Run リソース、Cloud Functions リソースをデプロイし、実装する。以下のようなタスクがあります|--|（該当する場合）。
|アプリケーションをデプロイし、スケーリング構成、バージョン、トラフィック分割を更新する|○参考書「[Google Cloud Platform GAEソフトウェア開発入門](https://gihyo.jp/book/2020/978-4-297-11215-8)」を購入し、ハンズオンを実施した。|
|Google Cloud イベント（Cloud Pub/Sub イベント、Cloud Storage オブジェクト変更通知イベントなど）を受け取るアプリケーションをデプロイする|○Cloud Storageへのファイル保存をトリガーに起動し、Cloud Pub/Subへ通知を行うCloudFunctionsを作るハンズオンを実施した。(Qiita記事: [【初心者】GCP Cloud Data Loss Prevention (DLP) を使ってみる](https://qiita.com/mksamba/items/74673e0dff8797d9a4e3))|
|3.4 データ ソリューションをデプロイし、実装する。以下のようなタスクがあります。
|Cloud SQL、Cloud Datastore、BigQuery、Cloud Spanner、Cloud Pub/Sub、Cloud Bigtable、Cloud Dataproc、Cloud Dataflow、Cloud Storage などのプロダクトを使用してデータシステムを初期化する|○BigQuery, Cloud Spannerについては実際にデータインポート、クエリを実行。他はドキュメントのみ。|
|データを読み込む（コマンドラインによるアップロード、API による転送、インポート / エクスポート、Cloud Storage からのデータの読み込み、Cloud Pub/Sub へのデータのストリーミングなど）|○BigQuery, Cloud Spannerについては実際にデータインポート、クエリを実行。他はドキュメントのみ。|
|3.5 ネットワーキング リソースをデプロイし、実装する。以下のようなタスクがあります。
|サブネットを持つ VPC を作成する（カスタムモード VPC、共有 VPC など）|○カスタムモードVPCを作成、共有VPCはドキュメント「[Cloud Identityで構築するCompute Engine 共有VPC](https://www.apps-gcp.com/cloudindentity-compute-engine-shared-vpc/)」を確認。
|カスタム ネットワーク構成を持つ Compute Engine インスタンスを起動する（内部専用 IP アドレス、限定公開の Google アクセス、静的外部 IP アドレスとプライベート IP アドレス、ネットワーク タグなど）|△左記の項目についてドキュメントを確認した。|
|VPC 用の上り（内向き）および下り（外向き）ファイアウォール ルールを作成する（IP サブネット、タグ、サービス アカウントなど）|○ファイアウォールルールの設定を行った。|
|Cloud VPN を使用して Google VPC と外部ネットワークとの間の VPN を作成する|△「Qiita記事：[AWSとGCP間をVPN接続してみた](https://qiita.com/nagase/items/df18e308e6fc98e11aaa)」を読んでやった気になった。
|アプリケーションへのネットワーク トラフィックを分散するロードバランサを作成する（グローバル HTTP(S) ロードバランサ、グローバル SSL プロキシ ロードバランサ、グローバル TCP プロキシ ロードバランサ、リージョン ネットワーク ロードバランサ、リージョン内部ロードバランサなど）|○グローバルHTTP(S)ロードバランスのみ実機確認(Qiita記事：[【初心者】GCP Identity-Aware Proxy (IAP), Access Context Managerを使ってみる (WEBサーバへのアクセス制限)](https://qiita.com/mksamba/items/21ce9c4f97d9ae04a82a)、他はドキュメントで違いを確認。
|3.6 Cloud Marketplace を使用してソリューションをデプロイする。以下のようなタスクがあります。
|Cloud Marketplace カタログを閲覧し、ソリューションの詳細を見る|○Marketplaceのカタログを見た。|
|Cloud Marketplace ソリューションをデプロイする|○MarketplaceからWordpressをデプロイした。|
|3.7 Cloud Deployment Manager を使用してアプリケーション インフラストラクチャをデプロイする。以下のようなタスクがあります。|--|
|Deployment Manager テンプレートの開発|△AWSのCloudFormationみたいなものと理解した。|
|Deployment Manager テンプレートの起動|△AWSのCloudFormationみたいなものと理解した。|

# 受験
- 試験結果：　合格（正答率等は非公開。合格か不合格かのみの表示）

# 所感
- 試験範囲が詳細に記載されているのは勉強しやすいと感じた。
- 試験範囲としてはIaaS部分が中心であり、機械学習とかBigDataとかのGCPならではのところは含まれておらず、「GCPできます」とはまだ全然言えないレベル。次はそのあたりの上位資格を目指してみたい。