Amazon Web Services ブログ

AWS Backint Agentの活用 – SAP HANAリダイレクトリストア

このブログは、Amazon Simple Storage Service (S3)バケットからSAP HANAデータベースのリダイレクトリストアを実行することで、運用上のオーバーヘッドを削減することを目的としています。本番環境のSAP HANAデータベースをAmazon S3バケットから、同一または異なるAWSアカウントの下、別のAmazon Elastic Compute Cloud (EC2)インスタンス上で稼働しているターゲットSAP HANAデータベースにリストアするプロセスを説明します。AWS Backint Agent for SAP HANAを使ってSAP HANAデータベースをS3バケットに直接バックアップすることができるので、リダイレクトリストアを使って、非本番のSAP HANAデータベースをリフレッシュすることができます。

概要

AWS上でSAP HANAデータベースをバックアップするには、いくつかの方法があります。一般的な方法の1つは、SAP HANAデータベースをステージングディスクにバックアップした後、S3バケットにコピーするという2ステップのアプローチです。


ローカルEBSボリュームを使ったSAP HANAデータベースのバックアップ

このバックアッププロセスでは、まずSAP HANAサーバーに接続されたステージングディスク(Amazon Elastic Block Store(EBS)ボリューム)にHANAデータベースのバックアップをコピーしてから、リストアプロセスを開始する必要があります。AWS Backint Agentを使えば、SAP HANAデータベースとログをAmazon S3バケットに直接バックアップし、S3バケットからリストア処理を開始することができます。これにより、バックアップのステージングディスクが不要になり、データベースのバックアップとリカバリーの実行にかかる時間が大幅に短縮されます。
このブログでは、AWS Backint Agent for SAP HANAを使用して、2つの異なるアカウント間でリダイレクトされたSAP HANAデータベースのリストアを実行することについて説明します(同一アカウント/同一リージョン/クロスリージョン間のリダイレクトされたリストアのプロセスは非常に似ています)。AWS Backint Agentを使ってSAP HANAデータベースをS3バケットにバックアップしていることをが前提です。

現在のSAP HANAデータベースのバックアップポリシー


SAP HANAデータベースのバックアップ

本ブログでは、現在以下のようなバックアッププロセスである事を想定しています。

  1. AWS Backint Agentインターフェースを使って、SAP HANAデータベースをS3バケットに直接バックアップ
  2. AWS Backint Agentを使ってSAP HANAのログをS3バケットに直接バックアップ
  3. S3バケットはCustomer Managed Key (CMK)を使って暗号化

目的

SAP HANAリダイレクトリストアを使用して、S3バケットに存在するソースデータベースのバックアップを使用して、ターゲットインスタンス上のSAP HANAデータベースをリストアします。SAP HANAデータベースのソースアカウントとターゲットアカウントは、同じアカウントIDまたは異なるアカウントIDで所有することができます。アカウントの所有者は、バケットポリシーを使用してS3バケットへのアクセスを許可する際に重要な役割を果たします。


リダイレクトリストア

リダイレクトリストアのメリット

  1. 本番環境のデータベースのバックアップを定期的に検証できる(監査人からの重要な質問)
  2. SAP HANAベースのSAPシステムのシステムコピーの実行時間を短縮し、ECCやBWなどの依存するシステムの同一ポイントインタイムリカバリーを実現
  3. バックアップ領域のボリュームを削減(ステージングエリアなし)
  4. 本番環境のコピーであるリストアされたデータベースに対して、定期的なSAP HANA一貫性チェックを実施

ソースアカウントとターゲットアカウントの前提条件

1.ソースアカウントからターゲットアカウントにソースCMKへのアクセスを許可します。KMS…カスタマーマネージドキー…YourKey…その他のAWSアカウント

