Amazon Web Services ブログ

Amazon S3 File Gateway による大規模データ移行とコスト削減

このブログは 2023 年 3 月 8 日に Vikas Kakkar (Senior Storage Solution Architect) と Ananta Khanal (Solution Architect) によって執筆された内容を日本語化したものです。原文はこちらを参照してください。

データをクラウドに移行するには、さまざまなタイプのデータ移行経験や、ソースデータ構造やメタデータを保持する仕組みが必要です。お客様はオンプレミスのファイルデータを従来のファイルサーバーに格納する際、データライフサイクル管理等の理由でデータ作成時のタイムスタンプを併せて保持することが多くあります。一方でお客様は、データ構造やメタデータを保持しハイブリッドクラウド構成をサポートするような、クラウドへの移行方法を悩まれているのではないでしょうか。その結果として、お客様はコストやパフォーマンス、スケールなど、クラウドストレージのメリットを最大限享受できなくなります。

お客様は Amazon S3 File Gateway と Amazon Simple Storage Service (Amazon S3) を使用して、オンプレミスのデータをクラウドへ移行して保存することができます。お客様は Amazon S3 ライフサイクルをスケーラブルなソリューションとして活用すると、保存されたオブジェクトは「作成日」に基づいて Amazon S3 ストレージクラス間での階層化が自動的に行われ、ストレージコストが最適化されます。一方でお客様が Amazon S3 File Gateway を使用して Amazon S3 にオブジェクトをアップロードすると、ソースファイルの「更新日」が Amazon S3 オブジェクトの「作成日」として設定されます。つまりオブジェクト保存期間がリセットされるため、ライフサイクルポリシーではソースファイルの「作成日」に基づいて低コストのストレージクラスに移行することが妨げられます。これは、多数の古いファイルをオンプレミスで保有し、Amazon S3 File Gateway を使用して Amazon S3 ストレージに移行・アップロードするお客様にとって課題となります。

このブログでは、AWS サービスを活用してメタデータを維持しながら、標準の SMB (Server Message Block) および NFS (Network File System) ファイルプロトコルを使ったオンプレミスアプリケーションからのデータアクセスを可能にする、クラウドへのデータ移行方法について説明します。また、ストレージコストを最適化するため、元のオブジェクト/ファイルのメタデータ (元の日付変更属性) を保存/利用し、選択したストレージクラスにファイルを自動的に配置する方法について説明します。

ソリューションアーキテクチャ

このアーキテクチャ図は、元のメタデータを含むファイルを、オンプレミスのファイルシステムからクラウドへアップロードして移行する方法を示しています。図に示したように、Robocopy を使用してソースデータをコピーし、Amazon S3 File Gateway のファイル共有に保存します。ソースファイルには「最終更新日」や「作成日」などのメタデータが含まれており、今後このソースメタデータ情報をオリジナル stat() 時刻と呼ぶことにします。次に、このソリューションでは Amazon S3 File Gateway を活用してデータの移行を自動化し、オリジナル stat() 時刻を基に選択されたストレージクラスでデータを Amazon S3 に保存します。

「Amazon S3 File Gateway」によって保存された各オブジェクトについて、Amazon S3 ではソースデータのオリジナル stat() 時刻を保持するためにユーザー定義のオブジェクトメタデータを使うことができます。AWS Lambda 関数を使用してユーザー定義のオブジェクトメタデータフィールドからオリジナル stat() 時刻を取り出し、オブジェクトを適切なストレージクラスで保存する API をインスタンス化します。この例では、Amazon S3 Glacier Instant Retrieval と Amazon S3 Glacier Deep Archive クラスが利用されています。

このアーキテクチャ図は、2 つの異なるユースケースを示しています。1 つ目のユースケースでは、Amazon S3 File Gateway を使用して、オンプレミスのファイルサーバーのデータを Amazon S3 に移行します。2 つ目のユースケースでは、アクセス権限を付与して、オンプレミスから Amazon S3 File Gateway のファイルインターフェイスを介して Amazon S3 のオブジェクトにアクセスします。

図 1: Amazon S3 File Gateway と AWS Lambda を使ったソリューションの全体像

関連するサービス

このソリューションは以下の主要なサービスで構成されています。まず、主要サービスの概要について説明します。次に、これらのサービスがどのようにソリューションを実現しているのか見ていきます。

Robocopy

