🔄

AWS SDKのライフサイクルをfor JavaScript v2 & v3から辿る

2024/11/26に公開

はじめに

AWS SDKは、AWSサービスをプログラムから実行するための公式ライブラリです。JavaやPythonなど、多くの言語に提供されています。
SDKにはライフサイクルがあり、新しいメジャーバージョンのサポートとともに、古いバージョンはメンテナンスモードへと移行し、やがてサポート終了となります。
この記事では、AWS SDK for JavaScriptのv2とv3を例に、そのライフサイクルを辿っていきます。

AWS SDK for JavaScript v2 & v3から辿る

JavaScript用のSDKは、2018〜2025年にかけてv2からv3に切り替えが進んでいます。
AWS SDK(以降SDK)はメンテナンスポリシーにて、ライフサイクルのフェーズを定義しています。
両バージョンのフェーズ移行を表にすると次のとおりとなります。なお、日付はAWSブログ記事を参考としており、リンクは各詳細に記載しています。

日付 v2 v3
2014/6/19 [フェーズ1] 一般提供 -
2018/11/19 同上 [フェーズ0] 開発者プレビュー
2020/12/15 同上 [フェーズ1] 一般提供
2024/3/6 [フェーズ2] メンテナンスのお知らせ 同上
2024/9/8 [フェーズ3] メンテナンス 同上
2025/9/8 [フェーズ4] サポート終了 同上

上記のとおり、SDKのライフサイクルには5つのフェーズがあります。

  • [フェーズ0] 開発者プレビュー
  • [フェーズ1] 一般提供
  • [フェーズ2] メンテナンスのお知らせ
  • [フェーズ3] メンテナンス
  • [フェーズ4] サポート終了

ここからは、フェーズの詳細と切り替えの流れを辿っていきます。

[フェーズ0] 開発者プレビュー

v3は、2018/11/19に開発者プレビューとして公開されました。(参考
開発者プレビューは早期アクセスとフィードバックを目的としており、本番環境における使用はサポートされません。

メジャーバージョンの変更タイミング

一連のライフサイクルは、メジャーバージョン(v2やv3)ごとに存在しています。
新しいメジャーバージョンが追加されるのは、ライブラリの対象言語における新しい記法や処理パターンをサポートするため、コードに大幅な変更が加えられたときです。

SDK利用時の影響が大きい変更点として、パッケージのモジュール化に着目します。(参考
v2ではすべてのAWSサービスをaws-sdkからまとめてインポートする方法が取られていました。

var AWS = require("aws-sdk");

この方法では利用対象のサービス以外もインポートされてしまい、コードサイズ増加の原因となっていました。
v3ではこの問題に対応するため、サービスごとにモジュールを分割してインポートする構造に変更されています。

import {
  DynamoDBClient,
  ListTablesCommand
} from "@aws-sdk/client-dynamodb";

後続のコードの書き方も大きく変わっています。
v2では、読み込んだAWSのグローバル構成を経由して各サービスの各コマンドを実行します。

var AWS = require("aws-sdk");

AWS.config.update({ region: "us-west-2" });
var ddb = new AWS.DynamoDB({ apiVersion: "2012-08-10" });

ddb.listTables({ Limit: 10 }, function (err, data) {
  if (err) {
    console.log("Error", err.code);
  } else {
    console.log("Tables names are ", data.TableNames);
  }
});

v3の場合、サービスごとにクライアントを作成してコマンドを実行する形式に変更されています。

import {
  DynamoDBClient,
  ListTablesCommand
} from "@aws-sdk/client-dynamodb";

const dbclient = new DynamoDBClient({ region: "us-west-2" });

try {
  const results = await dbclient.send(new ListTablesCommand);
  
  for (const item of results.TableNames) {
    console.log(item);
  }
} catch (err) {
  console.error(err)
}

このようにv3の使用方法はv2と大きく異なるため、新しいメジャーバージョンとして公開されています。
また、v3はTypeScriptで書き直されているため、言語サポートにおいてもv2から拡張されています。

リリース候補版

一般提供に移る約2か月前の2020/10/22に、v3はリリース候補版を発表しています。(参考
リリース候補版は、一般提供に向けた安定版として位置づけられています。まだ開発者プレビュー状態ではありますが、このバージョンではAWSからサポートを受けることができます。
公開当初より、機能追加やパッケージ構成の変更などが行われています。

[フェーズ1] 一般提供

v2の一般提供から約6年半後の2020/12/15に、v3は一般提供が開始されました。(参考
AWSのサポート対象として、API更新やバグ、セキュリティ修正が定期的にリリースされます。

[フェーズ2] メンテナンスのお知らせ

ここからはフェーズ2以降の移行日付が決まっているv2に主軸を移します。
AWS公式ブログ上でv2のメンテナンスのお知らせが発表されたのは、2024/3/6です(参考)。
メンテナンスモードへの移行は少なくとも6か月前に通知され、通常は次のメジャーバージョンが一般提供されると同時に発表されます(参考)。
v2のメンテナンスのお知らせは、v3の一般提供開始の約3年3か月後なので、例外的なタイミングであったように見えます。

Lambdaランタイムにおけるサポート

Lambdaランタイムにおいて、Node.js 16まではv2が標準利用できました。
ランタイム上の標準がv3に変更となったのは、2022/11/18からサポート開始されたNode.js 18以降です。(参考
Node.js 16は2024/6/12に廃止され、Lambda関数の新規作成で選択できなくなりました。(参考
これに伴い、v2を標準利用できるLambdaランタイムはサポートされなくなりました。

[フェーズ3] メンテナンス

メンテナンスのお知らせの約6ヶ月後にあたる2024/9/8に、v2はメンテナンスモードに入りました。
メンテナンスモードでは、重大なバグとセキュリティリスクに関する修正のみがリリースされます。
デフォルトでは12ヶ月後にサポート終了に移行します。

[フェーズ4] サポート終了

メンテナンスモードに入ってから12ヶ月後にあたる2025/9/8に、v2はさらにフェーズ移行し、サポート終了が予定されています。
以降もGitHubにリポジトリは残り、パッケージマネージャーを通じてダウンロードできますが、利用は非推奨です。

こうしてv2のライフサイクルは終わり、v3へと完全に移行されます。

NCDCエンジニアブログ

Discussion