プラットフォームチームが10年間設計で回避してきた2つの制約が、7月13日の週に消えた。 S3はオブジェクトがS3 StandardからStandard-IAまたはOne Zone-IAへ移れるまでの30日間の待ちを撤廃し、Lambdaはデプロイパッケージを自前のストレージへコピーするのをやめた。後者はコードストレージのクォータをなくし、デプロイ後のアクティベーションを短くする。3つ目の変更は小さいが、IDを統合しようとしている人には重要だ。Cognitoが既存のパスワードハッシュごとユーザーをインポートできるようになり、他のIDプロバイダーからの移行で全ユーザーにパスワードリセットを強いる必要がなくなった。AI側では、OpenAIのGPT-5.6 Sol、Terra、LunaがBedrockでGAになった。

この期間にはCognitoの変更以外に移行やモダナイゼーションのローンチがなかったので、この記事は先週より短い。それでもテーマのある週だ。AWSは、あなたの都合ではなくAWSの都合で存在していた制限を取り除いた。

S3: 作成当日のInfrequent Access

7月16日まで、ライフサイクルルールはオブジェクトがS3 Standardに30日間置かれるまで、S3 Standard-IAやOne Zone-IAへ移行させられなかった。いまはルールに0日と書け、移行はオブジェクトが作成されたその日に起きる。AWSは数時間でコールドになるバックアップ、ログ分析、コンプライアンスデータ向けに売り込んでおり、IAクラスのストレージ料金はS3 Standardより最大40%安く、同じミリ秒単位のアクセスを保つ。

すべてのルールをゼロに変える前に移行時の考慮事項を読むこと。間違ったワークロードでIAを高くつかせていた要素は手つかずだからだ。128 KB未満のオブジェクトはデフォルトでは移行せず、どのみちオブジェクトごとに移行リクエストの料金を払うので、小さなログ断片のバケットは安くなるどころか高くなる。IAクラスは最小ストレージ期間の課金を保つので、書いて、0日目に階層化し、3日目に削除したオブジェクトは、残っていたものとして請求される。そしてIAは取得1 GBごとに課金し、これが再処理ジョブがすべて読み戻したときに「コールド」データを驚きに変えるものだ。バックアップのプレフィックスに対する具体的なルールはこうなる:

{
  "Rules": [{
    "ID": "backups-to-ia-day-zero",
    "Status": "Enabled",
    "Filter": { "Prefix": "backups/" },
    "Transitions": [{ "Days": 0, "StorageClass": "STANDARD_IA" }]
  }]
}

正しいワークロードは、一度書かれ、めったに読まれず、最小期間を超えて保持されるデータだ。バックアップとコンプライアンスアーカイブは該当する。1週間tailするアプリケーションログは該当しないし、S3 Intelligent-Tieringはすでに「分からない」というケースを取得料金なしで扱っていた。

Lambda: あなたのバケットが正本になる

Lambdaはこれまで、関数やレイヤーを作成または更新するたびにすべてのデプロイパッケージをLambda管理のストレージへコピーしていた。そのコピーがリージョンごと75 GBのコードストレージクォータに数えられるもので、すべてのデプロイのクリティカルパスの一歩だった。7月15日から、関数またはレイヤーでS3ObjectStorageModeをREFERENCEに設定すると、Lambdaは代わりにあなたのバケットからコードを読む。参照されるコードはクォータに数えられず、マネージドのクォータ自体も他の全員について75 GBから300 GBに上がり、Lambdaの追加料金はなく、S3ストレージと該当する場合のクロスリージョン転送を払う。Lambdaのサービスプリンシパルにはバケットに対するs3:GetObjectとs3:GetObjectVersionが必要だ。

トレードオフは、これまでなかった可用性の依存関係を自分で持つことになる点だ。バケットのオブジェクトが削除されたり、上書きされたり、ポリシーが壊れたりすれば、それはLambdaのインシデントになる。バケットのバージョニングは任意ではなくなり、デプロイパイプラインは上書きではなく新しいキーを書かなければならず、バケットポリシーには関数のIAMロールと同じ変更管理が要る。数百の関数とレイヤーを持ち、75 GBのクォータが四半期ごとのサポートチケットを意味していたチームがこれから最も得をする。関数が20個のチームは、速いアクティベーションが、設定を誤りうるものがもう1つ増えることに見合うかを問うべきだ。

Cognito: パスワードをリセットさせない移行

CSVインポートでユーザーベースをCognitoへ移すことには、常に1つ醜い瞬間があった。Cognitoがソースシステムのハッシュを受け入れられないため、インポートされたすべてのユーザーが初回サインイン時にパスワードをリセットしなければならなかった。7月15日から、CSVにハッシュを載せ、アルゴリズムを宣言すると、Cognitoは初回サインイン時にインポートされたハッシュに対してユーザーのパスワードを検証し、その後に再保護する。対応するのはbcrypt、scrypt、Argon2id、PBKDF2 with SHA-256で、Cognitoが動くすべてのリージョンで使える。

これは統合プロジェクトが実現するかどうかを決める種類の変更だ。強制リセットは、多くのチームがレガシーIdPを1年間並行稼働させ、初回ログインを移行トリガーにしていた理由だった。いまやカットオーバーは1回のインポートで済む。障害モードはハッシュのエクスポートそのものだ。ソースシステムはアルゴリズムのパラメータを正確に渡さなければならず、不一致は大きな音を立てて失敗せず、ユーザーベース全体に対して一斉に「パスワードが違う」として失敗する。旧システムがこれまで使ったすべてのハッシュ設定のユーザーを含むサンプルでテストすること。

今週のその他

通底するテーマ

S3の30日ルールとLambdaのコードコピーは、どちらも顧客が必要としたものではなく、AWSがサービスをどう作ったかの産物だった。どちらもツールで回避されてきた。前者にはIntelligent-Tiering、後者にはレイヤー整理スクリプトとクォータチケット。取り除かれるのは良いことで、同時に回避策が何を隠していたかを思い出させる。0日目のIAは、30日待ちのおかげで大半の人が当たらずに済んでいた取得料金と最小期間料金を露出させる。参照コードは、あなたのバケットをランタイム依存として露出させる。Cognitoのハッシュインポートは強制リセットを取り除き、旧IdPのエクスポートの品質を露出させる。いずれの場合も、AWSはこれまで代わりに下していた判断をあなたに返した。

次に読む

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

参考資料