[アップデート] Amazon FSx for OpenZFSでS3アクセスポイントがサポートされ、ファイルシステム内に保存されたデータにS3 APIでアクセスできるようになりました

[アップデート] Amazon FSx for OpenZFSでS3アクセスポイントがサポートされ、ファイルシステム内に保存されたデータにS3 APIでアクセスできるようになりました

データの移動なしにS3 APIの口が必要なサービスと連携する必要な場合に
2025.11.11

NFSファイルサーバー上のファイルをデータの移動なしにS3連携サービスと連携させたい

こんにちは、のんピ(@non____97)です。

皆さんはNFSファイルサーバー上のファイルをデータの移動なしにS3連携サービスと連携させたいなと思ったことはありますか? 私はあります。

既存のデータをデータレイクと連携させる場合や生成AIに読み込ませるときにネックになるのがデータの移動です。

連携対象のサービスがS3互換のインターフェイスしか持っていないことがあります。元となるデータがFSxやEFSにある場合、DataSyncなどのサービスやツールを使って、その連携サービスが使用するS3バケットへデータを同期させる必要があります。データを同期させる場合はデータ同期にかかる時間やコストが気になります。例えばRAG用途でBedrock knowledge baseと連携させたい場合、定期的にデータ同期をしなければ古い情報を返してしまうことになるでしょう。

今回アップデートでAmazon FSx for OpenZFS(以降FSxZ)のボリュームにAmazon S3のアクセスポイントをアタッチできるようになりました。

https://aws.amazon.com/jp/about-aws/whats-new/2025/06/amazon-fsx-openzfs-amazon-s3-access/

要するにファイル操作のプロトコルとしてNFS以外にもS3 APIが使用できるようになりました。

これにより、FSxZ上のファイルを移動させずとも、Quick SuiteやAthena、Bedrock Knowledge base、Q BusinessといったS3連携のサービスと連携できるようになります。特に「データを何とかAWSに持って来れたけれども、AWSの各種サービスを利用してデータをもっと活用したい」という場面において非常に嬉しいのではないでしょうか。移動コストが0であるため、分析するためのストレージを別途用意する必要なく、分析処理のみに注力することができます。

オンプレミスからNFSで受け取ったファイルをAWSのデータ分析サービスを用いて処理するといったことも行いやすくなります。

連携イメージ.png

AWS BlogsにもBedrock knowledge baseとの連携例が紹介されていますね。

https://aws.amazon.com/jp/blogs/news/amazon-fsx-for-openzfs-now-supports-amazon-s3-access-without-any-data-movement/

S3アクセスポイントのアタッチ機能関連のAWS公式ドキュメントは以下です。迷った時はこちらを参照しましょう。

https://docs.aws.amazon.com/fsx/latest/OpenZFSGuide/s3accesspoints-for-FSx.html

実際に触ってみます。

いきなりまとめ

  • FSxZのボリュームにS3アクセスポイントをアタッチできるようになった
    • NFS経由で作成したファイルにS3 APIで操作をしたり、S3 API経由で作成したファイルにNFS経由で操作できるようになった
    • 一つのボリュームに複数のS3アクセスポイントをアタッチすることも可能
  • 主な注意点は以下
    • S3アクセスポイント名は同一AWSアカウントとAWSリージョン内で一意である必要がある
    • S3アクセスポイント名の末尾に-ext-s3aliasを付与することはできない
    • S3アクセスポイントをアタッチできるのは Multi-AZとSingle-AZ HAのファイルシステムのみ
    • FSxZファイルシステムにアタッチ可能なS3アクセスポイント数はFSxZファイルシステムに設定したスループットキャパシティに依存する
    • S3 ACLはサポートされていない
    • ブロックパブリックアクセス設定をオフにすることはできない
    • マルチパートアップロードは 5 GB に制限される
    • FSxZファイルシステムと同一アカウントでのみS3アクセスポイントをアタッチできる
    • アクセスポイントを作成した後は、別のバケットまたはFSx for OpenZFSボリュームに関連付けることはできない
    • サーバーサイド暗号化方式でSSE_FSX以外を指定することはできない
  • レイテンシーはS3バケットと同等、パフォーマンスはFSxZファイルシステムのスループットキャパシティとSSD IOPSの影響を受ける
  • S3 APIのアクセス制御は以下で行う
    • ネットワークオリジン
    • アクセスポイントポリシー
  • 料金はS3 APIのリクエストのみ
    • S3 Express One Zoneと同等
    • その他の追加料金はなし
  • 「アクセスポイントポリシー上で問題ないのに読み書きができない」という場合はアクセスポイントに設定したUIDとGIDが、対象ディレクトリおよびファイルへの権限を持っているかを確認しよう
    • S3 APIで操作をする際に、NFSの世界の権限も意識する必要がある

できること

FSxZのボリュームにS3アクセスポイントをアタッチすることで行うことができる操作は以下のとおりです。

S3 オペレーション S3 バケットにアタッチされたアクセスポイント FSx for OpenZFS ボリュームにアタッチされたアクセスポイント
AbortMultipartUpload サポート サポート対象
CompleteMultipartUpload サポート対象 サポート
CopyObject (同じリージョンへのコピーのみ) サポート 送信元と送信先が同じアクセスポイントである場合にサポートされます
CreateMultipartUpload サポート サポート対象
DeleteObject サポート対象 サポート対象
DeleteObjects サポート対象 サポート対象
DeleteObjectTagging サポート対象 サポート対象
GetBucketAcl サポート サポート外
GetBucketCors サポート サポート外
GetBucketLocation サポート対象 サポート対象
GetBucketNotificationConfiguration サポート サポート外
GetBucketPolicy サポート サポート外
GetObject サポート対象 サポート対象
GetObjectAcl サポート サポート外
GetObjectAttributes サポート対象 サポート対象
GetObjectLegalHold サポート サポート外
GetObjectRetention サポート サポート外
GetObjectTagging サポート対象 サポート対象
HeadBucket サポート対象 サポート対象
HeadObject サポート対象 サポート対象
ListMultipartUploads サポート対象 サポート対象
ListObjects サポート対象 サポート対象
ListObjectsV2 サポート対象 サポート対象
ListObjectVersions サポート サポート外
ListParts サポート対象 サポート対象
Presign サポート対象 サポート対象
PutObject サポート対象 サポート対象
PutObjectAcl サポート サポート外
PutObjectLegalHold サポート サポート外
PutObjectRetention サポート サポート外
PutObjectTagging サポート対象 サポート対象
RestoreObject サポート サポート外
UploadPart サポート対象 サポート
UploadPartCopy (同じリージョンへのコピーのみ) サポート 送信元と送信先が同じアクセスポイントである場合にサポートされます

抜粋 : アクセスポイントの互換性 - Amazon Simple Storage Service

オブジェクトの操作一通りできそうですね。

