この記事は、ニフクラブログで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環境準備
- ニフクラ環境とAWS環境の接続
- 検証用シェル作成
- 検証実施
- 1回目ダンプファイルアップロード
- 2回目ダンプファイルアップロード
- 1回目ダンプファイルでリストア
- 2回目ダンプファイルでリストア
- まとめ
- 注意事項
構成パターン
前提条件
本ブログ記事は、以下の前提知識がある方を想定しています。
AWSの基本的な操作、サービスに関する知識
ニフクラの基本的な操作と知識
ルーティングに関する知識
利用リソース
検証に利用したリソースは以下の通りです。
ニフクラリソース
リソース | 数量 |
---|---|
プライベートLAN | 1 |
ファイアウォール | 4 |
ルーター | 1 |
DHCPオプション | 1 |
NATテーブル | 1 |
拠点間VPNゲートウェイ | 1 |
検証サーバー | 1 |
RDBサーバー | 1 |
ニフクラオブジェクトストレージサービス | 1 |
拠点間VPNゲートウェイ:VPNコネクション | 1 |
拠点間VPNゲートウェイ:カスタマーゲートウェイ | 1 |
※今回、構成の柔軟性も加味して拠点間VPNゲートウェイではIPSec VTIで接続をおこないました。本構成例に限定すると、IPSecでの接続でも実装可能です。
AWSリソース(表中のリンクは他社サイトへのリンクです。)
リソース | 数量 |
---|---|
Amazon Virtual Private Cloud | 1 |
サブネット | 1 |
セキュリティグループ | 1 |
カスタマーゲートウェイ | 1 |
仮想プライベートゲートウェイ | 1 |
ルートテーブル | 1 |
AWS PrivateLink for Amazon S3 | 1 |
AWS Site-to-Site VPN | 1 |
Amazon S3 | 1 |
ニフクラ環境準備
ニフクラ環境リソース作成
ここでは赤枠の範囲のリソースを作成します。
・プライベートLAN作成
拠点間VPNゲートウェイ、ルーター、検証サーバー、RDBサーバーが接続されるプライベートLANを作成します。
作成方法は以下ヘルプサイトを参照ください。
クラウドヘルプ(プライベートLAN:基本情報)
プライベートLAN名 | CIDR |
---|---|
VPNLAN01 | 172.16.1.0/24 |
・ファイアウォール作成
4つのファイアウォールを作成します。
作成方法は以下ヘルプサイトを参照ください。
クラウドヘルプ(ファイアウォールグループの新規作成)
ファイアウォール名 | INルール |
---|---|
FWVPN01(拠点間VPNゲートウェイ用) | [VPN connection用] UDP500:192.168.0.0/16 UDP4500:192.168.0.0/16 ESP: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テーブルを作成したルーターに紐づけます。
作成方法は以下ヘルプサイトを参照ください。
クラウドヘルプ(ルーター:作成)
項目名 | 値 |
---|---|
ルーター名 | multibktest |
ファイアウォール | FWROUTER01 |
プライベートネットワーク | VPNLAN01 |
プライベートIPアドレス | 172.16.1.10 |
DHCP | 有効 |
DHCPオプション | 作成したDHCPオプション |
グローバルIPアドレス | 自動割り当て |
・NATテーブル作成
プライベートLAN上の検証サーバーがルーター経由で外部のインターネットに接続可能にするために
NATテーブルを作成します。
作成後、作成済みのルーターとNATテーブルと紐づけます。
作成方法は以下ヘルプサイトを参照ください。
クラウドヘルプ(NATテーブル:作成)
デザインパターン(NATテーブル)
優先順位 | アウトバウントネットワーク | 送信元 | 送信元プロトコル | 送信元ポート |
---|---|---|---|---|
1 | 共通グローバル | 172.16.1.1(ニフクラ検証サーバー) | ALL |
優先順位 | インバウンドネットワーク | 送信先 | 送信先プロトコル | 送信先ポート |
---|---|---|---|---|
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で操作を実施してください。詳細は以下ブログ記事を参照ください。
”ニフクラオブジェクトストレージサービス用APIをPythonとBashで実行してみた”
・CLIツールの設定
上記で確認したアクセスキー、シークレットキーをCLIツール配下のプロパティファイルに設定します。
詳細は以下ヘルプサイトを参照ください。
ニフクラ ストレージ SDK for Java設定方法
# 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」にありません。そのため本構成はご利用者様の責任でご利用ください。