Robocopy を使用すると、オンプレミスの Microsoft Windows File Server からメタデータを含めてファイルをコピーできます。Amazon S3 へデータを移行する際、オブジェクト (ファイル) のメタデータを保持する方法はいくつかあります。今回は Robocopy コマンドを実行して、ファイルのタイムスタンプと権限に関するメタデータを含めて、ソースから Amazon S3 File Gateway のファイル共有に同期する方法を説明します。

Amazon S3 File Gateway

Amazon S3 File Gateway は、オンプレミスのファイルデータを Amazon S3 ストレージに移行できる AWS サービスです。お客様は Amazon S3 File Gateway を使用して、SMB および NFS データファイルを Amazon S3 ストレージにオブジェクト形式で保存および取得します。この時お客様は、暗号化、バーション管理、ライフサイクル管理などの、Amazon S3 の数多くの機能を活用できます。

AWS Lambda

AWS Lambda は、サーバーのプロビジョニングや管理を行わずにコードを実行できる、サーバーレスでイベント駆動型のコンピューティングサービスです。このソリューションにおいて AWS Lambda は、適切な Amazon S3 ストレージクラスへの移動自動化で役立ちます。

ソリューションウォークスルー

元のデータは、SMB または NFS プロトコルでアクセス可能なオンプレミスの NAS ストレージにあります。 このブログでは、ソリューションのワークフローについて見ていきます。以下について順を追って説明します。

  1. Robocopy を使用してデータをコピーし、オリジナル stat() を保持する
  2. Amazon S3 File Gateway と Amazon S3 ストレージを設定する
  3. AWS Lambda を使用して Amazon S3 ライフサイクルポリシーを自動化する

1. Robocopy を使用してデータをコピーし、オリジナル stat() を保持する

Robocopy を使って Amazon S3 File Gateway にデータをコピーする際は、適切なメタデータ保存技術が使用されていることを確認する必要があります。これにより、オンプレミスの NAS に保存されたデータが Amazon S3 File Gateway を経由して Amazon S3 にコピーされても、元ファイルのタイムスタンプが確実に保持されます。コピー実行時には、ファイルのメタデータのコピーを、明示的に指定する必要があります。Amazon S3 File Gateway の使用時には Robocopy の適切なオプションを使って、メタデータをコピーします。詳細については、オブジェクトメタデータの使用を参照してください。

以下は、元ファイルのメタデータを保持した Robocopy の使用例です。このメタデータは、Amazon S3 File Gateway を使用して、Amazon S3 オブジェクトのユーザーメタデータとして格納されます。

C:\> robocopy <source> <destination> /TIMFIX /E /SECFIX

コマンドオプションの詳細については以下の通りです。

  • /TIMEFIX:タイムスタンプの同期
  • /E:空のフォルダーを含むサブフォルダーをコピー
  • /SECFIX:NTFS アクセス権をコピー
  • /V:冗長なロギング

以下は、権限と ACL 情報のみをコピーする例です。

C:\> robocopy <source> <destination> /e /sec /secfix /COPY:ATSOU

Robocopy には予行演習 (/L) オプションがあり、操作を実行する前にどのような更新が行われるのかを確認できます。各プレフィックスに含まれるファイル数や、クライアントのルートディスク速度、Amazon S3 にてバージョニングが有効かつ削除マーカーが付与されている等で、Robocopy の処理速度が遅くなる可能性があります。詳細については Robocopy のドキュメントを参照してください。

2. Amazon S3 File Gateway と Amazon S3 ストレージを設定する

Amazon S3 File Gateway はオンプレミス環境に仮想マシンとして構成できます。仮想マシンは VMware、Microsoft Hyper-V、Linux KVM をサポートしており、また、専用のハードウェアアプライアンスを購入して導入することもできます。Robocopy が元のサーバーから Amazon S3 File Gateway のファイル共有にファイルをコピーすると、そのファイルがオブジェクトとして Amazon S3 ストレージにアップロードされます。このとき Amazon S3 File Gateway は、ユーザーが頻繁にアクセスするファイルのキャッシュとしても機能します。使用頻度の低いファイルは、Amazon S3 File Gateway を介して Amazon S3 バケットから取得されます。

ファイル共有にコピーされると、データはオブジェクトとして Amazon S3 に格納されます。これらのファイルのオリジナルメタデータは、Amazon S3 オブジェクトの「ユーザーメタデータ」に保存されます。 格納されたすべてのオブジェクトには 、Amazon S3 に基づいて新しい作成時刻が設定されます。一方で注目すべきは、「ユーザーメタデータ」に格納された元の「mtime」パラメータです。

