---
# System prepended metadata

title: GCPスタックのpnewsへの移行手順計画
tags: [apollo]

---

---
tags: apollo
---

# GCPスタックのpnewsへの移行手順計画

## 現状のP-NEWSのシステムで使っているサービスリソース、データソースがそれぞれどこにあるのかMECEに確認する

### 最終的に満たされている状態
- P-NEWSのシステムを構成図なしで説明できるようになる

### サービスリソース

#### GCP関連
- Kubernetes: デプロイやスケーリングを自動化したり、コンテナ化されたアプリケーションを管理するための、オープンソースのシステム。

- Google Cloud Load Balancing (L4): 複数用意したサーバにリクエストを均等に振り分ける

- Cloud DNS: 信頼性が非常に高く、レイテンシーの低いGoogle のDNSサーバーを使用して、自分のドメインの名前解決を行うことが可能です。

- BigQuery: Googleのインフラストラクチャの処理能力を活用してSQLクエリを超高速で実行できる

- AppEngine: GCPが提供するPaaSです。Java、Node.js、Python、Go など好きな言語で作成したアプリケーションをGCPが管理するインフラに簡単にデプロイすることができます。(Paas: Platform as a Service,　アプリケーションを実行するためのプラットフォームをインターネットを介して提供するサービス。 )(BigQueryを飛ばすための管理画面みたいなものが提供されている？)

#### Native
- React Native
- Expo
- Amplitude: Expoでアナリティクス系のサービスを利用しようとするときにメジャーなやつっぽい(ユーザの情報やイベントを送信する)

#### Web(https://stg.app.pnews.jp/)
- Next.js
- firebase

#### 認証
- firebase store

#### Backends(メイン: http://prod.api.pnews.jp, Admin: https://stg.api-admin.pnews.jp)
- MySQL
- Prisma
- express/node.js
- GraphQL
- Apollo Client
- firebase store

#### Admin(http://admin.pnews.jp/)
- react
- firebase

#### 記事
- netlify 

### データソース
#### Cloud SQL
- クラウド上でフルマネージドのSQLのデータベースを提供するサービス。

### 昨日わからなかったポイント、より詳細を理解したポイントを追加した上で、再度説明 => 差分がわかるように(昨日は~が理解できてなかったが, ~ということがわかったので、ここは**なっている)

#### 個人的に
- Herokuなどを用いずにRailsサーバを立てる手順: Railsをポート80番で起動する、Nginxでクライアントからのリクエストが80番に行くようにしておく、ドメインをとっておく。
- Expoって何？: ビルドや実行環境が提供され、リリース後のアプリでもリアルタイムにアプリの更新ができる。
- Graph QLって何？: Web APIのための規格。OSI参照モデルで捉えるとアプリケーション層？HTTPが通信プロトコルになる。HTTPはトランスポート層。
- Prismaって何？: MySQLに接続するGraph QL APIサーバを構築する。
- ランタイムって何？: アプリケーションの開発・実行の両方の機能を備えたソフトウェアから、開発の機能を省き、実行の機能のみを取り出したプログラムのことである。
- グローバルIPアドレスって何？: インターネット上にある全てのPCを区別する上で必要な住所。インターネット上でIPアドレスが重複してはいけない。IPアドレスの管理団体が管理している。
- プライベートIPアドレス: 組織内のネットワークでのみ使用できるIPアドレス。
- コンテナって何？: Namespaceやcgroupsといった要素技術を組み合わせて構成される隔離環境であり、そこで実行されるプロセスのこと。
- インスタンスって何？: 物理的な一台のコンピュータ上で仮想的なコンピュータをソフトウェアとして起動したもの。
- Kubernetesって何？: デプロイやスケーリングを自動化したり、コンテナ化されたアプリケーションを管理したりするための、オープンソースのシステム、一つのインスタンスの中に複数のコンテナがいる状態を上手く管理するために必要そう？
- BigQueryって何？: ビッグデータ解析サービス。高速。
- Google Cloud LBって何？: クライアントからのリクエストを各インスタンスに振り分け、アクセス集中や、サーバの故障を防ぐ。

#### GCPの移行に関して
- Express/node.js, Prisma, Cloud SQLはどのようにデータをやり取りしている？具体的にどこにインスタンスが立っている？

### どのようなインスタンスが立っている？

#### VMインスタンス
- gke-pnews-dev-cluster-default-pool-d73fb6ad-48pt	
- gke-pnews-dev-cluster-default-pool-d73fb6ad-fwsf	
- gke-pnews-dev-cluster-default-pool-d73fb6ad-j8cp
- gke-pnews-prod-cluster-pool-1-58b77d7a-kp2x
- gke-pnews-prod-cluster-pool-1-58b77d7a-lv9w
- gke-pnews-prod-cluster-pool-1-58b77d7a-sh26

#### MySQLインスタンス
- production-p-news
- staging-p-news

### API等の外部IPアドレス
- pnews-api-pointer
- pnews-prod-api-pointer
- pnews-prisma-pointer
- pnews-prod-prisma-pointer
- pnews-web-prod

### 次の実際の「移行タスク」に向けて、手順の頭出し。ざっくりと大枠で構わないので、どうやって切り替え作業をやっていけばいいのかの流れを考え、説明してください。
- 1: 旧GCP Projectから新GCP ProjectにCloud SQLのインスタンス（データ）を移行
- 2: 旧GCP Projectから新GCP ProjectにExpress/node.js APIとPrisma APIのインスタンスを移行。
- 3: 新GCP ProjectのインスタンスのIP アドレスに新ドメインを割り当てる。
- 4: VPCネットワークの移行？
- 5: 新Prisma APIの向き先を新Cloud SQLに変更（ランタイムを更新）
- 6: 新express/node.js APIの向き先を新Prisma APIに変更（ランタイムを更新）
- 7: express/node.jsにリクエストを飛ばしているクライアントの向き先を新GCP Projectのexpress/node.js APIに変更。（ランタイムを更新）

### わからないこと
- ネットワークの移行？ => VPCネットワーク: VMインスタンスなどのその他のリソースへアクセスできる。
- 障害発生時のロールバック方法