プログラマーの雑レポート

脳死で読めるコードを書きたい

(GCP入門) サーバーレスサービスについて

サーバーレスとは

アプリケーションを公開するために必要なインフラの構築を自分でやらなくてよい。という優れものサービス。

App Engine(GAE)

yamlファイル1つで(あとは $ gcloud app deploy って打つだけ?)Webアプリケーションを構築できるサーバーレスサービスで、Paasに分類されるもの。

種類は、「スタンダード環境」「フレキシブル環境」の2種類がある

スタンダードは、使用できるプログラミング言語に制限があり、ネットワーク等の細かい設定ができないが、フレキシブルは、その逆。

GAEイメージ

 

Cloud Functions

HTTPトリガー・特定のイベントで関数(のコード)を実行できるサーバーレスサービス。Faasに分類される。

HTTPトリガーは、その名の通り、HTTPリクエストをトリガーとして実行される。

特定のイベント(イベントトリガー)は、たとえば、CloudStorageにアップロードされた時に実行したり、FireStoreの更新した時に実行したりできる。

 

特定のタイミングで単純な処理をしたい時に便利って感じかな。

 

CloudFunction


Cloud Run

コンテナを動かすサービスなので役割は、GKEみたいなもの。

GKEはネットワークの設定など柔軟にカスタマイズできるが、CloudRunはできないため、シンプルな構成のコンテナの扱いであれば便利。

Cloud Build

CI/CDサービス。

CIは、テストやビルドを行うことで、CDは開発/本番環境のデプロイの自動で行うこと。

CloudBuildの実行条件(トリガー)は、特定リポジトリの特定ブランチにpushされたら。といった具合に設定する。

 

これまでのサーバーレスサービスの役割をまとめると。。

CloudBuild,CloudRun

 

参考

blog.g-gen.co.jp

cloud.google.com

blog.g-gen.co.jp

終わり

サーバーレス サイコー

(GCP入門)GoogleKubernetesEngine(GKE)について

 

GKEの概要

GKEは、GoogleCloud上でkubernetes(k8s)を簡単に扱えるようにしたサービス。

kubernetes(k8s)とは

コンテナオーケストレーションツールと呼ばれるもので、コンテナの起動・停止・デプロイ・増減(オートスケール)などをまるっと自動化できる仕組みのこと。

また、ヘルスチェックという機能でコンテナに障害が発生したときに、自動で再作成してくれる。その間は障害が発生したコンテナにはトラフィックを流さず、再作成した方に流すのもいい感じにやってくれる。

コンテナ管理の仕組み・アーキテクチャ

ノード(Node)

k8sを構成するサーバ(物理的サーバ・仮想マシン)のことをノードという。

ノードは2種類あって、コンテナ化されデプロイされたノードをワーカーノードといい、コンテナ化されたものをどのワーカーノードに割り振りするか管理(クラスタ全体を監視・管理も行う)するノードをマスターノードという。(司令塔みたいな)

クラスタは、それぞれのノードをひとまとめにした単位。

pod

k8sでコンテナをデプロイする際の最小単位のまとまりのこと。(いまいちピンとこないな)

service

複数のpodへの接続を容易にするための機能のようなもの。

podはたくさんのノードに存在するため、特定podと通信するにはIPを指定する必要があるが、k8sはIPが固定ではないため?失敗する可能性がある。

そして、serviceには5つのタイプが存在する。

(が、正直あまり理解できていない。1,2あたりがよく使われるっぽい)

  1. ClusterIP
    1. serviceにクラスタ内で扱えるIPアドレスを割り振る。
  2. NodePort
    1. クラスタ外のサービス(LoadBalancer等)と疎通するためIPアドレスクラスタ?に割り振る。
  3. LoadBalancer
    1. TCPロードバランサを利用できる仕組み(どゆこと?)
  4. ExternalName
    1. 外部ドメインにアクセスできる仕組み
  5. Headless
    1. podのIPアドレスを直接返してくれる仕組み

レプリカセット

podを複製して、指定した数のpodを作成するリソース。

レプリカ自体は、後述のデプロイメントによって作成される。

デプロイメント

レプリカセットのさらに上位に当たるもので、k8sにおけるデプロイを管理するもの。

Ingressを使用した外部負荷分散

外部サービスであるLoad Balancer(HTTP)を連携して、サービスへのアクセスを行うシステム?

