CLOUD NAVIクラウドとは?からクラウドを支える技術や関連用語まで解説

FJcloud実践

FJcloud-VのオブジェクトストレージサービスとAmazon S3のマルチクラウドでバックアップ環境を構築する方法

2022年07月06日

この記事は、ニフクラブログで2022-07-06に公開された記事を移転したものです。

こんにちは、CRE部 技術支援チームです。

今回の記事は、ニフクラオブジェクトストレージサービスのお話です。 データのバックアップをクラウド上に保管できるクラウドストレージは大変便利なサービスです。

特に、Amazon Web Services(以後AWS)が提供しているAmazon S3は世界的にユーザーが多い代表的なクラウドストレージサービスの1つですが、ニフクラでもクラウドストレージサービスとしてニフクラオブジェクトストレージサービスを提供しています。

ニフクラオブジェクトストレージサービスは、インターフェースとしてAmazon S3互換のREST APIを提供しているので、Amazon S3と併用してマルチクラウドでバックアップ環境を構築すると、さらにリスクの分散が可能になります。

近年、自然災害の増加に伴いDR(Disaster Recovery)のニーズが高まっていますが、「バックアップデータを分散させておく」という観点でもマルチクラウドは有用な手段です。

マルチクラウドの実現は、専用回線契約等の手続きが必要であったり異なるクラウド間のサービス連携が複雑でハードルが高いという印象があるかもしれませんが、 ニフクラ拠点間VPNゲートウェイにAWSのAWS Site-to-Site VPNとAWS PrivateLinkを組み合わせて使うとブラウザー上のコントロールパネル操作で容易にマルチクラウド環境を構築することができます。

今回マルチクラウド環境を構築して、ニフクラオブジェクトストレージサービスにはニフクラルーターのNAT機能で、Amazon S3にはAWS PrivateLink for Amazon S3でアクセスしてバックアップファイルをアップロードするマルチクラウドバックアップの方法をご紹介します。

構成パターン

前提条件

本ブログ記事は、以下の前提知識がある方を想定しています。

  • AWSの基本的な操作、サービスに関する知識
  • ニフクラの基本的な操作と知識
  • ルーティングに関する知識

利用リソース

検証に利用したリソースは以下の通りです。

ニフクラリソース

※今回、構成の柔軟性も加味して拠点間VPNゲートウェイではIPSec VTIで接続をおこないました。本構成例に限定すると、IPSecでの接続でも実装可能です。

AWSリソース(表中のリンクは他社サイトへのリンクです。)

ニフクラ環境準備

ニフクラ環境リソース作成

ここでは赤枠の範囲のリソースを作成します。

・プライベートLAN作成

拠点間VPNゲートウェイ、ルーター、検証サーバー、RDBサーバーが接続されるプライベートLANを作成します。

作成方法は以下ヘルプサイトを参照ください。

クラウドヘルプ(プライベートLAN:基本情報)

プライベートLAN名 CIDR
VPNLAN01 172.16.1.0/24

・ファイアウォール作成

4つのファイアウォールを作成します。

作成方法は以下ヘルプサイトを参照ください。

クラウドヘルプ(ファイアウォールグループの新規作成)

ファイアウォール名 INルール
FWVPN01(拠点間VPNゲートウェイ用) *[VPN connection用]UDP500:192.168.0.0/16UDP4500:192.168.0.0/16ESP:192.168.0.0/16[AWS PrivateLink for Amazon S3通信用]*HTTPS443:172.16.1.0/24
FWROUTER01(AWS向け&NATルーター用) *[ニフクラオブジェクトストレージサービス接続SNAT用]UDP53:172.16.1.0/24[ニフクラオブジェクトストレージサービスSDK for Java操作用]TCP443:172.16.1.0/24[SSH外部接続DNAT用]*TCP22:xxx.xx.xx.xx.xx(外部の接続元IP)
FWMULTIBKTEST01(検証サーバー用) *[SSH外部接続DNAT用]*TCP22:xxx.xx.xx.xx.xx(外部の接続元IP)
fwdb01(RDBサーバー用) *[プライベートLAN内部用]*TCP3306:172.16.1.0/24

・拠点間VPNゲートウェイ作成

AWSとニフクラ環境の間を接続する拠点間VPNゲートウェイを作成します。

作成方法は以下ヘルプサイトを参照ください。

クラウドヘルプ(拠点間VPNゲートウェイ:作成)

項目名
拠点間VPNゲートウェイ名 VPNGW
ファイアウォール FWVPN01
プライベートネットワーク VPNLAN01
プライベートIPアドレス 172.16.1.2
グローバルIPアドレス 自動割り当て

・DHCPオプション作成

ルーターをVPNLAN01のデフォルトゲートウェイとして自動設定するためにDHCPオプションを作成します。

作成方法は以下ヘルプサイトを参照ください。

クラウドヘルプ(ルーター:DHCPオプション)

項目名
default-router 172.16.1.10
domain-name 空欄
domain-name-servers 空欄
ntp-servers 空欄
netbios-name-servers 空欄
netbios-node-type 選択しない
lease-time 空欄

・ルーター作成