データを初めて移行した後は、多くの Amazon S3 の機能を活用することで、さらなるコストの最適化やセキュリティ体制の改善が可能になります。Amazon S3 File Gateway と Amazon S3 の機能詳細については、以下のドキュメントを参照してください。

3. AWS Lambda を使用して Amazon S3 ライフサイクルポリシーを自動化する

Amazon S3 File Gateway を使用して Amazon S3 にオブジェクトが書き込まれると、PUT REST Call をトリガーとして AWS Lambda 関数が呼び出されます。この AWS Lambda 関数は、はじめに Amazon S3 オブジェクトの「ユーザーメタデータ」から元ファイルのタイムスタンプを読み取ります。そして、UNIX 時間で格納された「mtime」パラメータを計算し、そのデータを別の Amazon S3 ストレージクラスに移行する必要があるのか確認します。データが移行される条件を満たす場合、適切なストレージクラスへ移動するアクションが適用されます。この時、ストレージクラスの階層化を行うための Amazon S3 ライフサイクルポリシーの日数は、自由に設定することが可能です。

ソリューションの構築に利用可能な以下のサンプルコードをご覧ください。要件に応じて変更および修正することもできます。

import boto3
import json
import math
import numpy as np
bucket='demo-storagegateway'
s3 = boto3.client('s3')

from urllib.parse import unquote_plus

def lambda_handler(event, context):
	sourcekey = event['Records'][0]['s3']['object']['key']
	print ("sourcekey", sourcekey, unquote_plus(sourcekey))

	response = s3.head_object(Bucket=bucket, Key=unquote_plus(sourcekey))

	metadatareturn = response['Metadata']['file-mtime']
	OriginalTime = np.timedelta64(metadatareturn[:-2].ljust(9, '0'),'ns')

	print("metadata", metadatareturn)
	if (OriginalTime + np.timedelta64(3650, "D")) > np.timedelta64(365, "D"):

		print("made it to file_key_name")
		file_key_name = unquote_plus(sourcekey)
		print(file_key_name)
		print("made it to copy_source_object")
		copy_source_object = {'Bucket': bucket, 'Key': file_key_name}
		print(copy_source_object)
		Testcopy=s3.copy_object(CopySource=copy_source_object, Bucket=bucket, Key=file_key_name, StorageClass='GLACIER')
		print("Testcopy", Testcopy)

図 2: AWS Lambda のサンプルコード

まとめ

このブログでは、オンプレミスのファイルサーバーから Amazon S3 File Gateway を介して Amazon S3 にデータを移行する際に、ファイルの元のタイムスタンプを保持する方法について説明しました。また、Amazon S3 トリガーによる AWS Lambda 関数の呼び出しを利用して、関数内で指定された日数に基づいてファイルを低コストのストレージクラスへ移動する方法についても説明しました。この方法の利点は、すべてのメタデータを保持しながら、費用対効果の高い方法でデータを残すことなく保存できることです。この方法は、データ移行の道筋となるだけでなく、クラウドジャーニーの一歩となりえます。

AWS Storage Gateway、Amazon S3、AWS Lambda を活用することで、耐久性、拡張性、可用性の高いクラウドストレージにデータを移行できます。既存環境を変更せずにオンプレミスからアクセス可能で、ハイブリッドクラウドストレージとしても活用できます。そしてクラウドネイティブな機能を利用して、データ管理の簡素化、データ価値の最適化、大規模なコスト削減を実現できます。

翻訳はソリューションアーキテクトの吉澤が担当しました。

Vikas Kakkar

Vikas Kakkar

Vikas Kakkar は AWS のストレージサービスを担当するシニアストレージソリューションアーキテクトです。通信、銀行、政府、防衛、製造などのさまざま分野におけるインフラストラクチャソリューションアーキテクチャの経験が 24 年あります。彼は熱心なテニスファンで、頻繁に試合を楽しんでいます。

Ananta Khanal

Ananta Khanal

Ananta Khanal は AWS のクラウドストレージを専門とするソリューションアーキテクトです。 彼は 10 年以上 IT 業界で働いており、さまざまな企業でさまざまな役職を歴任してきました。彼はクラウド技術とデータ管理に情熱を持っています。