注意が必要そうなのはCopyObjectがサポートされていない点でしょうか。S3バケットからデータをコピーする/される際は都度GetObjectPutObjectを行う必要がありそうです。

性能

S3アクセスポイントの性能は以下のとおりです。

  • レイテンシー : S3バケットと同等
  • スループットおよびrps : FSxZのスループットキャパシティとSSD IOPS次第

要するに性能を上げたければスループットキャパシティとSSD IOPSを調整しろということのようです。

該当のドキュメントは以下です。

Performance on S3 access points

Amazon S3 access points for FSx for OpenZFS file systems deliver latency in the tens of milliseconds range, consistent with S3 bucket access. Requests per second and throughput performance scale with your Amazon FSx file system's provisioned throughput and SSD. For example, your applications can achieve up to 3,500 PUT or 5,500 GET requests per second (consistent with what you can achieve per Amazon S3 partitioned prefix) and 3.5 GBps of write (PUT) throughput and 10 GBps of read (GET) throughput on a file system provisioned with the maximum throughput capacity level.

Performance for Amazon FSx for OpenZFS - FSx for OpenZFS

制約事項

主な制約事項は以下のとおりです。

  • S3アクセスポイント名は同一AWSアカウントとAWSリージョン内で一意である必要がある
  • S3アクセスポイント名の末尾に-ext-s3aliasを付与することはできない
  • S3アクセスポイントをアタッチできるのは Multi-AZとSingle-AZ HAのファイルシステムのみ
    • Single-AZ non-HAでS3アクセスポイントをアタッチしようとするとCannot create and attach an S3 access point to file system with 'SINGLE_AZ_2' deployment type.とエラーになる
      9.Cannot create and attach an S3 access point to file system with 'SINGLE_AZ_2' deployment type..png
  • FSxZファイルシステムにアタッチ可能なS3アクセスポイント数はFSxZファイルシステムに設定したスループットキャパシティに依存する
    • Single-AZ 2 HA および Multi-AZ ファイルシステムの場合、おおよそ160MBpsあたり4つまで
  • S3 ACLはサポートされていない
  • ブロックパブリックアクセス設定をオフにすることはできない
  • マルチパートアップロードは 5 GB に制限される
  • FSxZファイルシステムと同一アカウントでのみS3アクセスポイントをアタッチできる
  • アクセスポイントを作成した後は、別のバケットまたはFSx for OpenZFSボリュームに関連付けることはできない
  • サーバーサイド暗号化方式でSSE_FSX以外を指定することはできない

参考 :

S3アクセスポイントのアタッチ上限は特に注意が必要でしょう。

また、アップロードの上限は5GBということで、サイズが大きいオブジェクトを生成するワークロードにおいて、S3アクセスポイントを出力先としてする場合も注意が必要です。

アクセス制御

S3 APIのアクセス制御は通常のS3アクセスポイントとおおよそ同じく以下で行います。

  • ネットワークオリジン
  • アクセスポイントポリシー

ブロックパブリックアクセスは全て有効で固定です。

ネットワークオリジンは以下で紹介されているとおり、アクセスポイント作成後は変更できません。注意しましょう。

アクセスポイントを作成するときに、そのアクセスポイントをインターネットからアクセス可能にするか、特定の 仮想プライベートクラウド (VPC) からのリクエストにのみアクセスを制限するかを指定できます。インターネットからアクセス可能なアクセスポイントは、Internet をネットワークオリジンとすると言います。この種のアクセスポイントは、インターネット上のどこからでも利用できます。ただし、このアクセスポイントや、基となるデータソース、関連リソース (リクエストされたオブジェクトなど) に関する他のすべてのアクセス制限に従うことを条件とします。指定された VPC からのみアクセス可能なアクセスポイントは VPC をネットワークオリジンとします。Amazon S3 は、アクセスポイントに対するその VPC からのリクエストを除いて、他のすべてのリクエストを拒否します。

重要
アクセスポイントのネットワークオリジンは、アクセスポイントの作成時にのみ指定できます。アクセスポイントの作成後は、そのネットワークオリジンを変更できません。

アクセスポイントを VPC からのアクセスにのみ制限するには、アクセスポイントを作成するリクエストに VpcConfiguration パラメータを含めます。VpcConfiguration パラメータには、アクセスポイントを使用できるようにする VPC ID を指定します。アクセスポイントを介してリクエストが行われた場合、リクエストは VPC から発信されている必要があり、そうでない場合、Amazon S3 はそれを拒否します。

アクセスポイントのネットワークオリジンを取得するには、AWS CLI、AWS SDK、または REST API を使用します。アクセスポイントに VPC 設定が指定されている場合、そのネットワークオリジンは VPC です。それ以外の場合、アクセスポイントのネットワークオリジンは Internet です。

Virtual Private Cloud に制限されたアクセスポイントの作成 - Amazon Simple Storage Service

通常のS3バケットのようにで動作させたいのであれば、ネットワークオリジンはインターネットで良いと考えます。

料金

FSxZのS3アクセスポイントのアタッチ機能の料金は以下のとおりです。

S3 リクエスト

FSx for OpenZFS ファイルシステムにアタッチされた S3 Access Point に対して実行された S3 リクエストについての料金をお支払いいただきます。S3 リクエストのコストは、リクエストタイプに応じて異なります。下記の表に記載されているリクエストの量に基づいて課金されます。API/SDK を使用してリクエストした場合と同額の料金が発生します。

リージョン : アジアパシフィック (東京)

PUT、COPY、POST、LIST リクエスト (1,000 リクエストあたり) GET、他のすべてのリクエスト (1,000 件のリクエストあたり)
FSx for OpenZFS USD 0.00108 USD 0.000029

OpenZFS ファイルシステム – Amazon FSx for OpenZFS の料金 – AWS

S3アクセスポイントを有効化すること自体については課金は発生せず、S3 APIリクエストについて課金が発生します。

このリクエストの料金ですが、S3の料金を確認したところ、これは同じリージョンS3 Express One Zoneの料金と同じでした。S3 Standardの料金よりもお安く使用できるのは大きいですね。

コスト面でも優れていることから、データの耐久性の向上やライフサイクルポリシーの利用など、S3ならではのメリットを特に必要としない場合は敢えてデータの移動を行わないという戦略も十分あり得るでしょう。

やってみた

検証環境

実際に触ってみます。

検証環境は以下のとおりです。

検証環境構成図.png

FSxZファイルシステムはSingle-AZ HAで構築をします。

1_1.ファイルシステムの作成.png

デフォルトボリュームの子ボリュームvol1を作成します。

2_1.子ボリュームの作成.png

ボリューム一覧は以下のとおりです。

3_1.ボリューム一覧.png

S3アクセスポイントのアタッチ

ボリュームへS3アクセスポイントのアタッチを行います。

