この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。
ファイルサーバーを移行したい
こんにちは、のんピ(@non____97)です。
皆さんはファイルサーバーの移行をしたことはありますか? 私はあります。
一言にファイルサーバーと言っても、用途や利用者数、データサイズ、パフォーマンスはまちまちです。
そのためファイルサーバーを移行する際は、まず上述のようなことをヒアリングすることになります。ただ、お客さんにヒアリングしてもお客さん自身も把握しておらず、なかなか前に進まないことがあると思います。
そんな折、パブリックプレビューですがAWS DataSync Discovery が発表されました。
本日、AWS DataSync Discovery のパブリックプレビューを発表します。DataSync Discovery を使用すると、オンプレミスのストレージパフォーマンスと使用状況が可視化され、AWS へのデータ移行の簡素化および加速に役立つ、自動レコメンデーションを受け取ります。
とあるので、ファイルサーバーの移行に大活躍間違いなしですね。
AWS公式ブログも投稿されていますね。
早速調べて使ってみたので紹介します。
いきなりまとめ
- AWS DataSync Discoveryの機能は以下の2つ
- ファイルサーバーのパフォーマンスと使用状況の可視化
- AWS上に移行する場合に採用するストレージサービスと設定のレコメンド
- DataSync Discoveryで取得できる情報は以下
- ストレージサイズ
- 使用済みストレージサイズ
- NFSおよびSMBのクライアントの数
- IOPS
- ボリューム構成
- ボリュームスループット
- ボリュームのレイテンシ
- DataSync DiscoveryはDataSyncエージェントを介して動作
- 検出ジョブを実行する際は1日から31日までの期間を指定する
- 検出ジョブの実行期間が長いほどより正確なレコメンデーションを得られる
- 検出ジョブで収集した情報はジョブの終了後最大60日間参照できる
- レコメンデーションされるサービスは以下の3つ
- Amazon FSx for NetApp ONTAP
- Amazon Elastic File System (Amazon EFS)
- Amazon FSx for Windows File Server
- 2022/10/4現在の制限事項
- DataSync Discovery はバージニア北部リージョン(
us-east-1
)でのみ使用可能 - パブリック サービス エンドポイントのみをサポート
- AWS アカウントおよび AWS リージョンごとに設定できるストレージシステムは最大10個
- DataSync エージェントは、一度に最大4つのストレージ システムにアクセス可能
- ONTAP 9.8 以降を実行している NetApp Fabric-Attached Storage (FAS) および All Flash FAS (AFF) システムをサポート
- DataSync Discovery で使用するエージェントには、80 GB のディスク容量と 16 GB の RAM が必要
- DataSync Discovery はバージニア北部リージョン(
DataSync Discoveryとは
DataSync Discoveryとは、接続したファイルサーバーのパフォーマンスと使用状況を可視化し、AWS上に移行する場合に採用するストレージサービスと設定をレコメンドするサービスです。
AWS Application Discovery Serviceのファイルサーバー特化版のようなイメージです。
気になる取得できる情報は以下の通りです。
- ストレージサイズ
- 使用済みストレージサイズ
- NFSおよびSMBのクライアントの数
- IOPS
- ボリューム構成
- ボリュームスループット
- ボリュームのレイテンシ
DataSync DiscoveryはDataSyncエージェントを介して動作します。DataSyncエージェントからファイルサーバーに管理インターフェイスに接続してモニタリングする形です。
抜粋 : Understanding your storage with AWS DataSync Discovery - AWS DataSync
モニタリングする際は検出ジョブ(Discovery job)を実行します。
検出ジョブを実行する際は1日から31日までの期間を指定します。検出ジョブの実行期間が長いほどより正確なレコメンデーションを得られます。
また、検出ジョブで収集した情報はジョブの終了後最大60日間参照できるようです。
You can run a discovery job for up to 31 days. A storage system can have only one active discovery job at a time. The information that a discovery job collects is available for up to 60 days following the end of the job (unless you remove the related storage system from DataSync Discovery before that).
レコメンデーションされるサービスは以下の3つです
- Amazon FSx for NetApp ONTAP
- Amazon Elastic File System (Amazon EFS)
- Amazon FSx for Windows File Server
レコメンデーションには使用するストレージサービスとIOPSやサイズなどの構成と、その構成を採用した場合の月額料金が表示されます。
一方、レコメンデーションは以下について考慮されていないので、注意が必要です。
- Amazon FSx for NetApp ONTAP
- Single-AZ配置とバックアップストレージ
- Amazon Elastic File System (Amazon EFS)
- One Zoneストレージクラスとバックアップストレージ
- Amazon FSx for Windows File Server
- Single-AZ配置とバックアップストレージ
なお、DataSync Discovery自体の料金はかからないようです。Secrets ManagerとDataSyncエージェントが必須なので、DataSync Discoveryを試す場合はそちらの料金が発生することを認識しておきましょう。
AWS DataSync Discovery (プレビュー) を使用すると、最大 31 日間検出ジョブを実行し、レコメンデーションを無料で受け取ることができます。DataSync Discovery は、ジョブの完了後 60 日間、収集されたデータと関連するレコメンデーションを保持します。
. . (中略) . .
DataSync Discovery (プレビュー) を使用すると、AWS Secrets Manager によって、オンプレミスストレージシステムの認証情報を保存するために作成したシークレットと、シークレットにアクセスするために DataSync によって実行されたすべての Secrets Manager API コールの料金が請求されます。
制限事項の確認
2022/10/4現在、いくつか制限事項があります。
- DataSync Discovery はバージニア北部リージョン(
us-east-1
)でのみ使用可能 - パブリック サービス エンドポイントのみをサポート
- AWS アカウントおよび AWS リージョンごとに設定できるストレージシステムは最大10個
- DataSync エージェントは、一度に最大4つのストレージ システムにアクセス可能
- ONTAP 9.8 以降を実行している NetApp Fabric-Attached Storage (FAS) および All Flash FAS (AFF) システムをサポート
- DataSync Discovery で使用するエージェントには、80 GB のディスク容量と 16 GB の RAM が必要
参考 :
- Understanding your storage with AWS DataSync Discovery - AWS DataSync
- Getting started with AWS DataSync Discovery - AWS DataSync
パブリックプレビューなので制限事項が多いのはしょうがないですね。GAまでに制限が緩和されていることを祈りましょう。
検証環境
検証環境は以下の通りです。
オンプレミス環境にONTAPを用意することはとてもできないので、FSx for ONTAPで代用しています。
DataSyncエージェントからFSx for ONTAPにONTAP APIでアクセスしてモニタリングします。モニタリング中EC2インスタンスからFSx for ONTAPに対して読み書きを行い、DataSync Discoveryがどのように検出するのか確認してみます。
やってみる
FSx for ONTAPの構築
それではまず、FSx for ONTAPを構築します。
以下リポジトリを参考にAWS CDKでデプロイします。
DataSync Discoveryからファイルサーバーに接続する際、ファイルサーバーの管理社の認証情報のSecrets Managerを保存しておく必要があります。また、暗号化に使うKMSキーはAWSマネージドキーは使えないようなので、自分でCMKを作成します。
キーポリシーやシークレットのポリシーは以下AWS公式ドキュメントを参考に設定します。
最終的には以下のようなコードになりました。
./lib/fsx-for-ontap-stack.ts
import {
Stack,
StackProps,
CfnDynamicReference,
CfnDynamicReferenceService,
aws_iam as iam,
aws_ec2 as ec2,
aws_kms as kms,
aws_secretsmanager as secretsmanager,
aws_fsx as fsx,
} from "aws-cdk-lib";
import { Construct } from "constructs";
export class FsxForOntapStack extends Stack {
constructor(scope: Construct, id: string, props?: StackProps) {
super(scope, id, props);
// SSM IAM Role
const ssmIamRole = new iam.Role(this, "SSM IAM Role", {
assumedBy: new iam.ServicePrincipal("ec2.amazonaws.com"),
managedPolicies: [
iam.ManagedPolicy.fromAwsManagedPolicyName(
"AmazonSSMManagedInstanceCore"
),
],
});
// VPC
const vpc = new ec2.Vpc(this, "VPC", {
cidr: "10.0.1.0/24",
enableDnsHostnames: true,
enableDnsSupport: true,
natGateways: 0,
maxAzs: 1,
subnetConfiguration: [
{
name: "Public",
subnetType: ec2.SubnetType.PUBLIC,
cidrMask: 27,
},
{
name: "Isolated",
subnetType: ec2.SubnetType.PRIVATE_ISOLATED,
cidrMask: 27,
},
],
});
// EC2 Instance
const instance = new ec2.Instance(this, "EC2 Instance", {
instanceType: new ec2.InstanceType("t3.micro"),
machineImage: ec2.MachineImage.latestAmazonLinux({
generation: ec2.AmazonLinuxGeneration.AMAZON_LINUX_2,
}),
vpc,
blockDevices: [
{
deviceName: "/dev/xvda",
volume: ec2.BlockDeviceVolume.ebs(8, {
volumeType: ec2.EbsDeviceVolumeType.GP3,
}),
},
],
propagateTagsToVolumeOnCreation: true,
vpcSubnets: vpc.selectSubnets({
subnetType: ec2.SubnetType.PUBLIC,
}),
role: ssmIamRole,
});
// Security Group used by FSx for ONTAP file system
const fileSystemSecurityGroup = new ec2.SecurityGroup(
this,
"Security Group of FSx for ONTAP file system",
{
vpc,
}
);
// Ref : https://docs.aws.amazon.com/fsx/latest/ONTAPGuide/limit-access-security-groups.html
fileSystemSecurityGroup.addIngressRule(
ec2.Peer.ipv4(vpc.vpcCidrBlock),
ec2.Port.icmpPing(),
"Pinging the instance"
);
fileSystemSecurityGroup.addIngressRule(
ec2.Peer.ipv4(vpc.vpcCidrBlock),
ec2.Port.tcp(22),
"SSH access to the IP address of the cluster management LIF or a node management LIF"
);
fileSystemSecurityGroup.addIngressRule(
ec2.Peer.ipv4(vpc.vpcCidrBlock),
ec2.Port.tcp(111),
"Remote procedure call for NFS"
);
fileSystemSecurityGroup.addIngressRule(
ec2.Peer.ipv4(vpc.vpcCidrBlock),
ec2.Port.tcp(135),
"Remote procedure call for CIFS"
);
fileSystemSecurityGroup.addIngressRule(
ec2.Peer.ipv4(vpc.vpcCidrBlock),
ec2.Port.tcp(139),
"NetBIOS service session for CIFS"
);
fileSystemSecurityGroup.addIngressRule(
ec2.Peer.ipv4(vpc.vpcCidrBlock),
ec2.Port.tcpRange(161, 162),
"Simple network management protocol (SNMP)"
);
fileSystemSecurityGroup.addIngressRule(
ec2.Peer.ipv4(vpc.vpcCidrBlock),
ec2.Port.tcp(443),
"ONTAP REST API access to the IP address of the cluster management LIF or an SVM management LIF"
);
fileSystemSecurityGroup.addIngressRule(
ec2.Peer.ipv4(vpc.vpcCidrBlock),
ec2.Port.tcp(445),
"Microsoft SMB/CIFS over TCP with NetBIOS framing"
);
fileSystemSecurityGroup.addIngressRule(
ec2.Peer.ipv4(vpc.vpcCidrBlock),
ec2.Port.tcp(635),
"NFS mount"
);
fileSystemSecurityGroup.addIngressRule(
ec2.Peer.ipv4(vpc.vpcCidrBlock),
ec2.Port.tcp(749),
"Kerberos"
);
fileSystemSecurityGroup.addIngressRule(
ec2.Peer.ipv4(vpc.vpcCidrBlock),
ec2.Port.tcp(2049),
"NFS server daemon"
);
fileSystemSecurityGroup.addIngressRule(
ec2.Peer.ipv4(vpc.vpcCidrBlock),
ec2.Port.tcp(3260),
"iSCSI access through the iSCSI data LIF"
);
fileSystemSecurityGroup.addIngressRule(
ec2.Peer.ipv4(vpc.vpcCidrBlock),
ec2.Port.tcp(4045),
"NFS lock daemon"
);
fileSystemSecurityGroup.addIngressRule(
ec2.Peer.ipv4(vpc.vpcCidrBlock),
ec2.Port.tcp(4046),
"Network status monitor for NFS"
);
fileSystemSecurityGroup.addIngressRule(
ec2.Peer.ipv4(vpc.vpcCidrBlock),
ec2.Port.tcp(10000),
"Network data management protocol (NDMP) and NetApp SnapMirror intercluster communication"
);
fileSystemSecurityGroup.addIngressRule(
ec2.Peer.ipv4(vpc.vpcCidrBlock),
ec2.Port.tcp(11104),
"Management of NetApp SnapMirror intercluster communication"
);
fileSystemSecurityGroup.addIngressRule(
ec2.Peer.ipv4(vpc.vpcCidrBlock),
ec2.Port.tcp(11105),
"SnapMirror data transfer using intercluster LIFs"
);
fileSystemSecurityGroup.addIngressRule(
ec2.Peer.ipv4(vpc.vpcCidrBlock),
ec2.Port.udp(111),
"Remote procedure call for NFS"
);
fileSystemSecurityGroup.addIngressRule(
ec2.Peer.ipv4(vpc.vpcCidrBlock),
ec2.Port.udp(135),
"Remote procedure call for CIFS"
);
fileSystemSecurityGroup.addIngressRule(
ec2.Peer.ipv4(vpc.vpcCidrBlock),
ec2.Port.udp(137),
"NetBIOS name resolution for CIFS"
);
fileSystemSecurityGroup.addIngressRule(
ec2.Peer.ipv4(vpc.vpcCidrBlock),
ec2.Port.udp(139),
"NetBIOS service session for CIFS"
);
fileSystemSecurityGroup.addIngressRule(
ec2.Peer.ipv4(vpc.vpcCidrBlock),
ec2.Port.udpRange(161, 162),
"Simple network management protocol (SNMP)"
);
fileSystemSecurityGroup.addIngressRule(
ec2.Peer.ipv4(vpc.vpcCidrBlock),
ec2.Port.udp(635),
"NFS mount"
);
fileSystemSecurityGroup.addIngressRule(
ec2.Peer.ipv4(vpc.vpcCidrBlock),
ec2.Port.udp(2049),
"NFS server daemon"
);
fileSystemSecurityGroup.addIngressRule(
ec2.Peer.ipv4(vpc.vpcCidrBlock),
ec2.Port.udp(4045),
"NFS lock daemon"
);
fileSystemSecurityGroup.addIngressRule(
ec2.Peer.ipv4(vpc.vpcCidrBlock),
ec2.Port.udp(4046),
"Network status monitor for NFS"
);
fileSystemSecurityGroup.addIngressRule(
ec2.Peer.ipv4(vpc.vpcCidrBlock),
ec2.Port.udp(4049),
"NFS quota protocol"
);
// Secrets CMK
const secretsCMK = new kms.Key(this, "Secrets CMK", {
admins: [
iam.Role.fromRoleArn(
this,
"Imported Role",
"<管理用IAMロールのARN>",
{ mutable: false }
),
],
alias: "secrets-cmk",
enableKeyRotation: true,
keySpec: kms.KeySpec.SYMMETRIC_DEFAULT,
keyUsage: kms.KeyUsage.ENCRYPT_DECRYPT,
});
secretsCMK.addToResourcePolicy(
new iam.PolicyStatement({
effect: iam.Effect.ALLOW,
principals: [
new iam.ServicePrincipal("discovery-datasync.amazonaws.com"),
],
actions: ["kms:Decrypt", "kms:DescribeKey"],
resources: ["*"],
})
);
// Secret of FSx for ONTAP file system
const fileSystemSecret = new secretsmanager.Secret(
this,
"Secret of FSx for ONTAP file system",
{
secretName: "/fsx-for-ontap/file-system/fsxadmin",
encryptionKey: secretsCMK,
generateSecretString: {
generateStringKey: "password",
passwordLength: 32,
requireEachIncludedType: true,
secretStringTemplate: '{"username": "fsxadmin"}',
},
}
);
fileSystemSecret.addToResourcePolicy(
new iam.PolicyStatement({
effect: iam.Effect.ALLOW,
principals: [
new iam.ServicePrincipal("discovery-datasync.amazonaws.com"),
],
actions: ["secretsmanager:GetSecretValue"],
resources: ["*"],
conditions: {
StringEquals: {
"aws:SourceAccount": this.account,
},
ArnLike: {
"aws:SourceArn": `arn:aws:datasync:${this.region}:${this.account}:system/*`,
},
},
})
);
// FSx for ONTAP file system
const fsxForOntapFileSystem = new fsx.CfnFileSystem(
this,
"FSx for ONTAP file system",
{
fileSystemType: "ONTAP",
subnetIds: vpc.selectSubnets({
subnetType: ec2.SubnetType.PRIVATE_ISOLATED,
}).subnetIds,
ontapConfiguration: {
deploymentType: "SINGLE_AZ_1",
automaticBackupRetentionDays: 7,
dailyAutomaticBackupStartTime: "16:00",
diskIopsConfiguration: {
mode: "AUTOMATIC",
},
fsxAdminPassword: new CfnDynamicReference(
CfnDynamicReferenceService.SECRETS_MANAGER,
`${fileSystemSecret.secretArn}:SecretString:password`
).toString(),
throughputCapacity: 128,
weeklyMaintenanceStartTime: "6:17:00",
},
securityGroupIds: [fileSystemSecurityGroup.securityGroupId],
storageCapacity: 1024,
storageType: "SSD",
tags: [
{
key: "Name",
value: "fsx-for-ontap-file-system",
},
],
}
);
// FSx for ONTAP SVM
const svmName = "fsx-for-ontap-svm";
const svm = new fsx.CfnStorageVirtualMachine(this, "SVM", {
fileSystemId: fsxForOntapFileSystem.ref,
name: svmName,
rootVolumeSecurityStyle: "MIXED",
tags: [
{
key: "Name",
value: svmName,
},
],
});
// FSX for ONTAP volume
const volumeName = "fsx_for_ontap_volume";
const junctionPath = "/volume";
new fsx.CfnVolume(this, "Volume", {
name: volumeName,
ontapConfiguration: {
junctionPath,
sizeInMegabytes: "102400",
storageEfficiencyEnabled: "true",
storageVirtualMachineId: svm.ref,
securityStyle: "UNIX",
tieringPolicy: {
coolingPeriod: 31,
name: "AUTO",
},
},
tags: [
{
key: "Name",
value: volumeName,
},
],
volumeType: "ONTAP",
});
instance.userData.addCommands(
"yum check-update -y",
"yum upgrade -y",
"file_system_id=" + fsxForOntapFileSystem.ref,
"svm_id=" + svm.ref,
"fsx_mount_point=/mnt/fsx",
"junction_path=" + junctionPath,
'mkdir -p "${fsx_mount_point}"',
'echo "${svm_id}.${file_system_id}.fsx.' +
Stack.of(this).region +
'.amazonaws.com:${junction_path} ${fsx_mount_point} nfs4 nfsvers=4.1,rsize=1048576,wsize=1048576,hard,timeo=600,retrans=2,noresvport,_netdev 0 0" >> /etc/fstab',
"echo 'preserve_hostname: true' >> /etc/cloud/cloud.cfg",
"hostnamectl set-hostname ec2-instance.corp.non-97.net",
"systemctl reboot"
);
}
}
DataSyncエージェント用EC2インスタンスの作成
次にDataSyncエージェント用EC2インスタンスを作成します。
まず、DataSyncエージェントで使えるAMIのIDを確認します。
$ aws ssm get-parameter --name /aws/service/datasync/ami
{
"Parameter": {
"Name": "/aws/service/datasync/ami",
"Type": "String",
"Value": "ami-06dffdffeed1ce3c9",
"Version": 62,
"LastModifiedDate": "2022-09-28T21:09:54.950000+00:00",
"ARN": "arn:aws:ssm:us-east-1::parameter/aws/service/datasync/ami",
"DataType": "text"
}
}
こちらのAMIを選択します。
16 GBのメモリが必要とのことだったので、インスタンスタイプはm6i.xlargeを選択します。
アクティベーションのために自身のIPアドレスからHTTPで通信できる必要があるため、パブリックIPアドレスを割り当てます。また、セキュリティグループで自身のIPアドレスからHTTPで通信できるように許可します。
ボリュームタイプはデフォルトでgp2だったのでgp3に変更しました。
少しでもコストを下げたいのでスポットインスタンスで作成します。また、SSMセッションマネージャーで接続できるようにAmazonSSMManagedInstanceCore
ポリシーが割りあたっているIAMインスタンスプロファイルをアタッチします。
これでEC2インスタンスを作成します。
作成後、SSMセッションマネージャーで接続します。
$ cat /etc/os-release
NAME="Amazon Linux"
VERSION="2"
ID="amzn"
ID_LIKE="centos rhel fedora"
VERSION_ID="2"
PRETTY_NAME="Amazon Linux 2"
ANSI_COLOR="0;33"
CPE_NAME="cpe:2.3:o:amazon:amazon_linux:2"
HOME_URL="https://amazonlinux.com/"
$ uname -r
5.4.209-116.367.amzn2.x86_64
以前のDataSyncエージェントのEC2インスタンスはAmazon Linuxベースでしたが、最近はAmazon Linux 2ベースのようです。
DataSyncエージェントのアクティベート
DataSyncエージェントのアクティベートを行います。
DataSyncのコンソールからエージェント
-エージェントを作成する
をクリックします。
先ほど作成したDataSyncエージェントのEC2インスタンスのパブリックIPアドレスを入力して、キーを取得する
をクリックします。
アクティベーションキーを取得できたことを確認して、エージェントを作成する
をクリックします。
DataSyncエージェントが認識されたことを確認します。
アクティベーション後、DataSyncエージェントにSSMセッションマネージャーで接続して使用しているポートやプロセスを眺めます。
$ sudo ss -antup
Netid State Recv-Q Send-Q Local Address:Port Peer Address:Port Process
udp UNCONN 0 0 0.0.0.0:68 0.0.0.0:* users:(("dhclient",pid=2443,fd=6))
udp UNCONN 0 0 0.0.0.0:111 0.0.0.0:* users:(("rpcbind",pid=2196,fd=6))
udp UNCONN 0 0 127.0.0.1:323 0.0.0.0:* users:(("chronyd",pid=2201,fd=5))
udp UNCONN 0 0 0.0.0.0:657 0.0.0.0:* users:(("rpcbind",pid=2196,fd=7))
udp UNCONN 0 0 [::]:111 [::]:* users:(("rpcbind",pid=2196,fd=9))
udp UNCONN 0 0 [::1]:323 [::]:* users:(("chronyd",pid=2201,fd=6))
udp UNCONN 0 0 [::]:657 [::]:* users:(("rpcbind",pid=2196,fd=10))
tcp LISTEN 0 128 0.0.0.0:111 0.0.0.0:* users:(("rpcbind",pid=2196,fd=8))
tcp LISTEN 0 128 0.0.0.0:22 0.0.0.0:* users:(("sshd",pid=3053,fd=3))
tcp LISTEN 0 100 127.0.0.1:25 0.0.0.0:* users:(("master",pid=2898,fd=13))
tcp LISTEN 0 50 127.0.0.1:9090 0.0.0.0:* users:(("java",pid=3715,fd=46))
tcp LISTEN 0 1024 127.0.0.1:9091 0.0.0.0:* users:(("fmrsd",pid=3841,fd=9))
tcp ESTAB 0 0 10.0.1.30:33460 52.46.143.242:443 users:(("ssm-agent-worke",pid=3381,fd=13))
tcp ESTAB 0 0 10.0.1.30:48380 35.175.166.48:443 users:(("java",pid=3715,fd=47))
tcp ESTAB 0 0 10.0.1.30:48352 35.175.166.48:443 users:(("java",pid=3715,fd=50))
tcp ESTAB 0 0 10.0.1.30:55806 3.226.119.21:443 users:(("java",pid=3715,fd=49))
tcp ESTAB 0 0 10.0.1.30:48350 35.175.166.48:443 users:(("java",pid=3715,fd=48))
tcp ESTAB 0 0 10.0.1.30:48366 35.175.166.48:443 users:(("java",pid=3715,fd=52))
tcp ESTAB 0 0 10.0.1.30:57608 209.54.182.89:443 users:(("ssm-agent-worke",pid=3381,fd=16))
tcp ESTAB 0 0 10.0.1.30:53064 209.54.182.89:443 users:(("ssm-session-wor",pid=3411,fd=16))
tcp ESTAB 0 0 10.0.1.30:55798 3.226.119.21:443 users:(("java",pid=3715,fd=51))
tcp LISTEN 0 128 [::]:111 [::]:* users:(("rpcbind",pid=2196,fd=11))
tcp LISTEN 0 128 [::]:22 [::]:* users:(("sshd",pid=3053,fd=4))
$ sudo lsof -i -P
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
rpcbind 2196 rpc 6u IPv4 17667 0t0 UDP *:111
rpcbind 2196 rpc 7u IPv4 17668 0t0 UDP *:657
rpcbind 2196 rpc 8u IPv4 17669 0t0 TCP *:111 (LISTEN)
rpcbind 2196 rpc 9u IPv6 17670 0t0 UDP *:111
rpcbind 2196 rpc 10u IPv6 17671 0t0 UDP *:657
rpcbind 2196 rpc 11u IPv6 17672 0t0 TCP *:111 (LISTEN)
chronyd 2201 chrony 5u IPv4 15052 0t0 UDP localhost:323
chronyd 2201 chrony 6u IPv6 15053 0t0 UDP localhost6:323
dhclient 2443 root 6u IPv4 15221 0t0 UDP *:68
master 2898 root 13u IPv4 21579 0t0 TCP localhost:25 (LISTEN)
sshd 3053 root 3u IPv4 19218 0t0 TCP *:22 (LISTEN)
sshd 3053 root 4u IPv6 19220 0t0 TCP *:22 (LISTEN)
ssm-agent 3381 root 13u IPv4 33747 0t0 TCP ip-10-0-1-30.ec2.internal:48356->52.46.143.242:443 (ESTABLISHED)
ssm-agent 3381 root 16u IPv4 22777 0t0 TCP ip-10-0-1-30.ec2.internal:57608->209.54.182.89:443 (ESTABLISHED)
ssm-sessi 3411 root 16u IPv4 25686 0t0 TCP ip-10-0-1-30.ec2.internal:53064->209.54.182.89:443 (ESTABLISHED)
java 3715 sgserver 46u IPv4 27724 0t0 TCP localhost:9090 (LISTEN)
java 3715 sgserver 47u IPv4 26330 0t0 TCP ip-10-0-1-30.ec2.internal:48380->ec2-35-175-166-48.compute-1.amazonaws.com:443 (ESTABLISHED)
java 3715 sgserver 48u IPv4 27413 0t0 TCP ip-10-0-1-30.ec2.internal:48350->ec2-35-175-166-48.compute-1.amazonaws.com:443 (ESTABLISHED)
java 3715 sgserver 49u IPv4 26331 0t0 TCP ip-10-0-1-30.ec2.internal:55806->ec2-3-226-119-21.compute-1.amazonaws.com:443 (ESTABLISHED)
java 3715 sgserver 50u IPv4 27414 0t0 TCP ip-10-0-1-30.ec2.internal:48352->ec2-35-175-166-48.compute-1.amazonaws.com:443 (ESTABLISHED)
java 3715 sgserver 51u IPv4 28714 0t0 TCP ip-10-0-1-30.ec2.internal:55798->ec2-3-226-119-21.compute-1.amazonaws.com:443 (ESTABLISHED)
java 3715 sgserver 52u IPv4 27415 0t0 TCP ip-10-0-1-30.ec2.internal:48366->ec2-35-175-166-48.compute-1.amazonaws.com:443 (ESTABLISHED)
fmrsd 3841 root 9u IPv4 28824 0t0 TCP localhost:9091 (LISTEN)
$ pstree -a
systemd --switched-root --system --deserialize 21
├─acpid
├─agetty --keep-baud 115200,38400,9600 ttyS0 vt220
├─agetty --noclear tty1 linux
├─amazon-ssm-agen
│ ├─ssm-agent-worke
│ │ ├─ssm-session-wor <IAMロール名>-0903552fde8cf4243
│ │ │ ├─sh
│ │ │ │ └─pstree -a
│ │ │ └─10*[{ssm-session-wor}]
│ │ └─11*[{ssm-agent-worke}]
│ └─9*[{amazon-ssm-agen}]
├─atd -f
├─auditd
│ └─{auditd}
├─chronyd -F 2
├─crond -n
│ └─crond -n
│ └─sh -c $WORKING_DIR/scripts/systemd-log-rotate >/dev/null 2>&1
│ └─systemd-log-rot /usr/local/aws-storage-gateway/scripts/systemd-log-rotate
│ └─redirect-system /usr/local/aws-storage-gateway/scripts/redirect-systemd-log
│ └─journalctl -q -f
├─dbus-daemon --system --address=systemd: --nofork --nopidfile --systemd-activation
├─dhclient -q -lf /var/lib/dhclient/dhclient--eth0.lease -pf /var/run/dhclient-eth0.pid eth0
├─fmrsd
│ └─228*[{fmrsd}]
├─gssproxy -D
│ └─5*[{gssproxy}]
├─irqbalance --foreground
│ └─{irqbalance}
├─lsmd -d
├─lvmetad -f
├─master -w
│ ├─pickup -l -t unix -u
│ └─qmgr -l -t unix -u
├─rngd -f --fill-watermark=0 --exclude=jitter
├─rpcbind -w
├─rsyslogd -n
│ └─3*[{rsyslogd}]
├─sshd -D
├─su -c /usr/bin/java -Xms128m -Xmx384m -DCORAL_CONFIG_PATH=config/coral-config -jar FmrsAgent.jar -m -s /bin/bash sgserver
│ └─java -Xms128m -Xmx384m -DCORAL_CONFIG_PATH=config/coral-config -jar FmrsAgent.jar
│ └─44*[{java}]
├─systemd-journal
├─systemd-logind
└─systemd-udevd
sgserver
というユーザーで動作しているjava
でDataSyncのエンドポイントと通信していそうですね。
ストレージシステムの追加
次にストレージシステムの追加をします。
DataSyncのコンソールからストレージの検出
-ストレージシステムを追加
をクリックします。
接続先のファイルサーバーの設定をします。
作成したFSx for ONTAPの管理エンドポイントや、FSx for ONTAPの管理者fsxadmin
の認証情報を保存しているシークレット、DataSyncエージェントなどを指定します。
なお、ストレージタイプは現在Netapp ONTAP 9.6以降
固定のようです。
ストレージシステムの追加
をクリックすると、Do not have sufficient permission for CloudWatch
とエラーになってしまいました。
CloudTrailを確認すると以下のようなイベントが記録されていました。
{
"eventVersion": "1.08",
"userIdentity": {
"type": "AssumedRole",
"principalId": "AROA6KUFAVPUZTMI6DMFH:<IAMユーザー名>",
"arn": "arn:aws:sts::<AWSアカウントID>:assumed-role/<IAMロール名>/<IAMユーザー名>",
"accountId": "<AWSアカウントID>",
"accessKeyId": "ASIA6KUFAVPUYVXBNWFC",
"sessionContext": {
"sessionIssuer": {
"type": "Role",
"principalId": "AROA6KUFAVPUZTMI6DMFH",
"arn": "arn:aws:iam::<AWSアカウントID>:role/<IAMロール名>",
"accountId": "<AWSアカウントID>",
"userName": "<IAMユーザー名>"
},
"webIdFederationData": {},
"attributes": {
"creationDate": "2022-10-04T04:02:50Z",
"mfaAuthenticated": "true"
}
}
},
"eventTime": "2022-10-04T04:41:08Z",
"eventSource": "datasync.amazonaws.com",
"eventName": "AddStorageSystem",
"awsRegion": "us-east-1",
"sourceIPAddress": "60.71.6.152",
"userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36",
"errorCode": "InvalidRequestException",
"errorMessage": "Do not have sufficient permission for CloudWatch",
"requestParameters": {
"serverConfiguration": {
"serverHostname": "management.fs-0526a576fb90451ac.fsx.us-east-1.amazonaws.com",
"serverPort": 443
},
"secretsManagerArn": "arn:aws:secretsmanager:us-east-1:<AWSアカウントID>:secret:/fsx-for-ontap/file-system/fsxadmin-ttwP5d",
"systemType": "NetAppONTAP",
"agentArns": [
"arn:aws:datasync:us-east-1:<AWSアカウントID>:agent/agent-015cc87bed2d71eca"
],
"cloudWatchLogGroupArn": "arn:aws:logs:us-east-1:<AWSアカウントID>:log-group:/aws/datasync/discovery",
"tags": [],
"name": "FSx for ONTAP",
"clientToken": "a3d71fd7-a6c6-406c-a25e-a1b04c1aa97d"
},
"responseElements": null,
"requestID": "838624ee-7b15-48bd-bdcb-5b06beea53ef",
"eventID": "e98901b4-e150-49ef-b6bd-35bc748af51b",
"readOnly": false,
"eventType": "AwsApiCall",
"managementEvent": true,
"recipientAccountId": "<AWSアカウントID>",
"eventCategory": "Management",
"tlsDetails": {
"clientProvidedHostHeader": "discovery-datasync.us-east-1.amazonaws.com"
},
"sessionCredentialFromConsole": "true"
}
CloudWatch Logsのリソースポリシーが足りないのかと思い、DataSyncからCloudWatch Logsに対して全ての操作ができるようにしましたが、状況は変わりませんでした。
$ cat << EOF > ./DataSyncLogsToCloudWatchLogsPolicy.json
{
"Statement": [
{
"Sid": "DataSyncLogsToCloudWatchLogs",
"Effect": "Allow",
"Action": [
"logs:*"
],
"Principal": {
"Service": "datasync.amazonaws.com"
},
"Resource": "*"
}
],
"Version": "2012-10-17"
}
EOF
$ aws logs put-resource-policy \
--policy-name DataSyncLogsToCloudWatchLogs \
--policy-document file://DataSyncLogsToCloudWatchLogsPolicy.json
{
"resourcePolicy": {
"policyName": "DataSyncLogsToCloudWatchLogs",
"policyDocument": "{\n \"Statement\": [\n {\n \"Sid\": \"DataSyncLogsToCloudWatchLogs\",\n \"Effect\": \"Allow\",\n \"Action\": [\n \"logs:*\"\n ],\n \"Principal\": {\n \"Service\": \"datasync.amazonaws.com\"\n },\n \"Resource\": \"*\"\n }\n ],\n \"Version\": \"2012-10-17\"\n}\n",
"lastUpdatedTime": 1664860614046
}
}
マネジメントコンソールを操作している権限もAdministratorAccess
であり、具体的に何から何への権限が足りないのか判断つきませんでした。パブリックプレビューであまり深く考えてもしょうがないので、最終的にはCloudWatch Logsの設定はしないままストレージシステムの追加を行います。
ストレージシステムが追加されたことを確認します。
5分ほど待つと、Connected to storage system FSx for ONTAP
とメッセージが表示されました。どうやらDataSyncエージェントからFSx for ONTAPにONTAP APIで接続できたようですね。
このタイミングでやはりCloudWatch Logsの設定ができないのが気になったので、AWS CLIから設定できないか試してみます。
AWS公式ドキュメントに従い、DataSync Dicoveryの操作をAWS CLIで行えるように設定します。
# DataSync Discovery のサービスモデルをダウンロード
$ curl https://docs.aws.amazon.com/datasync/latest/userguide/samples/api-2.zip --output api-2.zip
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 8386 100 8386 0 0 499k 0 --:--:-- --:--:-- --:--:-- 511k
# zipを解答
$ unzip api-2.zip
Archive: api-2.zip
inflating: api-2.json
# DataSync Discovery のサービスモデルをAWS CLIに追加
$ aws configure add-model --service-model file://api-2.json --service-name datasync-discovery
# aws datasync-discovery のサブコマンドを確認
$ aws datasync-discovery help
DATASYNC-DISCOVERY() DATASYNC-DISCOVERY()
NAME
datasync-discovery -
DESCRIPTION
AVAILABLE COMMANDS
o add-storage-system
o cancel-task-execution
o create-agent
o create-location-efs
o create-location-fsx-lustre
o create-location-fsx-ontap
o create-location-fsx-open-zfs
o create-location-fsx-windows
o create-location-hdfs
o create-location-nfs
o create-location-object-storage
o create-location-s3
o create-location-smb
o create-task
o delete-agent
o delete-location
o delete-task
o describe-agent
o describe-discovery-job
o describe-location-efs
o describe-location-fsx-lustre
o describe-location-fsx-ontap
o describe-location-fsx-open-zfs
o describe-location-fsx-windows
o describe-location-hdfs
o describe-location-nfs
o describe-location-object-storage
o describe-location-s3
o describe-location-smb
o describe-storage-system
o describe-storage-system-resource-metrics
o describe-storage-system-resources
o describe-task
o describe-task-execution
o generate-recommendations
o help
o list-agents
o list-discovery-jobs
o list-locations
o list-storage-systems
o list-tags-for-resource
o list-task-executions
o list-tasks
o remove-storage-system
o start-discovery-job
o start-task-execution
o stop-discovery-job
o tag-resource
o untag-resource
o update-agent
o update-discovery-job
o update-location-hdfs
o update-location-nfs
o update-location-object-storage
o update-location-smb
o update-storage-system
o update-task
o update-task-execution
DATASYNC-DISCOVERY()
ストレージシステムにCloudWatch Logsの設定を行います。
# ストレージシステムのARNの確認
$ aws datasync-discovery list-storage-systems
{
"StorageSystems": [
{
"StorageSystemArn": "arn:aws:datasync:us-east-1:<AWSアカウントID>:system/storage-system-b9f09c4a-2b50-486d-8464-a89ff6641d04"
}
]
}
# ストレージシステムにCloudWatch Logsを設定
$ update_storage_system=$(cat <<EOM
{
"StorageSystemArn": "arn:aws:datasync:us-east-1:<AWSアカウントID>:system/storage-system-b9f09c4a-2b50-486d-8464-a89ff6641d04",
"CloudWatchLogGroupArn": "arn:aws:logs:us-east-1:<AWSアカウントID>:log-group:/aws/datasync/discovery"
}
EOM
)
aws datasync-discovery update-storage-system \
--cli-input-json "$update_storage_system"
An error occurred (InvalidRequestException) when calling the UpdateStorageSystem operation: Do not have sufficient permission for CloudWatch
同じエラーで怒られましたね。AWS CLIでもできませんでした。残念。
検出ジョブの開始
気を取り直して検出ジョブの開始を行います。
アクション
-開始
をクリックします。
ジョブの実行期間を選択します。精度を上げるためには14日以上設定する必要があるようです。今回は1日に変更して、Start discovery job
をクリックします。
検出ジョブが実行されたようです。
「検出ジョブが開始されました。初期情報 (ボリューム、容量、クライアント) は 1 時間以内に利用可能になります。パフォーマンスデータは 24 時間ごとに追加および更新されます。」と表示されているので、少し待ちましょう。
なお、検出ジョブが既に実行中である場合、新たに実行することはできないようです。
しばらくすると、接続先のFSx for ONTAPのボリュームが検出されました。
ボリュームをクリックすると、容量、IOPS、スループット、レイテンシーのグラフが表示されました。
パフォーマンスデータの確認
FSx for ONTAPに書き込みや読み込みをすると、どのように検出されるのか試してみます。
まずは90GBほど書き込みしてみます。
$ sudo dd if=/dev/urandom of=/mnt/fsx/testfile_1 bs=1M count=51200
51200+0 records in
51200+0 records out
53687091200 bytes (54 GB) copied, 413.112 s, 130 MB/s
$ sudo dd if=/dev/urandom of=/mnt/fsx/testfile_2 bs=1M count=40960
40960+0 records in
40960+0 records out
42949672960 bytes (43 GB) copied, 332.292 s, 129 MB/s
$ df -ht nfs4
Filesystem Size Used Avail Use% Mounted on
svm-0307378877fb626ad.fs-0526a576fb90451ac.fsx.us-east-1.amazonaws.com:/volume 95G 92G 3.7G 97% /mnt/fsx
そして、以下コマンドで書き込みしたファイルを読み込んでみます。
$ dd if=/mnt/fsx/testfile_1 of=/dev/null
104857600+0 records in
104857600+0 records out
53687091200 bytes (54 GB) copied, 172.493 s, 311 MB/s
1回だけだと面白くないので、何回も繰り返して読み込ませます。
$ while true; do
dd if=/mnt/fsx/testfile_1 of=/dev/null
done
3時間後のパフォーマンスデータは以下の通りです。各項目がグラフとして表示されていますね。
グラフにカーソルを合わせるとツールチップで詳細を確認することができます。
グラフのポイントを確認すると「10月4日 14:54」、「10月4日 15:54」、「10月4日 16:54」と1時間単位で出力されていました。
収集された情報はAWS CLIからも確認できます。
# 検出ジョブの一覧
$ aws datasync-discovery list-discovery-jobs
{
"DiscoveryJobs": [
{
"DiscoveryJobArn": "arn:aws:datasync:us-east-1:<AWSアカウントID>:system/storage-system-b9f09c4a-2b50-486d-8464-a89ff6641d04/job/discovery-job-328a6b49-4255-4c78-b00f-641a587a19ab",
"Status": "RUNNING"
}
]
}
# 認識しているSVMの一覧
$ aws datasync-discovery describe-storage-system-resources \
--discovery-job-arn "arn:aws:datasync:us-east-1:<AWSアカウントID>:system/storage-system-b9f09c4a-2b50-486d-8464-a89ff6641d04/job/discovery-job-328a6b49-4255-4c78-b00f-641a587a19ab" \
--resource-type SVM
{
"ResourceDetails": {
"NetAppONTAPSVMs": [
{
"SvmUuid": "cb09664f-439d-11ed-a63d-e97056ce2423",
"SvmName": "fsx-for-ontap-svm"
}
]
}
}
# 認識しているボリュームの一覧
$ aws datasync-discovery describe-storage-system-resources \
--discovery-job-arn "arn:aws:datasync:us-east-1:<AWSアカウントID>:system/storage-system-b9f09c4a-2b50-486d-8464-a89ff6641d04/job/discovery-job-328a6b49-4255-4c78-b00f-641a587a19ab" \
--resource-type VOLUME
{
"ResourceDetails": {
"NetAppONTAPVolumes": [
{
"VolumeName": "fsx_for_ontap_volume",
"VolumeUuid": "398e7525-439e-11ed-a63d-e97056ce2423",
"EnabledProtocols": [
"NFS"
],
"CifsClientCount": 0,
"NfsClientCount": 1,
"SvmUuid": "cb09664f-439d-11ed-a63d-e97056ce2423",
"SvmName": "fsx-for-ontap-svm",
"CapacityUsed": 55299604480,
"CapacityProvisioned": 107374182400,
"LogicalCapacityUsed": 55299604480,
"MaxP95Performance": {
"IopsRead": 4864.0,
"IopsWrite": 1983.0,
"IopsOther": 0.0,
"IopsTotal": 4864.0,
"ThroughputRead": 318767104.0,
"ThroughputWrite": 129992976.55,
"ThroughputOther": 0.0,
"ThroughputTotal": 318767104.0,
"LatencyRead": 1787.0500000000002,
"LatencyWrite": 29989.4,
"LatencyOther": 87.19999999999993
},
"Recommendations": []
},
{
"VolumeName": "fsx_for_ontap_svm_root",
"VolumeUuid": "d042d44e-439d-11ed-a63d-e97056ce2423",
"EnabledProtocols": [
"NFS"
],
"CifsClientCount": 0,
"NfsClientCount": 1,
"SvmUuid": "cb09664f-439d-11ed-a63d-e97056ce2423",
"SvmName": "fsx-for-ontap-svm",
"CapacityUsed": 507904,
"CapacityProvisioned": 1073741824,
"LogicalCapacityUsed": 507904,
"MaxP95Performance": {
"IopsRead": 0.0,
"IopsWrite": 0.0,
"IopsOther": 0.0,
"IopsTotal": 0.0,
"ThroughputRead": 0.0,
"ThroughputWrite": 0.0,
"ThroughputOther": 0.0,
"ThroughputTotal": 0.0,
"LatencyRead": 0.0,
"LatencyWrite": 0.0,
"LatencyOther": 0.0
},
"Recommendations": []
}
]
}
}
時間毎のメトリクスについてもAWS CLIで確認できます。
# 読み書きの負荷テストをしたボリュームのメトリクス
$ aws datasync-discovery describe-storage-system-resource-metrics \
--discovery-job-arn "arn:aws:datasync:us-east-1:<AWSアカウントID>:system/storage-system-b9f09c4a-2b50-486d-8464-a89ff6641d04/job/discovery-job-328a6b49-4255-4c78-b00f-641a587a19ab" \
--resource-id 398e7525-439e-11ed-a63d-e97056ce2423 \
--resource-type VOLUME
{
"ResourceType": "VOLUME",
"ResourceId": "398e7525-439e-11ed-a63d-e97056ce2423",
"Metrics": [
{
"Timestamp": "2022-10-04T05:54:12.612000+00:00",
"P95Metrics": {
"IOPS": {
"Read": 0.0,
"Write": 0.0,
"Other": 0.0,
"Total": 0.0
},
"Throughput": {
"Read": 0.0,
"Write": 0.0,
"Other": 0.0,
"Total": 0.0
},
"Latency": {
"Read": 0.0,
"Write": 0.0,
"Other": 0.0
}
},
"Capacity": {
"Used": 348160,
"Provisioned": 107374182400
}
},
{
"Timestamp": "2022-10-04T06:54:14.239000+00:00",
"P95Metrics": {
"IOPS": {
"Read": 4864.0,
"Write": 1983.0,
"Other": 0.0,
"Total": 4864.0
},
"Throughput": {
"Read": 318767104.0,
"Write": 129992976.55,
"Other": 0.0,
"Total": 318767104.0
},
"Latency": {
"Read": 1787.0500000000002,
"Write": 29989.4,
"Other": 66.39999999999986
}
},
"Capacity": {
"Used": 98072748032,
"Provisioned": 107374182400
}
},
{
"Timestamp": "2022-10-04T07:54:16.186000+00:00",
"P95Metrics": {
"IOPS": {
"Read": 4729.249999999999,
"Write": 0.0,
"Other": 0.0,
"Total": 4729.249999999999
},
"Throughput": {
"Read": 309979599.54999995,
"Write": 0.0,
"Other": 0.0,
"Total": 309979599.54999995
},
"Latency": {
"Read": 1685.2999999999997,
"Write": 0.0,
"Other": 87.19999999999993
}
},
"Capacity": {
"Used": 55298494464,
"Provisioned": 107374182400
}
},
{
"Timestamp": "2022-10-04T08:54:18.083000+00:00",
"P95Metrics": {
"IOPS": {
"Read": 121.0,
"Write": 0.0,
"Other": 0.0,
"Total": 121.0
},
"Throughput": {
"Read": 7947332.0,
"Write": 0.0,
"Other": 0.0,
"Total": 7947332.0
},
"Latency": {
"Read": 148.04999999999998,
"Write": 0.0,
"Other": 54.099999999999966
}
},
"Capacity": {
"Used": 55299604480,
"Provisioned": 107374182400
}
}
]
}
# SVMのルートボリュームのメトリクス
$ aws datasync-discovery describe-storage-system-resource-metrics \
--discovery-job-arn "arn:aws:datasync:us-east-1:<AWSアカウントID>:system/storage-system-b9f09c4a-2b50-486d-8464-a89ff6641d04/job/discovery-job-328a6b49-4255-4c78-b00f-641a587a19ab" \
--resource-id d042d44e-439d-11ed-a63d-e97056ce2423 \
--resource-type VOLUME
{
"ResourceType": "VOLUME",
"ResourceId": "d042d44e-439d-11ed-a63d-e97056ce2423",
"Metrics": [
{
"Timestamp": "2022-10-04T05:54:12.612000+00:00",
"P95Metrics": {
"IOPS": {
"Read": 0.0,
"Write": 0.0,
"Other": 0.0,
"Total": 0.0
},
"Throughput": {
"Read": 0.0,
"Write": 0.0,
"Other": 0.0,
"Total": 0.0
},
"Latency": {
"Read": 0.0,
"Write": 0.0,
"Other": 0.0
}
},
"Capacity": {
"Used": 372736,
"Provisioned": 1073741824
}
},
{
"Timestamp": "2022-10-04T06:54:14.239000+00:00",
"P95Metrics": {
"IOPS": {
"Read": 0.0,
"Write": 0.0,
"Other": 0.0,
"Total": 0.0
},
"Throughput": {
"Read": 0.0,
"Write": 0.0,
"Other": 0.0,
"Total": 0.0
},
"Latency": {
"Read": 0.0,
"Write": 0.0,
"Other": 0.0
}
},
"Capacity": {
"Used": 417792,
"Provisioned": 1073741824
}
},
{
"Timestamp": "2022-10-04T07:54:16.186000+00:00",
"P95Metrics": {
"IOPS": {
"Read": 0.0,
"Write": 0.0,
"Other": 0.0,
"Total": 0.0
},
"Throughput": {
"Read": 0.0,
"Write": 0.0,
"Other": 0.0,
"Total": 0.0
},
"Latency": {
"Read": 0.0,
"Write": 0.0,
"Other": 0.0
}
},
"Capacity": {
"Used": 462848,
"Provisioned": 1073741824
}
},
{
"Timestamp": "2022-10-04T08:54:18.083000+00:00",
"P95Metrics": {
"IOPS": {
"Read": 0.0,
"Write": 0.0,
"Other": 0.0,
"Total": 0.0
},
"Throughput": {
"Read": 0.0,
"Write": 0.0,
"Other": 0.0,
"Total": 0.0
},
"Latency": {
"Read": 0.0,
"Write": 0.0,
"Other": 0.0
}
},
"Capacity": {
"Used": 507904,
"Provisioned": 1073741824
}
}
]
}
レコメンデーションの確認
最後にレコメンデーションの確認をします。
レコメンデーションを生成するには検出ジョブが停止している必要があるため、検出ジョブを停止させます。
検出ジョブが停止するとジョブのステータスが停止済み
に変わります。そして、Get recommendations
ボタンが表示されるようになります。
Get recommendations
をクリックします。14日間ジョブを動かしていないので警告されますが、Generate Recommendations
をクリックします。
しばらくすると、Recommendationsが完了
に変わりました。レコメンデーションと見積り
タブを開くと、そのボリュームの推奨サービスと設定値、その設定をした場合の月額料金が表示されました。
より高性能なスループットを求めるのであれば、EFSよりもFSx for ONTAPを採用した方がコストがお安いというのが一目で分かりますね。
一方、ルートボリュームには一切アクセスしていないので、EFSの方が月額料金が安くなります。
AWS CLIからも確認してみましょう。
$ aws datasync-discovery describe-storage-system-resources \
--discovery-job-arn "arn:aws:datasync:us-east-1:<AWSアカウントID>:system/storage-system-b9f09c4a-2b50-486d-8464-a89ff6641d04/job/discovery-job-328a6b49-4255-4c78-b00f-641a587a19ab" \
--resource-type VOLUME
{
"ResourceDetails": {
"NetAppONTAPVolumes": [
{
"VolumeName": "fsx_for_ontap_volume",
"VolumeUuid": "398e7525-439e-11ed-a63d-e97056ce2423",
"EnabledProtocols": [
"NFS"
],
"CifsClientCount": 0,
"NfsClientCount": 1,
"SvmUuid": "cb09664f-439d-11ed-a63d-e97056ce2423",
"SvmName": "fsx-for-ontap-svm",
"CapacityUsed": 55299604480,
"CapacityProvisioned": 107374182400,
"LogicalCapacityUsed": 55299604480,
"MaxP95Performance": {
"IopsRead": 4864.0,
"IopsWrite": 1983.0,
"IopsOther": 0.0,
"IopsTotal": 4864.0,
"ThroughputRead": 318767104.0,
"ThroughputWrite": 129992976.55,
"ThroughputOther": 0.0,
"ThroughputTotal": 318767104.0,
"LatencyRead": 1787.0500000000002,
"LatencyWrite": 29989.4,
"LatencyOther": 87.19999999999993
},
"Recommendations": [
{
"StorageType": "fsxOntap",
"StorageConfiguration": {
"CapacityPoolGB": "0",
"DeploymentType": "Multi-AZ",
"ProvisionedIOpsMode": "USER_PROVISIONED",
"StorageCapacityGB": "1024",
"StorageEfficiency": "0.0%",
"ThroughputCapacity": "512",
"TotalIOps": "4864"
},
"EstimatedMonthlyStorageCost": "1036.0"
},
{
"StorageType": "efs",
"StorageConfiguration": {
"InfrequentAccessRequests": "4",
"InfrequentAccessStorageGB": "42",
"PerformanceMode": "General Purpose",
"ProvisionedThroughputMBps": "304",
"StandardStorageGB": "11",
"ThroughputMode": "Provisioned"
},
"EstimatedMonthlyStorageCost": "1826.0"
}
]
},
{
"VolumeName": "fsx_for_ontap_svm_root",
"VolumeUuid": "d042d44e-439d-11ed-a63d-e97056ce2423",
"EnabledProtocols": [
"NFS"
],
"CifsClientCount": 0,
"NfsClientCount": 1,
"SvmUuid": "cb09664f-439d-11ed-a63d-e97056ce2423",
"SvmName": "fsx-for-ontap-svm",
"CapacityUsed": 507904,
"CapacityProvisioned": 1073741824,
"LogicalCapacityUsed": 507904,
"MaxP95Performance": {
"IopsRead": 0.0,
"IopsWrite": 0.0,
"IopsOther": 0.0,
"IopsTotal": 0.0,
"ThroughputRead": 0.0,
"ThroughputWrite": 0.0,
"ThroughputOther": 0.0,
"ThroughputTotal": 0.0,
"LatencyRead": 0.0,
"LatencyWrite": 0.0,
"LatencyOther": 0.0
},
"Recommendations": [
{
"StorageType": "fsxOntap",
"StorageConfiguration": {
"CapacityPoolGB": "0",
"DeploymentType": "Multi-AZ",
"ProvisionedIOpsMode": "AUTOMATIC",
"StorageCapacityGB": "1024",
"StorageEfficiency": "0.0%",
"ThroughputCapacity": "128",
"TotalIOps": "0"
},
"EstimatedMonthlyStorageCost": "410.0"
},
{
"StorageType": "efs",
"StorageConfiguration": {
"InfrequentAccessRequests": "0",
"InfrequentAccessStorageGB": "1",
"PerformanceMode": "General Purpose",
"ProvisionedThroughputMBps": "0",
"StandardStorageGB": "1",
"ThroughputMode": "Bursting"
},
"EstimatedMonthlyStorageCost": "1.0"
}
]
}
]
}
}
各ボリュームの推奨事項が表示されていますね。
早くGAしてほしい
AWS DataSync Discovery を紹介しました。
DataSync Discoveryを使用することで、移行対象のファイルサーバーの特徴を掴むことが簡単になりそうです。
これは早くGAしてほしいですね。
個人的にはディレクトリ構成やディレクトリとファイルの数、ファイルのサイズの傾向、1ファイルの最大サイズなんかも取得できると嬉しいです。GAになるのを期待して待ちます。
この記事が誰かの助けになれば幸いです。
以上、AWS事業本部 コンサルティング部の のんピ(@non____97)でした!