3
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

オルトプラスAdvent Calendar 2023

Day 9

オルトプラスに入社してやったこと!!その2(Amazon Auroraのスナップショット共有)

Last updated at Posted at 2023-12-08

本記事は オルトプラス 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

そもそもスナップショットの共有って簡単にできる?

  • 下記のイメージの様に異なるAWSアカウント間で簡単にスナップショットのやり取りができるのか?
    [スナップショット共有イメージ]01_スナップショットは共有できる?.png

  • 結論ですが、AWSアカウントが異なる場合はスナップショットの共有ができません。
    何故ならばスナップショットを取得したAWSアカウントのみ使用できるようにKMSで管理されているためです。
    [スナップショット共有イメージ]02_KMSがないとできない.png

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クラスターを復元している全体イメージです。

これら全体の流れを各パート毎に細分化して説明します。

[スナップショット共有イメージ]03_スナップショット共有(全体像).png

①スナップショット取得完了

  • AWSアカウントID「987654321000」のスナップショット取得が完了している状態
  • KMSにはエイリアス「aws/rds」のAWSマネージドキーを使用
    [スナップショット共有イメージ]04_スナップショット共有(開始).png

②共有用スナップショット準備

  • dev-altplus-clusterへ共有するためのスナップショットを準備
  • KMSにはエイリアス「dev-altplus-key」のAWSマネージドキーを使用
    [スナップショット共有イメージ]05_スナップショット共有(準備).png

③スナップショット共有

  • dev-altplus-clusterへのスナップショット共有を実施
  • AWSアカウントID「123456789000」を追加する
  • AWSアカウントID追加時点でdev-altplus-clusterへスナップショットは共有されている
    [スナップショット共有イメージ]06_スナップショット共有(共有).png

④共有されたスナップショットを確認

  • 共有対象のスナップショットがdev-altplus-clusterへ共有されていること
    [スナップショット共有イメージ]06_スナップショット共有(共有確認).png

⑤共有用スナップショットをコピー

  • dev-altplus-clusterで実際にスナップショットが共有されていることを確認
  • 共有済みのスナップショットをdev-altplus-clusterで自由に使用するためにスナップショットをコピーしておく
  • KMSにはエイリアス「aws/rds」のAWSマネージドキーを使用
    [スナップショット共有イメージ]07_スナップショット共有(共有コピー).png

⑥コピーしたスナップショットでクラスターを作成

  • コピーしたスナップショットはdev-altplus-clusterで自由に使用可能な状態
  • このスナップショットを復元してAuroraクラスターを作成する
    [スナップショット共有イメージ]08_スナップショット共有(復元).png

スナップショット共有を使用した実際の手順

スナップショット共有の全体像」の内容をAWSマネジメントコンソールをベースとしたイメージでより具体的な手順として説明していきます。

尚、本手順ではより認知負荷を下げる工夫或いは、閲覧する方がより見やすいように「環境構築に必要な要素」を色によって識別する等の編集を行なっています。

共有するスナップショットを確認するまでの手順

  1. 共有元のAWSアカウントID「987654321000」でログインして、AWSマネジメントコンソールの「RDS」のリンクをクリック
    [01_987654321000]スナップショット確認.png

  2. 「スナップショット」のリンクをクリック
    [02_987654321000]スナップショット確認.png

  3. スナップショットの「システム」のタブを選択する。スナップショット名
    「rds:prod-altplus-cluster-2023-12-21-00-00」が共有対象
    [03_987654321000]スナップショット確認.png
    ①スナップショット取得完了はここまでの手順になる

共有するスナップショットを準備するまでの手順

  1. スナップショットを共有するためにKMSを付け替える必要がある。
    そのためにスナップショットをコピーする
    [04_987654321000]スナップショット確認.png

  2. 共有するスナップショットのKMSの設定を確認。
    KMSのキーId「1234abcd-12ab-34cd-56ef-1234567890ab」はエイリアスが「aws/rds」でAWSアカウントID「987654321000」のみ使用可能
    [05_987654321000]スナップショット確認.png

  3. AWSアカウントID「987654321000」でログインして、AWSマネジメントコンソールの「Key Management Service(KMS)」のリンクをクリック(便宜上ログインの手順を入れているがログイン済みの場合は不要。
    また、KMSの作成はこのタイミングでなくてもよい)
    [06_987654321000]KMS.png

  4. AWSアカウントID「123456789000」へスナップショット共有するためのKMSをエイリアス「dev-altplus-key」で作成
    [07_987654321000]KMS.png

  5. 共有するためのスナップショット「from-prod-altplus-cluster-to-dev」とKMS「dev-altplus-key」を指定
    [08_987654321000]スナップショット共有用コピー.png

  6. スナップショットに追加するKMSの設定を確認。KMSのキーId「0987dcba-09fe-87dc-65ba-ab0987654321」はエイリアスが「dev-altplus-key」で、スナップショット共有先のAWSアカウントID「123456789000」で使用可能となっている
    [09_987654321000]スナップショット共有用コピー.png

  7. スナップショットをコピーする。スナップショットの画面のステータスが「copying(0%)」から「利用可能(完了)」になったらコピー完了
    [10_987654321000]スナップショット共有用コピー.png
    ②共有用スナップショット準備はここまでの手順になる

