AWS DataSync
は、AWSで用意されているデータ転送サービスです。AWS上のストレージ系サービスやオンプレ上のストレージを対象に、データ転送処理を実施してくれます。
対象とできるストレージは、現在のところ下記となっています。
今回は、S3上データをFSx for Windowsまで、データ転送処理を実施してみます。
構成図
イメージはこんな感じです。
DataSyncを利用するには、DataSync Agentとなる仮想サーバーが必要となります。EC2上か、オンプレ上のVMware上に設置する必要があります。今回はAWS内でのデータ転送処理となるため、EC2上にDataSync Agentを作成しています。オンプレ上のデータを対象とする場合には、オンプレのVMware上にDataSync Agentとなる仮想サーバーを建てる必要があります。
Important
We don't recommend using a DataSync agent that is deployed as an EC2 instance to read data from an on-premises source location. This approach doesn't deliver maximum throughput.
Deploy Your Agent as an EC2 Instance to Read Files from In-Cloud
オンプレのデータを対象とする場合、EC2上の転送Agentでも通信できれば恐らく機能するのでしょうが、非推奨となっています。
DataSyncの設定
Getting Startの公式ページを参考、必要となる設定内容を確認します。
DataSync Agentの作成
DataSync AgentとなるEC2を作成します。以下が考慮点です。
利用するAMI
以下のコマンドより確認できます。
$ aws ssm get-parameter --name /aws/service/datasync/ami --region ap-northeast-1 { "Parameter": { "Name": "/aws/service/datasync/ami", "Type": "String", "Value": "ami-0ddfeff6e10d8c311", "Version": 8, "LastModifiedDate": "2020-02-20T04:11:57.102000+09:00", "ARN": "arn:aws:ssm:ap-northeast-1::parameter/aws/service/datasync/ami" } }
利用するインスタンスタイプ
転送処理量により、以下の2つから選択します。
- m5.2xlarge
- 2000万未満のファイルを転送する場合
- m5.4xlarge
- 2000万超のファイルを転送する場合
付与するセキュリティグループ
必要となるネットワーク要件を、以下より確認できます。
サービスエンドポイントの作成
サービスエンドポイント
とは、DataSync AgentとなるEC2とAWSサービス間で利用されるエンドポイントとなります。以下の種類があります。
- パブリックエンドポイント
- DataSyncエージェントからAWSへの通信が、パブリックインターネットを介して行われる
- 連邦情報処理規格 (FIPS) エンドポイント
- AWS GovCloudにて利用するエンドポイント
- Virtual Private Cloud(VPC) エンドポイント
今回は Virtual Private Cloud(VPC) エンドポイント
を利用します。
そのため、DataSync向けVPCエンドポイントを作成します。DataSync用VPCエンドポイントにアタッチするセキュリティグループを作成した後、 com.amazonaws.region.datasync
のインターフェース型VPCエンドポイントを作成します。
用意するセキュリティグループでは、以下のInbound Ruleとする必要があります。
Source | Protocol |
---|---|
DataSync Anget | 22/tcp |
DataSync Anget | 443/tcp |
DataSync Anget | 1024-1064/tcp |
Configuring DataSync to Use Private IP Addresses for Data Transfer
DataSync Agent用EC2と、サービスポイント用VPCエンドポイント作成用のCloudFormationテンプレートを置いておきます。
cloudformation/datasync-agent at master · goodbyegangster/cloudformation · GitHub
DataSync Agentのアクティベート
上記で作成したDataSync Agentをアクティベーションします。
DataSync Agentに80/tcpでアクセスできる環境 から、 AWSコンソールにログインしてDataSync管理ページを開きます。アクティベーション中にDataSync AgentのWEBページにアクセスする事となり、アクティベーション処理をする端末は DataSync Agentに80/tcpでアクセスできる環境
という条件があります。今回の手順では、同一サブネット内に存在するActiveDirectoryのドメインコントローラーDesktop上のブラウザを利用しました。
DataSync管理ページにて、作成したVPCエンドポイントの情報と、DataSync AgentのPrivate IPアドレスを入力します。
正常に通信できている場合、アクティベーションキーが取得されるため、Agentを登録できるようなります。以下のページが表示されるので、 Create agent
をクリックします。
なお、DataSync Agentの80/tcpポートは、アクティベーション処理が終了すると、閉じられるとのことです。
データ転送の実行
DataSyncを利用する環境が整ったので、実際にデータ転送処理を実施します。
ロケーションの作成
転送処理を設定するには、データ送信元とデータ送信先となるロケーションの定義を実施する必要があります。
まず、データ送信元となるS3のロケーション定義を作成します。ロケーション定義作成の前に、DataSyncのサービスが該当S3バケットにアクセスするためのIAM Roleを作成します。以下はそのIAM Role作成用のCloudFormationテンプレートです。
https://github.com/goodbyegangster/cloudformation/tree/master/datasync-location-s3-iam-role
以下がS3ロケーション定義作成用のAWS CLIコマンドです。
$ aws datasync create-location-s3 \ --s3-bucket-arn 'arn:aws:s3:::xxxxx' \ --s3-storage-class 'STANDARD' \ --s3-config 'BucketAccessRoleArn=arn:aws:iam::123456789012:role/xxxxx' \ --subdirectory /xxxxx
aws datasync create-location-s3
続いて、送信先となるFSx for Windowsのロケーション定義を作成します。実際に作成するのは、FSx for Windows用のロケーション定義ではなく、SMBアクセス用の定義となります。ここで定義した内容にて、DataSync AgentがSMBアクセスしてくれます。
$ aws datasync create-location-smb \ --agent-arns 'arn:aws:datasync:ap-northeast-1:123456789012:agent/agent-xxxxx' \ --server-hostname 'xx.xx.xx.xx' \ --subdirectory '/xxxxx' \ --mount-options 'Version=AUTOMATIC' \ --domain 'example.com' --user 'FSxAdmin' --password 'Passw0rd'
aws datasync create-location-smb
パラメーターに関するメモ。
server-hostname
FSx for Windowsで提供されるENIのIPアドレスを登録します。FSx for Windowsで提供されるドメイン名(xxxxx.example.comみたいな)も設定可能ですが、その場合、DataSync Agentからそのドメイン名が名前解決できる必要があります。普通は名前解決できないですから、ENIのIPアドレスを設定するのが良いかと。
利用するユーザー
利用するユーザーは、FSx for Windowsの管理者権限を所持している必要があります。ActiveDirectoryのDomainAdminグループ、またはFSx for Windows作成時に指定した管理者グループ内のユーザーである必要があります。
タスクの作成
では、実際に転送処理のためのタスクを設定します。が、画面を見れば凡そ分かる内容なので、具体的設定作業方法についてはばっさり割愛します。公式手順のこちらを確認ください。
現時点で利用できる機能で気になった点のみピックアップしておきます。
- Keep deleted files
- Overwrite files
- 送信時にファイルを上書きするかどうかの設定
- Filtering configuration
- 転送するファイルをフィルタリングできる設定
- パス・ファイル名を利用してフィルタリングできます
- Schedule
- それなりに柔軟にスケジューリングできます
- Task logging
- 転送処理時のエラー内容をCloudwatchLogsに出力してくれます
- 利用時には、CloudwatchLogs側にアクセスポリシーを設定しておく必要あります
タスクの開始
作成したタスクを手動で開始したい場合、以下のマニュアルより。AWSコンソール上で Start
をクリックするだけですが。
モニタリング
タスクの実行、成功、失敗、または転送されたデータ量等に関しては、Cloudwatch EventやMetricsが出力されるので、それを利用できます。