4.S3 アクセスポイントのアタッチメント.png

アクセスポイント名やPOSIXユーザーID、グループID、ネットワークオリジンを設定します。

5.non-97-fsxz-s3-fsx-1_1.png

VPCを選択する場合は単一のVPC IDを指定できます。

7.non-97-fsxz-s3-fsx-1_2.png

先述の通りFSxZファイルシステムにアタッチできるS3アクセスポイント数の上限はそこまで余裕はないため、多数のVPCと連携が必要な場合はインターネットにするのも選択肢に入るでしょう。

アクセスポリシーは空に設定します。

8.non-97-fsxz-s3-fsx-1_3.png

S3アクセスポイントのアタッチメント処理が行われています。

10.アクセスポイント「non-97-fsxz-s3-fsx-1」を作成してこのボリュームにアタッチするリクエストが進行中です.png

10秒ほどでステータスがAvailableになりました。

11.作成完了.png

S3のコンソールからも先ほどアタッチしたS3アクセスポイントを確認できました。

12.S3アクセスポイント一覧.png

詳細も以下のように確認できます。

14.アクセスポイントの詳細.png

一方、FSxのコンソールからアクセスポイントの詳細を確認しようとすると、アクセスポイントの詳細をロード中にエラーが発生しました。とエラーになってしまいました。

13.アクセスポイントの詳細をロード中にエラーが発生しました。.png

もう一つのボリュームにもS3アクセスポイントをアタッチします。先ほどのものとはユーザーID、グループID、ネットワークオリジンを変更しています。

15.non-97-fsxz-s3-vol1-1.png

アクセスポイント一覧は以下のとおりです。

16.アクセスポイント一覧.png

また、以降の検証で使用はしないのですが一つのボリュームに複数のS3アクセスポイントをアタッチできることも確認しました。

18.一つのボリュームに複数のS3アクセスポイントを作成.png

ただし、スループットキャパシティに対応した数以上のS3アクセスポイントをアタッチしようとすると、以下のようにエラーになりました。

Amazon FSx is unable to process this request because your file system has more than 4 S3 Access Points attached to it. Amazon FSx does not support having more than 4 S3 Access Points for an OPENZFS file system with 160 MBps of throughput capacity.

NFSで追加したファイルをS3 APIで読み込み

まず、NFSで追加したファイルをS3 APIで読み込みます。

FSxZをNFSv4.2でマウントします。

$ df -hT
Filesystem       Type      Size  Used Avail Use% Mounted on
devtmpfs         devtmpfs  4.0M     0  4.0M   0% /dev
tmpfs            tmpfs     453M     0  453M   0% /dev/shm
tmpfs            tmpfs     181M  408K  181M   1% /run
/dev/nvme0n1p1   xfs       8.0G  2.8G  5.3G  35% /
tmpfs            tmpfs     453M     0  453M   0% /tmp
/dev/nvme0n1p128 vfat       10M  1.3M  8.7M  13% /boot/efi

$ ls -l /mnt/
total 0
drwxr-xr-x. 2 root root  6 Oct 15 08:36 express-s3
drwxr-xr-x. 2 root root  6 Sep 22 09:02 fsxl
drwxr-xr-x. 2 root root  6 Sep 30 04:42 fsxz
drwxr-xr-x. 2 root root 22 Oct 15 08:43 s3

$ ls -ld /mnt/fsxz
drwxr-xr-x. 2 root root 6 Sep 30 04:42 /mnt/fsxz

$ sudo mount -t nfs -o noatime,nfsvers=4.2,sync,nconnect=16,rsize=1048576,wsize=1048576 fs-0cf9019876e46ac08.fsx.us-east-1.amazonaws.com:/fsx/ /mnt/fsxz

$ df -hT
Filesystem                                            Type      Size  Used Avail Use% Mounted on
devtmpfs                                              devtmpfs  4.0M     0  4.0M   0% /dev
tmpfs                                                 tmpfs     453M     0  453M   0% /dev/shm
tmpfs                                                 tmpfs     181M  420K  181M   1% /run
/dev/nvme0n1p1                                        xfs       8.0G  2.8G  5.3G  35% /
tmpfs                                                 tmpfs     453M     0  453M   0% /tmp
/dev/nvme0n1p128                                      vfat       10M  1.3M  8.7M  13% /boot/efi
tmpfs                                                 tmpfs      91M     0   91M   0% /run/user/0
fs-0cf9019876e46ac08.fsx.us-east-1.amazonaws.com:/fsx nfs4       64G     0   64G   0% /mnt/fsxz

$ mount | grep nfs
sunrpc on /var/lib/nfs/rpc_pipefs type rpc_pipefs (rw,relatime)
fs-0cf9019876e46ac08.fsx.us-east-1.amazonaws.com:/fsx on /mnt/fsxz type nfs4 (rw,noatime,sync,vers=4.2,rsize=1048576,wsize=1048576,namlen=255,hard,proto=tcp,nconnect=16,timeo=600,retrans=2,sec=sys,clientaddr=10.10.0.11,local_lock=none,addr=10.10.0.4)

$ ls -l /mnt/fsxz
total 25
drwxrwxrwx. 3 root root 3 Nov 10 05:20 vol1
$ ls -l /mnt/fsxz/vol1
total 0

$ df -hT -t nfs4
Filesystem                                                 Type  Size  Used Avail Use% Mounted on
fs-0cf9019876e46ac08.fsx.us-east-1.amazonaws.com:/fsx      nfs4   64G     0   64G   0% /mnt/fsxz
fs-0cf9019876e46ac08.fsx.us-east-1.amazonaws.com:/fsx/vol1 nfs4   16G     0   16G   0% /mnt/fsxz/vol1

明示的なマウントコマンドを実行しなくとも、fsxボリュームから辿ることでvol1もマウントされました。

それでは、FSxZボリュームに適当にファイルを追加します。

$ sudo mkdir -p /mnt/fsxz/tier1/tier2
$ sudo mkdir -p /mnt/fsxz/vol1/tier1/tier2

$ echo "/mnt/fsxz/tier1/text1.txt" | sudo tee /mnt/fsxz/tier1/text1.txt > /dev/null
$ echo "/mnt/fsxz/tier1/text2.txt" | sudo tee /mnt/fsxz/tier1/text2.txt > /dev/null
$ echo "/mnt/fsxz/tier1/tier2/text1.txt" | sudo tee /mnt/fsxz/tier1/tier2/text1.txt > /dev/null
$ echo "/mnt/fsxz/vol1/text1.txt" | sudo tee /mnt/fsxz/vol1/text1.txt > /dev/null
$ echo "/mnt/fsxz/vol1/text2.txt" | sudo tee /mnt/fsxz/vol1/text2.txt > /dev/null
$ echo "/mnt/fsxz/vol1/tier1/text1.txt" | sudo tee /mnt/fsxz/vol1/tier1/text1.txt > /dev/null
$ echo "/mnt/fsxz/vol1/tier1/tier2/text1.txt" | sudo tee /mnt/fsxz/vol1/tier1/tier2/text1.txt > /dev/null

