この記事は弥生 Advent Calendar 2024の5日目の記事です。
re:Invent に落選し、イベント開催前に発表されるアップデート群のことを pre:Invent と呼んだりもするようです。
コスト最適化や信頼性向上を目的として、社内でも多くのプロダクトに適用できそうなアップデートが盛りだくさんでした。これだけは抑えておいた方がいいぞというものをピックアップしていきます。詳細な情報が気になる方は、リンク先を参照ください。
Aurora
Serverless v2 ゼロキャパシティスケーリング
自動的に一時停止できるようになりました。週末や夜間に検証環境を使用しない期間のコストを節約できそうです。
ただし、クラスターのデータベースボリュームが大きかったり、特定の機能によってリソースを使用していたり、コネクションをプーリングしていたり、データベース自体に負荷がかからなくても、スケールダウンしない場合もあるので注意が必要そうです。
反対に停止状態から起動する場合には、数秒以上は要すると想定されるため、アプリケーションでのハンドリングを考慮した方がよさそうです。
Serverless v2 が東京、大阪リージョンで25%オフ
ゼロキャパシティと合わせて適用していける環境が増えていきそうです。ただ個人的な感覚としてはまだ高いなと感じます。
平時とピーク時の乖離が大きく、キャパシティプランニングが難しい環境へは有効と思われますが、プロダクション環境で使うには採用のハードルがまだあるように思います。
MySQL 3.08 (MySQL 8.0.39 互換)
特定の条件下で発生する再起動への対応等の可用性の向上やメトリクスの追加等のオブザーバビリティに関する改善が含まれています。
MySQL8.0でSELECT COUNTが遅いと話題になっていましたが、修正が入ったMySQL8.0.39互換では改善されいます。
自分が担当するプロダクトでは数十万件以上のレコードをカウントすることはなく、パフォーマンスも許容できるものであるため、特別気にすることはありませんでしたが、今後のプロダクトのスケールを考慮すると早めにバージョンを上げて起きたいです。
それにしてもマイナーバージョンレベルで互換性があるのはすごいですよね。
Graviton4-based R8g インスタンス
US East、US West、EuropeのリージョンでAWS Graviton4 ベースR8gの提供を開始しました。パフォーマンスに大きな改善があります。東京リージョンにも早く来てほしいですね。
ElasticCache
Valkey ver 8.0 スケーリング高速化、メモリ効率が向上
ElastiCache for Redis OSS と比較し、キーあたりのメモリを 32 バイト削減し、メモリ効率が向上するみたいです。
ValkeyはRedis OSSよりもコストメリットも大きいし、ダウンタイムなしで移行が容易なので、早めに切り替えたいです。
DynamoDB
オンデマンドスループットとグローバルテーブルの価格を引き下げ
オンデマンドスループットの価格が半額になります。急激なスパイクが発生するようなトラフィックパターンの場合に費用対効果が大きくなるのですが、オンデマンドの採算ラインを引き下げることができますね。
これから新規で構築する場合にキャパシティプランニングが難しい場合等、オンデマンドを採用する機会が増えそうです。
属性ベースのアクセス制御 (ABAC)
細かい粒度でアクセス制御ができるようになります。またユーザーやプロジェクト単位にポリシーを個別管理しなくて済み、アクセス管理をスケールさせやすくなりますね。
CloudFront
アクセスログの追加のログ形式と宛先のサポートを開始
ログのパーティションやフォーマット指定ができるようになりました。ログの加工処理を自前で用意する必要がなくなりますね。
AWS WAF によってブロックされたリクエストが課金対象外
二重課金みたいになる状況が解消されました。嬉しいですね。
gRPC 配信のサポートを開始
嬉しいですね。
VPC オリジン セキュリティ強化と運用の合理化
CloudFront を唯一のインターネットアクセス経路にできるんですね。すごい。これはすごい。これまでのアーキテクチャの常識が変わりそうですね。
内部の通信を完全にプライベートに閉じてセキュアな構成でコストも削減できそうです。将来的には前述したLatticeをターゲットにECSへのアクセスするようなセキュアでスケーラブルなシンプルな構成が取れるようになったりするのではないかと期待できそうです。
VPC
パブリックアクセスブロック
上述のCloudFrontのVPCオリジンと組み合わせて活用できそうです。
PrivateLink
クロスリージョンをサポート
VPC Peering等でクロスリージョンの接続を行う必要がなくなります。
ECS
Amazon VPC Lattice が ECS 統合
L7レイヤーでサービス間の相互接続を容易に構築できます。これまで直接ECSをターゲットにできないため、ALBを挟む必要があったのですが、よりシンプルな構成を取ることができます。
プロダクト間の連携において、接続先毎に個別に調整し、VPC PeeringやPrivate Networkを構築しがちなのですが、組織やプロダクトがスケールする中で辛みが出てくると思います。
そんな時に有効なソリューションです。特に連携サービスが多岐に渡り、複雑な構成になる状況において効果を発揮するでしょう。
バージョンの一貫性を強制
コンテナイメージはイミュータブルですが、イメージタグはミュータブルにもできます。ミュータブルなタグを使ったバージョン管理をすると、デプロイ時とスケール時で意図せず異なるコンテナイメージを実行する事故が起きたりします。
これを防ぐためにイメージダイジェストで解決しようというものです。そもそもLATEST運用をしないこと、イメージタグをイミュータブルに運用することが大事だと思います。
AZ リバランシング
以前、ニンテンドーシステムズさんがプッシュ通知システムの刷新で不均等なタスク配置を解決するためにデプロイツールを自作していたのですが、こうした仕組みも自前で構築する必要がなくなりそうですね。
予測スケーリング
これまでターゲット追跡ポリシーとステップスケーリングポリシーがサポートされていました。これらはメトリクスに基づきプロビジョニングを行うものでしたが、予測スケーリングでは機械学習アルゴリズムにより需要の急増を予測しスケールする仕組みになります。ある程度の一貫性のあるワークロードの発生パターンが見込めるプロダクトに最適ですね。月次や日次での周期性のある業務システムで活用できそうです。
需要パターンだけを予測させる設定もできるようなので、とりあえず有効化した上で、実際のスケーリングポリシーとして活用できそうか判断してもよさそうです。
サービスのバージョン、デプロイ履歴を表示
コンソールからもデプロイ履歴を確認できるようになりました。地味に嬉しいです。
Lambda
Python 関数と .NET 関数用の SnapStart
コールドスタートにかかる時間を大幅に削減するようです。既にJavaではサポートされていたものですが、.NETもサポートされて嬉しいです。またPythonに関してはML推論用のサイズが大きいファイルは、起動時のレイテンシーが大きいので、大きな効果が見込むことができそうです。
ただし、Javaとは異なり、Python、.NETは機能の利用に課金されるため、注意が必要です。簡単に有効化できるため、プロダクション環境では積極的に活用していきたいですね。
.NET マネージドランタイムの JSON ロギング
とりあえずサクッと作りたい時にSerilog入れて、セットアップしなくても良くなるので嬉しいですね。
Node.js 22 のサポートを追加
ランタイム、コンテナベースイメージの両方で追加されました。嬉しいですね。
Step Functions
Variables と JSONata の変換
ステート間でタスクの結果をバケツリレーしたり、Pass Stateを複数繋げて形式を調整したりしなくても良くなります。
そこまで複雑なワークフローでなくても、結果の扱いがどうなっているのか混乱しがちだったので嬉しいですね。
CloudWatch
オブザーバビリティ製品を導入していることもあり、CloudWatchに疎く、直近のアップデートさえも全くキャッチアップできていません。今、こんなにCloudWatchすごいんですね。各社オブザーバビリティ製品を導入していると思いますが、CloudWatchのどの機能どのレベル感で運用していくことになるのか気になるところではあります。
ユーザー体験の監視も拡充し、Signalsを強化し、オブザーバビリティに本腰を入れてきた感がありますね。
AWS サービスとワークロード向けのカタログ
計装したり、何かしらオブザーバビリティソリューションをセットアップする際のカタログ?ガイダンス?のようなものが提供されるようになったみたいです。他のオブザーバビリティ製品でよくあるオンボーディングのようなものですかね。New Relicでもポチポチ押すだけでエージェントを導入できたりしますが、同じようなものですかね。
Synthetics Playwright ランタイム
Playwrightで合成監視ができるようになりました。
RUM Core Web Vitalsに基づく監視
SEOにも影響があると言われているCore Web Vitalsは各指標の75パーセンタイルを見ているんですね。これらをモニタリングし、分析することができるようです。
Signals Lambda の APMをサポート
既存のSignalsのダッシュボードをLambdaでも使えるようになりました。簡単に有効化できるので、とりあえず設定しておきたいですね。
Signals ランタイムメトリクスをサポート
遂にランライムのメトリクスまで取得できるようになったんですね。GCの影響を簡単に確認できるのは嬉しいですね。ただ今回もまた.NETは後回しですかね。
Signals トランザクションの包括的な可視化
イベントの集合を様々な形でトレースに繋ぎ合わせることでオブザーバビリティを高めます。New Relic で言うところのLogs in Contextのようなものですかね。
S3
if-matchによる条件付き書き込み
今年の8月頃に条件付き書き込みのサポートが開始されましたが、if-none-matchヘッダーのみ使用できました。
今回のアップデートでif-matchヘッダーを使えるようになりました。データの整合性を取るため処理をクライアントからS3にオフロードできるので、効率性を向上させながら競合を防止することができそうですね。
ELB
ロードバランサーキャパシティユニット予約
コンソールやAPIから簡単に申請できるようになりました。
ALB ヘッダー変更機能
CORSやHSTSを共通で設定できるようになったので、サービス側のアプリケーションやサイドカープロキシで個別に設定する必要がなくなりました。
まとめ
ざっと情報収集し、殴り書きしていったので不正確な情報を含む可能性があります。そのため気になる点や誤りを発見した場合はお知らせいただけると助かります。
また他にもこんな嬉しいアップデートがあったよ!とかがあれば是非共有していただけると嬉しいです。