2.ターゲットアカウントにログインして、ソースS3バケット内に保存されているバックアップを暗号解除するために、新しいポリシーを構築します。ポリシー:comaws_cross_cmk_access_policy(サンプル名)

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "AllowUseOfCMKInAccountSourceaccount",
            "Effect": "Allow",
            "Action": [
                "kms:Encrypt",
                "kms:Decrypt",
                "kms:ReEncrypt*",
                "kms:GenerateDataKey*",
                "kms:DescribeKey"
            ],
            "Resource": "arn:aws:kms:us-east-1: 012345678901:key/<cmk key>"
        }
    ]
}

3. 対象のアカウントで、新規または既存のEC2-Policyを作成し、以下のポリシーを追加します。
Role: arn:aws:iam:: 987654321098:role/comaws_ec2_instance_role_name
注:ロールの名前は任意のもので構いません。
このロールに以下のポリシーをアタッチします。

4. ターゲットアカウントで、ターゲットのSAP HANAデータベースが稼働しているAmazon EC2インスタンスにIAMロールをアタッチします。

5. ソースバケットポリシーを作成し、上記で作成したターゲットアカウントのEC2インスタンスロールにアクセス権を付与します。

ソースS3バケット:ソースバケットに以下のポリシーを付与(Amazon S3 > Your Source Bucket > Permissions > Bucket Policy)

{
    "Version": "2012-10-17",
    "Id": "Policy1606090894637",
    "Statement": [
        {
            "Sid": "Stmt1606090751178",
            "Effect": "Allow",
            "Principal": {
                "AWS": [
                     "arn:aws:iam::987654321098:role/comaws_ec2_instance_role"
                ]
            },
            "Action": [
                "s3:GetBucketAcl",
                "s3:GetBucketLocation",
                "s3:GetBucketPolicy",
                "s3:GetBucketPolicyStatus",
                "s3:ListBucket"
            ],
            "Resource": "arn:aws:s3::: SourceBucketName"
        },
        {
            "Sid": "Stmt1606090890057",
            "Effect": "Allow",
            "Principal": {
                "AWS": [
                     "arn:aws:iam::987654321098:role/comaws_ec2_instance_role"
                ]
            },
            "Action": "s3:GetObject",
            "Resource": " arn:aws:s3::: sourceBucketName/*"
        }
    ]
}

SAP HANAデータベースのリダイレクトリストア方法を使用して、012345678901が所有するS3バケットからアカウント987654321098にSAP HANAデータベースのバックアップをリストアする準備ができました。以下の状況では、以下の手順でデータベースのリストアを行うことができます。

  • 同じAWSアカウント、同じリージョンで稼働しているシステム。
  • VPC Endpoint for S3を使用して、異なるアカウント/同じリージョンで稼働しているシステム
  • NATゲートウェイを使用して、異なるアカウント/異なるリージョンで動作しているシステム。

**データ転送コストがかかる場合があります。

SAP HANAデータベースのリダイレクトリストアの実行

1. ターゲットのSAP HANAデータベースサーバーにログインし、現在のディレクトリを/hana/shared/aws-backint-agentに変更します。

cd /hana/shared/aws-backint-agent

2. 既存の aws-backint-agent-config.yaml ファイルのバックアップを作成します。

cp aws-backint-agent-config.yaml aws-backint-agent-config.yaml.backup

3. ソースのaws-backint-agent-config.yamlの内容を編集して置き換えます。サンプル aws-backint-agent-config.yaml

S3BucketAwsRegion: "us-east-1"
S3BucketName: "SourceBucketName"
S3BucketFolder: "backup/database/hana"
S3BucketOwnerAccountID: "012345678901"
LogFile: "/hana/shared/aws-backint-agent/aws-backint-agent.log"
S3SseKmsArn: "arn:aws:kms:us-east-1:012345678901:key/CMK"
S3SseEnabled: "true"

このステップは、AWS Backint AgentがソースS3バケットに保存されたバックアップを読み取るために必要です。
4. ターゲットシステムでは、AWSのコマンドラインインターフェイスを使用してソースS3バケットへのアクセスを確認します。