$ tree /mnt/fsxz
/mnt/fsxz
├── tier1
│   ├── text1.txt
│   ├── text2.txt
│   └── tier2
│       └── text1.txt
└── vol1
    ├── text1.txt
    ├── text2.txt
    └── tier1
        ├── text1.txt
        └── tier2
            └── text1.txt

それでは、追加したファイルに対してS3 APIを用いて読み込みできるか確認します。

EC2インスタンスから以下のようにAWS CLIで実行します。

$ aws s3 ls non-97-fsxz-s3-f-xwwqkuy7iok1jwyf6j8sy9btybeoguse1b-ext-s3alias
                           PRE tier1/

$ aws s3 ls s3://arn:aws:s3:us-east-1:<AWSアカウントID>:accesspoint/non-97-fsxz-s3-fsx-1
                           PRE tier1/

$ aws s3 ls arn:aws:s3:us-east-1:<AWSアカウントID>:accesspoint/non-97-fsxz-s3-fsx-1
                           PRE tier1/

$ aws s3 ls non-97-fsxz-s3-f-xwwqkuy7iok1jwyf6j8sy9btybeoguse1b-ext-s3alias --recursive
2025-11-10 05:44:06         26 tier1/text1.txt
2025-11-10 05:44:36         26 tier1/text2.txt
2025-11-10 05:45:04         32 tier1/tier2/text1.txt

$ aws s3 ls s3://arn:aws:s3:us-east-1:<AWSアカウントID>:accesspoint/non-97-fsxz-s3-vol1-1 --recursive
2025-11-10 05:46:05         25 text1.txt
2025-11-10 05:46:16         25 text2.txt
2025-11-10 05:46:36         31 tier1/text1.txt
2025-11-10 05:47:43         37 tier1/tier2/text1.txt

$ aws s3api head-object \
  --bucket arn:aws:s3:us-east-1:<AWSアカウントID>:accesspoint/non-97-fsxz-s3-vol1-1 \
  --key tier1/text1.txt
{
    "AcceptRanges": "bytes",
    "LastModified": "2025-11-10T05:46:36+00:00",
    "ContentLength": 31,
    "ETag": "\"229c69e65bc10692d959d91cefe9ee96-1\"",
    "ContentType": "binary/octet-stream",
    "ServerSideEncryption": "aws:fsx",
    "Metadata": {},
    "StorageClass": "FSX_OPENZFS",
    "PartsCount": 0
}

$ aws s3api list-objects-v2 --bucket arn:aws:s3:us-east-1:<AWSアカウントID>:accesspoint/non-97-fsxz-s3-fsx-1
{
    "Contents": [
        {
            "Key": "tier1/text1.txt",
            "LastModified": "2025-11-10T05:44:06.147000+00:00",
            "ETag": "\"48a7c02dbbb8c760e444b794d14f927d-1\"",
            "Size": 26,
            "StorageClass": "FSX_OPENZFS"
        },
        {
            "Key": "tier1/text2.txt",
            "LastModified": "2025-11-10T05:44:36.586000+00:00",
            "ETag": "\"2d350d31d8c7dbf1e5e7ac04dd8ba348-1\"",
            "Size": 26,
            "StorageClass": "FSX_OPENZFS"
        },
        {
            "Key": "tier1/tier2/text1.txt",
            "LastModified": "2025-11-10T05:45:04.486000+00:00",
            "ETag": "\"065d3e18b45b4a528001d1887b3b15bf-1\"",
            "Size": 32,
            "StorageClass": "FSX_OPENZFS"
        }
    ],
    "RequestCharged": null,
    "Prefix": ""
}

$ aws s3api list-objects-v2 --bucket arn:aws:s3:us-east-1:<AWSアカウントID>:accesspoint/non-97-fsxz-s3-vol1-1
{
    "Contents": [
        {
            "Key": "text1.txt",
            "LastModified": "2025-11-10T05:46:05.945000+00:00",
            "ETag": "\"d00560f61be2d5c7b18e36cf8a28b346-1\"",
            "Size": 25,
            "StorageClass": "FSX_OPENZFS"
        },
        {
            "Key": "text2.txt",
            "LastModified": "2025-11-10T05:46:16.955000+00:00",
            "ETag": "\"712007676fbd015d6d297293e0b8de16-1\"",
            "Size": 25,
            "StorageClass": "FSX_OPENZFS"
        },
        {
            "Key": "tier1/text1.txt",
            "LastModified": "2025-11-10T05:46:36.085000+00:00",
            "ETag": "\"229c69e65bc10692d959d91cefe9ee96-1\"",
            "Size": 31,
            "StorageClass": "FSX_OPENZFS"
        },
        {
            "Key": "tier1/tier2/text1.txt",
            "LastModified": "2025-11-10T05:47:43.694000+00:00",
            "ETag": "\"b96b3a3da95e008e1c4c39996320b58f-1\"",
            "Size": 37,
            "StorageClass": "FSX_OPENZFS"
        }
    ],
    "RequestCharged": null,
    "Prefix": ""
}

NFSで追加したファイルの確認ができました。fsx(/fsx)vol1(/fsx/vol1)のようにジャンクションパスが階層構造になっている場合はaws s3 lsの結果はどうなるのかなと思ったのですが、別ボリュームなので個別でアクセスが必要ということも分かりました。

S3 APIで取得したオブジェクトを標準出力で出力します。

$ aws s3 cp s3://arn:aws:s3:us-east-1:<AWSアカウントID>:accesspoint/non-97-fsxz-s3-fsx-1/tier1/text1.txt -
/mnt/fsxz/tier1/text1.txt

$ aws s3 cp s3://arn:aws:s3:us-east-1:<AWSアカウントID>:accesspoint/non-97-fsxz-s3-vol1-1/tier1/tier2/text1.txt -
/mnt/fsxz/vol1/tier1/tier2/text1.txt

問題なく動作しました。

手元の端末でも確認します。

> aws s3 cp s3://arn:aws:s3:us-east-1:<AWSアカウントID>:accesspoint/non-97-fsxz-s3-fsx-1/tier1/text1.txt -
/mnt/fsxz/tier1/text1.txt

> aws s3 cp s3://arn:aws:s3:us-east-1:<AWSアカウントID>:accesspoint/non-97-fsxz-s3-vol1-1/tier1/tier2/text1.txt -
download failed: s3://arn:aws:s3:us-east-1:<AWSアカウントID>:accesspoint/non-97-fsxz-s3-vol1-1/tier1/tier2/text1.txt to - An error occurred (403) when calling the HeadObject operation: Forbidden

