見出し画像

Google Cloud Platformエンタープライズ設計ガイド vol.1

こんにちは。Nです。
最近の知識本の読み方について、今まではメモを取りながら読み進めるスタイルにしていたのですが、どうしてもあれ、これどうだったっけ?となったときに遡りづらい点があったため自分のための備忘録として、noteにまとめながら読み進めることとしました。
読んでいる本について最初にURLを乗せるようにしますので、もし誰かの参考になるのであればと思いながら、自分勝手なまとめ方で読み進めますので、なにとぞお願いします。
ではこんかいはこちらについて。

GCPの特徴

GCPのメリット

・ライブマイグレーション:仮想マシンを稼働させたまま別の物理サーバへ移動する技術。クラウドプロバイダが定期的に物理サーバを公開する際や、ホストOSのバッチあてする際に今までなら再起動が必要だったが、それが不要になる。
ハードウェア障害、ソフトウェア不具合時にも役立ち、仮想マシンの停止を予防できる。

・グローバルネットワーク:GCPのデータセンタはgoogleプライベートネットワークでつながっているため距離的通信にかかる時間以外の時間的障害を感じない。リージョン間の障害復旧の実現が可能。
事前に負荷かけしなくても瞬時に大量ノトランザクションを処理できる。IPアドレスを固定しつつ世界中のデータセンタに処理を分散できる→他にないGCPの強み。

デメリット
RDBMSとして採用しているoracleDBにライセンス対応していない。プライベートクラウド→パブリッククラウドに移行する際多くの企業はアプリ修正を極力避けたいため一つの障害となる。
24h365日の日本語サポートはゴールド提携以上、一般的には9-17時の対応となる→ローコストのSIベンダを入れている際、そこに英語のコミュニケーション能力を求めることは考えが破綻している
AES,Azureと比べた実績の少なさ

他社との差別化

サービスをけん引するAWS,テクノロジーをけん引するGCP

AWSの最大の特徴:一般的なニーズに対する感度の高さとサービス化の速さ

GCPの特徴:googleのビリオン単位での利用を前提として、大規模なwebサービスを世界中に安定して届けたいといった規模を想定したプラットフォームを考案する

GCP:できるだけ基盤を意識しないで作業できる設計をのぞんでいる・ITインフラ化の内部を隠蔽しソフトウェアエンジニア向けのインターフェイスを充実させたサービス
インフラ構築よりアプリ・サービス開発にフォーカスしている。

大事なのは大規模分散コンピューティングやインフラの隠蔽、共用化といったGCPの根底にある特徴を理解したうえで自社で構築したいITインフラの目的に照らしてそれがメリットになるのか制約になるのかを冷静に判断してメリットを最大限生かせる用途で導入することである。

使用用途の例↓

オンプレミス開発からの移行
VM migration service;
linuxやwinサーバをダウンタイムなくGCP環境へ移行できる。

AppEngineの機能↓

Blue-Greenデプロイ
本番稼働中のアクティブなサーバ(Blue)に手を加えるのではなくもう一つの新しいサーバ(Green)を用意しクライアントからのアクセスを中断せずに新しい環境に切り替える手法。
アプリの更新にこの手法を用いることで新しい環境に切り替えた直後に障害が発生した場合でも、元の環境に即時に切り戻すことができる。
BGデプロイを用いてバージョン切り替えを行うために1つのwebアプリケーションに複数の異なるコード(バージョンと呼ぶ)をデプロイできる機能が実装されている。AppEngineでデプロイしたアプリはGCPのプロジェクトIDによってつぎのようにURL が決まる。
https://[ プロジェクト ID]. appspot. com
AppEngineのバージョン管理画面で新しいバージョンを選択しトラフィックを移行ボタンを押下するだけでクライアントからのwebアクセスがバージョン1から2へスムーズへ切り替えられる。事前にバージョン2を指定したAURLで正常に動作するかの確認を行えるため、デプロイを安全安心に実行できる。
またトラフィック分割機能があるためIPアドレスやcookieベースで異なるバージョンンへ一定比率でアクセスを振り分けることができる。この機能を使うことで新しいバージョンのエラー状況などを確認しながら時間をかけて公開したり、機能ABテストができる。

Cloud Security Scanner

フラッシュインジェクション・クロスサイトスクリプティング・混在コンテンツチェック・更新されていないライブラリなどのセキュリティ確認を無料で利用でき、スキャンスケジュールも設定可能である。

AppEngineの基本機能