あれ、NodePortを使用すれば、クラスタ内にアクセスできるんじゃないっけ?(GPT先生によると、ポートの競合などがNodePortのみだと起こる可能性があって、そういった問題をIngressは解消でき、柔軟に利用することができるメリットがあるらしい)

 

これまで出てきたものを図解すると。。(もっと細かく書いたら超複雑なんだろうなぁ。)

アーキテクチャイメージ

特徴

ローリングアップデートが自動

更新後のアプリケーションをデプロイが全て自動で行われる。

GCEの手動で行うとなると、インスタンス作成→デプロイ→ロードバランサの向き先変えて、古いインスタンス削除して。。と面倒。。

ロールバック

マスタノードで設定ファイルの履歴を管理しているため、デプロイが不安定の場合等に前の状態にロールバックできる仕組みがある。

オートスケール

ワーカーノード自体を増減するものとワーカーノード上に稼働しているpodを増減する2つのスケール機能が簡単に利用できる。

参考

www.ios-net.co.jp

kubernetes.io

終わり

結構難しかった。。所々わからない部分がありましたが、大枠は理解できたつもりなので、今回は良しとしたいと思います。(いい加減ですみません)

大分端折ってるのですが、まとめるのは時間がかかりますね。あと3記事くらいありそうですが、頑張って行きたいと思います。(リアクションもらえるとモチベになります)

(GCP入門)Cloud Storage

Cloud Storage(GCS)概要

Google Cloudが提供しているストレージサービス。

様々なデータ(Json,PNG..)を容量無制限でセキュアかつ高い耐久性で管理することができる。

GCS操作は、コンソールの他に gsutilコマンド やクライアントライブラリで操作することができる。

料金体系

  1. ストレージ(保存するデータ量)
  2. オペレーション(ダウンロード回数など)
  3. ネットワーク(読み取りデータ量。書き込みは無料)

 

ストレージクラス

ストレージクラスとは、ストレージの種類のことで、データ保存・取得にかかる料金が異なる。

ストレージクラス種類まとめ

 

オブジェクトとバケット

GCSは、バケットと呼ばれるフォルダのようなものと、データそのものを指すオブジェクトの構成となっている。       

GCS 構成

 

アクセス制御

「均一なバケットレベルのアクセス」と「きめ細かい管理」の2種類ある。

きめ細かい管理はオブジェクトごとに設定を行いたい場合などに使うため、基本的には、前者を使用する。

 

バージョニングとライフサイクル管理

バージョニング

GCSは、バージョニングが可能。

バージョニングとは、オブジェクトに何らかの変更があった場合に、変更前コピーデータを保持する仕組みのこと。

そのため、意図しない変更を行ってしまったとして、復元することができるのだが、その分ストレージ料金がかかるため、適切なバージョニングが必要

ライフサイクル管理

定期的にバケットに対して、アクションが行えるもの。

例えば作成日時から30日経過したオブジェクトを削除・ある一定期間保持した場合、ストレージクラスを低価格のものに下げる。などができ、最適化・コスト削減ができる。

ただし、バケット単位でオブジェクト単位でしか設定できない。

 

参考

cloud.google.com

終わり

バケット作成する時ってあまり考えずに従来のバケット設定真似したりしちゃってたので、適切な設定をしてコストも意識しつつ使いこなしていきたいですね!

 

次回、コンテナとサーバレスサービスについて!

 

(GCP入門)VPC・ネットワークについて

VPC概要

Virtual Private Cloud(VPC)とは、GoogleCloud上のリソース・サービス間でやりとりを行うための仮想ネットワークサービスで、その仮想ネットワークのことをVPCネットワークという。

また、一つのVPCネットワーク上で複数のリージョンを管理することができる。

VPCネットワーク設定は、「default」設定があり、簡易的にすぐ試すことができるが、細かい設定は行えない。

VPCネットワーク

サブネット

VPCネットワークの中で小分けされた小さなネットワークのこと。(だからサブね)

存在意義は、ネットワークのセキュリティやパフォーマンスを向上させるためみたい(GPT先生によると)

サブネットは、リージョンリソース(必ずどこかのリージョン属する必要があるもの)であるため、リージョンに必ず1つは存在する。

割り当てたIPアドレスの末尾にある 例 /11 は、 CIDR記法と呼ばれるもので、この数値によってIPアドレスの範囲を表現している。

IPアドレスの範囲は任意で設定することができる。