> aws s3api list-objects-v2 --bucket arn:aws:s3:us-east-1:<AWSアカウントID>:accesspoint/non-97-fsxz-s3-fsx-1
{
    "Contents": [
        {
            "Key": "tier1/text1.txt",
            "LastModified": "2025-11-10T05:44:06.147000+00:00",
            "ETag": "\"48a7c02dbbb8c760e444b794d14f927d-1\"",
            "Size": 26,
            "StorageClass": "FSX_OPENZFS"
        },
        {
            "Key": "tier1/text2.txt",
            "LastModified": "2025-11-10T05:44:36.586000+00:00",
            "ETag": "\"2d350d31d8c7dbf1e5e7ac04dd8ba348-1\"",
            "Size": 26,
            "StorageClass": "FSX_OPENZFS"
        },
        {
            "Key": "tier1/tier2/text1.txt",
            "LastModified": "2025-11-10T05:45:04.486000+00:00",
            "ETag": "\"065d3e18b45b4a528001d1887b3b15bf-1\"",
            "Size": 32,
            "StorageClass": "FSX_OPENZFS"
        }
    ],
    "RequestCharged": null,
    "Prefix": ""
}

> aws s3api list-objects-v2 --bucket arn:aws:s3:us-east-1:<AWSアカウントID>:accesspoint/non-97-fsxz-s3-vol1-1

An error occurred (AccessDenied) when calling the ListObjectsV2 operation: User: arn:aws:sts::<AWSアカウントID>:assumed-role/<IAMロール名>/<セッション名> is not authorized to perform: s3:ListBucket on resource: "arn:aws:s3:us-east-1:<AWSアカウントID>:accesspoint/non-97-fsxz-s3-vol1-1" with an explicit deny in a resource-based policy

ボリュームfsxのS3アクセスポイントを介した操作では問題なく操作できましたが、ネットワークオリジンをインターネットではなくVPCにしているためvol1のS3アクセスポイントを介した操作ではエラーとなりました。

S3 APIを用いたファイルの追加

続いて、S3 APIを用いたファイルの追加を行います。

手元の端末からAWS CLIを用いてローカルのファイルをアップロードします。

> aws s3api put-object \
  --bucket arn:aws:s3:us-east-1:<AWSアカウントID>:accesspoint/non-97-fsxz-s3-fsx-1 \
  --key 5.non-97-fsxz-s3-fsx-1_1.png \
  --body images/5.non-97-fsxz-s3-fsx-1_1.png

{
    "ETag": "\"3bd4fc525042a56825bbdd0ddcddcfdf\"",
    "ChecksumCRC64NVME": "B2C1KBBWVsc=",
    "ChecksumType": "FULL_OBJECT",
    "ServerSideEncryption": "aws:fsx"
}

> echo test.txt > test.txt
> aws s3api put-object \
  --bucket arn:aws:s3:us-east-1:<AWSアカウントID>:accesspoint/non-97-fsxz-s3-fsx-1 \
  --key test.txt \
  --body test.txt
{
    "ETag": "\"bbfa1f311a5828452b953d1335cbf027\"",
    "ChecksumCRC64NVME": "Q6hHjd9gzNc=",
    "ChecksumType": "FULL_OBJECT",
    "ServerSideEncryption": "aws:fsx"
}

> aws s3api head-object \
  --bucket arn:aws:s3:us-east-1:<AWSアカウントID>:accesspoint/non-97-fsxz-s3-fsx-1 \
  --key 5.non-97-fsxz-s3-fsx-1_1.png
{
    "AcceptRanges": "bytes",
    "LastModified": "2025-11-10T07:18:47+00:00",
    "ContentLength": 254424,
    "ETag": "\"3bd4fc525042a56825bbdd0ddcddcfdf\"",
    "ContentType": "binary/octet-stream",
    "ServerSideEncryption": "aws:fsx",
    "Metadata": {},
    "StorageClass": "FSX_OPENZFS",
    "PartsCount": 0
}

> aws s3api head-object \
  --bucket arn:aws:s3:us-east-1:<AWSアカウントID>:accesspoint/non-97-fsxz-s3-fsx-1 \
  --key test.txt
{
    "AcceptRanges": "bytes",
    "LastModified": "2025-11-10T07:30:25+00:00",
    "ContentLength": 9,
    "ETag": "\"bbfa1f311a5828452b953d1335cbf027\"",
    "ContentType": "binary/octet-stream",
    "ServerSideEncryption": "aws:fsx",
    "Metadata": {},
    "StorageClass": "FSX_OPENZFS",
    "PartsCount": 0
}

問題なくアップロードできました。

NFSクライアントからファイルを確認します。

$ ls -l /mnt/fsxz/
total 298
-rw-r--r--. 1 ec2-user ec2-user 254424 Nov 10 07:18 5.non-97-fsxz-s3-fsx-1_1.png
-rw-r--r--. 1 ec2-user ec2-user      9 Nov 10 07:30 test.txt
drwxr-xr-x. 3 nobody   nobody        5 Nov 10 05:44 tier1
drwxrwxrwx. 4 root     root          6 Nov 10 05:46 vol1

$ ls -ln /mnt/fsxz/
total 298
-rw-r--r--. 1  1000  1000 254424 Nov 10 07:18 5.non-97-fsxz-s3-fsx-1_1.png
-rw-r--r--. 1  1000  1000      9 Nov 10 07:30 test.txt
drwxr-xr-x. 3 65534 65534      5 Nov 10 05:44 tier1
drwxrwxrwx. 4     0     0      6 Nov 10 05:46 vol1

$ cat /mnt/fsxz/test.txt
test.txt

確かに追加されていますね。また、追加されたファイルのUIDとGIDがS3アクセスポイントで指定したものになっていました。

EC2インスタンスからも同様にローカルのファイルをPutObjectでアップロードします。

$ ls -l test.txt
-rw-rw-r--. 1 ec2-user ec2-user 88905 Oct 15 06:28 test.txt

$ head test.txt
test1
test2
test3
test4
test5
test6
test7
test8
test9
test10

$ aws s3api put-object \
  --bucket arn:aws:s3:us-east-1:<AWSアカウントID>:accesspoint/non-97-fsxz-s3-vol1-1 \
  --key test.txt \
  --body test.txt
{
    "ETag": "\"6dcf56682273030af2ba93015d5090fd\"",
    "ChecksumCRC64NVME": "5saWoFcRI4E=",
    "ChecksumType": "FULL_OBJECT",
    "ServerSideEncryption": "aws:fsx"
}

$ ls -l /mnt/fsxz/vol1
total 54
-rw-r--r--. 1 root   root   88905 Nov 10 09:14 test.txt
-rw-r--r--. 1 nobody nobody    25 Nov 10 05:46 text1.txt
-rw-r--r--. 1 nobody nobody    25 Nov 10 05:46 text2.txt
drwxr-xr-x. 3 nobody nobody     4 Nov 10 05:47 tier1