・アクセス制御
Cloud IAMを利用した、プロジェクトレベルのアクセス制御
AppEngineサービス・バージョン・コードレベルでのアクセス制御
をサポート。具体的には
AppEngineのサービス全体の管理・閲覧権限、新しバージョンの作成・デプロイする権限、アプリケーションのソースコードを閲覧するための権限といった役割(Predenfined roles)が用意されており、ユーザーアカウントごとに適切な権限を付与できる。
IAM以外にもファイアウォールルールを制御できる。
→アクセス元のIPを指定し、特定のIPからの通信を許可/拒否する設定
拒否の場合クライアントにHTTP403を返す
アクセスログなどで不正検知した場合は該当のIPをルールに登録するだけで容易に防御できる

・暗号化
standard enterpriseではコンテナのオートスケールに対応するためローカルディスクへはデータを永久に保存できない。通常保存先としてCloud DatastoreやCloud Strageが利用されそれらに格納されたデータはディスクに書き込まれる前に自動的に暗号化され保存される。
Flexible enterpriseではバックエンドのインスタンスにCompute Engineを使用することからCompute Engineの暗号化で説明したようにデータを書き込む際に自動的に暗号化される。

・バックアップ
機能自体はあるがAppEngineではデータを保管する際は外部のデータストアを利用することが一般的でありAppEngine自体のバックアップは考慮不要

Kubernetes Engine

以前はGoogle Container Engine→2017.11に名称変更
コンテナの実行環境Kubernetesのフルマネージドサービス
(フルマネージドサービス:サーバやクラウド環境の基本設定(サーバのOSやミドルウェア設定)だけでなく、サービス開始に必要なサーバ構築、監視・障害対応・セキュリティ対策まで、サーバ運用に関する全ての作業代行を提供するサービスのこと)

・Google Container Registry
KubernetesEngineを利用する際インターネット外部に公開しないプライベート環境にDockerイメージをほぞんできる。GCPの管理ツールとして組み込まれておりGCPのプロジェクト内で管理できイメージのアップロードやダウンロードを行うことができる。JekinsなどのContinuous Integration(CI)サービスとの統合もサポート。(Jekins説明↓)

https://cloudbees.techmatrix.jp/jenkins/

KubernetesEngineの基本機能

・アクセス制御
KubernetesEngine全体の管理権限、クラスタ内のAPIを扱うための開発者向けの権限などユーザーアカウントごとに適切な権限の付与が可能。
(API:アプリケーション・ソフトウェアを構築および統合するために使われるツール、定義、プロトコル。Application Programming Interface (アプリケーション・プログラミング・インタフェース) の略)
・暗号化
ComputeEngineと同様にデータをディスクに書き込む前にGoogleが管理するカギによって自動的に暗号化される。
・バックアップ自動的にバックアップ取得されるため利用者自身でのバックアップは不要
・拡張性
各コンテナに必要なCPUとメモリ容量を指定できる。リソースの使用率に応じてアプリを自動的にスケールアウト、スケールインする機能が備わっている。
(スケールイン:稼働する仮想サーバの台数を減らす機能)
・耐障害性
Kubernetesクラスタ作成時にノードの自動修復設定を有効にしておくことでヘルスチェックした際に自動的にノードの修復プロセスが開始される。

ストレージサービス

GCPのストレージサービス
・Google Cloud Storage
・Google Cloud Bigtable
・Google Cloud DataStore
・Google Cloud SQL
・Google Cloud Spanner 
がある。(ほかにもBigQueryもある、後述)

Amazon S3相当の機能提供→Cloud Storage
違い:独自のコンテンツ配信ネットワーク機能(AWSのCloudFront相当)
(CloudFrontとは:ユーザーへの静的および動的ウェブコンテンツ (.html、.css、.js、イメージファイルなど) の配信を高速化するウェブサービス。各々に合わせた最速のサービス提供に貢献してくれる。)

BigtableとCloudDataStoreはどちらもNoSQLデータベースに分類

(NoSQLについて↓)

性能重視:Bigtable 使いやすさ重視:DataStore
Bigtable:Google検索サービスなどで使われているデータベースで高い応答性能やスケーラビリティを求めるシステム向き
DataStore:SQLライクな問い合わせやACIDトランザクション機能をもつJavaやPythonのオブジェクトを永続化する機能を備えたドキュメント思考DBと位置付けられる。

(ACIDトランザクション:Atomicity,consistency,isolation,durability(ACID特性)を持つ。実行は完全にされるか全くされない、DBの整合性を常に保つ、複数実行と単独実行で結果が変わらない、障害が発生しても失われない)

CloudSQL:RDBに分類。MySQLやPostgreSQLをサービス化したもの
Spanner:大規模向けにグローバルな水平スケーリング機能を備えたもの
(水平スケーリング≒スケールアウト)

長くなったのでいったんここまで。
続きは次回。
対策になってしまいそうですが、ご容赦あれ。


N

私の常日頃の生活をベースに、皆さんの役に立てたり、探しているものを紹介できたらと思っています。今後もよろしくお願いします!