🙈

AWS Transfer FamilyサーバーでSETSTATコマンドを無視する

2022/08/04に公開

AWS Transfer Familyサーバーで、SETSTATコマンドを無視できるようになりました。2022年6月のことです。

https://aws.amazon.com/jp/about-aws/whats-new/2022/06/aws-transfer-family-expands-server-configuration-options-set-clients/

ファイルをアップロードするとき、ファイル転送クライアントは SETSTAT コマンドを発行してリモートファイルの属性を変更します。ただし、SETSTAT コマンドはオブジェクトストレージシステムと互換性がないため、クライアントが Amazon S3 にファイルをアップロードするときにエラーが発生することがあります。今回のリリースによって、SETSTAT コマンドを無視するよう Transfer Family サーバーを設定し、SETSTAT が引き起こすエラーに悩まされずにファイルをアップロードできるようになりました。

無視するには、サーバーの作成時や更新時に ProtocolDetails オプションの SetStatOption の値を ENABLE_NO_OP にします。

  • When you call the CreateServer or UpdateServer API, use the ProtocolDetails option SetStatOption to ignore the error that is generated when the client attempts to use SETSTAT on a file you are uploading to an S3 bucket.
  • Set the value to ENABLE_NO_OP to have the Transfer Family server ignore the SETSTAT command, and upload files without needing to make any changes to your SFTP client.

https://docs.aws.amazon.com/transfer/latest/userguide/transfer-file.html#avoid-set-stat

なお、AWS CLIで設定する場合は、2.7.2以降を使う必要があります。

* api-change:``transfer``: AWS Transfer Family now supports SetStat server configuration option, which provides the ability to ignore SetStat command issued by file transfer clients, enabling customers to upload files without any errors.

https://raw.githubusercontent.com/aws/aws-cli/2.7.2/CHANGELOG.rst

実行例

$ aws transfer update-server \
>   --server-id s-***************** \
>   --protocol-details SetStatOption=ENABLE_NO_OP
{
    "ServerId": "s-*****************"
}

$ aws transfer describe-server \
>   --server-id s-***************** \
>   --query Server.ProtocolDetails
{
    "PassiveIp": "AUTO",
    "TlsSessionResumptionMode": "ENFORCED",
    "SetStatOption": "ENABLE_NO_OP"
}

古いAWS CLIでのエラー例

$ aws transfer update-server \
>   --server-id s-***************** \
>   --protocol-details SetStatOption=ENABLE_NO_OP

Parameter validation failed:
Unknown parameter in ProtocolDetails: "SetStatOption", must be one of: PassiveIp

Discussion