ファイルウォール

セキュリティの一環で、特定アクセスを制御できる。

特定IPアドレスや範囲等、上り(ユーザからのアクセス)・下り(サービスからのアクセス)個別で設定することができる

ルーティングとNAT

ルーティング

VPCネットワークとサブネットを構成すると、デフォルトルートサブネットルートという2つの経路情報(ルーティング)が自動で設定される。

ルーティングとは、ネットワーク上でデータを相手に届けるための宛先情報みたいなものでネットワークを構築する際に必要不可欠なもの。

デフォルトネットワークとは、VPCネットワークからインターネットに接続するインターネットゲートウェイ(中継役)のルーティング。

サブネットルートは、サブネット同士で通信するためのルーティング。

上記は自動設定だが、手動で設定する方法もある。(動的・静的ルーティング)

Cloud NAT(Cloud Network Adress Translation)

インターネットからのアクセスを禁止しつつ、サービス側からアクセスしたい時に使えるサービス。

インターネットと通信を行う場合、外部IPが必須だが、外部IPをGCE等で持ってしまうとインターネットからのアクセスも許可されてしまう。(許可したくないケースがある)

NATは、プライベートIPをパブリックIPに変換する技術で、外部IPを持たせなくてもGCE等の情報をインターネット上に送信することができる。

ネットワークの拡張

通常異なるVPCネットワーク間では、アクセスすることはできないが、VPCネットワークペアリング・CloudVPC等のサービスを利用することで相互アクセスが可能となる

Cloud Load Balancing

複数のGCE等のサービスへの負荷を分散するサービス。

ユーザやトラフィック量に応じて自動でスケールする。

大きく分けて2種類あり、インターネットからのトラフィックを負荷分散する 外部負荷分散と、VPCネットワーク内部でのトラフィックを負荷分散する 内部負荷分散 がある。

さらにその中でも、外部HTTP負荷分散・内部TCP/UDP負荷分散等に種類がある。

例: 外部HTTP(S)負荷分散イメージ図

Cloud CDN(Cloud Content Delivery Network)

画像やHTMLをキャッシュサーバに保存しておいて、通信を高速化する仕組み。

キャッシュの設定は3つある。(全ての設定は、指定したコンテンツを自動でキャッシュする?)

  1. 全てのコンテンツをキャッシュする(キャッシュモード)
  2. 静的コンテンツのみキャッシュする
  3. オリジンサーバの Cache-Controlヘッダー参照する

コンテンツはキャッシュキーを使用して、管理されていて、そのキーが存在しなければ、キャッシュ元オリジンサーバーに直接通信される。

 

懸念点として、更新頻度の高いコンテンツはあまり効果がないため、コンテンツの質によって適切に設定する必要がある。

CloudCDNイメージ図

Cloud DNS

Google Cloudが提供している DNSサービス。

DNSとは、IPアドレスドメインを紐づける仕組み。

 

参考

cloud.google.com

終わり

ネットワークまわりはかなり勉強になった。

次回はCloud Storage!

(GCP入門) ComputeEngineについて

(GCP 入門 その①)基礎知識 〜GoogleCloudとは、クラウドについて〜 - 雑エンジニアのつぶやき の続編。

GoogleComputeEngine(GCE)とは


Google Cloud で提供されている従来課金制の仮想マシン(VM)サービス。
Iaasサービスの一種 (laasとは。は、こちら)
仮想マシンは、ざっくり言うと物理的なコンピューター上に仮想的なコンピューターをを作成する仮想化技術で、ソフトウェアを動かすために必要不可欠なもの。
オンプレミスで同じ環境を用意するとなった場合、動かすために必要な物理的ハードウェアを諸々揃える必要がある。

GCEは、OSやCPU・メモリなどを細かく設定することができ、さらに簡単に仮想マシンの台数を増減することができる。

設定について

リージョン・ゾーン、マシンタイプ・ブートディスク(OS)等の設定が必要となる。
一部抜粋して解説

  1. ブートディスク OSとブートディスクの設定を行う。
    OSは、OS(CentOS, Ubuntu...)を含めたパッケージ化された公開イメージを利用する。
    ブートディスクは、必ず永続ディスクである必要があって、それ以外のディスク(ストレージオプション)も追加することができる。
    追加ディスクには、2種類あり、「永続ディスク」「SSDディスク」がある。永続はその名の通り、データが削除されることはなく、SSDはその逆で削除される。が永続より高速にアクセスすることができる。
  2. マシンタイプ メモリのサイズやvCPUを設定する。
    具体的には 「マシンタイプ」「用途」「vCPU数」と構成されているものを選択する。
    汎用的なものだと n2-standard-4で、n2がマシンタイプ、standard が用途、4 がvCPU。
    カスタムすることもできる。