$ ls -ln /mnt/fsxz/vol1
total 54
-rw-r--r--. 1     0     0 88905 Nov 10 09:14 test.txt
-rw-r--r--. 1 65534 65534    25 Nov 10 05:46 text1.txt
-rw-r--r--. 1 65534 65534    25 Nov 10 05:46 text2.txt
drwxr-xr-x. 3 65534 65534     4 Nov 10 05:47 tier1

問題なく行えました。こちらのS3アクセスポイントではUIDとGIDを0にしたため、rootにマッピングされていますね。

S3バケット間とのCopyObjectを行えないことの確認

次にS3バケット間とのCopyObjectを行えないことを確認します。

適当なS3バケットにオブジェクトをコピーしようとします。

> aws s3api copy-object \
  --copy-source arn:aws:s3:us-east-1:<AWSアカウントID>:accesspoint/non-97-fsxz-s3-fsx-1/object/test.txt \
  --bucket aurora-postgresql-log  \
  --key test.txt

An error occurred (NotImplemented) when calling the CopyObject operation: An access point you provided implies functionality that is not implemented

はい、アクセスポイントで実装されていない機能を呼び出そうとしてエラーになりました。

次に同一のS3アクセスポイント間でオブジェクトをコピーします。

> aws s3api copy-object \
  --copy-source arn:aws:s3:us-east-1:<AWSアカウントID>:accesspoint/non-97-fsxz-s3-fsx-1/object/test.txt \
  --bucket arn:aws:s3:us-east-1:<AWSアカウントID>:accesspoint/non-97-fsxz-s3-fsx-1  \
  --key test_copy.txt
{
    "ServerSideEncryption": "aws:fsx",
    "CopyObjectResult": {
        "ETag": "\"e8ecf27f2bf8177075f0e3231e371782-1\"",
        "LastModified": "2025-11-10T07:57:47.143000+00:00",
        "ChecksumType": "FULL_OBJECT"
    }
}

こちらは正常に完了しました。

アクセスポイントポリシーを用いたアクセス制限

次にアクセスポイントポリシーを用いたアクセス制限を行います。

以下のように、fsxボリュームにアタッチしたS3アクセスポイントにポリシーを設定します。

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "Statement1",
            "Effect": "Deny",
            "Principal": {
                "AWS": "arn:aws:iam::<AWSアカウントID>:root"
            },
            "Action": "s3:*",
            "Resource": "arn:aws:s3:us-east-1:<AWSアカウントID>:accesspoint/non-97-fsxz-s3-fsx-1/object/tier1/tier2/*"
        }
    ]
}

tier1/tier2/配下の操作をできないようにしています。

動作確認をします。

$ aws s3api head-object \
  --bucket arn:aws:s3:us-east-1:<AWSアカウントID>:accesspoint/non-97-fsxz-s3-fsx-1 \
  --key tier1/text1.txt
{
    "AcceptRanges": "bytes",
    "LastModified": "2025-11-10T05:44:06+00:00",
    "ContentLength": 26,
    "ETag": "\"48a7c02dbbb8c760e444b794d14f927d-1\"",
    "ContentType": "binary/octet-stream",
    "ServerSideEncryption": "aws:fsx",
    "Metadata": {},
    "StorageClass": "FSX_OPENZFS",
    "PartsCount": 0
}

$ aws s3api head-object \
  --bucket arn:aws:s3:us-east-1:<AWSアカウントID>:accesspoint/non-97-fsxz-s3-fsx-1 \
  --key tier1/tier2/text1.txt

An error occurred (403) when calling the HeadObject operation: Forbidden

$ aws s3api copy-object \
  --copy-source arn:aws:s3:us-east-1:<AWSアカウントID>:accesspoint/non-97-fsxz-s3-fsx-1/object/test.txt \
  --bucket arn:aws:s3:us-east-1:<AWSアカウントID>:accesspoint/non-97-fsxz-s3-fsx-1  \
  --key tier1/tier2/test_copy.txt

An error occurred (AccessDenied) when calling the CopyObject operation: User: arn:aws:sts::<AWSアカウントID>:assumed-role/AmazonSSMRoleForInstancesQuickSetup/i-0e3b2df10bad6f2ac is not authorized to perform: s3:PutObject on resource: "arn:aws:s3:us-east-1:<AWSアカウントID>:accesspoint/non-97-fsxz-s3-fsx-1/object/tier1/tier2/test_copy.txt" with an explicit deny in a resource-based policy

意図したとおりでtier1/tier2配下のオブジェクトの参照および、追加をする際に拒否されました。

他の操作に影響がないことを確認するために、NFSクライアントから作成したディレクトリ配下にオブジェクトをコピーしようとします。

$ aws s3api copy-object \
  --copy-source arn:aws:s3:us-east-1:<AWSアカウントID>:accesspoint/non-97-fsxz-s3-fsx-1/object/test.txt \
  --bucket arn:aws:s3:us-east-1:<AWSアカウントID>:accesspoint/non-97-fsxz-s3-fsx-1  \
  --key tier1/test_copy.txt

An error occurred (AccessDenied) when calling the CopyObject operation: Access Denied

アクセスポイントポリシーに該当したことによる発生したエラーとエラーメッセージは異なりますが、拒否されてしまいます。

一方で、新規にディレクトリを作成するようにオブジェクトキーを作成すると正常に処理が完了しました。

$ aws s3api copy-object \
  --copy-source arn:aws:s3:us-east-1:<AWSアカウントID>:accesspoint/non-97-fsxz-s3-fsx-1/object/test.txt \
  --bucket arn:aws:s3:us-east-1:<AWSアカウントID>:accesspoint/non-97-fsxz-s3-fsx-1  \
  --key test/test_copy.txt

$ ls -l /mnt/fsxz
total 315
-rw-r--r--. 1 ec2-user ec2-user 254424 Nov 10 07:18 5.non-97-fsxz-s3-fsx-1_1.png
drwxrwxrwx. 2 ec2-user ec2-user      3 Nov 10 08:19 test
-rw-r--r--. 1 ec2-user ec2-user      9 Nov 10 07:30 test.txt
-rw-r--r--. 1 ec2-user ec2-user      9 Nov 10 08:15 test_copy.txt
drwxr-xr-x. 3 nobody   nobody        5 Nov 10 05:44 tier1
drwxrwxrwx. 4 root     root          6 Nov 10 05:46 vol1

$ ls -l /mnt/fsxz/test
total 9
-rw-r--r--. 1 ec2-user ec2-user 9 Nov 10 08:19 test_copy.txt

この挙動から親ディレクトリの権限をしっかりと見ていそうです。つまりはバケットポリシーで許可されている = 何でも書き込みできるという訳ではなく、NFSの世界の権限も気にする必要があるようです。