スナップショット共有のためのAWSアカウントIDを追加するまでの手順

  1. スナップショット「from-prod-altplus-cluster-to-dev」を共有するためにアクション「スナップショットの共有」を選択
    [11_987654321000]スナップショット共有アクセス許可.png

  2. AWSアカウントID「123456789000」を追加して「保存」ボタンを押下した時点でAWSアカウントID「123456789000」へスナップショットが共有される
    [12_987654321000]スナップショット共有アクセス許可.png
    ③スナップショット共有はここまでの手順になる

スナップショットが共有されていることを確認するまでの手順

  1. 共有先のAWSアカウントID「123456789000」でログインして、AWSマネジメントコンソールの「RDS」のリンクをクリック
    [13_123456789000]スナップショット共有確認.png

  2. 「スナップショット」のリンクをクリック
    [14_123456789000]スナップショット共有確認.png

  3. 「自分と共有」タブを選択してスナップショット「from-prod-altplus-cluster-to-dev」が共有されていることを確認。
    尚、スナップショット名は共有スナップショットとしてARNで表示されるため「arn:aws:rds:ap-northeast-1:987654321000:cluster-snapshot:from-prod-altplus-cluster-to-dev」が表示される
    [15_123456789000]スナップショット共有確認.png
    ④共有されたスナップショットを確認はここまでの手順になる

共有されたスナップショットをコピーするまでの手順

  1. 共有されたスナップショットをコピーするためのアクションを選択
    [16_123456789000]スナップショット共有自由使用コピー.png

  2. 共有されたスナップショットに新しいスナップショット名「dev-altplus-cluster-2023-12-21-00-00」とKMSのAWSマネージドキー「aws/rds」を設定(2ページで1セット)
    [17_123456789000]スナップショット共有自由使用コピー.png
    [18_123456789000]スナップショット共有自由使用コピー.png

  3. スナップショットをコピーする。スナップショットの画面のステータスが「copying(0%)」から「利用可能(完了)」になったらコピー完了
    [19_123456789000]スナップショット共有自由使用コピー.png
    ⑤共有用スナップショットをコピーはここまでの手順になる

コピーしたスナップショットを元にAuroraクラスターを復元するまでの手順

  1. スナップショットの画面からAuroraクラスターを復元する対象のスナップショット「dev-altplus-cluster-2023-12-21-00-00」のリンクをクリックしてアクション「スナップショットを復元」を選択
    [20_123456789000]スナップショット復元.png

  2. DBインスタンス名は「dev-altplus」、KMSは「aws/rds」を選択して復元する。
    尚、AuroraクラスターとWriterインスタンスが作成され、全てのステータスが「利用可能」になったら復元完了になる(3ページで1セット)

スナップショットを復元画面では画面の指示に従って作成する情報を設定するため簡単にAuroraクラスターを作成することができます。

例えば、オルトプラスではMySQLを使用しているため「Amazon Aurora MySQL 互換エディション」を選択しています。

以降の設定は使用する環境に大きく左右されますが、インスタンスの設定では「キャパシティータイプ(Provisioned・Serverless)」、「データベースのバージョン」や「インスタンスタイプ」等があります。
接続では「VPC」・「サブネットグループ」・「セキュリティーグループ」そして「アベイラビリティゾーン(AZ)」等を選択して復元します。
[21_123456789000]スナップショット復元.png
[22_123456789000]スナップショット復元.png
[23_123456789000]スナップショット復元.png
⑥コピーしたスナップショットでクラスターを作成はここまでの手順になる

スナップショット共有解除の手順

  1. 共有元のAWSアカウントID「987654321000」でログインして、AWSマネジメントコンソールの「RDS」のリンクをクリック
    [24_987654321000]スナップショット共有解除.png

  2. 「スナップショット」のリンクをクリック
    [25_987654321000]スナップショット共有解除.png

  3. スナップショット「from-prod-altplus-cluster-to-dev」の共有を解除するためにアクション「スナップショットの共有」を選択
    [26_987654321000]スナップショット共有解除.png

  4. 共有を解除するAWSアカウントID「123456789000」の削除にチェックを入れて「保存」ボタンを押下した時点で
    AWSアカウントID「123456789000」のスナップショット共有が解除される
    [27_987654321000]スナップショット共有解除.png

スナップショット共有解除(確認)の手順

  1. 共有先のAWSアカウントID「123456789000」でログインして、AWSマネジメントコンソールの「RDS」のリンクをクリック
    [28_123456789000]スナップショット共有解除確認.png

  2. 「スナップショット」のリンクをクリック
    [29_123456789000]スナップショット共有解除確認.png

  3. 「自分と共有」タブを選択してスナップショット「from-prod-altplus-cluster-to-dev」の共有が解除されていることを確認。
    [30_123456789000]スナップショット共有解除確認.png

まとめ

Auroraのスナップショット共有についてどの様な手順で異なるAWSアカウント間での共有をするのか?をイメージを作成しつつ手順を説明しました!!

もしスナップショット共有でわからなくなったらこちらの記事を使用しながら理解を深めていただけたら幸いです!!

3
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?