特徴

バックアップ

  1. スナップショット機能 任意のスケジュールで定期的に永続ディスクのデータをバックアップすることできる。バックアップは前回からの追加分を記録する仕組みとなっている。
    特定データを復元したり、新しいディスクに移行といったことが行える。ただし、メタデータ等の情報は保存されない。
    あと、頻度が高いとストレージを食うので注意。

  2. カスタムイメージ ユーザが作成したイメージ(=カスタムイメージ)を使い回すことができる。
    何が便利なのかいうと、特定のイメージをベースとして別環境を構築したい。といったことが行えるため、新環境の構築の工数を削減することができる。

  3. マシンイメージ 1,2は個々のディスクのバックアップだが、マシンイメージでは複数のディスク丸っとインスタンス全体をバックアップすることができる。そのため、メタデータ等の情報も保存することができる。

障害対策

ライブマイグレーション
ライブマイグレーションとは、仮想マシンを展開している物理的コンピュータ(サーバー)自体に何らかの障害が発生した際に、別の物理的サーバーに引っ越しできる仕組みのことで、標準で備わっている。
ただし、ライブマイグレーションが行えない障害もあり、その場合仮想マシンは再起動が走るため、それを考慮したアプリケーション開発を行う必要がある。

障害時の挙動

終わり

わかりやすく文章書くの下手すぎるから徐々に上手くなりたい
あと、はてなブログMarkdownなんか書きづらくない?

(GCP 入門)GoogleCloud概要、クラウドについて

参考文献はこちら。
まだ読んでいる途中ですが、理解を深めるためにまとめていきます。
ボリュームがあるので、分けて投稿していく

Google Cloud とは

Google検索・Gmailなどの様々なサービスを提供するために最適化してきたインフラストラクチャ(インフラ)を他の企業、誰でも利用できるようにしたクラウドサービス。
クラウドサービスとは、システム構築に必要なサーバや機能をインターネット経由で利用できるサービスのことで、システム構築に必要な機能は一通り揃っている!
クラウドサービスではない方法でシステム構築する場合、オンプレがあるが初期コストがかかる。ため、クラウドサービスは容易にシステム構築できる便利なやつ。

あとは、他のクラウドサービス同様システムの規模によって適切な構成を柔軟に設定することができる。

特徴

  1. 従量課金性
  2. コンソールが日本語対応であり、日本支部が存在するため、サービスが充実してる
  3. オープンクラウド(OSSクラウドサービス)への取り組みが積極的 とはいえ、上記は他のクラウドサービス(AWS,Azure)とかでも同様のことが言えそう。

じゃあ、GCPのメリットなんだ?
AWSとGCPを比較!人気クラウドサービスの特徴と選び方を解説これみる限り、データ分析、AIあたりが強みっぽい。

クラウドについて

クラウドとは

クラウドサービスとほぼ同じで理解で良さそう。
代表的なサービスは AWS, Microfot Azure

オンプレとの違い

オンプレ(システムに必要なハードウェアを自社で管理する)
オンプレは、自由にカスタムできるが、運用コストがかかるデメリットでもある。
クラウドは、導入・保守運用にオンプレほどコストがかからない

クラウドの利用形態

  1. パブリッククラウド インターネット経由で利用できるもの
  2. プライベートクラウド バプリッククラウドを自社で用意する

クラウドの種類

  1. ハイブリッドクラウド 既存のオンプレ x バブリッククラウドの組み合わせ構成。
  2. マルチクラウド 複数のパブリッククラウドの構成

クラウドサービスの種類

Iaas(イアース)

Compute Engineのような個々のインフラ単位のサービス

Paas(パース)

プラットフォームを提供するサービス。って書いてあるけど、システム構築に必要なサービス。の方がわかりやすいかな。 GAE(Google App Engine とか)

Saas(サース)

アプリケーションサービス。 Gmailとかサービスとして成り立っているもの。

なので、最小単位が Iaasで最大がSaasって感じ。

参考資料

cloud.google.com