改めて動作確認をします。

適当にディレクトリを作成し、そこにオブジェクトを作成しようとします。

$ sudo mkdir -p /mnt/fsxz/test2

$ ls -ld /mnt/fsxz/test2
drwxr-xr-x. 2 nobody nobody 2 Nov 10 08:21 /mnt/fsxz/test2

$ ls -ld /mnt/fsxz/
drwxrwxrwx. 7 root root 10 Nov 10 08:21 /mnt/fsxz/

$ aws s3api copy-object \
  --copy-source arn:aws:s3:us-east-1:<AWSアカウントID>:accesspoint/non-97-fsxz-s3-fsx-1/object/test.txt \
  --bucket arn:aws:s3:us-east-1:<AWSアカウントID>:accesspoint/non-97-fsxz-s3-fsx-1  \
  --key test2/test_copy.txt

An error occurred (AccessDenied) when calling the CopyObject operation: Access Denied

拒否されました。

それでは、先ほど作成したディレクトリのパーミッションを777に変更した上で、同一の操作を行います。

$ sudo chmod 777 /mnt/fsxz/test2
$ ls -ld /mnt/fsxz/test2
drwxrwxrwx. 2 nobody nobody 2 Nov 10 08:21 /mnt/fsxz/test2

$ aws s3api copy-object \
  --copy-source arn:aws:s3:us-east-1:<AWSアカウントID>:accesspoint/non-97-fsxz-s3-fsx-1/object/test.txt \
  --bucket arn:aws:s3:us-east-1:<AWSアカウントID>:accesspoint/non-97-fsxz-s3-fsx-1  \
  --key test2/test_copy.txt
{
    "ServerSideEncryption": "aws:fsx",
    "CopyObjectResult": {
        "ETag": "\"5cd9f761885518d61394c57bca32a916-1\"",
        "LastModified": "2025-11-10T08:30:43.540000+00:00",
        "ChecksumType": "FULL_OBJECT"
    }
}

問題なく受け付けられました。「アクセスポイントポリシー上で問題ないのに読み書きができない」という場合はアクセスポイントに設定したUIDとGIDが、対象ディレクトリおよびファイルへの権限を持っているか確認しましょう。

続いて、マルチバイト文字を含むアクセスポイントポリシーが正常に動作するか確認します。

テスト1/test_copy.txtというキーでオブジェクトを作成します。

$ aws s3api copy-object \
  --copy-source arn:aws:s3:us-east-1:<AWSアカウントID>:accesspoint/non-97-fsxz-s3-fsx-1/object/test.txt \
  --bucket arn:aws:s3:us-east-1:<AWSアカウントID>:accesspoint/non-97-fsxz-s3-fsx-1  \
  --key テスト1/test_copy.txt
{
    "ServerSideEncryption": "aws:fsx",
    "CopyObjectResult": {
        "ETag": "\"027e305d44e8962718d21086fe978473-1\"",
        "LastModified": "2025-11-10T08:31:53.679000+00:00",
        "ChecksumType": "FULL_OBJECT"
    }
}

$ ls -l /mnt/fsxz
total 316
-rw-r--r--. 1 ec2-user ec2-user 254424 Nov 10 07:18 5.non-97-fsxz-s3-fsx-1_1.png
drwxrwxrwx. 2 ec2-user ec2-user      3 Nov 10 08:19 test
-rw-r--r--. 1 ec2-user ec2-user      9 Nov 10 07:30 test.txt
drwxrwxrwx. 2 nobody   nobody        3 Nov 10 08:30 test2
-rw-r--r--. 1 ec2-user ec2-user      9 Nov 10 08:15 test_copy.txt
drwxr-xr-x. 3 nobody   nobody        5 Nov 10 05:44 tier1
drwxrwxrwx. 4 root     root          6 Nov 10 05:46 vol1
drwxrwxrwx. 2 ec2-user ec2-user      3 Nov 10 08:31 テスト1

$ ls -l /mnt/fsxz/テスト1
total 9
-rw-r--r--. 1 ec2-user ec2-user 9 Nov 10 08:31 test_copy.txt