aws s3 ls s3://SourceBucketName/backup/database/hana/PH5/usr/sap/PH5/SYS/global/hdb/backint/DB_SUP/2020_11_22_05_00_00_full_databackup

サンプル出力

PRE 2020_11_22-05_00_00_full_databackup_0_1/
PRE 2020_11_22-05_00_00_full_databackup_2_1/
PRE 2020_11_22-05_00_00_full_databackup_2_10/
PRE 2020_11_22-05_00_00_full_databackup_2_12/
PRE 2020_11_22-05_00_00_full_databackup_2_2/
PRE 2020_11_22-05_00_00_full_databackup_2_3/
PRE 2020_11_22-05_00_00_full_databackup_2_4/

これで、ターゲットシステムでのデータベース復元作業を開始できます。

リダイレクト・リストアを使用してスケールアップしたSAP HANAデータベースをリストア

hdbsqlを使用してターゲットデータベースにログインし、テナントデータベースを作成します。

hdbsql -n localhost -i 05 -u system -d systemdb CREATE DATABASE SUD SYSTEM USER PASSWORD Manager1;

– 特定のソースバックアップを使用して回復するには

RECOVER DATA FOR SUD USING SOURCE 'SUP@PH2' USING BACKINT ('/usr/sap/PH2/SYS/global/hdb/backint/DB_SUP/2020_11_21_04_00_00_full') CLEAR LOG; 
0 rows affected (overall time 2443.266878 sec; server time 2443.263834 sec) 
*Source tenant DB Name=SUP, Source SAP HANA system name=PH2

– ポイントインタイムリカバリーを行うには

RECOVER DATABASE FOR SUD UNTIL TIMESTAMP '2020-11-29 20:00:00' CLEAR LOG USING SOURCE 'SUP@PH2' USING CATALOG BACKINT USING LOG PATH ('/usr/sap/PH2/SYS/global/hdb/backint/DB_SUP/') USING DATA PATH ('/usr/sap/PH2/SYS/global/hdb/backint/DB_SUP/');
0 rows affected (overall time 402.686351 sec; server time 402.683220 sec) 
**Time shown above is in UTC

リストア操作の進捗状況を監視

1. ターゲットサーバー上のターゲットDB_SIDディレクトリ下のbackup.logファイルに対してtailコマンドを実行することで、リストアの進捗状況を確認することができます。

tail -f /usr/sap/DH2/HDB10/sapdh2dbsm/trace/DB_SUD/backup.log

2.ターゲットVM上のaws-backint-agent.logファイルも確認できます。

tail -f /hana/shared/aws-backint-agent/aws-backint-agent.log

留意点

  1. ソースS3バケットではGetObject操作しか許可していないので、リストア中はターゲットデータベースのバックアップを無効にするか、ログのバックアップ先をローカルディスクに変更して、ログのバックアップ間隔を長くするなどの工夫をしてください。
  2. リダイレクトリストアは、同一リージョン内のS3 VPCエンドポイントで使用できます。
  3. リカバリーが完了したら、ターゲットシステムのaws-backint-agent-config.yamlファイルを忘れずに切り替えてください。これは、ターゲットシステムのバックアップが正しいS3バケットに送られるようにするために必要です。

結論

AWS Backint Agentを使用してSAP HANAのリダイレクトリストアを実行することで、現在のインフラに必要な変更を最小限に抑えてSAP HANAデータベースのリフレッシュ時間を短縮することができることをご案内しました。同じプロセスを使用して、ECCやBWなどの複数のSAPシステムのポイントインタイムリカバリを実行することができます。これにより、リフレッシュ後のECCとBWシステム間のデルタポインターをそのまま維持することができます。

AWS Backint Agent for SAP HANA databaseをご参照ください。SAP on AWSのエキスパートがAWS Backint Agentを使ってAWS上にあるSAP HANAデータベースをバックアップするデモもございますので是非ご覧ください。

翻訳はPartner SA 松本が担当しました。原文はこちらです。