AWS Python SDK(boto3)のリソース・インターフェースが改修凍結されました

boto3のresourceインターフェースが使えなくなるわけではないのでご安心を
2023.01.19

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

2023/01/21更新

公式ドキュメントの記載が、"Warning"での"非推奨"と読み取れる表現から、"Note"の"改修凍結案内"に大きく変わったため、本ブログのタイトル・本文も、記載内容を大きく変えています。

AWS Python SDK(boto3)のドキュメントに、リソース・インターフェースの改修凍結の案内があったので、共有します。

注意

AWS Python SDKチームは、boto3のリソースインターフェイスに新しい機能を追加するつもりはありません。 既存のインターフェイスは、boto3のライフサイクルの間は引き続き機能します。顧客は、クライアントインターフェイスを通じて新しいサービスの機能にアクセスすることができます。

※ChatGPT翻訳

AWS Python SDK(boto3)のインターフェースについて

AWS Python SDK(boto3)には主に次の2インターフェースがあります。

1 : REST APIを呼び出すクライアント・インターフェース

import boto3
s3 = boto3.client('s3')
s3.list_buckets()

2 : ORMっぽくAWSリソースを操作するリソース・インターフェース

s3 = boto3.resource('s3')
obj = s3.Object(bucket_name='boto3', key='test.py')

AWS Python SDKチームによると、後者のリソース・インターフェースに対する機能追加や重要でないバグ修正は今後行われなくなる予定です。 改修凍結されるだけであり、既存コードが動かなくなることはありません

新しいAPIは、クライアント・インターフェース経由でお使いください。

当初の非推奨警告をフカヨミする

2023/01/09 ごろから、boto3 の Pull Request #3539により、次の警告文が記載されていました

警告

AWS Python SDKチームは、boto3のリソースインターフェイスをサポートすることをもう計画していません。リソースモデルを含む新しい変更の要求はもう受け付けられなくなり、次の主要バージョンのAWS SDK for Pythonではリソースインターフェイスがサポートされません。AWS SDKチームは、SDK間の機能の一貫性を達成するために努力しており、個別のSDKでカスタマイズされた抽象化を実装することは今後の継続可能な解決策ではありません。将来の新機能の要求は、クロスSDKレベルで検討する必要があります。

※ChatGPT翻訳

リソース・インターフェースに対して機能追加は今後行われず、次のメジャーバージョンでは廃止というインパクトの大きな告知です。警告(Warning)も納得です。

Reddit(スレッド1, スレッド2)でも多くの開発者が反応していました。

GitHubのboto3のDiscussionでのやり取りを経て、AWS Python SDKチームの真意は異なり、boto3のリソース・インターフェースは残り続けると判明します。

元の警告文を再確認すると、AWS Python SDKboto3(現在のAWS Python SDKのライブラリ名)を使い分けていることに気づきます。

  • boto3のリソース・インターフェースのメンテナンス方針について
  • 次のバージョンのAWS Python SDKではリソース・インターフェースをサポートしない

多くの人は、AWS Python SDKの次のメジャーバージョンとboto3の次のメジャーバージョンを同一視し、boto3のバージョンアップでアプリケーションが動かなくなることを懸念していましたが、AWS Python SDKチームは、次のメジャーバージョン向けにboto3とは異なる新しいライブラリを開発予定のため、このように表現したものと思われます。

一方で、次期バージョンの AWS Python SDK は boto3 との互換性を重要視しない可能性が高いです。 リソース・インターフェースがなくなる以外にも、どのような影響があるのか、AWS Python SDKの今後のアナウンスを注視したいと思います。

AWS Python SDK の変遷

ライブラリ名 世代 Resource インターフェースについての言及
boto(boto2) 旧世代 無し
boto3 現行世代 does not intend to add new features to the resources interface(現Noteから引用)
??? 次世代(The next major version) The resources interface won't be supported.(旧Warningから引用)

参考