アクセスポイントポリシーを変更して、テスト1/*の操作を拒否するようにします。

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "Statement1",
            "Effect": "Deny",
            "Principal": {
                "AWS": "arn:aws:iam::<AWSアカウントID>:root"
            },
            "Action": "s3:*",
            "Resource": [
                "arn:aws:s3:us-east-1:<AWSアカウントID>:accesspoint/non-97-fsxz-s3-fsx-1/object/tier1/tier2/*",
                "arn:aws:s3:us-east-1:<AWSアカウントID>:accesspoint/non-97-fsxz-s3-fsx-1/object/テスト1/*"
            ]
        }
    ]
}

この状態でテスト1/*へ操作をしようとします。

$ aws s3api copy-object \
  --copy-source arn:aws:s3:us-east-1:<AWSアカウントID>:accesspoint/non-97-fsxz-s3-fsx-1/object/test.txt \
  --bucket arn:aws:s3:us-east-1:<AWSアカウントID>:accesspoint/non-97-fsxz-s3-fsx-1  \
  --key テスト1/test_copy2.txt

An error occurred (AccessDenied) when calling the CopyObject operation: User: arn:aws:sts::<AWSアカウントID>:assumed-role/AmazonSSMRoleForInstancesQuickSetup/i-0e3b2df10bad6f2ac is not authorized to perform: s3:PutObject on resource: "arn:aws:s3:us-east-1:984900217833:accesspoint/non-97-fsxz-s3-fsx-1/object/テスト1/test_copy2.txt" with an explicit deny in a resource-based policy

$ aws s3api copy-object \
  --copy-source arn:aws:s3:us-east-1:<AWSアカウントID>:accesspoint/non-97-fsxz-s3-fsx-1/object/test.txt \
  --bucket arn:aws:s3:us-east-1:<AWSアカウントID>:accesspoint/non-97-fsxz-s3-fsx-1  \
  --key テスト2/test_copy.txt
{
    "ServerSideEncryption": "aws:fsx",
    "CopyObjectResult": {
        "ETag": "\"e3afeaba70ff69abe239b4d956df25c9-1\"",
        "LastModified": "2025-11-10T08:33:51.658000+00:00",
        "ChecksumType": "FULL_OBJECT"
    }
}

$ aws s3api head-object \
  --bucket arn:aws:s3:us-east-1:<AWSアカウントID>:accesspoint/non-97-fsxz-s3-fsx-1 \
  --key テスト1/text_copy.txt

An error occurred (403) when calling the HeadObject operation: Forbidden

$ aws s3api head-object \
  --bucket arn:aws:s3:us-east-1:<AWSアカウントID>:accesspoint/non-97-fsxz-s3-fsx-1 \
  --key テスト2/test_copy.txt
{
    "AcceptRanges": "bytes",
    "LastModified": "2025-11-10T08:33:51+00:00",
    "ContentLength": 9,
    "ETag": "\"e3afeaba70ff69abe239b4d956df25c9-1\"",
    "ContentType": "binary/octet-stream",
    "ServerSideEncryption": "aws:fsx",
    "Metadata": {},
    "StorageClass": "FSX_OPENZFS",
    "PartsCount": 0
}

はい、明示的な拒否をしていないプレフィックス配下の読み書きは行えましたが、テスト1/*の該当するオブジェクトの操作は拒否されました。

ということで仮に日本語のようにマルチバイト文字を含んでいたとしても、アクセスポイントポリシーの制御はできそうですね。

ただし、アクセスポイントポリシーの上限は20KBという制約事項があります。マルチバイト文字を使って制御する量が多いと、こちらの制限に達することもあると思います。注意しましょう。

Access point policies are limited to 20 KB in size.

Access points naming rules, restrictions, and limitations - Amazon Simple Storage Service

大容量ファイルの操作

最後に大容量ファイルの操作の挙動を確認します。

マルチパートアップロードの上限が5GBという制約事項があるため、6GBのファイルをアップロードできるかを確認します。

まず、FSxZのボリュームに6GiBのファイルをNFS経由で書き込みます。

$ sudo dd if=/dev/urandom of=/mnt/fsxz/1MB_random_pattern_block_6GiB bs=1M count=6144 iflag=fullblock
6144+0 records in
6144+0 records out
6442450944 bytes (6.4 GB, 6.0 GiB) copied, 51.8133 s, 124 MB/s

$ ls -l /mnt/fsxz/1MB_random_pattern_block_6GiB
-rw-r--r--. 1 nobody nobody 6442450944 Nov 10 08:46 /mnt/fsxz/1MB_random_pattern_block_6GiB

aws s3 cpでファイルをアップロードします。

$ aws s3 cp /mnt/fsxz/1MB_random_pattern_block_6GiB s3://arn:aws:s3:us-east-1:<AWSアカウントID>:accesspoint/non-97-fsxz-s3-fsx-1/1MB_random_pattern_block_6GiB_copy
Completed 506.0 MiB/6.0 GiB (83.2 MiB/s) with 1 file(s) remaining

あともうちょっとです。

$ aws s3 cp /mnt/fsxz/1MB_random_pattern_block_6GiB s3://arn:aws:s3:us-east-1:<AWSアカウントID>:accesspoint/non-97-fsxz-s3-fsx-1/1MB_random_pattern_block_6GiB_copy
Completed 6.0 GiB/6.0 GiB (71.1 MiB/s) with 1 file(s) remaining

すると、最後の最後で最大サイズを超過しているとエラーになりました。

$ aws s3 cp /mnt/fsxz/1MB_random_pattern_block_6GiB s3://arn:aws:s3:us-east-1:<AWSアカウントID>:accesspoint/non-97-fsxz-s3-fsx-1/1MB_random_pattern_block_6GiB_copy
upload failed: ../../mnt/fsxz/1MB_random_pattern_block_6GiB to s3://arn:aws:s3:us-east-1:<AWSアカウントID>:accesspoint/non-97-fsxz-s3-fsx-1/1MB_random_pattern_block_6GiB_copy An error occurred (EntityTooLarge) when calling the CompleteMultipartUpload operation (reached max retries: 2): Your proposed upload exceeds the maximum allowed size

確かに5GB以上のファイルはアップロードできないことが分かりました。5GB以上のファイルをアップロードしたい場合はNFS経由で行いましょう。

6GiBのファイルのダウンロードも行います。

$ aws s3 cp s3://arn:aws:s3:us-east-1:<AWSアカウントID>:accesspoint/non-97-fsxz-s3-fsx-1/1MB_random_pattern_block_6GiB /mnt/fsxz/1MB_random_pattern_block_6GiB_copy
Completed 1.1 GiB/6.0 GiB (104.5 MiB/s) with 1 file(s) remaining

しばらくすると正常に完了しました。

$ aws s3 cp s3://arn:aws:s3:us-east-1:<AWSアカウントID>:accesspoint/non-97-fsxz-s3-fsx-1/1MB_random_pattern_block_6GiB /mnt/fsxz/1MB_random_pattern_block_6GiB_copy
download: s3://arn:aws:s3:us-east-1:<AWSアカウントID>:accesspoint/non-97-fsxz-s3-fsx-1/1MB_random_pattern_block_6GiB to ../../mnt/fsxz/1MB_random_pattern_block_6GiB_copy

$ ls -l /mnt/fsxz
total 12574014
-rw-r--r--. 1 nobody   nobody   6442450944 Nov 10 08:46 1MB_random_pattern_block_6GiB
-rw-rw-r--. 1 ec2-user ec2-user 6442450944 Nov 10 08:46 1MB_random_pattern_block_6GiB_copy
-rw-r--r--. 1 ec2-user ec2-user     254424 Nov 10 07:18 5.non-97-fsxz-s3-fsx-1_1.png
drwxrwxrwx. 2 ec2-user ec2-user          3 Nov 10 08:19 test
-rw-r--r--. 1 ec2-user ec2-user          9 Nov 10 07:30 test.txt
drwxrwxrwx. 2 nobody   nobody            3 Nov 10 08:30 test2
-rw-r--r--. 1 ec2-user ec2-user          9 Nov 10 08:15 test_copy.txt
drwxr-xr-x. 3 nobody   nobody            5 Nov 10 05:44 tier1
drwxrwxrwx. 4 root     root              6 Nov 10 05:46 vol1
drwxrwxrwx. 2 ec2-user ec2-user          3 Nov 10 08:31 テスト1
drwxrwxrwx. 2 ec2-user ec2-user          3 Nov 10 08:33 テスト2

$ date
Mon Nov 10 08:57:26 UTC 2025

良い感じですね。

ちなみに、こちらの検証をしていた際のCloudWatchメトリクスは以下のとおりです。

17.メトリクス.png

19.メトリクス2.png

S3 APIを介したファイルの読み書きに合わせて各種スループットやIOPSが激しく動いていることが分かります。

データの移動なしにS3 APIの口が必要なサービスと連携する必要な場合に

Amazon FSx for OpenZFSでS3アクセスポイントがサポートされ、ファイルシステム内に保存されたデータにS3 APIでアクセスできるようになったアップデートを紹介しました。

データの移動なしにS3 APIの口が必要なサービスと連携したい場合は必須です。個人的には早くAmazon FSx for NetApp ONTAPにも来てほしいですね。

この記事が誰かの助けになれば幸いです。

以上、クラウド事業本部 コンサルティング部の のんピ(@non____97)でした!

この記事をシェアする

FacebookHatena blogX

関連記事