7月20日の週のテーマは配置だった。データがどこに置かれてよいか、長時間動く関数がどこに状態を保つか、GPUノードが隣のノードに対してどこに着地するか。 AWSはアテネにLocal Zoneを開設した。S3とEBS Local Snapshotsを備えたEMEAで2番目のLocal Zoneであり、これによってレイテンシだけでなくデータレジデンシーへの答えにもなる。Lambda Durable Execution SDK for .NETがGAになり、C#チームは外部オーケストレーターなしで最長1年間停止できるチェックポイント付きワークフローを手にした。EKS Auto ModeとKarpenterのノードプールにEFAインターフェースとEC2プレイスメントグループが加わった。そしてSESは新規アカウントを料金プランに移し、新規顧客向けの独自無料枠を閉じた。次にサンドボックスアカウントを作る誰かを驚かせる変更だ。

この期間にAWS Transform、DMS、その他の移行関連のローンチはなかった。モダナイゼーションのニュースに最も近いのは.NET SDKで、Windowsサービスを関数に書き直したあとで状態を保持するためにStep Functionsが必要だと気づいたチームにとっては、本物のニュースだ。

アテネ: データを保持できるLocal Zone

ほとんどのLocal Zoneはエッジのコンピュートであり、データは親リージョンに残る。識別子eu-central-1-ath-1aのアテネは、EC2のC7i、M7i、R7iの上にS3 One Zone-IAとLocal Snapshots付きEBSを載せ、さらにECS、EKS、VPC、Direct Connect、ALBを備えて提供される。この組み合わせがあるからこそ、ギリシャの規制当局に「データはギリシャ国内で保存され処理された」と言える。このLocal Zoneはその一文のために存在する。料金はOn-Demand、Savings Plans、Spotのpay-as-you-goで、コミットメントは不要だ。オプトインはAWS Global ViewまたはModifyAvailabilityZoneGroup APIから行う:

aws ec2 modify-availability-zone-group \
  --region eu-central-1 \
  --group-name eu-central-1-ath-1 \
  --opt-in-status opted-in

トレードオフは、Local Snapshotsの「Local」とOne Zone-IAの「One Zone」にある。どちらも、データが単一の施設に存在することを意味する。Local Zoneにはフェイルオーバー先となる兄弟AZがなく、レジデンシー規則がフランクフルトへのレプリケーションを禁じるなら、耐久性のストーリーは建物1棟ぶんだ。別の場所にあるシステムオブレコードも同じデータを持っているなら受け入れられるし、そうでないデータなら受け入れられない。アーキテクチャ図がこのゾーンを中心に描かれる前に、各データセットがどちらの箱に属するかを決めておくこと。サービス一覧にも注意が要る。RDSもLambdaもない。S3とEBS以外のステートフルなものはすべて親リージョンで動き、1桁ミリ秒というレイテンシの数字はアテネのエンドユーザーまでのものであって、eu-central-1までのものではない。

.NETのdurable execution: オーケストレーターが関数の中へ移る

Amazon.Lambda.DurableExecution NuGetパッケージは、C#関数に自動でチェックポイントされるステップ、人間やエージェントの承認のためのコールバック、関数を連鎖させるdurable invocation、そして外部イベントを待つ間に最長1年間実行を一時停止できるwaitを与える。付属のAmazon.Lambda.DurableExecution.Testingパッケージがランタイムをローカルでエミュレートする。売り文句は、進捗管理を書いたりステートマシンを立てたりせずに決済パイプライン、エージェントのオーケストレーション、承認フローを作れることだ。

