Datastream用のVPN切り替え手順
Issue
https://fastdoctor.atlassian.net/browse/SRE-1665
- AWSで1つのVPCに対して1つのVGWしか作成できないことが判明
- 元々online-karte用にdatastream環境が作成されており、datastreamを追加したい場合に拡張性に欠けるのと名前のずれが発生するため、GCPプロジェクトを共通化させ、Datastreamを移行させる
- すでにonline-karte用のVGWを利用してonline-opsのDatastreamを稼働させているため、online-opsもVPNを切り替える。
要件
- online-karteの7am-0amで業務利用があるため、左記の時間を避ける
- 上記の時間までにはバックフィルが完了し最新データを同期できている状態とする
切り替えイメージ
フェーズ1(事前準備完了時点)
- datastreamとVPNをfd-datastream-prdにも作成し、既存のプロジェクトと並行でBigqueryに転送する
フェーズ2(切り替えメンテ完了時点)
- 既存のVPNとフェーズ1で作成したVPNを削除し、fd-datastream-prdで新たにVPNを再作成する
フェーズ3(片付け完了時点)
- online-karte-datastream-prdのリソースとプロジェクトを削除する
注意事項
- Datastreamのプロジェクト変更の際はFeatureチームで管理している以下についても変更が必要であるため、事前に依頼をしておくこと
- DBTの参照先プロジェクトの変更準備とメンテナンス時のデプロイ
- authorized viewの権限追加
手順
事前準備(Datastream並行稼働)
- AWSでonline-karteのDBのSG追加
- online-karteのSecret manager, プロキシ作成
- online-karteのSecret managerにDatastreamユーザーパスワードを登録
- GCPのonline-karte-datastreamプロジェクトにログイン
- Secrets Managerのdb-user-passwordの値を表示し取得
- GCPのfd-datastreamプロジェクトにログインしSecrets Managerにパスワードを格納する
- GCPのコンソール上でSecrets Managerに以下を格納する
- 設定ルール
新しいバージョンで追加する- 過去のバージョンは破棄せず無効にすること
- 設定対象と値
- 設定対象
db-user-password
- 設定値
- online-karte-datastreamプロジェクトで取得したDatastreamユーザーパスワード
- 設定ルール
- Datastream用レプリケーションスロット追加(手動設定)
- (ストリーム開始直前に実施すること)
ssmで踏み台(fd-platform)にログイン
bashaws ssm start-session --target ${ec2のインスタンスID指定} --profile ${AWS_PROFILE} --region ap-northeast-1DBに接続
bashpsql -h ${ライターエンドポイント} -p 5432 -U ${ユーザー名} -d online_karteレプリケーションスロット追加
bashSELECT PG_CREATE_LOGICAL_REPLICATION_SLOT('datastream_replication_slots', 'pgoutput'); SELECT slot_name, plugin, slot_type, active, confirmed_flush_lsn FROM pg_replication_slots;
Datasteam, Bigqueryのデータセットの追加
GCPコンソールでDatastream手動実行(事前にFeatureチームと実行タイミング調整しておく)
- Datastreamのタスクを実行
- バックフィルが完了することを確認
監視設定
事前準備(切り替えPR作成)(全てメンテ当日にapplyする)
- 以下のPRのレビューを終えておく
- online-karte専用VPN削除
- AWS VPN切り替え
- [GCP]fd-datastreamのVPN再作成のため一時的にコメントアウト
- 切り戻し用のonline-karte-datastream VPN削除
事前準備(Featureチームで実施)
メンテ作業(1時間を想定)
- 作業開始
- 加藤さんに連絡
- datastreamタスクの一時停止
- online-karte-datastreamのタスクを一時停止
- fd-datastreamのonline-karteタスクを一時停止
- fd-datastreamのonline-opsタスクを一時停止
- 上記3つのステータスが
一時停止になっていることを確認
- GCP fd-datastreamの VPN削除
- AWS fd-datastream用の VPN削除
- AWS online-karte-service用のVPN削除
- GCP fd-datastreamのVPN GW作成
- AWS commonディレクトリでVPN作成
- AWSの事前共有キーの登録
- AWSコンソールにログインする
VPN接続に遷移しfd-datastream-vpn-connectionのVPNを選択設定をダウンロードをクリックし、ベンダー・プラットフォームをGenericに設定- ikev2を指定
ダウンロードをクリック- ダウンロードしたファイルを開く
- 以下2つの事前共有キーを確認する
- IPsec Tunnel #1
- #1: Internet Key Exchange Configuration
- Pre-shared Key
- #1: Internet Key Exchange Configuration
- IPsec Tunnel #2
- #2: Internet Key Exchange Configuration
- Pre-shared Key
- #2: Internet Key Exchange Configuration
- IPsec Tunnel #1
- GCPのコンソール上でSecrets Managerに以下を格納する
- 設定ルール
新しいバージョンで追加する- 過去のバージョンは破棄せず無効にすること(terraformで新規作成の差分が出るため)
- 設定対象と値
- AWSのトンネル1の事前共有キー(
aws-vpn0-tunnel1)- 前の手順で確認した
IPsec Tunnel #1のPre-shared Keyを格納
- 前の手順で確認した
- AWSのトンネル2の事前共有キー(
aws-vpn0-tunnel2)- 前の手順で確認した
IPsec Tunnel #2のPre-shared Keyを格納
- 前の手順で確認した
- AWSのトンネル1の事前共有キー(
- 設定ルール
- GCP fd-datastreamディレクトリでVPNトンネル作成
- developブランチでapply
- AWS,GCPのVPNトンネルのステータスが正常であること確認
- GCP fd-datastreamのdetastreamを開始
- ステータスが
実行中になることを確認 - ストリームの詳細画面から
オブジェクトタブに遷移 - バックフィルのステータスを確認し全てが
完了していることを確認
- ステータスが
- DBTの切り替え
- 加藤さんに連絡しDBTの参照先プロジェクトを切り替えてもらう
- 作業完了
メンテ時の切り戻し作業
- AWS commonディレクトリの VPN削除
- GCP online-karte-datastreamディレクトリでVPNを削除
- GCP fd-datastreamディレクトリの VPN削除
- GCP online-karte-datastreamディレクトリでVPN GW作成
- AWS online-karteのVPN作成
- AWSの事前共有キーの登録
- AWSコンソールにログインする
VPN接続に遷移しonline-karte-vpn-connectionのVPNを選択設定をダウンロードをクリックし、ベンダー・プラットフォームをGenericに設定- ikev2を指定
ダウンロードをクリック- ダウンロードしたファイルを開く
- 以下2つの事前共有キーを確認する
- IPsec Tunnel #1
- #1: Internet Key Exchange Configuration
- Pre-shared Key
- #1: Internet Key Exchange Configuration
- IPsec Tunnel #2
- #2: Internet Key Exchange Configuration
- Pre-shared Key
- #2: Internet Key Exchange Configuration
- IPsec Tunnel #1
- GCP online-karte-datastreamのコンソール上でSecrets Managerに以下を格納する
- 設定ルール
新しいバージョンで追加する- 過去のバージョンは破棄せず無効にすること(terraformで新規作成の差分が出るため)
- 設定対象と値
- AWSのトンネル1の事前共有キー(
aws-vpn0-tunnel1)- 前の手順で確認した
IPsec Tunnel #1のPre-shared Keyを格納
- 前の手順で確認した
- AWSのトンネル2の事前共有キー(
aws-vpn0-tunnel2)- 前の手順で確認した
IPsec Tunnel #2のPre-shared Keyを格納
- 前の手順で確認した
- AWSのトンネル1の事前共有キー(
- 設定ルール
- GCP online-karte-datastreamでVPNトンネル作成
- developブランチでapply
- AWS,GCPのVPNトンネルのステータスが正常であること確認
- GCP online-karte-datastreamのdetastreamを開始
- ステータスが
実行中になることを確認 - ストリームの詳細画面から
オブジェクトタブに遷移 - バックフィルのステータスを確認し全てが
完了していることを確認
- ステータスが
- GCP fd-datastreamディレクトリの VPN GW作成
- AWS commonディレクトリで VGWなしのVPN作成
以下のモジュールの参照先をsite-to-site-vpn-cgwに変更(以下の定義参照)
定義
hclmodule "gcp-datastream-vpn" { source = "../../template_modules/options/site-to-site-vpn-cgw" project_name = var.project_datastream vpc_id = module.platform-tokyo.vpc_id vpc_cidr = var.vpc_cidr_tokyo destination_ip_address = var.gcp_private_subnet_ip_range customer_gateway_ip_address = [data.terraform_remote_state.gcp_fd_datastream.outputs.gcp_vpn_gw_ip[0]] bgp_asn = var.gcp_side_asn vpn_gateway_id = data.terraform_remote_state.online_karte.outputs.aws_vgw_id providers = { aws = aws.tokyo } }applyする
- AWSの事前共有キーの登録
- AWSコンソールにログインする
VPN接続fd-datastream-vpn-connectionのVPNを選択設定をダウンロードをクリックし、ベンダー・プラットフォームをGenericに設定- ikev2を指定
ダウンロードをクリック- ダウンロードしたファイルを開く
- 以下2つの事前共有キーを確認する
- IPsec Tunnel #1
- #1: Internet Key Exchange Configuration
- Pre-shared Key
- #1: Internet Key Exchange Configuration
- IPsec Tunnel #2
- #2: Internet Key Exchange Configuration
- Pre-shared Key
- #2: Internet Key Exchange Configuration
- IPsec Tunnel #1
- GCP fd-datastreamのコンソール上でSecrets Managerに以下を格納する
- 設定ルール
新しいバージョンで追加する- 過去のバージョンは破棄せず無効にすること(terraformで新規作成の差分が出るため)
- 設定対象と値
- AWSのトンネル1の事前共有キー(
aws-vpn0-tunnel1)- 前の手順で確認した
IPsec Tunnel #1のPre-shared Keyを格納
- 前の手順で確認した
- AWSのトンネル2の事前共有キー(
aws-vpn0-tunnel2)- 前の手順で確認した
IPsec Tunnel #2のPre-shared Keyを格納
- 前の手順で確認した
- AWSのトンネル1の事前共有キー(
- 設定ルール
- GCP fd-datastreamでVPNトンネル作成
- developブランチでapply
- AWS,GCPのVPNトンネルのステータスが正常であること確認
- GCP fd-datastreamのdetastreamを開始
- ステータスが
実行中になることを確認 - ストリームの詳細画面から
オブジェクトタブに遷移 - バックフィルのステータスを確認し全てが
完了していることを確認
- ステータスが
片付け
チケット: https://fastdoctor.atlassian.net/browse/SRE-1691
- GCP online-karte-datastreamディレクトリで作業
- リソースを全てdestroy
- プロジェクトを削除
- AWS fastdoctor-template/commonディレクトリで作業
- backend.tfのgcp_online_karteのremote_state削除
- AWS fastdoctor-template/online-karte-service/sg-associationsディレクトリで作業
- db-sg-from-datastreamモジュールを削除