詳しい解説 · 読了目安 9 分
AWSのCDKガイドが示す、エンドポイントのスケーリングとデプロイ順序の問題
SageMaker AIの手順書は、登録解除、エンドポイント更新、スケーリング準備を連携させる。待機時間、容量例、生成されるリソースは個別に確認が必要だ。
- 当サイトの公開日
- 原典の公開日
- 出典確認日
Lauren Eternoによる10月23日付のAWSガイドは、Application Auto Scalingの設定を維持しながらSageMaker AIのエンドポイントを更新するというデプロイ上の問題を扱う。新しいモデルやサービスの発表ではなく、再利用可能なCDKコンストラクトの提案だ。当サイトは、状態の遷移と、デプロイコマンドの成功だけでは完了しない運用上の確認を分析する。
ニュースを聴く
この記事を読み上げるか、ニュースを続けて聴けます。
読み上げを準備中…
端末の音声
読み上げはブラウザーまたは端末が処理します。AISubHub は文章を音声 API に送りません。利用できる音声やロック画面での再生は端末によって異なります。
再開時に短い部分を繰り返す場合があります。
要点
- 登録解除、エンドポイント更新、InService状態の確認、ターゲット登録、ターゲットを照会できる状態の確認という順序を経て、ポリシーを適用する。
- ConfigHashには両方の設定セクションを含める必要がある。30秒ごとのポーリングと、1時間または15分の待機上限は、復旧の保証ではない。
- 3つのカスタムリソースから12のLambda関数と2つのStep Functionsステートマシンが作られる。容量やポリシーの値の例は、本番環境への推奨値ではない。
3つの障害は異なる状態から生じる
このガイドは、ネイティブのCloudFormationオートスケーリングリソースをエンドポイント更新に組み合わせた場合の3つの経路を説明する。第一に、スケーラブルターゲットを登録したままにすると、SageMakerが更新を拒否することがある。第二に、手動で登録解除し、エンドポイント設定だけを変更した場合、デプロイは成功してもオートスケーリングが失われたままになることがある。テンプレートのパラメーターが変わらなければ、CloudFormationはターゲットやポリシーを再作成しないからだ。
第三に、手動で登録解除した後にオートスケーリングのパラメーターを変更すると、CloudFormationは存在しないターゲットを更新しようとする。AWSは、リソースが見つからないエラーと、手動復旧を必要とするロールバック失敗状態UPDATE_ROLLBACK_FAILEDを説明している。これらは、更新の拒否、気づきにくいスケーリング喪失、スタックの破損という別のケースだ。単なる再試行の問題として一括りにすると、状態の違いを見落とす。
変更の順序を定め、その後に準備状態を確認する
このコンストラクトは、ネイティブのScalableTargetとScalingPolicyを3つのカスタムリソースに置き換える。DeregisterはCDKが管理するエンドポイント更新より先に実行される。次に登録用リソースがエンドポイントのInService状態を待ち、ターゲットを登録する。その後にポリシー用リソースが実行され、ターゲットを照会できるようになるまで待ってからターゲット追跡ポリシーを適用する。
CDKのnode.add_dependency呼び出しが順序を表し、ハンドラーが準備状態を確立する。登録解除ハンドラーは初回デプロイ時のObjectNotFoundExceptionを許容する。登録の確認ではdescribe_endpointを使用し、InService以外の状態では待機を続け、Failedならエラーを発生させる。当サイトは、これをAPI操作の順序を定めることと、次の操作に必要な状態を確かめることの区別と捉える。無停止を保証する仕組みという意味ではない。
共通の設定変更で一連の処理を起動する
例の設定では、エンドポイントとオートスケーリングの値をまとめて扱う。各カスタムリソースにあるConfigHashプロパティは、そこに含まれる設定が変わると、CloudFormationがハンドラーを再度呼び出すようにする。統合例は、エンドポイント値とスケーリング値の両方を明示的にconfig_hashへシリアライズする。したがって、どちらのセクションの変更でもオーケストレーションが起動する。
当サイトのエンジニアリング上の示唆は、依存関係グラフと併せてこの起動条件を確認すべきだということだ。スケーリングのフィールドだけを含めると、エンドポイント変更が意図した起動条件から漏れる可能性がある。エンドポイントのフィールドだけでは、スケーリング変更が漏れ得る。ハッシュは入力変更のシグナルであり、デプロイ済みリソースがファイルと一致するかを調べるものではない。デプロイ後には、実際のターゲット登録とポリシー値を引き続き読み戻して確認する必要がある。
ポーリング上限が定めるのは待機であり、復旧時間ではない
登録とポリシー適用では、CDKプロバイダーの非同期完了処理を使う。on_eventハンドラーは直ちに戻り、プロバイダーが30秒ごとにis_completeを呼び出す。登録のtotal_timeoutは1時間、ポリシー適用は15分だ。これらが制限するのはプロバイダーの待機期間であり、1回のLambda呼び出しの実行時間でも、復旧SLAでも、正常完了の約束でもない。
2つ目の準備状態確認は、RegisterScalableTargetの戻り後からターゲットを照会できるようになるまでの短い時間を扱う。確認できて初めて、ハンドラーはポリシーを適用する。登録解除、更新、再登録という手順には、通常のスケーリング構成がない時間帯も生じる。当サイトの分析では、チームはその間の容量、タイムアウト処理、ロールバック動作を自分たちのワークロードに照らして評価する必要がある。記事はサービスの無中断を実証していない。
デプロイされる構成要素と前提条件を数える
カスタムリソースが3つでも、Lambda関数が3つとは限らない。AWSの集計は12で、そのうち5つはコンストラクト自身のハンドラー、7つはプロバイダーフレームワークが生成する関数だ。2つの非同期プロバイダーは、さらに2つのStep Functionsステートマシンを作成する。利用者がコードを書かなくても、フレームワーク生成関数はデプロイ済みリソースに含まれる。リソース確認では目に見えるハンドラーだけを数えず、これらも考慮すべきだ。
手順にはAWS CDK v2、Python 3.12以降、uv、およびSageMaker AI、Lambda、IAM、Application Auto Scaling、CloudWatchへの権限を持つAWSアカウントが必要となる。S3のモデルアーティファクトとECRイメージ、または文中で示された組み込みアルゴリズムコンテナを使う経路が指定されている。当サイトは例を応用する前に、最小権限、アーティファクトへのアクセス、運用責任の所在を確認するよう勧める。これはエンジニアリング分析であり、検証済みのIAM監査ではない。
更新とクリーンアップを別々に検証する
サンプルは最小容量1、最大容量10、target_value 100、scale_in_cooldown 600、scale_out_cooldown 120を使う。これらは例のフィールドであり、推奨される本番容量、スループットのベンチマーク、料金見積もりではない。手順は、デプロイ後にスケーラブルターゲットとスケーリングポリシーを確認し、エンドポイント値を変更して再デプロイし、登録と更新後の値が維持されているかを確認する。
クリーンアップでは、今後の料金を避けるため、エンドポイント、エンドポイント設定、モデル、Lambda関数、IAMロール、ポリシーが作成したCloudWatchアラームを削除し、ターゲットの登録を解除する。当サイトはこれらを実行していない。運用チームにとって有用な受け入れ試験は、スタックが成功状態になったかの確認より広い。例だけで立証されたと考えず、自分たちの権限とトラフィックの下で、有効な設定、スケーリング動作、障害復旧、クリーンアップ範囲を検証する必要がある。
注目する理由
他の環境にも応用できる考え方は、デプロイの依存関係、準備状態の確認、設定変更による起動条件を明示することだ。当サイトは、それによってスケーリングのライフサイクルを点検しやすくなる可能性があると推論する。ただし、このコンストラクトの導入は、プロバイダー管理の構成要素と運用責任を増やす。成功は例のパラメーターから推定するのではなく、各チームのエンドポイントとワークロードについて確かめなければならない。
制約と提供状況
本稿は、10月24日に読んだLauren Eternoによる10月23日付AWS技術手順書の分析である。コードの実行、有料リソースのデプロイ、リンク先リポジトリーの監査、性能測定、特定の地域やアカウントの検証は行っていない。待機上限はSLAではなく、例の値は推奨値ではない。また、特定の基盤モデルや新サービスのリリースを示すものでもない。
出典と根拠
原典の公開日: · 出典確認日:
AI を活用した編集記事を、記載した一次情報で確認しています。企業の主張は出典を明示し、掲載は推奨を意味しません。