VPNLAN01上の検証サーバーがインターネットと接続するためにルーターを作成します。 後述のNATテーブルを作成したルーターに紐づけます。

  • 「SNAT」機能で検証サーバーからニフクラオブジェクトストレージサービスに接続することができます。
  • 「DNAT」機能で外部端末からSSHで検証サーバーに接続することができます。
  • 作成方法は以下ヘルプサイトを参照ください。

    クラウドヘルプ(ルーター:作成)

    項目名
    ルーター名 multibktest
    ファイアウォール FWROUTER01
    プライベートネットワーク VPNLAN01
    プライベートIPアドレス 172.16.1.10
    DHCP 有効
    DHCPオプション 作成したDHCPオプション
    グローバルIPアドレス 自動割り当て

    ・NATテーブル作成

    プライベートLAN上の検証サーバーがルーター経由で外部のインターネットに接続可能にするために NATテーブルを作成します。 作成後、作成済みのルーターとNATテーブルと紐づけます。

    作成方法は以下ヘルプサイトを参照ください。

    クラウドヘルプ(NATテーブル:作成)

    デザインパターン(NATテーブル)

    ➀SNAT設定

    優先順位 アウトバウントネットワーク 送信元 送信元プロトコル 送信元ポート
    1 共通グローバル 172.16.1.1(ニフクラ検証サーバー) ALL

    ➁DNAT設定

    優先順位 インバウンドネットワーク 送信先 送信先プロトコル 送信先ポート
    1 共通グローバル 172.16.1.1(ニフクラ検証サーバー) TCP 22

    ・検証サーバー作成

    検証サーバーをプライベートLAN(VPNLAN01)上に作成します。

    作成方法は以下ヘルプサイトを参照ください。

    クラウドヘルプ(サーバーの作成)

    項目名
    OS CentOS 7.9
    サーバー名 MULTIBKTEST01
    ファイアウォール FWMULTIBKTEST01
    プライベートネットワーク VPNLAN01
    プライベートIPアドレス 172.16.1.1

    ・RDBサーバー作成

    RDBサーバーをプライベートLAN(VPNLAN01)上に作成します。

    作成方法は以下ヘルプサイトを参照ください。

    クラウドヘルプ(RDBサーバーの作成)

    項目名
    DB mysql5.7.15
    サーバー名 multibktest02
    ファイアウォール fwdb01
    プライベートネットワーク VPNLAN01
    プライベートIPアドレス 172.16.1.101
    作成DB名 MULTIBKTEST_DB

    検証サーバーとRDBサーバーの接続設定

    ここでは赤枠の範囲のリソースを作成します。

    検証サーバーとRDBサーバーを接続します。

    詳細、設定方法は以下のブログ記事を参照ください。

    検証サーバーとRDBサーバーの接続方法

    ニフクラオブジェクトストレージサービス接続設定およびバケット作成

    ニフクラオブジェクトストレージサービスに接続してdumpファイルを保管するためのバケットを作成します。

    ここでは赤枠の範囲のリソースを作成します。

    ※ニフクラオブジェクトストレージサービスについて使用できるリージョン/ゾーンの制限があります。ご注意ください。

    ・アカウント作成

    ニフクラオブジェクトストレージサービスを使用するためにアカウントを設定します。設定方法は以下ヘルプサイトを参照ください。

    オブジェクトストレージサービス:アカウント作成

    ・アクセスキー、シークレットキーの確認

    オブジェクトストレージサービスの操作にはアクセスキー、シークレットキーが必要なのでオブジェクトストレージサービス:アカウント詳細 で確認します。

    ・オブジェクトストレージサービスの操作

    オブジェクトストレージサービスにはブラウザ上で操作するオブジェクトストレージエクスプローラーはございません。

    オブジェクトストレージサービスの操作はオブジェクトストレージサービスAPI、またはニフクラオブジェクトストレージサービス SDK for Javaでおこないます。

    今回、ニフクラ ストレージ SDK for JavaとSDKに同梱されているCLIツールで操作をおこないます。

    ※バケットを他アカウントにも許可する等、より高度な操作を実施したい場合はAPIで操作を実施してください。詳細は以下ブログ記事を参照ください。

    ・CLIツールの設定

    上記で確認したアクセスキー、シークレットキーをCLIツール配下のプロパティファイルに設定します。

    詳細は以下ヘルプサイトを参照ください。

    # vi credentials.properties
    # Fill in your NIFCLOUD Storage Service Access Key ID and Secret Access Key
    # https://pfs.nifcloud.com/api/obj_storage/
    accessKey =xxxxxxxxxx
    secretKey =xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
    

    ・バケット作成

    CLIツールでmbコマンドを実行してdumpファイルを保管するバケットを作成します。

    項目名
    バケット名 multibk-db-dump
    #sh ncs_cli.sh mb ncss://multibk-db-dump
    [INFO ] NiftyCloudClient execute - Sending Request: PUT jp-east-1.storage.api.nifcloud.com //multibk-db-dump Headers: (Authorization: AWS4-HMAC-SHA256 Credential=96U1JOCBD9XGUOFHKU4H/20220510/jp-east-3/s3/aws4_request, SignedHeaders=host;x-amz-content-sha256;x-amz-date, Signature=bf5732b4dc96e4f02484b5c862ab8515e3e8814a54f275bb735751c777d56431, x-amz-Date: 20220510T070126Z, x-amz-Content-SHA256: e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855, )
    [INFO ] request parseResponse - Success: 200, Request ID: 1652166087960129
    Bucket 'ncss://multibk-db-dump' created
    

    バケットが作成できました。

    ※CLIツールで作成したバケット、バケット内オブジェクトはアクセスキー、シークレットキーに紐づくアカウントのみ全権アクセス設定になっています。他アカウントからはアクセスできません。

    ・バケット確認

    CLIツールでlsコマンドを実行して作成したバケットを確認します。

    # sh ncs_cli.sh ls
    [INFO ] NiftyCloudClient execute - Sending Request: GET jp-east-1.storage.api.nifcloud.com / Headers: (Authorization: AWS4-HMAC-SHA256 Credential=96U1JOCBD9XGUOFHKU4H/20220510/jp-east-3/s3/aws4_request, SignedHeaders=host;x-amz-content-sha256;x-amz-date, Signature=4eb220416caafa42ecaaea955174f84fc5b3cbe8a9a7339c7147d13d1158cab8, x-amz-Date: 20220510T071007Z, x-amz-Content-SHA256: e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855, )
    [INFO ] request parseResponse - Success: 200, Request ID: 1652166608434822
    2022-05-10 04:01  ncss://multibk-db-dump
    

    バケットが作成されたことを確認できました。

    オブジェクトストレージサービス接続設定とバケット作成は完了です。

    AWS環境準備

    AWS環境リソース作成

    ここでは赤枠の範囲のリソースを作成します。

    ・Amazon Virtual Private Cloud作成

    AWS内に分離されたネットワーク領域を作成するためにAmazon Virtual Private Cloudを作成します。

    作成方法は以下ヘルプサイトを参照ください。

    VPC を作成する(他社サイトへのリンクです)

    項目名
    名前タグ vpc01-vpc
    IPv4 CIDR ブロック 192.168.0.0/16

    ・サブネット作成

    VPC内にCIDRブロックで分割したネットワークを構築するためにサブネットを作成します。

    作成方法は以下ヘルプサイトを参照ください。

    VPC でサブネットを作成する(他社サイトへのリンクです)

    項目名
    VPC ID vpc01-vpc
    サブネット名 vpc01-subnet
    IPv4 CIDR ブロック 192.168.10.0/24

    ・セキュリティグループ作成

    ニフクラ側の検証サーバー(172.16.1.1)がVPCにアクセスができるようにセキュリティグループを作成してインバウンドルールを設定します。

    作成方法は以下ヘルプサイトを参照ください。

    セキュリティグループを作成する(他社サイトへのリンクです)

    項目名
    セキュリティグループ名 vpn01-sg
    インバウンドルール HTTPS:172.16.1.1/32

    ・カスタマーゲートウェイ作成

    ニフクラ側との接続情報を登録するカスタマーゲートウェイを作成します。

    作成方法は以下ヘルプサイトを参照ください。

    カスタマーゲートウェイを作成する(他社サイトへのリンクです)

    項目名
    名前 vpn01-cgw01
    ルーティング 静的
    IPアドレス ニフクラ拠点間VPNゲートウェイのグローバルIPアドレスを設定
    Certificate ARN 空欄
    Device 空欄

    ・仮想プライベートゲートウェイ作成

    AWS側VPNトンネルのルーターとなる仮想プライベートゲートウェイを作成します。

    作成方法は以下ヘルプサイトを参照ください。

    仮想プライベートゲートウェイの作成(他社サイトへのリンクです)

    項目名
    名前タグ vpn01-vgw
    ARN AmazonのデフォルトASN

    VPCにアタッチします。

    項目名
    VPC 作成したVPC

    ・ルートテーブル作成

    仮想プライベートゲートウェイ(172.16.1.0/24)の通信がおこなえるように設定します。 作成方法は以下ヘルプサイトを参照ください。

    ルートテーブルを操作する(他社サイトへのリンクです)

    項目名
    名前タグ vpn01-route-table
    VPC vpn01-vpc
    ルート送信先 172.16.1.0/24
    ターゲット vpn01-vgw

    ・AWS PrivateLink for Amazon S3 エンドポイント作成

    Amazon S3にAWS PrivateLink for Amazon S3経由で接続できるようにエンドポイントを作成します。

    作成方法は以下ヘルプサイトを参照ください。

    エンドポイント作成(他社サイトへのリンクです)

    項目名
    エンドポイント名 privatelink-s3
    サービスカテゴリ AWS のサービス
    サービス サービス名:com.amazonaws.ap-northeast-1.s3 タイプ:Interface
    VPC 作成したVPC
    サブネット ap-northeast-1c (apne1-az1)
    セキュリティグループ 作成したセキュリティグループ
    ポリシー フルアクセス
    タグ なし

    作成されたエンドポイントのDNS名とIPアドレスは、後ほどの手順で利用するため控えておいてください。

    ・サイト間のVPN接続作成

    トンネルの構成情報を持つサイト間のVPN接続を作成します。

    作成後「設定のダウンロード」から「Generic (汎用)」の設定ファイルをダウンロードして、ニフクラ側で使用します。

    作成方法は以下ヘルプサイトを参照ください。

    サイト間 VPN 接続の作成(他社サイトへのリンクです)

    項目名 備考
    名前タグ vpn01-vpnc01
    ターゲットゲートウェイ 仮想プライベートゲートウェイ
    仮想プライベートゲートウェイ vpn01-vgw
    カスタマーゲートウェイID vpn01-cgw01
    ルーティングオプション 静的
    静的IPプレフィックス(静的ルート) 192.168.0.0/16 , 172.16.1.0/24
    トンネル内線IPバージョン IPv4
    ローカルIPv4ネットワークCIDR 0.0.0.0/0 下記『※』参照
    リモートIPv4ネットワークCIDR 0.0.0.0/0 下記『※』参照
    トンネル1の内部IPv4 CIDR 空欄
    トンネル1の事前共有キー 任意のものを指定
    トンネル2の内部IPv4 CIDR 空欄
    トンネル2の事前共有キー 任意のものを指定
    トンネル1の詳細オプション デフォルトオプションを使用
    トンネル2の詳細オプション デフォルトオプションを使用

    ※ニフクラ拠点間VPNゲートウェイには、ニフクラ側ネットワークの任意のアドレス0.0.0.0/0からカスタマーゲートウェイ先ネットワークの任意のアドレス0.0.0.0/0への通信にIPSecを適用するポリシーが適用されます。また、IKEv1の仕様として両者が提示するセレクタ情報を合わせる必要があるため、AWS側のローカル/リモートIPv4ネットワークCIDRをニフクラ側に合わせる(0.0.0.0/0にする)必要があります。

    ・Amazon S3 オブジェクトストレージバケット作成

    dumpファイルを保管するためにAmazon S3オブジェクトストレージ上にバケットを作成します。

    作成方法は以下ヘルプサイトを参照ください。

    Amazon S3バケット作成(他社サイトへのリンクです)

    項目名
    バケット名 multibk_db_dump

    ニフクラ環境とAWS環境の接続

    クラウド間VPN接続構築

    ここでは赤枠の範囲のリソースを作成します。

    ・カスタマーゲートウェイ作成

    ニフクラ拠点間VPNゲートウェイにAWS側のネットワーク情報を持たせるためにカスタマーゲートウェイを作成します。

    作成方法は以下ヘルプサイトを参照ください。

    クラウドヘルプ(拠点間VPNゲートウェイ:カスタマーゲートウェイ作成)

    項目名 備考
    カスタマーゲートウェイ名 VPNCGW
    対向機器IPアドレス サイト間のVPN接続作成されたトンネル情報 下記『※』参照
    接続方式 IPSec VTI
    対向機器LAN側IPアドレス帯 192.168.0.0/16
    対向機器LAN側IPアドレス 空欄 指定がない場合は対向機器IPアドレスの値が指定される

    ※対向機器IPアドレスには下記図の赤枠部分の「外部IPアドレス(Tunnel1、2どちらでも可)」を設定する。

    ・VPNコネクション作成

    トンネルの構成情報を設定するVPNコネクションを作成します。 設定の際は「サイト間のVPN接続」でダウンロードした、Generic版設定ファイルを参照しながら設定します。

    作成方法は以下ヘルプサイトを参照ください。

    クラウドヘルプ(拠点間VPNゲートウェイ:VPNコネクション作成)

    Generic版設定値例

    項目名 備考
    カスタマーゲートウェイ VPNCGW
    接続方式 IPSec VTI
    IKEバージョン IKEv1 GenericファイルのIKE versionを参照
    暗号化アルゴリズム AES128 GenericファイルのEncryption Algorithmを参照
    認証アルゴリズム SHA1 GenericファイルのAuthentication Algorithmを参照
    事前共有キー xxxx GenericファイルのPre-Shared Keyを参照
    IKE lifetime 28800 Genericファイルのlifetimeを参照
    ESP lifetime 3600 Genericファイルのlifetimeを参照
    DH Group 2 (1024-bit MODP Group) GenericファイルのPerfect Forward Secrecyを参照

    作成後のニフクラネットワークは下記図の構成になります。

    Amazon S3 PrivateLink接続

    ここでは赤枠の範囲のリソースを作成します。

    ・AWS CLI のインストール

    検証サーバーにAWS CLIをインストールしてAWSコマンドラインを実行できるようにします。

    インストール方法は以下ヘルプサイトのLinuxの項を参照ください。

    AWS CLI のインストール(他社サイトへのリンクです)

    インストール完了後に以下のコマンドでAmazon S3を使用するための認証情報を設定してください。

    # aws configure
    

    設定内容を以下コマンドで確認します。

     # aws configure list
          Name                    Value             Type    Location
          ----                    -----             ----    --------
       profile                <not set>             None    None
    access_key     ****************66U5 shared-credentials-file
    secret_key     ****************rrTC shared-credentials-file
        region                <not set>             None    None
    

    今回の検証環境ではCA ルート証明書の設定は省略するため、AWSコマンドでHTTPS通信すると「SSL: CERTIFICATE_ VERIFY_FAILED」エラーが発生してしまいます。

    その対応としてviコマンドで設定ファイルを作成します。

     # vi ~/aws/.config
    

    以下の内容を設定します。

    [default]
    ca_bundle = /data/ca-certs/ca-bundle.pem
    

    ・hostsファイルの設定

    検証サーバーのhostsファイルにAWS PrivateLink for Amazon S3のエンドポイントの情報を設定します。

    viコマンドでhostsを編集します。

    # vi /etc/hosts
    

    エンドポイント作成時に発行されたDNS名、IPアドレスをファイルに追加します。

    #IPv4 アドレス DNS名
    192.168.10.xxx bucket.vpce-xxxxxxxxxxxxxxx.s3.ap-northeast-1.vpce.amazonaws.com
    

    ・検証サーバーへのルーティング設定

    検証サーバーではデフォルトゲートウェイをルーターに設定していて、ニフクラオブジェクトストレージサービスへ通信しています。

    AWS PrivateLink for Amazon S3に接続するためのルーティングが必要なので設定を追加します。ゲートウェイにはニフクラの拠点間VPNGWを指定します。

    ipコマンドでネットワークに接続しているインターフェースデバイスを確認します。

    # ip addr
    

    以下のような内容が表示されます。この場合は「ens160」がインターフェースデバイスになります。

    1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
        link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
        inet 127.0.0.1/8 scope host lo
           valid_lft forever preferred_lft forever
        inet6 ::1/128 scope host
           valid_lft forever preferred_lft forever
    2: ens160: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
        link/ether e8:17:fc:1f:1f:33 brd ff:ff:ff:ff:ff:ff
        inet 172.16.1.1/24 brd 172.16.1.255 scope global noprefixroute dynamic ens160
           valid_lft 83495sec preferred_lft 83495sec
        inet6 fe80::ea17:fcff:fe1f:1f33/64 scope link
           valid_lft forever preferred_lft forever
    

    viコマンドで/etc/sysconfig/network-scriptsディレクトリー配下に永続ルーティング用ファイルを作成します。

    # vi /etc/sysconfig/network-scripts/route-ens160
    

    以下の内容を設定します。

    192.168.10.0/24 via 172.16.1.2
    

    内容保存後、rebootコマンドで検証サーバーを再起動する。

    # reboot
    

    検証サーバー再起動後、ipコマンドでルーティング設定を確認する。

    # ip r
    

    以下のような内容が表示されていれば設定完了です。

    default via 172.16.1.10 dev ens160 proto dhcp metric 100
    172.16.1.0/24 dev ens160 proto kernel scope link src 172.16.1.1 metric 100
    192.168.10.0/24 via 172.16.1.2 dev ens160 proto static metric 100
    

    ・awsコマンドで疎通確認

    awsコマンドでAmazon S3のバケット一覧を取得します

    # aws s3 ls --region ap-northeast-1 --endpoint-url https://bucket.エンドポイント作成時に発行されたDNS名(vpce-xxxxxxxxxxxxxxx)  s3://バケット名
    

    バケット一覧が表示されます。AWS PrivateLink for Amazon S3接続は完了です。

    PRE multibk_db_dump/
    

    検証用シェル作成

    検証実施のために以下の実行シェルを作成する。

    • バックアップ用dumpファイルアップロードシェル(multibktest_backup.sh)
    • #!/bin/bash
      
      #RDBサーバーIPアドレス
      rdbhost=172.16.1.101
      
      #ローカルディレクトリdb_dump配下にシェルパラメタ$1で設定されたファイル名でdumpファイルを出力する。※extra.cnfにDBログインパスワードを設定する。
      mysqldump --defaults-extra-file=/usr/multibktest/extra.cnf --skip-column-statistics --host=$rdbhost --user=admin  MULTIBKTEST_DB --ssl-mode=DISABLED > /usr/multibktest/db_dump/$1.sql
      
      
      #ニフクラオブジェクトストレージサービスにファイルをアップロード
      for filename in `find /usr/multibktest/db_dump  -type f `; do
       #ニフクラ ストレージ SDK for Java配置場所に移動してコマンドラインツールを実行
       cd /root/NIFCLOUDStorage-SDK-CLI
       sh ncs_cli.sh put $filename ncss://multibk-db-dump/`echo $filename | gawk -F/ '{print $NF}'`
      done
      
      #Amazon S3にファイルをアップロード
      /usr/local/bin/aws s3 sync --region ap-northeast-1 --endpoint-url https://bucket.エンドポイント作成時に発行されたDNS名(vpce-xxxxxxxxxxxxxxx) /usr/multibktest/db_dump s3://cre-verify39-mulitibktest/multibk_db_dump
      
      • リストア用dumpファイルダウンロードシェル(multibktest_restore.sh)
      #!/bin/bash
      
      #RDBサーバーIPアドレス
      rdbhost=172.16.1.101
      
      #ニフクラ ストレージ SDK for Java配置場所に移動してコマンドラインツールを実行
      echo "NCloud Download"
      cd /root/NIFCLOUDStorage-SDK-CLI
      #ニフクラオブジェクトストレージサービスからローカルディレクトリdb_restore配下にシェルパラメタ$1で指定したファイル名でdumpファイルをダウンロードする。
      sh ncs_cli.sh get ncss://multibk-db-dump/$1.sql /usr/multibktest/db_restore/$1.sql
      
      #ニフクラオブジェクトストレージサービスからdumpファイルをダウンロードできなかった場合
      if [ $? -gt 0 ]; then
       #Amazon S3からローカルディレクトリdb_restore配下にシェルパラメタ$1で指定したファイル名でdumpファイルをダウンロードする。
       /usr/local/bin/aws s3 --region ap-northeast-1 --endpoint-url https://bucket.エンドポイント作成時に発行されたDNS名(vpce-xxxxxxxxxxxxxxx)  cp s3://バケット名/multibk_db_dump/$1.sql /usr/multibktest/db_restore/$1.sql
      fi
      
      #ニフクラオブジェクトストレージサービス、またはAmazon S3からdumpファイルをダウンロードできた場合にMULTIBKTEST_DBをリストする。※extra.cnfにDBログインパスワードを設定する。
      if [ $? = 0 ]; then
       mysql --defaults-extra-file=/usr/multibktest/extra.cnf --host=$rdbhost --user=admin  MULTIBKTEST_DB --ssl-mode=DISABLED < /usr/multibktest/db_restore/$1.sql
      fi
      

      DBログインパスワードを格納するため設定ファイルとしてextra.cnf を作成する。

      • DB設定ファイル(extra.cnf)
      [client]
      password=DBログインパスワード
      

      検証実施

      2世代分のバックアップデータをdumpファイルで出力します。出力したdumpファイルをニフクラオブジェクトストレージサービスとAmazon S3にアップロードします。

      検証の手順は以下の内容です。

      • mysqlに接続してmultibk_userテーブルの1世代目バックアップデータ(USER_A,USER_B,USER_C)をINSERT文で登録する。
      • mysqlに接続してmultibk_userテーブルの1世代目バックアップデータ(USER_A,USER_B,USER_C)をdumpファイルに出力する。dumpファイルをニフクラオブジェクトストレージサービスとAmazon S3にアップロードする。(multibktest_backup.sh実行)
      • mysqlに接続してmultibk_userテーブルの2世代目バックアップデータ(USER_A,USER_B,USER_C,USER_D,USER_E,USER_F)をINSERT文で登録する。
      • mysqlに接続してmultibk_userテーブルの2世代目バックアップデータ(USER_A,USER_B,USER_C,USER_D,USER_E,USER_F)をdumpファイルに出力する。dumpファイルをニフクラオブジェクトストレージサービスとAmazon S3にアップロードする。(multibktest_backup.sh実行)
      • multibk_userテーブルの内容を全件削除する。
      • ニフクラオブジェクトストレージサービスから1世代目バックアップデータ(USER_A,USER_B,USER_C)dumpファイルをダウンロードする。リストア実施。(multibktest_restore.sh実行)
      • 1世代目バックアップデータ(USER_A,USER_B,USER_C)の内容がリストアされたことをSELECT文で確認する。
      • multibk_userテーブルの内容をALL_DELETEする。
      • ニフクラオブジェクトストレージサービスのSNATを遮断する。
      • Amazon S3から2世代目バックアップデータ(USER_A,USER_B,USER_C,USER_D,USER_E,USER_F)dumpファイルをダウンロードする。リストア実施。(multibktest_restore.sh実行)
      • 2世代目バックアップデータ(USER_A,USER_B,USER_C,USER_D,USER_E,USER_F)の内容がリストアされたことをSELECT文で確認する。

      1回目ダンプファイルアップロード

      mysqlコマンドでRDBに接続してテーブルに1回目のデータを登録します。

      # mysql --host=172.16.1.101 --user=admin -p  MULTIBKTEST_DB --ssl-mode=DISABLED
      Enter password:
      --省略--
      mysql> insert into multibk_user values('001','USER_A');
      Query OK, 1 row affected (0.01 sec)
      
      mysql> insert into multibk_user values('002','USER_B');
      Query OK, 1 row affected (0.00 sec)
      
      mysql> insert into multibk_user values('003','USER_C');
      Query OK, 1 row affected (0.00 sec)
      mysql> select * from multibk_user;
      +---------+-----------+
      | user_id | user_name |
      +---------+-----------+
      | 001     | USER_A    |
      | 002     | USER_B    |
      | 003     | USER_C    |
      +---------+-----------+
      3 rows in set (0.00 sec)
      

      パラメータに「bkdump01」と入力してバックアップシェル実行します。

      # sh multibktest_backup.sh bkdump01
      [INFO ] NiftyCloudClient execute - Sending Request: PUT jp-east-1.storage.api.nifcloud.com //multibk-db-dump Headers: (Authorization: AWS4-HMAC-SHA256 Credential=96U1JOCBD9XGUOFHKU4H/20220510/jp-east-3/s3/aws4_request, SignedHeaders=content-length;content-md5;content-type;host;x-amz-content-sha256;x-amz-date, Signature=aaae8dde4dd19c5948ebc91cfc8518fd99fcc43c9400a0dab803a247403e8840, x-amz-Date: 20220510T073626Z, x-amz-Content-SHA256: 685bea6e7a2b3cd35ed30ac94d499c3247b5efc23bbd8f28b29ce2e81cf8fce2, Content-Type: application/octet-stream, Content-MD5: 92L/XKCfrb7BuUUJ1PZ2ig==, )
      [INFO ] request parseResponse - Success: 200, Request ID: 1652168188029851
      /usr/multibktest/db_dump/bkdump01.sql -> ncss://multibk-db-dump/bkdump01.sql
      upload: ../../usr/multibktest/db_dump/bkdump01.sql to s3://cre-verify39-mulitibktest/multibk_db_dump/bkdump01.sql
      

      ニフクラオブジェクトストレージサービスとAmazon S3にダンプファイルがアップロードされました。

      • ニフクラオブジェクトストレージサービス

      ※ニフクラオブジェクトストレージサービスはブラウザーで確認できないのでコマンドラインで確認します。

      # sh ncs_cli.sh ls ncss://multibk-db-dump
      [INFO ] NiftyCloudClient execute - Sending Request: GET jp-east-1.storage.api.nifcloud.com //multibk-db-dump Headers: (Authorization: AWS4-HMAC-SHA256 Credential=96U1JOCBD9XGUOFHKU4H/20220510/jp-east-3/s3/aws4_request, SignedHeaders=host;x-amz-content-sha256;x-amz-date, Signature=7f4920b8e35380c2b4104a8e8e162515cdcedcb31d5f0d9eccd48fba92772934, x-amz-Date: 20220510T080715Z, x-amz-Content-SHA256: e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855, )
      [INFO ] request parseResponse - Success: 200, Request ID: 1652170037152055
      2022-05-10 04:36             1956  ncss://multibk-db-dump/bkdump01.sql
      
      • Amazon S3

      2回目ダンプファイルアップロード

      mysqlコマンドでRDBに接続してテーブルに2回目のデータを登録します。

      # mysql --host=172.16.1.101 --user=admin -p  MULTIBKTEST_DB --ssl-mode=DISABLED
      Enter password:
      --省略--
      mysql> insert into multibk_user values('004','USER_D');
      Query OK, 1 row affected (0.01 sec)
      
      mysql> insert into multibk_user values('005','USER_E');
      Query OK, 1 row affected (0.01 sec)
      
      mysql> insert into multibk_user values('006','USER_F');
      Query OK, 1 row affected (0.00 sec)
      
      mysql> select * from multibk_user;
      +---------+-----------+
      | user_id | user_name |
      +---------+-----------+
      | 001     | USER_A    |
      | 002     | USER_B    |
      | 003     | USER_C    |
      | 004     | USER_D    |
      | 005     | USER_E    |
      | 006     | USER_F    |
      +---------+-----------+
      6 rows in set (0.00 sec)
      

      パラメータに「bkdump02」と入力してバックアップシェル実行します。

      # sh multibktest_backup.sh bkdump02
      [INFO ] NiftyCloudClient execute - Sending Request: PUT jp-east-1.storage.api.nifcloud.com //multibk-db-dump Headers: (Authorization: AWS4-HMAC-SHA256 Credential=96U1JOCBD9XGUOFHKU4H/20220510/jp-east-3/s3/aws4_request, SignedHeaders=content-length;content-md5;content-type;host;x-amz-content-sha256;x-amz-date, Signature=e7649d5b860c2340b9e63a51cd64e8ee2ecefb1d7a6b54dbc8306996c5c4b3c3, x-amz-Date: 20220510T081322Z, x-amz-Content-SHA256: 685bea6e7a2b3cd35ed30ac94d499c3247b5efc23bbd8f28b29ce2e81cf8fce2, Content-Type: application/octet-stream, Content-MD5: 92L/XKCfrb7BuUUJ1PZ2ig==, )
      [INFO ] request parseResponse - Success: 200, Request ID: 1652170403477947
      /usr/multibktest/db_dump/bkdump01.sql -> ncss://multibk-db-dump/bkdump01.sql
      [INFO ] NiftyCloudClient execute - Sending Request: PUT jp-east-1.storage.api.nifcloud.com //multibk-db-dump Headers: (Authorization: AWS4-HMAC-SHA256 Credential=96U1JOCBD9XGUOFHKU4H/20220510/jp-east-3/s3/aws4_request, SignedHeaders=content-length;content-md5;content-type;host;x-amz-content-sha256;x-amz-date, Signature=6a88198d1a2e06ac05dfb3eac999160e275be340d633d5931ca9cd7db6d83e36, x-amz-Date: 20220510T081323Z, x-amz-Content-SHA256: 986c3cb71f831866cbb897312c9680bd059ac55210d81128e137dc0e3600efd8, Content-Type: application/octet-stream, Content-MD5: KSrRhhsEaifhem9mP40gdA==, )
      [INFO ] request parseResponse - Success: 200, Request ID: 1652170405026398
      /usr/multibktest/db_dump/bkdump02.sql -> ncss://multibk-db-dump/bkdump02.sql
      upload: ../../usr/multibktest/db_dump/bkdump02.sql to s3://cre-verify39-mulitibktest/multibk_db_dump/bkdump02.sql
      

      ニフクラオブジェクトストレージサービスとAmazon S3にダンプファイルがアップロードされました。

      • ニフクラオブジェクトストレージサービス

      ※ニフクラオブジェクトストレージサービスはブラウザで確認できないのでコマンドラインで確認します。

      # sh ncs_cli.sh ls ncss://multibk-db-dump
      [INFO ] NiftyCloudClient execute - Sending Request: GET jp-east-1.storage.api.nifcloud.com //multibk-db-dump Headers: (Authorization: AWS4-HMAC-SHA256 Credential=96U1JOCBD9XGUOFHKU4H/20220510/jp-east-3/s3/aws4_request, SignedHeaders=host;x-amz-content-sha256;x-amz-date, Signature=2054c7b44d4bb419a5fdb32e0640757c4a622f427ccf8568bdf36f00d295da11, x-amz-Date: 20220510T081514Z, x-amz-Content-SHA256: e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855, )
      [INFO ] request parseResponse - Success: 200, Request ID: 1652170515649806
      2022-05-10 05:13             1956  ncss://multibk-db-dump/bkdump01.sql
      2022-05-10 05:13             2007  ncss://multibk-db-dump/bkdump02.sql
      
      • Amazon S3

      1回目ダンプファイルでリストア

      mysqlコマンドでRDBに接続してテーブルデータを削除します。

      # mysql --host=172.16.1.101 --user=admin -p  MULTIBKTEST_DB --ssl-mode=DISABLED
      Enter password:
      --省略--
      mysql> delete from multibk_user;
      Query OK, 6 rows affected (0.01 sec)
      
      mysql> select * from multibk_user;
      Empty set (0.00 sec)
      

      パラメータに「bkdump01」と入力してリストアシェル実行します。

      1回目でアップロードしたダンプファイルをニフクラオブジェクトストレージサービスからダウンロードしてデータを復旧します。

      ニフクラオブジェクトストレージサービスとの接続を確認します。

      # nslookup jp-east-1.storage.api.nifcloud.com
      Server:         127.0.0.1
      Address:        127.0.0.1#53
      
      Non-authoritative answer:
      Name:   jp-east-1.storage.api.nifcloud.com
      Address: 220.209.74.75
      

      シェルを実行します。

      # sh multibktest_restore.sh bkdump01
      NCloud Download
      [INFO ] NiftyCloudClient execute - Sending Request: GET jp-east-1.storage.api.nifcloud.com //multibk-db-dump Headers: (Authorization: AWS4-HMAC-SHA256 Credential=96U1JOCBD9XGUOFHKU4H/20220510/jp-east-3/s3/aws4_request, SignedHeaders=host;x-amz-content-sha256;x-amz-date, Signature=f9a10933c695fcfa272a97a6cf27de72f76ff890f3833b8e02c12db8f1e82a77, x-amz-Date: 20220510T082313Z, x-amz-Content-SHA256: e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855, )
      [INFO ] request parseResponse - Success: 200, Request ID: 1652170994818301
      ncss://multibk-db-dump/bkdump01.sql -> /usr/multibktest/db_restore/bkdump01.sql
      

      mysqlコマンドでRDBに接続してデータが復旧されたことを確認します。

      # mysql --host=172.16.1.101 --user=admin -p  MULTIBKTEST_DB --ssl-mode=DISABLED
      Enter password:
      --省略--
      mysql> select * from multibk_user;
      +---------+-----------+
      | user_id | user_name |
      +---------+-----------+
      | 001     | USER_A    |
      | 002     | USER_B    |
      | 003     | USER_C    |
      +---------+-----------+
      3 rows in set (0.00 sec)
      

      データが復旧されたことを確認できました。

      2回目ダンプファイルでリストア

      mysqlコマンドでRDBに接続してテーブルデータを削除します。

      # mysql --host=172.16.1.101 --user=admin -p  MULTIBKTEST_DB --ssl-mode=DISABLED
      Enter password:
      --省略--
      mysql> delete from multibk_user;
      Query OK, 3 rows affected (0.01 sec)
      
      mysql> select * from multibk_user;
      Empty set (0.00 sec)
      

      パラメータに「bkdump02」と入力してリストアシェル実行します。

      ニフクラオブジェクトストレージサービスとの接続を遮断して

      2回目でアップロードしたダンプファイルをAmazon S3からダウンロードしてデータを復旧します。

      ニフクラオブジェクトストレージサービスと接続が遮断されていることを確認します。

      # nslookup jp-east-1.storage.api.nifcloud.com
      ;; connection timed out; no servers could be reached
      

      シェルを実行します。

      # sh multibktest_restore.sh bkdump02
      NCloud Download
      [INFO ] NiftyCloudClient execute - Sending Request: GET jp-east-1.storage.api.nifcloud.com //multibk-db-dump Headers: (Authorization: AWS4-HMAC-SHA256 Credential=96U1JOCBD9XGUOFHKU4H/20220510/jp-east-3/s3/aws4_request, SignedHeaders=host;x-amz-content-sha256;x-amz-date, Signature=3435354e4f83de39ab808fcce61c9dbc7bed7a464b65e9b58bd13f63f951e631, x-amz-Date: 20220510T082915Z, x-amz-Content-SHA256: e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855, )
      [ERROR] NiftyCloudClient execute - Failed to execute HTTP request: jp-east-1.storage.api.nifcloud.com: Name or service not known
      Caught an NiftyCloudClientException, which means the client encountered a serious internal problem while trying to communicate with NIFCLOUD Storage, such as not being able to access the network.
      Error Message: Failed to execute HTTP request: jp-east-1.storage.api.nifcloud.com: Name or service not known
      download: s3://cre-verify39-mulitibktest/multibk_db_dump/bkdump02.sql to ../../usr/multibktest/db_restore/bkdump02.sql
      

      ニフクラオブジェクトストレージサービスの接続に失敗して、Amazon S3からダウンロードに切り替わっています。

      [ERROR] NiftyCloudClient execute - Failed to execute HTTP request: jp-east-1.storage.api.nifcloud.com: Name or service not known
      Caught an NiftyCloudClientException, which means the client encountered a serious internal problem while trying to communicate with NIFCLOUD Storage, such as not being able to access the network.
      Error Message: Failed to execute HTTP request: jp-east-1.storage.api.nifcloud.com: Name or service not known
      download: s3://cre-verify39-mulitibktest/multibk_db_dump/bkdump02.sql to ../../usr/multibktest/db_restore/bkdump02.sql
      

      mysqlコマンドでRDBに接続してデータが復旧されたことを確認します。

      # mysql --host=172.16.1.101 --user=admin -p  MULTIBKTEST_DB --ssl-mode=DISABLED
      Enter password:
      --省略--
      mysql> select * from multibk_user;
      +---------+-----------+
      | user_id | user_name |
      +---------+-----------+
      | 001     | USER_A    |
      | 002     | USER_B    |
      | 003     | USER_C    |
      | 004     | USER_D    |
      | 005     | USER_E    |
      | 006     | USER_F    |
      +---------+-----------+
      6 rows in set (0.00 sec)
      

      データが復旧されたことを確認できました。

      まとめ

      今回ニフクラオブジェクトストレージサービスとAmazon S3を利用したマルチクラウドバックアップの検証を紹介しました。

      容易にマルチクラウドの環境が構築できるということがご理解いただけたかと思います。

      本記事がシステム構成検討の際の助けになれば幸いです。

      ここまで読んでいただきありがとうございました!

      注意事項

      • 本記事に記載されている会社名、製品名等の固有名詞は各社の商号、登録商標または商標です。
      • 本記事の他社サイトへのリンクにつきまして、リンク切れの際はご容赦ください。
      • 本記事で記載した各サービス/ニフクラの機能等は、2022年6月時点の情報です。ご利用の際は、各サービス/ニフクラの機能の最新情報をご確認ください。
      • 本記事の他社サービス利用に関する記載については、ニフクラのサポート対象外となります。ご自身の責任でご利用ください。
      • AWSのVPN機器は、拠点間VPNゲートウェイの「接続確認済み機器またはOS」にありません。そのため本構成はご利用者様の責任でご利用ください。
PageTop