本記事は オルトプラス Advent Calendar 2023 の12/09の記事です。
はじめに
どうも!!オルトプラスの浦谷(urachooooooo)です
所属は技術部SREでテックスペシャリストとして横断的にデータベースを見ています!!
肩書きはエンジニアマネージャーですが生粋のDBAです!!
本記事ではオルトプラスに入社してやってみた!!(パート2)としてAmazon Auroraについて書いていきます。
それでは9日目のアドベントカレンダー開始しますー!!
概要
アジェンダとしては「Auroraのスナップショット共有」についてです。
本番環境のAuroraのスナップショットを検証環境で使用するケースについてどの様な工程を経て他のアカウントへ共有しているのか?を解説していきます。
詳細
Auroraの検証を行うときに本番環境のスナップショットを使用するのが最も効率的かと思います。
自分も本番環境のデータを使用して検証環境でAuroraクラスターの環境を構築する機会がありました。
本記事では本番環境から検証環境へのスナップショットを共有して環境構築するまでの手順を記載していきますー
オルトプラスで使用されているデータベースについて
オルトプラスではデータベースは主にAuroraを使用しています。
Auroraで使用しているデータベースエンジンはMySQLで、プロジェクトによって異なりますが、Provisioned或いはAurora Serverless v2を使用しています。
環境構築に必要な要素
まずは事前情報として今回の環境構築に必要な要素(登場人物)の洗い出しを行なっておきます。
下記の要素を使用して今回の説明を行なっていきますー
- 本番環境
要素 値 Auroraクラスター prod-altplus-cluster AWSアカウントID 987654321000 スナップショット ベース rds:prod-altplus-cluster-2023-12-21-00-00 共有 from-prod-altplus-cluster-to-dev ARN arn:aws:rds:ap-northeast-1:987654321000:cluster-snapshot:from-prod-altplus-cluster-to-dev KMS AWSマネージドキー Alias aws/rds KeyArn arn:aws:kms:ap-northeast-1:987654321000:key/1234abcd-12ab-34cd-56ef-1234567890ab KeyId 1234abcd-12ab-34cd-56ef-1234567890ab カスタマーマネージドキー Alias dev-altplus-key KeyArn arn:aws:kms:ap-northeast-1:987654321000:key/0987dcba-09fe-87dc-65ba-ab0987654321 KeyId 0987dcba-09fe-87dc-65ba-ab0987654321 - 検証環境
要素 値 Auroraクラスター dev-altplus-cluster AWSアカウントID 123456789000 スナップショット コピー dev-altplus-cluster-2023-12-21-00-00 KMS AWSマネージドキー Alias aws/rds KeyArn arn:aws:kms:ap-northeast-1:123456789000:key/1a2b3c4d-5e6f-1a2b-3c4d-5e6f1a2b3c4d KeyId 1a2b3c4d-5e6f-1a2b-3c4d-5e6f1a2b3c4d
そもそもスナップショットの共有って簡単にできる?
KMSについて
KMSは「AWS Key Management Service」の略で、データの暗号化やデジタル署名に使用するキーを作成して管理するフルマネージドサービスです。
KMSには下記のタイプがあり管理方法が異なります。
例えば今回の環境構築の例として「dev-altplus-key」がありますが、このKMSキーは自分で「キーポリシー」を作成して管理が必要です。
KMSタイプ | エイリアス | 作成・管理 |
AWSマネージドキー | aws/rds | AWSが作成して管理 |
カスタマーマネージドキー | dev-altplus-key | ユーザーが作成して管理 |
例としてカスタマーマネージドキー「dev-altplus-key」のキーポリシーを記載します。
AWSアカウント「987654321000」から「123456789000」へスナップショット共有を行うためのサンプルのキーポリシーです。
- キーポリシー
dev-altplus-key
{ "Version": "2012-10-17", "Id": "key-consolepolicy-3", "Statement": [ { "Sid": "Enable IAM User Permissions", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::987654321000:root" }, "Action": "kms:*", "Resource": "*" }, { "Sid": "Allow use of the key", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::123456789000:root" }, "Action": [ "kms:CreateGrant", "kms:Encrypt", "kms:Decrypt", "kms:ReEncrypt*", "kms:GenerateDataKey*", "kms:DescribeKey" ], "Resource": "*" }, { "Sid": "Allow attachment of persistent resources", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::123456789000:root" }, "Action": [ "kms:CreateGrant", "kms:ListGrants", "kms:RevokeGrant" ], "Resource": "*", "Condition": { "Bool": { "kms:GrantIsForAWSResource": "true" } } } ] }
スナップショット共有を使用した環境構築イメージ
スナップショット共有の全体像
AWSアカウントID「987654321000」で取得したスナップショットをAWSアカウントID「123456789000」に共有し、そのスナップショットを元にAuroraクラスターを復元している全体イメージです。
これら全体の流れを各パート毎に細分化して説明します。
①スナップショット取得完了
②共有用スナップショット準備
③スナップショット共有
- dev-altplus-clusterへのスナップショット共有を実施
- AWSアカウントID「123456789000」を追加する
- AWSアカウントID追加時点でdev-altplus-clusterへスナップショットは共有されている
④共有されたスナップショットを確認
⑤共有用スナップショットをコピー
- dev-altplus-clusterで実際にスナップショットが共有されていることを確認
- 共有済みのスナップショットをdev-altplus-clusterで自由に使用するためにスナップショットをコピーしておく
- KMSにはエイリアス「aws/rds」のAWSマネージドキーを使用
⑥コピーしたスナップショットでクラスターを作成
スナップショット共有を使用した実際の手順
「スナップショット共有の全体像」の内容をAWSマネジメントコンソールをベースとしたイメージでより具体的な手順として説明していきます。
尚、本手順ではより認知負荷を下げる工夫或いは、閲覧する方がより見やすいように「環境構築に必要な要素」を色によって識別する等の編集を行なっています。
共有するスナップショットを確認するまでの手順
-
共有元のAWSアカウントID「987654321000」でログインして、AWSマネジメントコンソールの「RDS」のリンクをクリック
-
スナップショットの「システム」のタブを選択する。スナップショット名
「rds:prod-altplus-cluster-2023-12-21-00-00」が共有対象
①スナップショット取得完了はここまでの手順になる
共有するスナップショットを準備するまでの手順
-
共有するスナップショットのKMSの設定を確認。
KMSのキーId「1234abcd-12ab-34cd-56ef-1234567890ab」はエイリアスが「aws/rds」でAWSアカウントID「987654321000」のみ使用可能
-
AWSアカウントID「987654321000」でログインして、AWSマネジメントコンソールの「Key Management Service(KMS)」のリンクをクリック(便宜上ログインの手順を入れているがログイン済みの場合は不要。
また、KMSの作成はこのタイミングでなくてもよい)
-
AWSアカウントID「123456789000」へスナップショット共有するためのKMSをエイリアス「dev-altplus-key」で作成
-
共有するためのスナップショット「from-prod-altplus-cluster-to-dev」とKMS「dev-altplus-key」を指定
-
スナップショットに追加するKMSの設定を確認。KMSのキーId「0987dcba-09fe-87dc-65ba-ab0987654321」はエイリアスが「dev-altplus-key」で、スナップショット共有先のAWSアカウントID「123456789000」で使用可能となっている
-
スナップショットをコピーする。スナップショットの画面のステータスが「copying(0%)」から「利用可能(完了)」になったらコピー完了
②共有用スナップショット準備はここまでの手順になる
スナップショット共有のためのAWSアカウントIDを追加するまでの手順
-
スナップショット「from-prod-altplus-cluster-to-dev」を共有するためにアクション「スナップショットの共有」を選択
-
AWSアカウントID「123456789000」を追加して「保存」ボタンを押下した時点でAWSアカウントID「123456789000」へスナップショットが共有される
③スナップショット共有はここまでの手順になる
スナップショットが共有されていることを確認するまでの手順
-
共有先のAWSアカウントID「123456789000」でログインして、AWSマネジメントコンソールの「RDS」のリンクをクリック
-
「自分と共有」タブを選択してスナップショット「from-prod-altplus-cluster-to-dev」が共有されていることを確認。
尚、スナップショット名は共有スナップショットとしてARNで表示されるため「arn:aws:rds:ap-northeast-1:987654321000:cluster-snapshot:from-prod-altplus-cluster-to-dev」が表示される
④共有されたスナップショットを確認はここまでの手順になる
共有されたスナップショットをコピーするまでの手順
-
共有されたスナップショットに新しいスナップショット名「dev-altplus-cluster-2023-12-21-00-00」とKMSのAWSマネージドキー「aws/rds」を設定(2ページで1セット)
-
スナップショットをコピーする。スナップショットの画面のステータスが「copying(0%)」から「利用可能(完了)」になったらコピー完了
⑤共有用スナップショットをコピーはここまでの手順になる
コピーしたスナップショットを元にAuroraクラスターを復元するまでの手順
-
スナップショットの画面からAuroraクラスターを復元する対象のスナップショット「dev-altplus-cluster-2023-12-21-00-00」のリンクをクリックしてアクション「スナップショットを復元」を選択
-
DBインスタンス名は「dev-altplus」、KMSは「aws/rds」を選択して復元する。
尚、AuroraクラスターとWriterインスタンスが作成され、全てのステータスが「利用可能」になったら復元完了になる(3ページで1セット)
スナップショットを復元画面では画面の指示に従って作成する情報を設定するため簡単にAuroraクラスターを作成することができます。
例えば、オルトプラスではMySQLを使用しているため「Amazon Aurora MySQL 互換エディション」を選択しています。
以降の設定は使用する環境に大きく左右されますが、インスタンスの設定では「キャパシティータイプ(Provisioned・Serverless)」、「データベースのバージョン」や「インスタンスタイプ」等があります。
接続では「VPC」・「サブネットグループ」・「セキュリティーグループ」そして「アベイラビリティゾーン(AZ)」等を選択して復元します。
⑥コピーしたスナップショットでクラスターを作成はここまでの手順になる
スナップショット共有解除の手順
-
共有元のAWSアカウントID「987654321000」でログインして、AWSマネジメントコンソールの「RDS」のリンクをクリック
-
スナップショット「from-prod-altplus-cluster-to-dev」の共有を解除するためにアクション「スナップショットの共有」を選択
-
共有を解除するAWSアカウントID「123456789000」の削除にチェックを入れて「保存」ボタンを押下した時点で
AWSアカウントID「123456789000」のスナップショット共有が解除される
スナップショット共有解除(確認)の手順
-
共有先のAWSアカウントID「123456789000」でログインして、AWSマネジメントコンソールの「RDS」のリンクをクリック
-
「自分と共有」タブを選択してスナップショット「from-prod-altplus-cluster-to-dev」の共有が解除されていることを確認。
まとめ
Auroraのスナップショット共有についてどの様な手順で異なるAWSアカウント間での共有をするのか?をイメージを作成しつつ手順を説明しました!!
もしスナップショット共有でわからなくなったらこちらの記事を使用しながら理解を深めていただけたら幸いです!!