.NETのWindowsサービスをLambdaに移植し、その後マルチステップのジョブがどこまで進んだかを覚えておくためにStep Functionsを継ぎ足したチームにとっては、2つのサービスが1つにまとまり、制御フローがコンパイラの見えるコードの中へ戻ってくる。障害モードはあらゆるdurable functionフレームワークと同じだ。チェックポイント間のコードは決定的でなければならない。リプレイ時にSDKは関数を再実行し、同じ順序のステップを期待する。ステップの外にあるDateTime.NowやランダムIDはリプレイを壊し、本番ではデバッグが惨めになる一方、ローカルエミュレーターなら簡単に捕まえられる。初日からCIでエミュレーターを使うこと。そして「最長1年間停止」はwaitの上限だ。発表は実行全体の上限や料金を明示していないので、数か月生きるワークフローをモデリングする前にLambdaの料金ページを読むこと。

EKS Auto Modeがプレイスメントグループと EFAを覚える

EKS Auto Modeとオープンソース版Karpenterのノードプールは、cluster、spread、partition戦略のEC2プレイスメントグループを要求でき、EFA対応インスタンス上でEFAネットワークインターフェースをEFA専用または標準ENIとして構成できるようになった。動的キャパシティと静的キャパシティの両方が対象だ。EFA専用インターフェースはIPアドレスを消費しない。EKSが使えるすべての場所で利用できる。

これで、分散学習や密結合のHPCをAuto Modeから遠ざけていた溝が埋まる。これらのワークロードは同じスパイン上のクラスタープレイスメントグループにノードを置き、集合通信にEFAを必要とする。これまでそれは起動テンプレート付きの自己管理ノードグループを意味し、Auto Modeの存在理由であるノード修復と統合を失うことも意味した。注視すべきはキャパシティだ。クラスタープレイスメントグループはEC2がインスタンスを置ける場所を狭め、Karpenterの強みは条件に合うどんなインスタンスタイプでも選べることにある。両者は逆方向に引っ張り合う。プロビジョニング時のInsufficientInstanceCapacityが増えると見込み、それらのノードプールには静的キャパシティの床を与えること。学習ジョブが始まる9:00にゼロからのスケールに頼ってはいけない。

SESの料金プラン: 次の新規アカウントを作る前に読むこと

7月21日からSESはEssentials、Pro、Enterpriseのプランを提供する。同じ機能を個別に買うより最大22%安いバンドルだ。新規SESアカウントはEssentialsから始まり、2025年6月1日以降SESで送信していない復帰顧客も同様だ。それ以降に送信した顧客はアラカルト料金のままで、好きなときに切り替えられる。プラットフォームチームにとって重要なのは、12か月間、月3,000メッセージというSES固有の無料枠が新規顧客向けには消え、6か月で最大200ドルのAWS Free Tier全般のクレジットに置き換わったことだ。

既存の本番アカウントには何も変わらない。変わるのはすべての新規アカウントだ。環境ごとのサンドボックス、新しい事業部門のOrganizationsメンバー、オンボーディング中の買収先。アカウント払い出しパイプラインが低ボリュームならSESは無料だと仮定しているなら、もうそうではなく、最初の兆候は誰も予期しなかった請求書になる。次のアカウントが作られる前に、ベースラインと予算アラートを更新すること。

今週のその他

通底するテーマ

今週の見出しはどれも、これまで浮いていたものをAWSが固定させてくれる話だ。アテネはデータを国に固定する。durable executionはワークフローの状態を別のオーケストレーターではなく関数に固定する。プレイスメントグループはノードをスパインに固定する。それぞれの固定は具体的なもの、つまりレジデンシー、単純さ、帯域をもたらし、それぞれが浮いていた版を回復力のあるものにしていた柔軟性を奪う。単一の施設、決定的なコード、狭くなるキャパシティだ。どれも悪い取引ではない。だが取引であり、発表はあなたが受け取る側しか描いていない。SESの変更は請求の方向から見た同じ教訓だ。デフォルトが動いた。そして驚きはデフォルトに住んでいる。

次に読む

同じ週のAIとエージェント側の読み解きは、ercan.aiのフィールドノートにある。AWS、クラウド、CI/CDパイプライン、Linux、GitHub/GitLabなどのコンサルティングは、ercanermis.comからどうぞ。

参考資料