本稿は、“ Understanding Amazon Aurora MySQL storage space utilization ” を翻訳したものです。 Amazon Aurora は、高性能な商用データベースが持つパフォーマンス、スケーラビリティ、可用性を提供しながらオープンソースデータベースの持つシンプルさとコスト効率の良さを実現する、フルマネージド型のリレーショナルデータベースサービスです。 Amazon Aurora MySQL互換エディション は、MySQLとの互換性を持っており、すでにMySQLテクノロジーを使用している企業にとって魅力的な選択肢となっています。 Amazon Aurora MySQLのストレージは、従来のMySQLデータベースとは異なる方法で管理されています。このポストでは、Amazon Aurora MySQLで利用可能な様々なタイプのストレージ、Auroraがそれらのストレージタイプをどのように使用しているか、そしてストレージの消費状況をどのように監視するかについて説明します。また、Auroraのストレージ料金を見積もるために使用できるデータベースクエリや Amazon CloudWatch メトリクスについても説明します。 ストレージの種類 Auroraには2種類のストレージがあります: クラスターボリュームストレージ – Amazon Aurora MySQLは、耐久性、障害耐性、データの冗長性、高可用性を提供するため、AWS リージョン内の3つのアベイラビリティーゾーンにまたがって分散された共有ストレージレイヤーを使用します。このストレージには、InnoDBテーブルとインデックス、データベースのメタデータ、ファンクションやプロシージャなどのストアドオブジェクト、そしてバイナリログやリレーログなどのその他の永続的なデータが保存されます。 ローカルストレージ – クラスター内の各Aurora MySQLインスタンスには、 Amazon Elastic Block Store (Amazon EBS)を基盤とするローカルストレージボリュームが割り当てられています。これらのローカルボリュームは、非永続的な一時ファイルやInnoDB以外の一時テーブルの保存、大規模なデータセットの並べ替え、エラー、監査、一般ログなどの各種エンジンログの保存に使用されます。詳細については、 Temporary storage limits for Aurora MySQL を参照してください。 次のセクションでは、Aurora MySQLクラスターにおけるストレージ使用量の一般的な要因と、データベースメトリクスやメタデータを使用してストレージ消費量を確認する方法について説明します。 ユーザーテーブル、インデックス、およびテーブルスペース ユーザーテーブルとインデックスは、リレーショナルデータベースシステムの永続的なストレージ領域の大部分を占めています。MySQLでは、 ストレージエンジン は異なるテーブルタイプのSQL操作を処理するコンポーネントです。 InnoDB は、MySQLのデフォルトの汎用ストレージエンジンです。Amazon Aurora MySQLでは、永続的なデータベーステーブルに対してInnoDBストレージエンジンのみがサポートされています。そのため、ここではInnoDBストレージエンジンのコンテキストでのみストレージ使用量について説明します。 従来のMySQLでは、InnoDBストレージエンジンを使用するテーブルは、「.ibd」という拡張子で示されるテーブルスペースと呼ばれるデータファイルに保存されます。詳細については、 InnoDB: Tablespace Space Management を参照してください。 Amazon Auroraは、InnoDBデータストレージに従来のファイルやブロックベースのファイルシステムを使用していませんが、高レベルの概念は同じままです。Auroraはテーブルスペースの概念に従っていますが、これらのテーブルスペースはブロックストレージデバイス上のファイルとしてではなく、Auroraのカスタム設計されたストレージボリューム内のオブジェクトとして存在します。 InnoDBストレージエンジンは、デフォルトでテーブルごとに個別のテーブルスペースを作成して保存します。この動作は、 innodb_file_per_table パラメータによって制御されます。 innodb_file_per_table =ONの場合、エンジンは次のように動作します: 各テーブルは独自のテーブルスペースを持ちます(従来のMySQLにおける.ibdファイルに相当)。 テーブルスペースが削除される(Dropされる)と、解放されたデータベースページはストレージボリュームに返却され、新しいデータ用に再利用できるようになります。 Auroraは時間の経過とともにこれらの空きページを動的に回収し、ストレージボリュームを縮小することで、ボリューム内の利用可能な容量が増加し、ストレージコストを削減できます。 テーブルスペースがDropされ、その結果としてAuroraが回収できる空きページが生成されるデータベース操作がいくつかあります。各パーティションが個別のテーブルスペースを使用するため、これはテーブルパーティションにも適用されます: テーブルやスキーマのDropにより、基盤となるテーブルスペースが削除されます。 テーブルのTruncateは、既存のテーブルスペースを空のものに置き換えます。これは技術的には、Dropして再作成するのと同じです。 テーブルの最適化( OPTIMIZE または ALTER を通じて)は、新しいテーブルスペースを作成し、古いものを削除します。 このような操作を実行した後でも、ボリュームサイズはすぐには減少しません。Auroraは、バックグラウンドで1日最大10 TBのペースで空き領域を徐々に回収します。動的なサイズ変更の詳細については、 Storage scaling を参照してください。 innodb_file_per_table =OFFの場合、動作は次のようになります: テーブルは個別のテーブルスペースを持たず、テーブルデータはシステムテーブルスペース内に格納されます。 テーブルのDrop、Truncate、またはOptimizeを行った場合、関連するページはシステムテーブルスペース内で解放されますが、システムテーブルスペースのサイズは減少しません。その結果、Auroraの動的ボリュームサイズ変更機能では、これらのページが占有していた領域を回収することができません。 テーブルスペースが使用している容量を計算するには、 INFORMATION_SCHEMA.FILES テーブルを使用できます。 INFORMATION_SCHEMA.FILES テーブルは、テーブルごとのテーブルスペース、システムテーブルスペース、グローバル一時テーブルスペース、およびundoテーブルスペースを含む、InnoDBテーブルスペースタイプのメタデータが記録されます。InnoDBテーブルスペースの詳細については、 Tablespaces を参照してください。 以下のクエリを使用して、テーブルスペース名とそのサイズを一覧表示できます: SELECT FILE_NAME, TABLESPACE_NAME, ROUND((TOTAL_EXTENTS * EXTENT_SIZE) / 1024 / 1024 / 1024, 4) AS SIZE_GB FROM INFORMATION_SCHEMA.FILES order by size_gb desc limit 10; このクエリは、Amazon Aurora MySQL バージョン2(MySQL 5.7互換)とAmazon Aurora MySQL バージョン3(MySQL 8.0互換)の両方で動作します。 なお、テーブルスペースは空の状態でも一定の最小サイズを持ちます。 innodb_file_per_table がONに設定されている場合、空のテーブルやパーティション(行が存在しない状態)でも、数メガバイト程度の少量のストレージを占有します。これは、1つのAuroraクラスターに数千万のテーブルを保存する予定がない限り、通常は問題になりません。可能な限り、 innodb_file_per_table はデフォルトのON設定を使用することを推奨します。 テーブル、インデックス、およびスキーマが使用するストレージ容量を計算する際は、 INFORMATION_SCHEMA.TABLES の代わりに(もしくは併用して) INFORMATION_SCHEMA.FILES テーブルの使用を検討すべきです。これは、 INFORMATION_SCHEMA.TABLES テーブルにはキャッシュされた統計情報が含まれており、メタデータを読み取る前にテーブルを分析していない場合、その情報が古くなっている可能性があるためです。 information_schema_stats_expiry システム変数(Aurora MySQL バージョン3に適用)は、キャッシュされた統計情報が自動的に期限切れになるまでの期間を定義します。デフォルトは86,400秒(24時間)です。特定のテーブルのキャッシュ値を強制的に更新するには、 ANALYZE TABLE コマンドを使用し、その後で INFORMATION_SCHEMA.TABLES の統計情報を確認してください。なお、analyze tableの精度は、 innodb_stats_persistent と innodb_stats_transient_sample_pages パラメータの設定に依存することにご注意ください。 一時テーブルと一時テーブルスペース 一時テーブルスペースについて説明する前に、まず一時テーブルとは何か、いつ使用されるのか、そしてAmazon Aurora MySQL バージョン2とバージョン3での一時テーブルの扱いの違いについて理解する必要があります。 Aurora MySQLには2種類の一時テーブルがあります: 内部(または暗黙的な)一時テーブル – これらのテーブルは、ソート、集約、派生テーブル、共通テーブル式(CTE)などの操作を処理するために、データベースエンジン自体によって作成されます。データベースユーザーはこれらのテーブルを直接制御することはできません。MySQL 5.7での内部一時テーブルの詳細については Internal Temporary Table Use in MySQL を、MySQL 8.0については Internal Temporary Table Use in MySQL を参照してください。 ユーザーが作成した(または明示的な)一時テーブル – これらのテーブルは、 CREATE TEMPORARY TABLE 文を使用してデータベースクライアントによって作成されます。明示的な一時テーブルは、それを作成したデータベースセッション(接続)内でのみ表示され、セッションが終了すると自動的に削除されます。これらのテーブルは、複雑なSQL処理の実行中に中間データを保存する際に便利で、永続的に保存する必要のないデータに適しています。MySQL 5.7でのこれらのテーブルの詳細については CREATE TEMPORARY TABLE を、MySQL 8.0については CREATE TEMPORARY TABLE を参照してください。 Amazon Aurora MySQL 2とAurora MySQL 3では、一時テーブルの格納方法に違いがあります。これらの違いの一部はパフォーマンスに影響を与え、他の一部はストレージの消費に影響を与えます。次のセクションでは、ストレージに関連する違いについて簡単に説明します。詳細については、 Use the TempTable storage engine on Amazon RDS for MySQL and Amazon Aurora MySQL を参照してください。 Aurora バージョン2(MySQL 5.7互換) Aurora バージョン2では、内部一時テーブルはメモリ内に保持され、 MEMORY ストレージエンジンによって処理されます。メモリ内に作成された内部一時テーブルが大きくなりすぎると、MySQLは自動的にそれをディスクベースのテーブルに変換します。場合によっては、クエリが MEMORY エンジンでサポートされていないデータ型(BLOBやTEXTなど)を含む場合など、データベースは最初からディスクベースのテーブルを使用することがあります。ディスク上の内部一時テーブルのストレージエンジンは、 internal_tmp_disk_storage_engine 設定に応じて、 InnoDB (デフォルト)または MyISAM のいずれかになります。 MySQL 5.7のInnoDBの一時テーブルでは、エンジンは単一の一時テーブルスペースを使用します。これは ibtmp1 と呼ばれる、サイズが自動拡張する共有一時テーブルスペースです。詳細については、 The Temporary Tablespace を参照してください。 一時テーブルスペースのサイズを確認するには、以下のクエリを使用して Information_Schema.Files テーブルに問い合わせることができます: SELECT FILE_NAME, TABLESPACE_NAME, ENGINE, INITIAL_SIZE, TOTAL_EXTENTS*EXTENT_SIZE AS TotalSizeBytes, DATA_FREE, MAXIMUM_SIZE FROM INFORMATION_SCHEMA.FILES WHERE TABLESPACE_NAME = 'innodb_temporary' デフォルトでは、一時テーブルスペースのデータファイルは自動拡張され、ディスク上の一時テーブルに対応するために必要に応じてサイズが増加します。 一時テーブルスペースが占有するディスク容量を回収するには、Auroraクラスターのライターインスタンスを再起動します。ライターインスタンスを再起動すると、一時テーブルスペースのデータファイルが削除され、再作成されます。 Aurora バージョン2では、デフォルトで、InnoDB形式のディスク上の内部一時テーブル(一時テーブルスペース内)はAuroraクラスターボリュームに配置されます。InnoDB以外の一時テーブルは、Amazon Aurora MySQLインスタンスによって提供されるローカルストレージに配置されます。 Aurora バージョン3(MySQL 8.0互換) Aurora バージョン3では、内部一時テーブルはメモリ内に保持され、 TempTable ストレージエンジン(デフォルト)または MEMORY エンジンによって処理されます。 TempTable ストレージエンジンの制限とストレージ割り当ての動作は、 tmp_table_size 、 temptable_max_ram 、 temptable_use_mmap 、 temptable_max_mmap などの設定パラメータによって制御されます。これらのパラメータによって規定される大きさにメモリ内で作成された内部一時テーブルが達すると、MySQLはそのテーブルをディスク上の一時テーブルに変換します。Aurora MySQL 3.x以前のバージョンでは、ディスク上の内部一時テーブルに使用するストレージエンジンを InnoDB または MyISAM として定義できました。Aurora MySQL バージョン3.x以降では、ディスク上の内部一時テーブルには InnoDB ストレージエンジンのみを使用します。 MySQL 8.0、そしてAurora MySQL バージョン3では、InnoDBは2種類の 一時テーブルスペース を使用します: セッション一時テーブルスペース – これらのテーブルスペースは、ユーザーが作成した一時テーブルと、InnoDBがディスク上の内部一時テーブル用のストレージエンジンとして構成されている場合のディスク上の内部一時テーブルを保存します。セッション一時テーブルスペースは、一時テーブルスペースのプールからセッションに割り当てられます。セッションが切断されると、そのセッションの一時テーブルスペースは切り捨てられ、プールに返却されます。以前のリリースでは、一時テーブルはグローバル一時テーブルスペース( ibtmp1 )に作成され、一時テーブルが切り捨てられたり削除されたりしても、オペレーティングシステムにディスク容量が返却されませんでした。 グローバル一時テーブルスペース – グローバル一時テーブルスペース( ibtmp1 )は現在、ユーザーが作成した一時テーブルへの変更に対するロールバックセグメントを保存します。この一時テーブルスペースのデータファイルは自動拡張され、必要に応じてサイズが増加します。このグローバル一時テーブルスペースのサイズを確認するには、上記(Aurora バージョン2の場合)と同じクエリを使用できます。 グローバル一時テーブルスペースのデータファイルが占有するディスク容量を回収するには、Auroraクラスターのライターインスタンスを再起動する必要があります。ライターインスタンスを再起動すると、グローバル一時テーブルスペースのデータファイルが削除され、再作成されます。 Aurora バージョン3では、デフォルトで、InnoDB形式のディスク上の内部一時テーブルと一時テーブルスペースファイルはAuroraクラスターボリュームに配置され、InnoDB以外の一時テーブルとファイルはAmazon Aurora MySQLインスタンスによって提供されるローカルストレージに配置されます。 バイナリログ バイナリログ (または binlog)には、テーブルの作成操作やテーブルデータの変更などのデータベースの変更を記述するイベントが含まれています。 Aurora MySQLでは、バイナリログは以下の用途に役立ちます: Aurora MySQLから他のMySQL互換データベースへのレプリケーション AWS Database Migration Service (AWS DMS)などのチェンジ・データ・キャプチャ(CDC)ツールを使用して、Aurora MySQLから非MySQLデータベースへのレプリケーション Auroraとダウンストリームのメッセージ/イベントベースシステムとの統合を確立するなど、様々な目的でAurora MySQLからCDCレコードを抽出 Amazon Aurora MySQLでは、デフォルトでバイナリログは無効になっています( log_bin = OFF )。クラスターレベルのパラメータグループで binlog_format をMixed、Statement、またはRowに設定することで、バイナリログを有効にできます。 クラスターでバイナリログが有効になっている場合、クラスターボリュームで消費される容量は以下のような要因に依存します: 設定されたバイナリログの保持期間 テーブルの作成操作やテーブルデータの変更などによって生成される変更の量 場合によっては、接続されたバイナリログレプリカに問題が発生すると、クラスターボリュームでバイナリログの容量が増加することがあります。例えば、バイナリログベースの クロスリージョンリードレプリカ を使用している場合に、何らかの理由でリードレプリカがバイナリログの適用に遅れが生じると、Auroraは通常必要とする以上のバイナリログをソース側に一時的に保存する必要が生じることがあります。 バイナリログの保持設定は、 mysql.rds_show_configuration ストアドプロシージャを実行することで確認できます: CALL mysql.rds_show_configuration; 保持期間は時間単位で表されます。必要に応じて、 mysql.rds_set_configuration ストアドプロシージャを使用して バイナリログの保持期間 を変更できます。以下の例では、バイナリログの保持期間を24時間に設定しています: CALL mysql.rds_set_configuration('binlog retention hours', 24); プライマリインスタンスで SHOW BINARY LOGS コマンドを実行すると、存在するバイナリログとそれぞれのサイズを確認できます: SHOW BINARY LOGS Amazon Aurora MySQLでは、クラスターレベルの以下のCloudWatchメトリクスを使用して、バイナリログの数とサイズを監視できます: SumBinaryLogSize – バイナリログの総サイズ(バイト単位) NumBinaryLogFiles – クラスターに保存されているバイナリログの数 リレーログ MySQLのバイナリログレプリケーションでは、レプリカサーバー上のI/Oレシーバースレッドがプライマリサーバーに接続し、プライマリからバイナリログイベントを読み取り、それらを リレーログ と呼ばれるローカルログにコピーします。SQLアプライヤースレッドはリレーログからイベントを読み取り、可能な限り速やかに適用します。つまり、リレーログは、レプリカに適用待ちのバイナリログのコピーです。 SQLスレッドが特定のリレーログファイルからイベントを処理すると、そのファイルは不要になるため自動的に削除されます。 特定の場合において、Auroraクラスターが実際にレプリケーションを行っていないにもかかわらず、リレーログがストレージ容量を占有していることがあります。例えば、過去にAuroraクラスターを別のMySQLサーバーのレプリカとして構成したものの、完全にリセットせずにレプリケーションを停止した場合などです。このような場合、Aurora MySQLクラスターボリュームには、ストレージ容量を占有しているリレーログが依然として存在している可能性があります。 これを確認するには、 SHOW REPLICA STATUS コマンド(5.7互換バージョンでは SHOW SLAVE STATUS )を実行して、実際にレプリケーションが動作していなくても、レプリケーションが設定されているかどうかを確認できます。このコマンドが空の出力を返す場合、レプリケーションが設定されていないことを意味し、したがってクラスターにリレーログは存在しないはずです。 以下の例のように、レプリケーション設定と他のレプリケーションステータスカウンターを示す出力が表示される場合、レプリケーションは停止されているものの、レプリケーションのメタデータが残っており、Auroraクラスターボリュームの容量を消費しているリレーログがまだ存在している可能性があります。 *************************** 1. row *************************** Slave_IO_State: Master_Host: 10.136.6.91 Master_User: repl Master_Port: 3306 Connect_Retry: 60 Master_Log_File: mysqld@sam_prd2-bin.000712 Read_Master_Log_Pos: 418325560 Relay_Log_File: relaylog.066015 Relay_Log_Pos: 4 Relay_Master_Log_File: mysqld@sam_prd2-bin.000712 Slave_IO_Running: No Slave_SQL_Running: No .... ********************************************************** 残念ながら、MySQLはリレーログファイルに関する詳細なメタデータを提供していないため、クラスター内に保存されているリレーログの正確な数やサイズを確認することはできません。 レプリケーションのメタデータをクリアし、リレーログファイルを削除するには、Auroraクラスターのライターインスタンスで以下のストアドプロシージャを呼び出すことができます: Amazon Aurora MySQL バージョン2の場合は、 mysql.rds_reset_external_master プロシージャを使用 Amazon Aurora MySQL バージョン3の場合は、 mysql.rds_reset_external_source プロシージャを使用 Aurora クローン Auroraクローン は、Auroraクラスターボリュームのデータをクローンする、迅速でコスト効率の良い方法です。 Auroraは、クラスターのクローンを作成するためにコピーオンライトプロトコルを使用します。クローンが作成されると、Auroraは新しいスタンドアロンのクラスターストレージボリュームを作成しますが、元のデータページをすべて新しいボリュームにコピーすることはありません。代わりに、ページが変更されていない限り、クローンされたページは単に元のページへのポインタとなります。どちらかの側でページが変更されると、Auroraはそのページのコピーをクローン上に作成します。これが「コピーオンライト」という用語の由来です。このため、クローンの作成は迅速で、スナップショットの復元、ポイントインタイムリストア(PITR)、論理的なダンプと復元などの他の手法を使用してデータを物理的にコピーするよりも、容量効率が高くなります。また、クローンのチェーン(クローンのクローン)を作成したり、 異なるAWSアカウント間でクラスターをクローン したりすることも可能です。 クローンはボリュームの作成に少量の追加容量を使用します。この小さなオーバーヘッド以外の追加ストレージは、ソースまたはクローンされたクラスターに変更が加えられた場合にのみ割り当てられます。クローンは、データレプリケーションとパフォーマンスの面で、元のクラスターおよび他のクローンから独立しています。Auroraはこれらのエンティティ間で自動的にデータをレプリケートすることはなく、クローン(または元のクラスター)上のワークロードは互いに影響を与えません。 クローンされたクラスターストレージボリュームは、当初そのページの大部分をソースボリュームと共有しているため、それらのページはソースボリュームの VolumeBytesUsed メトリクスにのみ含まれます。クローンされたクラスターでは、 VolumeBytesUsed メトリクスは最初はほぼゼロです。メトリクスについては、このポストの後半で説明します。クローンボリュームの VolumeBytesUsed メトリクスには、クローン作成後のデータ変更によって割り当てられた追加ストレージのみが含まれます。 ソースクラスターが削除された場合、まだ共有されていたページは残りのアクティブな(稼働中の)クローンに課金されます。つまり、クローンされたクラスターに実質的な書き込みがなくても、 VolumeBytesUsed が大幅に増加する可能性があります。 そのチェーン内でさらにクローンが削除または作成されると、残りのクローンへのページの再分配が発生します。詳細については、 How Aurora cloning works を参照してください。 したがって、クラスターの VolumeBytesUsed と実際のテーブルスペースサイズの間に大きな差異が見られる場合は、そのクラスターがクローンチェーンの一部であるかどうかを確認する価値があります。 CloudWatch メトリクス 以下は、ローカルストレージとクラスターボリュームの使用状況を観察するための有用なCloudWatchメトリクスです: FreeLocalStorage – このメトリクスでは、各Auroraインスタンスに関連付けられたローカルストレージ量を監視できます。ローカルストレージの容量はインスタンスクラスに紐付いているため、より多くのローカルストレージが必要な場合は、より大きなインスタンスを使用する必要があります。 VolumeBytesUsed – このメトリクスは、Aurora DBクラスターで使用される課金対象のストレージ量を示します。前述の通り、クラスターボリュームの使用量にはInnoDBテーブルスペース、バイナリログ、リレーログが含まれます。これは課金用のメトリクスであり、コピーオンライトクローンを使用している場合など、クラスター内に実際に存在するデータ量を必ずしも反映していない場合があることに注意してください。 AuroraVolumeBytesLeftTotal – このメトリクスは、128TiB(Aurora MySQL 3.10以降では256TiB)の最大容量のうち、クラスターボリュームの残りの使用可能な容量を示します。クラスターボリュームが成長するにつれて、この値は減少します。ゼロに達すると、クラスターは容量不足エラーを報告します。このメトリクスには、内部のハウスキーピングやその他のストレージ課金に影響しない割り当ても含まれることに注意してください。その結果、このメトリクスの値は「128 TiB から VolumeBytesUsed を引いた値」と正確には一致しません。 これらのメトリクスの詳細については、 Amazon CloudWatch metrics for Amazon Aurora を参照してください。 まとめ この記事では、Aurora MySQLクラスターボリュームの容量使用の一般的な理由と、容量使用の根本原因を突き止め、Auroraのストレージ課金コストを理解するために使用できるクエリと設定について説明しました。 AWS Aurora MySQLの詳細については、 Working with Amazon Aurora MySQL を参照してください。また、Auroraストレージボリュームについての詳細は、 Introducing the Aurora Storage Engine を参照してください。
本ブログは 株式会社アプリズム 様と Amazon Web Services Japan 合同会社が共同で執筆いたしました。 みなさん、こんにちは。ソリューションアーキテクト 伊勢田氷琴です。 競走馬や乗馬用の馬を管理する施設では、24時間365日の見守りが求められます。しかし、夜間の宿直体制を維持することは、人材確保やコスト面で大きな負担となっています。株式会社アプリズム様は、この課題を AI と IoT 技術で解決する馬の見守りシステム「 aiba 」を開発しました。本ブログでは、 Amazon SageMaker AI を用いた AI モデルの開発から、 AWS IoT Core によるエッジデバイス管理まで、aiba の技術的な実装と導入効果について紹介します。 馬の見守りにおける課題と背景 株式会社アプリズム様は、AI/IoT・生成AI/AIエージェント領域を活用したシステム開発・研究開発を推進している企業です。同社が開発した馬の見守りプロダクト「aiba」は、画像解析系 AI の技術を活用し、馬にストレスを与えることなく24時間365日の常時監視を実現する非接触・非装着型の監視システムです。 図1: aiba プロダクトの流れ 図1に示すように、aiba は AI エッジカメラで馬房を監視し、骨格推定アルゴリズムにより馬の運動量を解析します。運動量に異変が生じると、即座にスタッフのスマートフォンにアラートが発信され、異常発生時の動画再生や対応記録の履歴管理まで一貫して行えます。 従来の馬の管理では、厩務員による定期的な見回りが行われていましたが、いくつかの課題がありました。まず、見回りの間には必ず目を離す時間が生じるため、その間に発生した怪我や転倒などの突発的な事故の発見が遅れる可能性がありました。また、24時間体制での監視を実現するには夜間の宿直が必要となり、人材確保や従業員のワークライフバランスの観点で大きな負担となっていました。さらに、異常が発生した際の状況を正確に把握し、適切な処置を迅速に行うことも課題でした。 これらの課題を解決するため、アプリズム様は AI による自動監視システムの開発に着手しました。システムの実現には、高精度な AI モデルの開発、エッジデバイスでのリアルタイム推論、そして多数のデバイスを効率的に管理する仕組みが必要でした。 AWS サービスの採用理由 アプリズム様が AWS のサービスを採用した理由は、主に3つあります。 第1に、AI モデルの開発における GPU リソースの調達の迅速性です。GPU の調達は社内外の要因で困難であり、通常2週間程度かかっていました。Amazon SageMaker AI を利用することで、必要な時に必要な GPU リソースを速やかに利用開始できました。また、必要に応じてインスタンスサイズを柔軟に変更し、迅速に必要なトレーニングジョブに投入できることも大きなメリットでした。 第2に、エッジデバイスの管理における運用負荷の軽減です。aiba では、複数の施設に設置された多数の AI カメラを管理する必要があります。AWS IoT Core のフリートプロビジョニング機能を利用することで、各カメラに個別に証明書をインストールする手間を省き、ネットワークに接続するだけでデバイス認証が完了する仕組みを実現できました。 第3に、データセットの保存からトレーニングジョブへの投入までをシームレスに実行できる統合環境の存在です。 Amazon S3 にデータを保存し、Amazon SageMaker AI のトレーニングジョブに投入するという一連のワークフローを、シームレスに構築しました。 また、リモートで作業するメンバーも多い中で、クラウド環境を利用することで場所を選ばず開発作業ができる点も、チームの生産性向上に寄与しました。 ソリューションの概要 aiba のシステムは、エッジ側の AI カメラとクラウド側のデータ処理基盤で構成されています。AI カメラは馬房の上部に設置され、RGB カメラと暗視カメラの2つのレンズで馬の動きを24時間監視します。カメラ内で AI モデルが動作し、馬の骨格を推定して行動をリアルタイムで解析します。 図2: aiba システム全体のアーキテクチャ 図2に示すように、aiba のシステムは AI カメラによるエッジ推論と、AWS クラウドによるデータ処理・分析の2つの層で構成されています。 エッジデバイスとクラウドの接続には AWS IoT Core を使用しています。AI カメラは馬の状態を認識し、推論結果を MQTT プロトコルで IoT Core に送信します。 クラウド側では、IoT Core から受信したデータを Amazon Kinesis Data Streams に連携し、 Amazon Managed Service for Apache Flink でリアルタイム解析を行います。異常を検知した場合は、エンドユーザーのスマートフォンに即座に通知が送信されます。通知には異常検知時とその前後の映像へのアクセス情報が含まれており、離れた場所からでも馬の状態を確認できます。 また、アプリケーションのログデータは Amazon S3 に保存され、 Amazon Athena で直接クエリできる仕組みを構築しています。お客様の増加に合わせて柔軟にスケールできる点も、AWS のマネージドサービスを活用する大きなメリットです。 AI モデルの開発には Amazon SageMaker AI を使用し、スクラッチでモデルを構築しました。 図3: AI モデルのトレーニングパイプライン 図3に示すように、データパイプラインは、画像データを Amazon S3 に保存し、SageMaker AI のトレーニングジョブに投入する流れで構築しました。トレーニングジョブの出力モデルは、カスタムスクリプトで AI カメラ専用の形式に変換し、デバイスにインストールします。 エッジデバイスとクラウドの接続には AWS IoT Core を使用しています。デバイスの認証には IoT Core のフリートプロビジョニング機能を利用し、カメラをネットワークに接続するだけで自動的にデバイス認証が完了する仕組みを実現しました。AI カメラは馬の状態を認識し、推論結果を MQTT プロトコルで IoT Core に送信します。 クラウド側では、IoT Core から受信したデータを Amazon Kinesis Data Streams に連携し、 Amazon Managed Service for Apache Flink でリアルタイム解析を行います。異常を検知した場合は、エンドユーザーのスマートフォンに即座に通知が送信されます。通知には異常検知時とその前後の映像へのアクセス情報が含まれており、離れた場所からでも馬の状態を確認できます。 また、アプリケーションのログデータは Amazon S3 に保存され、 Amazon Athena で直接クエリできる仕組みを構築しています。お客様の増加に合わせて柔軟にスケールできる点も、AWS のマネージドサービスを活用する大きなメリットです。 導入効果 aiba の導入により、複数の施設で大きな効果が得られています。 最も顕著な効果は、ラクエドラゴンホースパーク様(滋賀県大津市)での「夜間宿直なし」という運営モデルの実現です。従来は夜間も人が常駐する必要がありましたが、aiba による24時間監視により、従業員のワークライフバランスに配慮しつつ、夜間も馬の安全を確保できるようになりました。異常検知時には自動で全スタッフに連絡が届き、誰が駆けつけられるかを迅速に決定できます。また、異常行動の前後の録画機能により、離れた場所からでも馬の状態を確認でき、到着後に無駄なく迅速な対応が可能になりました。 技術面では、Amazon SageMaker AI の活用により、AI モデルの開発サイクルが大幅に短縮されました。GPU の調達に通常2週間かかっていたところ、SageMaker AI を使用することで速やかに GPU の利用を開始できるようになりました。これにより、モデルの改善サイクルを高速化し、より精度の高い AI モデルを迅速に開発できるようになりました。 AWS IoT Core のフリートプロビジョニング機能により、デバイスのプロビジョニングにかかる工数を約90%削減できました。新しい施設への導入や、カメラの追加・交換時の作業が大幅に簡素化され、運用負荷が軽減されました。 また、クラウド環境を利用することで、リモートワークのメンバーも含めたチーム全体の開発生産性が向上しました。場所を選ばず開発作業ができることで、柔軟な働き方を実現しながら、プロジェクトを効率的に進められるようになりました。 お客様の声 AIクリエイション本部 AX推進事業部 マネージャー横川様からは、以下のようなコメントをいただいています。 「Amazon SageMaker AIを導入することで、自社モデル学習用のコンピューティングリソースを必要に応じて柔軟に拡張することができました」 まとめ 株式会社アプリズム様は、Amazon SageMaker AI と AWS IoT Core を活用することで、馬の見守りシステム「aiba」を開発しました。SageMaker AI による迅速な AI モデル開発、IoT Core のフリートプロビジョニングによる効率的なデバイス管理、そしてマネージドサービスによるスケーラブルなデータ処理基盤により、高精度な24時間監視システムを構築できました。 その結果、従来考えられなかった「夜間宿直なし」という革新的な運営モデルを実現し、従業員のワークライフバランスの改善や、運用コストの削減など、ビジネス面でも大きな効果を得られています。今後も、AWS の技術を活用しながら、馬の健康管理と動物福祉の向上に貢献していくことが期待されます。 手前から左より 株式会社アプリズム:大原様 Amazon Web Services Japan:アカウントマネージャー 今井 彩渚 株式会社アプリズム:舛野様 株式会社アプリズム:湯元様 奥から左より 株式会社アプリズム:横川様 株式会社アプリズム:青木様 株式会社アプリズム:河原様 株式会社アプリズム:アユス様 Amazon Web Services Japan : ソリューションアーキテクト 伊勢田 氷琴
本記事は 2025 年 12 月 3 日に公開された Nikhil Swaminathan と Kartik Chivukula による “ Introducing Kiro powers ” を翻訳したものです。 決済フローを構築する場面を想像してください。Stripe の使用経験があっても、適切な実装パターンを求めてドキュメントを探し回ることになるでしょう。ここで冪等性キーを使うべきか? Webhook を処理する最善の方法は? Stripe に触れたことがなければ、学習曲線はさらに急になります。AI アシスタントは、フレームワークの専門知識への即座のアクセスを提供し、より速くリリースできるようにすべきです。しかし、今日の AI エージェントも同じ課題に直面しています。組み込みの知識がなければ、開発者と同じように試行錯誤を繰り返します。 フレームワークのコンテキストがないと、エージェントは推測する : エージェントは Neon にクエリを実行できますが、サーバーレス向けのコネクションプーリングを理解しているでしょうか? API を呼び出すことはできますが、適切なパターンとベストプラクティスを知っているでしょうか? 組み込みの専門知識がなければ、出力が正しくなるまで、両者ともドキュメントを手動で読み、アプローチを洗練させることになります。この試行錯誤は、すべてのツール、すべてのフレームワーク、コア専門分野外のすべてのドメインで繰り返されます。Powers は、エージェント、ひいてはあなたに専門知識への即座のアクセスを提供し、不慣れなドメインで開発速度を向上させます。 コンテキストが多すぎると、エージェントは遅くなる : MCP はフレームワークのコンテキスト問題を解決することを目的としていますが、独自の問題を抱えています。5 つの MCP サーバーに接続すると、エージェントは 1 行のコードを書く前に 100 以上のツール定義を読み込みます。5 つのサーバーは、最初のプロンプトの前にコンテキストウィンドウの 40% にあたる 50,000 以上のトークンを消費する可能性があります。より多くのツールはより良い結果を意味するはずですが、構造化されていないコンテキストはエージェントを圧倒し、応答の遅延と品質の低下、いわゆる コンテキストの劣化 につながります。 既存の状況 AI 開発ツールは急速に進化しています。Anthropic は最近、動的ツール読み込み(Tool Search ツール)、命令をパッケージ化するための Claude Skills、サブエージェントやエージェントの動作のためのルールなどのさまざまなプリミティブを導入しました。Cursor はカスタム命令のためのルールと .cursorrules ファイルを提供します。MCP はクライアント間のツール通信の標準を提供します。これらは強力な機能ですが、別々のシステムとして存在しています。 ツールアクセスのための MCP サーバー (各クライアントで設定) 命令とワークフローのための Skills (Claude 固有) コンテキスト管理のための 動的ツール読み込み (別途セットアップ) 振る舞いのための ルールとカスタム命令 ( .cursorrules のようなクライアントごとの設定) それぞれに個別の設定と管理が必要です。全体像を把握するために、ツール + 知識 + 動的読み込みという複数のプリミティブを組み合わせます。そして、Cursor、Claude Code、その他のツールを切り替えるたびに、すべてを再設定することになります。 課題は機能の欠如ではなく、断片化です。開発者が望むのは統一されたパッケージで、「Stripe 統合をインストールすれば、エージェントは正しく使用する方法を知っている」ことです。「mcp.json で MCP サーバーを設定し、Skill または .cursorrules ファイルを書き、動的読み込みを設定し、カスタム命令を追加し、各ツールごとに繰り返す」ことではありません。 Kiro powers の紹介 Kiro powers は、幅広い開発とデプロイメントのユースケースに対して、その統一されたアプローチを提供します。MCP ツールとフレームワークの専門知識を一緒にパッケージ化し、動的に読み込みます。 Neo が『マトリックス』で武術の専門知識を即座にダウンロードしたことを覚えていますか? それが Kiro エージェントに対して powers が行うことです。あらゆるテクノロジーの専門知識への即座のアクセスです。鍵は動的コンテキスト読み込みです。従来の MCP 実装はすべてのツールを事前に読み込みますが、powers は関連する場合にのみアクティブ化されます。「database」と言及すると、Neon power がそのツールとベストプラクティスを読み込みます。デプロイメントに切り替えると、Netlify がアクティブ化され、Neon は非アクティブ化されます。 power は以下を含むバンドルです。 POWER.md : エントリーポイントのステアリングファイル。エージェントに利用可能な MCP ツールとその使用タイミングを伝えるオンボーディングマニュアル MCP サーバー設定 : MCP サーバーのツールと接続の詳細 追加のステアリングまたはフック : スラッシュコマンドを介したフックやステアリングなどのエージェントに実行させたいこと Stripe power をワンクリックでインストールします。「payment」または「checkout」と言及すると、power がアクティブ化され、Stripe の MCP ツールと POWER.md ステアリングがコンテキストに読み込まれます。支払いが完了してデータベース作業に移ると、Supabase power がアクティブ化され、Stripe は非アクティブ化されます。キュレートされた powers をインストールしたり、コミュニティが構築したものを取得したり、独自のものを作成して共有したりできます。 powers を特徴づけるもの 1. 動的 MCP ツール読み込み 従来の MCP サーバーはすべてのツールを事前に読み込みます。Figma MCP サーバーは 12K トークンを消費する 8 つのツールを公開する可能性があります。Postman サーバーは 122 のツールを追加します。5 つのサーバーに接続すると、コードを書く前にコンテキストウィンドウの大部分を使い果たします。Powers はツールをオンデマンドで読み込みます。5 つの powers をインストールしても、ベースラインのコンテキスト使用量はほぼゼロです。「design」と言及すると、Figma power がアクティブ化され、8 つのツールを読み込みます。データベース作業に切り替えると、Supabase がアクティブ化され、Figma は非アクティブ化されます。エージェントは現在のタスクに関連するツールのみを読み込みます。 2. Power エコシステム: パートナーからキュレート、コミュニティ、または独自構築 Powers は、キュレートされたパートナー、コミュニティ構築の powers、またはチームのプライベートツールを使用しているかどうかにかかわらず、簡単な発見とインストールのために設計されています。発見、インストール、設定は IDE または kiro.dev ウェブサイトを通じて行われます。あなたは構築に集中します。 UI 開発(Figma)、バックエンド開発(Supabase、Stripe、Postman、Neon)、エージェント開発(Strands)、デプロイメント(Netlify、Amazon Aurora)にわたる企業と提携しています。powers パネルを開くと、インストール準備が整った多機能ツールセットが用意されています。MCP サーバーを探したり、セットアップドキュメントを読んだりする必要はありません。ローンチパートナーには、Datadog、Dynatrace、Figma、Neon、Netlify、Postman、Supabase、Stripe、Strands Agent が含まれ、さらに多くが近日公開予定です。さらに、SaaS ビルダー、AWS CDK インフラストラクチャ開発、Amazon Aurora DSQL との連携などの powers を作成したコミュニティメンバーもいます。 パートナーの powers IDE とウェブからのワンクリックインストール : Kiro または kiro.dev で直接 powers を閲覧します。「Install」をクリックすると、power が自動的に登録されます。API キーや環境変数が必要な場合は、初回使用時にプロンプトが表示されます。JSON 設定ファイルも、コマンドラインセットアップも不要です。 誰でも構築して共有できる : コミュニティ構築ツール用に GitHub URL から powers をインポートします。プライベート powers を持つチームは、ローカルディレクトリまたはプライベートリポジトリからインポートできます。一度構築すれば、チームと共有でき、全員が同じ専門知識とツールを手に入れます。 GitHub またはローカルフォルダから power をインポート。 3. クロス互換性(近日公開) 現在、powers は Kiro IDE で動作します。私たちは、powers があらゆる AI 開発ツール(Kiro CLI、Cline、Cursor、Claude Code など)で動作する未来に向けて構築しています。Model Context Protocol はツール通信の標準を提供します。Powers は、パッケージング、アクティベーション、知識転送の標準でこれを拡張します。power を一度構築すれば、どこでも使用できます。 これはパートナーにとって重要です。企業は各 AI ツール用に独自のコンテキストを維持したくありません。1 つのオンボーディングマニュアル、1 つの POWER.md を書いて、どこでも動作させたいと考えています。Powers がその標準になります。 MCP サーバーにより、ユーザーは Cline、Cursor などの他のツールで powers を使用できるようになります。 power の構造 power をよりよく理解するために、Supabase power がどのように構造化されているかを見て、powers を効果的にするものを理解しましょう。 1. フロントマター: power のアクティベーション POWER.md のフロントマターは、power がいつアクティブ化されるかを定義します。キーワードがアクティベーションをトリガーします。「database」または「postgres」と言及すると、Supabase power がその MCP ツールとコンテキストを読み込みます。 --- name: "supabase" displayName: "Supabase with local CLI" description: "Build fullstack applications with Supabase's Postgres database, authentication, storage, and real-time subscriptions" keywords: ["database", "postgres", "auth", "storage", "realtime", "backend", "supabase", "rls"] --- 「Let’s set up the database」と言うと、Kiro はキーワードの「database」を検出し、Supabase power をアクティブ化して、その MCP ツールと POWER.md をコンテキストに読み込みます。 2. POWER.md によるオンボーディング: ワークスペースのセットアップ オンボーディングセクションは、初期セットアップを通じてエージェントをガイドし、依存関係を検証し、手動で呼び出すことができるフックまたはステアリングファイルをインストールします。これは通常、power が最初にアクティブ化されたときに一度実行されます。エージェントは次の手順を自動的に実行します。Docker が実行されているかを確認し、Supabase CLI を検証し、ワークスペースにパフォーマンスレビューフックを作成します。 # Onboarding ## Step 1: Validate tools work Before using Supabase Local MCP, ensure the following are installed and running: - **Docker Desktop**: Supabase CLI requires Docker to run the local development stack - Verify with: `docker --version` - **CRITICAL**: If Docker is not installed or not running, DO NOT proceed with Supabase setup. - **Supabase CLI**: Install via npm, Homebrew, or other package managers - Verify with: `supabase --version` ## Step 2: Add hooks Add a hook to `.kiro/hooks/review-advisors.kiro.hook` ```json { "enabled": true, "name": "Review Database Performance & Security", "description": "Verify database follows performance/security best practices", "version": "1", "when": { "type": "userTriggered" }, "then": { "type": "askAgent", "prompt": "Execute `get_advisors` via MCP to check for performance and security concerns" } } 3. ワークフロー固有のステアリング: オンデマンドでのコンテキスト読み込み POWER.md には、特定のワークフロー用のステアリングファイルのマップが含まれています。RLS ポリシーに取り組んでいるときは、エージェントは supabase-database-rls-policies.md を読み込みます。Edge Functions を書いているときは、 supabase-edge-functions.md を読み込みます。 # When to Load Steering Files - Setting up a database → `database-setup-workflow.md` - Writing or formatting SQL code → `supabase-code-format-sql.md` - Creating or modifying RLS policies → `supabase-database-rls-policies.md` - Creating PostgreSQL functions → `supabase-database-functions.md` - Working with declarative schema (`supabase/schemas/` directory) → `supabase-declarative-database-schema.md` - Setting up or modifying Next.js authentication with Supabase SSR → `supabase-nextjs-supabase-auth.md` - Implementing realtime features (broadcast, presence, channels, subscriptions) → `supabase-use-realtime.md` これによりコンテキストが集中します。すべての Supabase パターンを事前に読み込む代わりに、エージェントは現在のタスクに関連するものだけを読み込みます。 エージェント機能の未来: powers を通じた継続的学習 Neo はカンフーを一度学んで終わりではありませんでした。『マトリックス』全体を通して、必要に応じて新しい能力をダウンロードしました。ヘリコプターの操縦、武器の習得、マトリックス自体の理解。各 power は、能力で圧倒することなく、彼ができることを拡大しました。それが AI エージェントのビジョンです。Powers は単なるパッケージング形式ではありません。継続的学習のモデルです。フレームワークが進化し、チームが内部ツールを構築するにつれて、エージェントはゼロから始めることなく能力を拡張する方法が必要です。 昨日、新しいツールを追加することは、MCP サーバーを手動で設定し、コンテキストがオーバーフローしないことを願うことを意味しました。今日、それは power をインストールすることを意味します。Supabase が更新された RLS パターンをリリースしますか? エージェントは自動的にそれらを取得します。チームが内部デザインシステムを構築しますか? それを power としてパッケージ化すれば、すべての開発者のエージェントがその使用方法を知ります。 これが、エージェントが真に有用になる方法です。すべてを事前に知ることによってではなく、必要なものを必要なときに学習し、周囲のツールが進化するにつれて専門知識を継続的に拡大することによってです。その結果、AIエージェントは、人間の開発者と同じように、いつ設計システムを考え、いつデータベースを考え、いつデプロイを考えるべきかを理解するようになります。 Kiro で今日 powers を試して 、何を構築するか教えてください。
みなさま、AWS re:Invent 2025 はお楽しみいただけましたでしょうか。 2025 年 12 月 5 日に実施した [AWS Black Belt Online Seminar] AWS re:Invent 2025 速報 の資料及び動画についてご案内させて頂きます。動画はオンデマンドでご視聴いただけます。 また、過去の AWS Black Belt オンラインセミナーの資料及び動画へのリンクは、YouTube の再生リスト「 AWS Black Belt Online Seminar の Playlist 」や、「 AWS Black Belt Online Seminar 一覧 」からご確認ください。 AWS re:Invent 2025 速報 AWS re:Invent 2025 で発表されたばかりの新サービス、新機能を 1 時間に凝縮して一挙紹介! 資料( PDF ) | 動画( YouTube ) 対象者 AWS に興味をお持ちのすべての方 AWS re:Invent 2025 を見逃してしまった方、振り返りたい方 日本語でわかりやすく新サービス、新機能の概要を知りたい方 本 BlackBelt で学習できること AWS re:Invent 2025 で発表されたばかりの新サービス、新機能 スピーカー 小林 正人 ( Kobayashi Masato ) Solutions Architect 本 BlackBelt を通じて、みなさまが深堀りしたいと思えるサービスが見つかり、より詳細にその機能やメリットを調べていただくきっかけとなれば幸いです。 また、毎週のアップデートをまとめている 週刊 AWS も公開される予定ですので楽しみにお待ち下さい!
2025 年 12 月 10 日からの 3 日間、東京ビッグサイトで開催される JAPAN BUILD TOKYO ー建築・土木・不動産の先端技術展ー の「建設 DX 展」にてソリューション展示を行います。 開催概要 日程 :2025 年 12 月 10 日(水)~12 日(金) 時間 :10:00-17:00 会場 :東京ビッグサイト 南展示棟 4F 「建設 DX 展」 小間番号 :58-18 会場マップ 展示テーマ:生成 AI が起こす建設業の業務改革 昨年に引き続いて出展し、今年はさらに規模を拡大。 4 つのテーマ で生成 AI を活用した業務改革の具体例をご紹介します。 展示内容 物理世界とデジタルをつなぐ AI ロボット 自然言語を理解するロボットが物理世界の映像をクラウドに届け、生成AIが解釈する実機を展示します。 遠隔臨場×デジタル技能継承 カメラ映像を最大限に活用。生成 AI が遠隔臨場や技能継承をサポートします。 設計図書の AI レビュー 生成 AI による書類審査の最新情報をお届けします。 エージェンティック AI 時代の BIM 活用 BIM データと連携する生成 AI エージェントや、新しいデータ分析サービスのデモを行います。 実際に動くデモンストレーションをご覧いただきながら、みなさまの現場が抱える課題や DX の取り組みについてお話しできることを楽しみにしています! 資料公開スケジュール 【展示開催前】展示予定のご案内 展示内容の概要をご紹介 このページの URL はブースで配布するカードのQRコードからもアクセスできます 【展示期間中】12 月 10 日(火)~ 全体概要資料を公開 展示全体の概要資料を本投稿に追加予定です。 【展示終了後】12 月 16 日(月)~ 詳細資料を公開 各ソリューションの詳細資料を追加予定です。 合わせて展示レポートを掲載予定です。 このページをブックマークしておくと、最新情報をすぐにチェックできます! ご来場いただけない方へ 展示終了後に、このページで使用したソリューションの資料を公開予定です。 ぜひブックマークいただき、イベント終了後にご参照ください!
本記事は 2025年11月24日 に公開された「 Announcing embedded chat in Amazon Quick Suite | AWS Business Intelligence Blog 」を翻訳したものです。 本日、 Amazon Quick Suite の埋め込みチャット機能を発表します。これは、お客様のアプリケーションに直接埋め込むことができる統合された会話体験です。このリリースにより、構造化データと非構造化ナレッジを単一の会話で統合する Quick Suite のエージェント型 AI チャットを、ユーザーが既に使用しているツールに組み込むことができます。これにより、組織は会話インターフェース、オーケストレーションロジック、データアクセスレイヤーをゼロから構築することなく、アプリケーション内にインテリジェントでコンテキストに応じた回答を簡単に追加できます。 組織が AI を導入する中で、明確なパターンが見えてきています。人々は回答を得るためにツールを切り替えたくないのです。CRM、サポートコンソール、分析ポータル、社内ダッシュボードなど、その場で質問し、正確でコンテキストに応じた回答を得たいと考えています。同様に、独立系ソフトウェアベンダー(ISV)は、高度なエージェント機能を顧客向け製品に統合したいと考えています。しかし、ほとんどの会話ツールは依然として妥協を強いられます。構造化データに優れているか、ドキュメントに優れているか、分析に適しているか、ナレッジベースに適しているか、質問に答えられるか、アクションを実行できるか、のいずれかです。これらすべてを兼ね備えていることはほとんどありません。 Quick Suite の統合チャット機能は、ダッシュボード、ドキュメント、インデックス、接続されたデータを単一の会話で推論できるエージェント型 AI でこのニーズに対応します。ユーザーは KPI を参照し、ファイルから詳細を取得し、チケットから顧客フィードバックを取り込み、定義されたアクションを実行できます。これらすべてを、使い慣れたツールのチャット画面から離れることなく実行できます。埋め込み統合チャットにより、組織はこのエージェント型 AI 駆動の体験を自社の製品やポータルに直接配置でき、ユーザーにワークフローに自然に適合する強力でパーソナライズされた体験を提供できます。Quick Suite により、ユーザーは 40 以上のデータソースとの統合を備えたインテリジェントな会話エージェントをわずか数分で起動して埋め込むことができます。 この記事では、Quick Suite の埋め込み統合チャットの力を解き放ち、AI を活用したアシスタンスをワークフローに直接組み込む方法をご紹介します。 主な機能とメリット 埋め込み統合チャット機能は、以下の主要なメリットを提供します。 構造化データと非構造化データにわたる統合チャット体験 – 埋め込みチャットは、ダッシュボード、ファイル、メモ、接続されたソースなどのさまざまなデータを使用した Quick Suite のエージェント型推論をアプリケーションに組み込みます。ユーザーは自然言語で質問し、要約を探索し、インサイトを比較し、利用可能なアクションを実行できます。これらすべてが、構造化データソースと非構造化データソースにわたってシームレスに動作する 1 つの連続したフローで行えます。 使い慣れたアプリケーションとの連携 – Quick Suite は、チームのアプリケーションを会話に直接組み込みます。これらの接続を通じて、ユーザーは SharePoint や OneDrive に保存されたドキュメントを検索したり、Slack でメッセージを送信したり、Jira でタスクを作成したり、MCP を通じて有効化されたカスタム接続を使用したりできます。これらすべてをチャットから離れることなく行えます。ユーザーは、既に作業している場所で必要な情報とアクションに即座にアクセスできます。 ワンクリック埋め込み – Quick Suite を使用すると、Quick Suite インターフェースからコードをコピーしてエンタープライズアプリケーションに挿入するだけで、数分以内にチャットエージェントをアプリケーションに埋め込むことができます。 セキュリティとアクセス制御 – 埋め込みチャットはデフォルトでセキュアです。埋め込み会話体験を支えるデータは、お客様の管理下に置かれます。エージェントがアクセスできるもの(キュレーションされた Space、既存の Q インデックス、または接続されたデータソース)を選択できます。アクションも明示的にスコープが設定されており、チームは Quick Suite のエージェント型 AI の恩恵を受けながら完全なガバナンスを維持できます。 企業ブランドに合わせたカスタマイズ可能なビジュアルテーマ – Quick Suite は、組織のブランドアイデンティティを埋め込みチャット体験に直接拡張する強力なカスタマイズ機能を提供します。企業のブランドカラーで Quick Suite をカスタマイズし、プラットフォーム全体で一貫したビジュアルアイデンティティを作成できます。iframe を使用して Quick Suite チャット機能をアプリケーションに統合できるため、ウィジェットは追加の設定なしでブランドの外観と操作感をシームレスに継承します。 企業のコミュニケーションスタイルに合わせたカスタマイズ可能なトーン – Quick Suite では、すべてのインタラクションに企業独自の声を吹き込むことができます。企業のコミュニケーションスタイルと専門知識を反映したカスタム指示を持つカスタムチャットエージェントを作成し、プロフェッショナルでフォーマル、フレンドリーで会話的、または技術的で正確など、トーンを設定できます。Quick Suite では、ブランドアイデンティティに沿ったパーソナライズされたウェルカムメッセージでユーザーを迎えることができ、会話が適切なトーンで始まります。また、回答のフォーマット方法に関する具体的な指示や、ユースケースに固有の質問への回答に関するヒントを与えることもできます。 ビジュアルテーマから会話のトーン、アプリケーション統合まで、この包括的なカスタマイズにより、埋め込みチャットウィジェットは既存のアプリケーションに自然に溶け込み、ユーザーに一貫したブランド体験を提供します。 Quick Suite の埋め込みチャット機能は、 既存の Quick Suite 料金 で追加費用なしでご利用いただけます。 ソリューション概要 統合チャットを埋め込むには、 GenerateEmbedUrlForRegisteredUser または GenerateEmbedUrlForRegisteredUserWithIdentity API を使用する必要があります。アプリケーションでユーザーに表示するには、QuickSight Embedding SDK バージョン 2.11.0 以上を使用する必要があります。 前提条件 以下の前提条件を満たしていることを確認してください。 Quick Suite が有効化された AWS アカウント。Quick Suite アカウントをお持ちでない場合は、 サインアップ できます。Quick Suite 無料トライアルの開始手順については、 Amazon Quick Suite の開始方法 を参照してください。 ロールを引き受けるユーザーに権限を付与するための関連ポリシーを持つ AWS Identity and Access Management (IAM)ロール。以下はサンプルポリシーステートメントです。 { "Action": [ "quicksight:GenerateEmbedUrlForRegisteredUser" ], "Resource": "*", "Effect": "Allow" } ダッシュボードを埋め込むドメインを許可リストに追加します。これは Quick Suite コンソールの Manage Amazon Quick Suite メニューの Security / Manage domains で行えます。 統合チャットエージェントの埋め込みは、現在 Professional または Enterprise ライセンス を持つ登録ユーザーが利用できます。Quick Suite でユーザーがプロビジョニングされていることを確認してください。 チャットエージェントの作成 チャットエージェントを埋め込むには、まず Quick Suite アプリケーションでカスタムチャットエージェントを作成して設定します。カスタムチャットエージェントを構築することで、自然言語を使用してエージェントのペルソナを定義します。エージェントが誰であるか(アイデンティティと役割)、エージェントが何をするか(コア責任)、エージェントがどのようにコミュニケーションするか(トーンとスタイル)を定義します。さらに、チャットエージェントのナレッジソース(ダッシュボード、トピック、非構造化データを含む)、およびチャット体験の不可欠な部分としてエージェントがさらなるステップを実行するためのアクションと統合(Slack、Outlook、Jira など)を設定できます。チャットエージェントの作成手順については、 Amazon Quick Suite での AI 搭載チャットエージェントの作成、カスタマイズ、デプロイ を参照してください。 ワンクリックエンタープライズ埋め込み ワンクリック埋め込みを使用すると、Quick Suite から iframe に追加される静的な埋め込みコードで Quick Suite 統合チャットエージェントを埋め込むことができます。ユーザーがイントラネットエンタープライズアプリケーションでチャットエージェントにアクセスすると、Quick Suite へのサインインが求められます。以下のスクリーンショットは、埋め込みコードを取得する方法を示しています。 登録ユーザー埋め込み 登録ユーザー埋め込みを使用して統合チャットエージェントを埋め込むこともできます。登録ユーザー埋め込みでは、組織の既存のエンタープライズ認証インフラストラクチャを使用しながら、Quick Suite チャットエージェントをカスタムアプリケーションにシームレスに統合できます。ユーザーは企業の ID プロバイダーを通じて 1 回認証するだけで、追加のログインプロンプトなしでチャットエージェントにアクセスできます。さらに、各ユーザーはアクセスを許可された情報のみを表示するパーソナライズされた会話体験を受け取り、企業が必要とする堅牢なセキュリティ基準を維持します。 このセクションの以下の手順を完了して、API を使用して統合チャットエージェントを埋め込みます。 セキュアな埋め込み URL の生成 GenerateEmbedUrlForRegisteredUser または GenerateEmbedUrlForRegisteredUserWithIdentity Quick Suite API を使用して、セキュアな埋め込み URL を生成して抽出します。以下は Python コードスニペットのサンプルです。詳細な例については、 SDK ドキュメント を参照してください。 # QuickChat 体験用の埋め込み URL を生成 response = quicksight_client.generate_embed_url_for_registered_user( AwsAccountId='<ACCOUNT_ID>', # 12 桁の AWS アカウント ID UserArn='<USER_ARN>', # 登録済み QuickSight ユーザーの ARN ExperienceConfiguration={ 'QuickChat': {} # QuickChat 埋め込み体験を指定 }, AllowedDomains=[ '<URL>', # 埋め込みが許可されるドメイン ] ) # レスポンスから埋め込み URL を抽出 embed_url = response['EmbedUrl'] ExperienceConfiguration パラメータの 'QuickChat': {} は、Quick Suite チャットエージェントインターフェースを埋め込むことを指定します。 チャットインターフェースの設定 QuickSight Embedding SDK を使用して、Web アプリケーションでチャットインターフェースをレンダリングします。以下の主要な設定オプションを使用します。 frameOptions.url – 前のステップで生成したセキュアな埋め込み URL を指定します。 frameOptions.container – チャットを含む DOM 要素の CSS セレクターを指定します。 contentOptions.fixedAgentArn – 特定のカスタムチャットエージェントを埋め込むためのオプションの Amazon リソースネーム(ARN)を指定します。デフォルトは Quick Suite システムチャットエージェントです。 カスタムチャットエージェント ARN を取得するには、以下の手順を完了します。 Quick Suite コンソールで、ナビゲーションペインの Explore を選択し、 Chat agents を選択します。 Action 列で、 Chat の横にあるオプションメニューを選択し、 View chat agent details を選択します。 チャットエージェント名の横にある Copy link を選択します。 リンクは以下の URL のようになります。 https://us-east-1.quicksight.aws.amazon.com/sn/start/agents?view=6fxxxxxx-xxxx-xxxx-xxxx-xxxxxx43137d view= の後のテキストがエージェント ID です。 エージェント ARN は arn:aws:quicksight:us-east-1:<<aws-account-id>>:agent/<<agent-id>> の形式です。 以下のコードサンプルは、統合チャット体験をロードするために使用される frameOptions と contentOptions パラメータを示しています。 // iframe コンテナとサイズを設定 const frameOptions = { url: "<YOUR_EMBED_URL>", // ステップ 1 のバックエンド呼び出しからの URL container: '#experience-container', height: "700px", width: "1000px", onChange: (changeEvent, metadata) => { switch (changeEvent.eventName) { case 'FRAME_MOUNTED': { console.log("QuickChat frame successfully mounted"); break; } case 'FRAME_LOADED': { console.log("QuickChat experience loaded and ready"); break; } } }, }; // チャット固有のオプションを設定 const contentOptions = { fixedAgentArn: '<AGENT_ARN>', // オプション: 埋め込むエージェント ARN を指定 onMessage: async (messageEvent, experienceMetadata) => { switch (messageEvent.eventName) { case 'CONTENT_LOADED': { console.log("QuickChat interface initialized successfully"); break; } } } }; 実際のユースケース 実際のアプリケーション: 財務パフォーマンスダッシュボードに埋め込まれた財務分析アシスタント 架空の企業が、基盤となる財務データセットとビジネスコンテキストドキュメントの知識を持つカスタムチャットエージェント(財務分析アシスタント)を財務パフォーマンスダッシュボードに埋め込んでいます。このダッシュボードは、経営幹部、社内財務チーム、プロダクトオーナー、リージョナルマネージャー、セールスリーダーを含むビジネスリードなど、数百人の多様なユーザーがアクセスしています。 データアクセスの民主化とセルフサービス分析 チャットエージェントはトピック設定を使用して基盤となるデータセットにリンクされているため、技術に詳しくないユーザーでも独立してデータを探索できます。フィルターやパラメータに慣れていないユーザーでも、「EMEA リージョンの売上高は?」、「2024 年第 3 四半期の収益は?」、「前四半期で収益成長率が最も高かった国は?」などの自然言語で質問できます。 ビジネスユーザーは、セルフサービスダッシュボードを操作する際に、日常的にフォローアップリクエストを行います。チャットエージェントの助けを借りて、BI チームに頼ることなく、追加のデータクエリやレポートの生成を自動化できるようになりました。たとえば、エージェントに以下のような要約を生成させることで、定型的なレポート作成タスクを効率化できます。 「主要な指標とトレンドをハイライトした、経営チーム向けの月次財務サマリーを作成して」 「すべての部門にわたって、予算目標に対するパフォーマンスを比較して」 「今四半期の製品ライン別の利益率を表示して」 データからリアルタイムインサイトへ: 「どのように」と「なぜ」を理解する さらに、ダッシュボードの構造化データと企業ドキュメント(取締役会報告書、戦略メモ、市場分析)の非構造化データを組み合わせたエージェントを埋め込むことで、エンドユーザーはダッシュボードを離れたりアプリケーションを切り替えたりすることなく、データの背後にある「どのように」と「なぜ」についてリアルタイムで質問できます。収益減少チャートを見ながら、すぐに「この減少の原因は?」と質問し、表示されているデータと基盤となるドキュメントを組み合わせた回答を得ることができます。以下のような質問が考えられます。 「第 2 四半期と比較して第 3 四半期に収益が 15% 減少した理由は?」 「製品 A の利益率が今四半期 8% 低下しているのが見えます。製品戦略チームは前回の四半期レビューで何を推奨しましたか?」 「今月ソフトウェアライセンスに 45,000 ドルを計上しています。会計ポリシーマニュアルによると、これはどのように分類すべきですか?」 インサイトからリアルタイムアクションへ: 意思決定を促進する統合 埋め込みチャットエージェントがメールやチケットシステムなどの外部アプリケーションと統合されているため、財務ダッシュボードは受動的なレポートツールから、チームのワークフローシステムで直接アクションを開始および追跡できるアクティブなコマンドセンターに変わります。以下のようなユースケースが考えられます。 Slack を通じてステークホルダーにアラート – 第 4 四半期の営業費用の異常に気づいた後、財務アナリストはチャットエージェントに「この経費スパイクを要約し、このダッシュボードへのリンクを含めて財務ディレクターに Slack を送信して」と依頼できます。 Asana でフォローアップを作成 – ダッシュボードのインサイトから直接、リージョナルマネージャーは「この収益減少をレビューするための Asana タスクを国別リードに作成して。優先度を高に設定し、期限を来週金曜日にして」と言えます。 まとめ Quick Suite 埋め込みチャットのリリースは、AI を活用した会話をエンタープライズワークフロー内でよりアクセスしやすく統合されたものにするための大きな前進を表しています。このリリースは、組織が今日直面している根本的な課題、つまり使い慣れた作業環境を離れることなく強力な AI 機能にアクセスできるようにすることに対応しています。このソリューションは、エンタープライズグレードのセキュリティとブランドの外観と操作感に適応する広範なカスタマイズオプションを提供しながら、ツールの断片化という課題を解決します。自然言語クエリによるデータ探索、構造化ソースと非構造化ソースにわたるインサイトの接続、ワークフローアクションのトリガーなど、Quick Suite 埋め込みチャットはニーズに合わせて成長する包括的なソリューションを提供します。拡張されたブランディングコントロールや匿名ユーザーのサポートなどの今後の機能でプラットフォームを強化し続ける中、組織がこのテクノロジーでユーザー体験をどのように変革するかを楽しみにしています。 Quick Suite SDK と体験固有のオプションの詳細については、 GitHub リポジトリ をご覧ください。 Quick Suite コミュニティ に参加して、質問、回答、学習を行い、追加のリソースを探索してください。 著者について Salim Khan は Amazon Quick Suite のスペシャリストソリューションアーキテクトです。Salim は 16 年以上のエンタープライズビジネスインテリジェンス(BI)ソリューションの実装経験を持っています。AWS 入社前は、自動車、ヘルスケア、エンターテインメント、消費財、出版、金融サービスなどの業界バーティカルに対応する BI コンサルタントとして働いていました。企業全体でビジネスインテリジェンス、データウェアハウジング、データ統合、マスターデータ管理ソリューションを提供してきました。 Pallavi Sharma は Amazon Quick Suite のプリンシパルプロダクトマネージャーで、Quick Suite ポートフォリオ全体の埋め込みをリードしています。クラウドモダナイゼーションおよび管理ツール、ローコードプラットフォーム、AI 駆動ソリューションにわたるエンタープライズソフトウェアの構築とスケーリングで 10 年以上の経験を持っています。電気工学を専攻し、半導体業界で ASIC 設計エンジニアとしてキャリアをスタートしました。Pallavi は、組織が AI の力を解き放ち、人々の働き方を簡素化する直感的で人間中心の製品を作ることに情熱を注いでいます。 Marisa Parker は Amazon Quick Suite のシニア UX デザインマネージャーで、エンタープライズ AI 体験を構築するデザイナーチームをリードしています。10 年以上の経験を持ち、開発者ツール、クラウドプラットフォーム、エンタープライズリソースプランニングシステムのデザインチームをリードするなど、テクノロジー業界全体で AI 体験を形作ってきました。ユーザーが AI を使用して生産性を向上させ、ワークフローを効率化する直感的な体験を作ることに情熱を注いでいます。 Joy Cheng は AWS のシニアビルダーで、業界全体のエンタープライズクライアント向けの Amazon Quick Suite 実装に注力しています。Amazon Music と NBCUniversal で分析エンジニアリングおよびリーダーシップポジションを務めるなど、エンタープライズデータソリューションで 10 年以上の経験を持ち、コンサルティングポートフォリオはアフリカとアジアの米国政府および省庁向けの教育および健康イニシアチブにまで及びます。UC Irvine と UCSD のデータ分析ブートキャンプの元インストラクターとして、AI とデータ分析をすべての人がアクセスできるようにすることに情熱を注いでいます。 この記事は Kiro が翻訳を担当し、ソリューションアーキテクト の 守田 凜々佳 がレビューしました。
本記事は「 Introducing Kiro autonomous agent 」を翻訳したものです。 IDE アシスタントは、AI 開発者ツールの第一波でした。シンプルなインライン補完から始まり、チャットインターフェースへと発展し、IDE から直接マルチステップタスクを計画・実行できるエージェント型ワークフローへと進化しました。その後、CLI アシスタントが登場し、コマンドラインにも AI サポートをもたらしました。 今年の初めに、私たちはこれらの AI ワークフローに構造を与える Kiro IDE と Kiro CLI を発表しました。ローカルマシンでエージェントと直接作業するには最適なツールです。エージェント型ワークフローは進化を続けており、新しいクラスのエージェントが登場しています。それは独立して動作し、コンテキストを維持し、あらゆるやり取りから学習する最先端エージェントです。 本日、開発者とチームがソフトウェアを構築・運用する方法を変革する 3 つの新しい最先端エージェント の 1 つである、Kiro autonomous agent のプレビュー版をリリースします。 Kiro autonomous agent は、Kiro Pro、Pro+、Power プランを契約されている個人開発者向けにプレビュー版として順次展開されています。プレビュー期間中は無料で、使用量は週次制限があります。チームは早期アクセスのために ウェイトリストに参加できます 。 開発コンテキストのギャップ ほとんどの AI コーディングアシスタントでは、コンテキストを積極的に管理する必要がありますが、これは簡単ではありませんでした。設定やパターンを常に再説明したり、リポジトリにコンテキストを保存するシステムを構築したりする必要があります。そして、これらはセッションベースです。セッションを閉じると、すべてを忘れてしまいます。複数のリポジトリで作業する際は特に困難になります。各リポジトリでコンテキストを設定し、エージェントにそれぞれへのアクセスを与える必要があります。 15 のマイクロサービスで使用されている重要なライブラリをアップグレードする必要があるとしましょう。 自分で行う場合 : 各リポジトリを開き、依存関係を更新し、破壊的変更を修正し、テストを実行し、PR を作成する必要があります。これを 15 回繰り返すと、数日分の作業になる可能性があります。 エージェント型 IDE/CLI を使用する場合 : 手動よりは速くなります。最初のリポジトリを開き、エージェントにライブラリの更新を指示し、変更をレビューし、見落としを修正し、テストを実行し、PR を作成します。その後、リポジトリ 2 に移動して最初からやり直し。すべてのリポジトリで作業に関与し続ける必要があり、セッションを閉じるとエージェントはすべてを忘れてしまいます。 Kiro autonomous agent の場合 : 一度説明するだけです。マルチリポジトリ作業を統一されたタスクとして扱い、影響を受けるリポジトリを特定し、各サービスがライブラリをどのように使用しているかを分析し、あなたのパターンに従ってコードを更新し、完全なテストスイートを実行し、あなたが他の作業をしている間に 15 のテスト済みプルリクエストをレビュー用に開きます。 違いは何でしょうか? Kiro autonomous agent はセッションベースではありません。常にそこにあり、作業全体でコンテキストを維持します。エラーハンドリングについて1つの PR でフィードバックを与えると、それを記憶し、その後の変更にそのパターンを適用します。類似のアーキテクチャ決定に遭遇すると、既存の実装と設定を考慮します。コードベースを再説明したり、同じ作業を繰り返したりする必要はありません。エージェントはすでにあなたの働き方を知っており、やり取りのたびに向上していきます。 仕組み Kiro autonomous agent の展開に伴い、有料プランのユーザーは オンラインアカウント でアクセスできるようになります。チャットしたり、必要な変更や改善を説明したりして、最大 10 のタスクを同時に実行できます。エージェントは独立して作業を完了する方法を見つけ出します。 タスクを割り当てると、Kiro autonomous agent は以下のことを行います。 開発セットアップを反映した独立したサンドボックス環境を立ち上げ リポジトリをクローンしてコードベースを分析 作業を分解し、要件と受け入れ基準を定義 専門化されたサブエージェントを調整(1 つは調査と計画を担当、もう 1 つはコードを書き、検証エージェントが進行前に出力をチェック) 作業の任意の側面について不確実な場合は質問 変更と実装決定の詳細な説明とともにプルリクエストを開く 各タスクは、設定可能なネットワークアクセス、環境変数、開発環境設定を持つ独自の独立したサンドボックスで実行されます。Kiro autonomous agent は非同期で実行されるため、開発環境を適切にセットアップし、テストスイートを実行し、変更を検証するのに必要な時間を取ることができ、その間あなたは他の作業に集中できます。 Kiro autonomous agent との作業 Kiro autonomous agent とチャットして、アプローチを議論したり、質問したり、作業についてコンテキストを提供したりします。委任する準備ができたら、タスクを作成するよう依頼します。 タスク作成前 チャットを使用して異なる実装アプローチを議論し、要件や制約を明確にし、技術的決定についてエージェントの意見を求めます。エージェントはウェブ検索、以前のコードレビューからの学習、他のタスクからのコンテキストにアクセスして、情報に基づいた回答を提供します。 タスク実行中 タスクが作成されたら、チャットを続けて実装アプローチを指導したり、追加要件を提供したり、初期結果をレビューした後にエージェントにより多くの作業を依頼したりします。コメントや指導は現在のタスクの範囲を更新します。異なるタスクで作業するには、新しいチャットを開始します。 GitHub からのタスク割り当て GitHub イシューから直接作業を割り当てることもできます。任意のイシューに kiro ラベルを追加するか、コメントで /kiro に言及して、その特定のタスクを Kiro autonomous agent に割り当てます。エージェントは追加のコンテキストやフィードバックのために イシューのすべてのコメントを聞きます。 コードレビューから学習 「常に標準のエラーハンドリングパターンを使用する」や「チームの命名規則に従うことを忘れずに」などの PR フィードバックを残すと、Kiro autonomous agent はその PR を修正するだけではありません。それを記憶し、将来の作業にそれらのパターンを自動的に適用します。 作業を続けるにつれて、エージェントはあなたのコード、製品、従う標準をより良く理解し、その後のすべてのタスクを改善する知識を構築します。 安全で設定可能な実行 エージェントが実行する各タスクは、設定可能なアクセス制御を持つ独立したサンドボックスで動作します。権限、ネットワークアクセス、エージェントが触れることができるリソースを制御します。 ネットワークアクセス制御 各タスクに対して 3 つのレベルから選択できます。統合のみ(サンドボックスは GitHub プロキシのみにアクセス)、共通依存関係(npm、PyPI、Maven などのパッケージレジストリへのアクセス)、またはオープンインターネット。正確な制御のためにカスタムドメイン許可リストを定義することもできます。 MCP 統合 MCP 統合はタスク実行中に使用され、Kiro により多くのツールへのアクセスを提供します。個別のタスクのために Model Context Protocol サーバーを通じて専門ツールや独自システムを接続します。 環境変数とシークレット 個別のタスク実行中にエージェントが利用できる環境変数とシークレットを設定します。シークレットは暗号化されて保存され、ログやプルリクエストで公開されることはありません。 環境設定 エージェントはリポジトリ内の DevFiles や Dockerfiles を自動的に検出して、適切な依存関係、ビルドコマンド、ランタイム要件でサンドボックス環境を設定します。どちらも見つからない場合、エージェントはプロジェクト構造を分析してプロジェクトの環境を設定します。 チーム向け Kiro autonomous agent チームにとって、Kiro autonomous agent は全員と一緒に働く共有リソースとなり、コードベース、製品、標準の集合的理解を構築します。独立して動作する個別の AI アシスタントとは異なり、チームエージェントは仕様、議論、プルリクエストを統一されたメモリに織り込み、チーム全体をより効果的にします。 新しい決済処理機能を構築するチームを考えてみましょう。1人の開発者がコードレビューを通じてチームのエラーハンドリングパターンをエージェントに教えます。数日後、別の開発者がエージェントに返金ワークフローの実装を割り当てます。エージェントはすでにそれらのパターンを知っており、誰も標準を再説明する必要なく、機能全体で一貫性を保ちながら自動的に適用します。 より速く一緒に出荷 エージェントは複数のリポジトリとタスクで並行して開発作業を実行するため、リリースはボトルネックを減らして前進します。1人の開発者が API 再設計に集中している間、エージェントはワークフローの一部として、クライアントライブラリ、ドキュメント、統合テストの対応する更新を処理します。 スタック全体で動作 チームのリポジトリ、パイプライン、コラボレーションツール(Jira、GitHub、GitLab、Teams、Slack、Confluence)を接続して、作業が進行するにつれてエージェントがコンテキストを維持できるようにします。誰かが Confluence で仕様を更新したり、Jira チケットにコメントしたり、Slack でアプローチを議論したりすると、エージェントはそのコンテキストをタスクに組み込み、変更がチームのベストプラクティスと一致することを保証します。 チームから学習 コードレビュー、機能リクエストやバグ、アーキテクチャ決定がエージェントの理解の一部になります。文書化されたものだけでなく、チームが実際にどのように働き、どのパターンを好むかから学習します。この学習により、エージェントは一般的なコーディングが上手になるだけでなく、時間をかけて特定のチームをより良くサポートできるようになります。 チームはすばやいアクセスのために ウェイトリスト に参加できます。 Kiro autonomous agent のプレビュー版を Kiro Pro、Pro+、Power ユーザー向けに段階的に展開を開始しています。 詳細を確認 するか、 サインインして利用可能 かをチェックしてください。
本記事は2025年11月19日に公開された「 Building responsive APIs with Amazon API Gateway response streaming 」を翻訳したものです。 本日、AWS は Amazon API Gateway でレスポンスストリーミングのサポートを発表しました。これにより、レスポンスペイロードをクライアントに段階的にストリーミングすることで、REST API の応答性を大幅に向上させることができます。この新機能により、ストリーミングレスポンスを使用して、LLM 駆動アプリケーション (AI エージェントやチャットボットなど) を構築する際のユーザーエクスペリエンスを向上させたり、Web およびモバイルアプリケーションの time-to-first-byte (TTFB)パフォーマンスを改善したり、大きなファイルをストリーミングしたり、 server-sent events (SSE) などのプロトコルを使用して段階的な進捗を報告しながら長時間実行される操作を実行したりできます。 この記事では、この新機能、それが対処する課題、およびレスポンスストリーミングを使用してアプリケーションの応答性を向上させる方法について説明します。 概要 次のシナリオを考えてみましょう。 Amazon Bedrock の 基盤モデル を使用する AI 駆動のエージェントアプリケーションを実行しているとします。ユーザーは API を介してアプリケーションと対話し、詳細な回答を必要とする複雑な質問をします。レスポンスストリーミング以前は、ユーザーはプロンプトを送信し、最終的にアプリケーションのレスポンスを受け取るまで待機する必要があり、場合によっては数十秒かかることもありました。この質問と回答の間の不自然な間は、切断された不自然なエクスペリエンスを生み出していました。 新しい API Gateway レスポンスストリーミング機能により、API を介した対話がはるかに流動的で自然なものになります。アプリケーションがモデルのレスポンスの処理を開始するとすぐに、API Gateway を使用してユーザーにストリーミングで返すことができます。 次のアニメーションは、この大幅なユーザーエクスペリエンスの向上を示しています。左側のプロンプトは非ストリーミングレスポンスを使用して処理され、ユーザーは結果を受け取るまで数秒待つ必要があります。右側のプロンプトは新しい API Gateway レスポンスストリーミングを使用しており、TTFB を大幅に削減し、ユーザーエクスペリエンスを向上させています。 図1. Bedrock 基盤モデルからレスポンスを返す際の API Gateway レスポンスストリーミング有効化前(左)と有効化後(右)のユーザーエクスペリエンスの比較 ユーザーは、誰かがタイピングしているのを見るように、AI のレスポンスが単語ごとにリアルタイムで表示されるのを確認できるようになりました。この即座のフィードバックにより、アプリケーションがよりレスポンシブで魅力的に感じられ、対話全体を通じてユーザーとの接続が維持されます。さらに、レスポンスサイズの制限を心配したり、複雑な回避策を実装したりする必要はありません。ストリーミングは自動的かつ効率的に行われるため、インフラストラクチャの制約を管理するのではなく、優れたユーザーエクスペリエンスの構築に集中できます。 レスポンスストリーミングの理解 従来のリクエスト・レスポンスモデルでは、レスポンスはクライアントに送信される前に完全に計算される必要があります。これはユーザーエクスペリエンスに悪影響を及ぼす可能性があります。クライアントは、サーバー側で完全なレスポンスが生成され、ネットワーク経由で送信されるまで待つ必要があります。これは、AI エージェント、チャットボット、バーチャルアシスタント、音楽ジェネレーターなどのインタラクティブでレイテンシーに敏感なクラウドアプリケーションで特に顕著です。 図2. レスポンスは完全に生成された後にのみクライアントに返され、time-to-first-byte レイテンシーが増加します もう1つの重要なシナリオは、画像、大きなドキュメント、データセットなどの大きなレスポンスペイロードを返すことです。場合によっては、これらのペイロードが API Gateway の 10 MB のレスポンスサイズ制限またはデフォルトの統合タイムアウト制限である 29 秒を超える可能性があります。レスポンスストリーミングの開始前は、開発者は 署名付き Amazon S3 URL を使用して大きなレスポンスをダウンロードしたり、タイムアウトの増加と引き換えに低い RPS を受け入れたりすることで、これらの制限を回避していました。機能的ではありますが、これらの回避策は追加のレイテンシーとアーキテクチャの複雑さをもたらしました。 レスポンスストリーミングのサポートにより、これらの課題に対処できます。REST API を更新してストリーミングレスポンスを返すことができるようになり、ユーザーエクスペリエンスを大幅に向上させ、TTFB パフォーマンスを改善し、10 MB を超えるレスポンスペイロードサイズをサポートし、最大 15 分かかるリクエストを処理できます。 図3. レスポンスストリーミングは最初のバイトまでの時間を短縮し、ユーザーエクスペリエンスを向上させます レスポンスストリーミング機能は、すでに組織に大きなパフォーマンスをもたらしています。 「AWS チームと緊密に連携してレスポンスストリーミングを有効にすることは、Salesforce Commerce Cloud で最大の顧客に最もパフォーマンスの高いストアフロントエクスペリエンスを提供するためのロードマップを進める上で重要でした。私たちのコラボレーションは、Core Web Vital の目標を超えました。Total Blocking Time メトリクスが 98% 以上低下し、顧客がより高い収益とコンバージョン率を促進できるようになります」と、Salesforce のプロダクトマネジメント シニアディレクターである Drew Lau 氏は述べています。 レスポンスストリーミングは、任意の HTTP プロキシ統合 、 AWS Lambda 関数(プロキシ統合モードを使用)、および プライベート統合 でサポートされています。開始するには、次のセクションで説明するように、バックエンドからレスポンスをストリーミングするように API 統合を設定し、変更を有効にするために API を再デプロイします。 レスポンスストリーミングの開始 REST API のレスポンスストリーミングを有効にするには、統合設定を更新してレスポンス転送モードを STREAM に設定します。これにより、API Gateway はレスポンスバイトが利用可能になるとすぐにクライアントへのレスポンスのストリーミングを開始できます。レスポンスストリーミングを使用する場合、リクエストタイムアウトを最大 15 分まで設定できます。最初のバイトまでの時間を最適化するために、AWS はバックエンド統合もレスポンスストリーミングを実装することを強く推奨します。 次のスニペットに示すように、いくつかの異なる方法でレスポンスストリーミングを有効にできます。 API Gateway コンソールを使用して、メソッド統合を作成する際に、レスポンス転送モードで「ストリーム」を選択します。 図4. API Gateway コンソールでレスポンスストリーミングを有効にする Open API 仕様を使用してレスポンス転送モードを設定する場合: paths : /products : get : x-amazon-apigateway-integration : httpMethod : "GET" uri : "https://example.com" type : "http_proxy" timeoutInMillis : 300000 responseTransferMode : "STREAM" AWS CloudFormation などの Infrastructure as Code(IaC)フレームワークを使用してレスポンス転送モードを設定する場合、 /response-streaming-invocations Uri フラグメントに注意してください。これは、Lambda InvokeWithResponseStreaming エンドポイントを使用するように API Gateway に指示します。 MyProxyResourceMethod : Type : 'AWS::ApiGateway::Method' Properties : RestApiId : !Ref LambdaSimpleProxy ResourceId : !Ref ProxyResource HttpMethod : ANY Integration : Type : AWS_PROXY IntegrationHttpMethod : POST ResponseTransferMode : STREAM Uri : !Sub arn : aws : apigateway : $ { APIGW_REGION } : lambda : path/2021 - 11 - 15/functions/$ { FN_ARN } /response - streaming - invocations AWS CLI を使用してレスポンス転送モードを更新する場合: aws apigw update-integration \ --rest-api-id a1b2c2 \ --resource-id aaa111 \ --http-method GET \ --patch-operations "op='replace',path='/responseTransferMode',value=STREAM" \ --region us-west-2 Lambda 関数でのレスポンスストリーミングの使用 Lambda 関数をダウンストリーム統合エンドポイントとして使用する場合、Lambda 関数は ストリーミング対応 である必要があります。次の図に示すように、API Gateway は InvokeWithResponseStreaming API を使用して関数を呼び出し、Lambda プロキシ統合が必要です。詳細については、 API Gateway ドキュメント を参照してください。 図5. インタラクティブな AI アプリケーション用の Lambda 関数での API Gateway レスポンスストリーミングの使用 Lambda 関数でレスポンスストリーミングを使用する場合、API Gateway はハンドラーレスポンスストリームに次のコンポーネントが(順番に)含まれることを期待します。 JSON レスポンスメタデータ – 有効な JSON オブジェクトである必要があり、 statusCode 、 headers 、 multiValueHeaders 、および cookies フィールド(すべてオプション)のみを含めることができます。メタデータは空の文字列にすることはできません。少なくとも空の JSON オブジェクトである必要があります。 8 バイトの null 区切り文字 – 以下に示すように、組み込みの awslambda.HttpResponseStream.from() メソッドを使用すると、Lambda がこの区切り文字を自動的に追加します。このメソッドを使用しない場合は、自分で区切り文字を追加する必要があります。 レスポンスペイロード – 空にすることができます。 次のコードスニペットは、API Gateway レスポンスストリーミングと互換性があるように Lambda 関数からストリーミングレスポンスを返す方法を示しています。 export const handler = awslambda . streamifyResponse ( async ( event , responseStream , context ) => { const httpResponseMetadata = { statusCode : 200 , headers : { 'Content-Type' : 'text/plain' , 'X-Custom-Header' : 'some-value' } } ; responseStream = awslambda . HttpResponseStream . from ( responseStream , httpResponseMetadata ) ; responseStream . write ( 'hello' ) ; await new Promise ( r => setTimeout ( r , 1000 ) ) ; responseStream . write ( ' world' ) ; await new Promise ( r => setTimeout ( r , 1000 ) ) ; responseStream . write ( '!!!' ) ; responseStream . end ( ) ; } ) ; 詳細な実装ガイドラインについては、 API Gateway ドキュメント を参照してください。 HTTP プロキシ統合でのレスポンスストリーミングの使用 ダウンストリーム統合エンドポイントとして使用されるアプリケーション(たとえば、 Amazon Elastic Container Service (Amazon ECS)または Amazon Elastic Kubernetes Service (Amazon EKS)で実行されている Web サーバー)から HTTP レスポンスをストリーミングできます。この場合、 HTTP_PROXY 統合を使用し、レスポンス転送モードを STREAM として指定する必要があります(コンソール、AWS CLI、または IaC を使用)。API を変更した後、再デプロイします。 図6. HTTP サーバーアプリケーションでの API Gateway レスポンスストリーミングの使用 API Gateway がアプリケーションからストリーミングレスポンスを受信すると、HTTP ヘッダーブロックの転送が完了するまで待機します。次に、クライアントに HTTP レスポンスステータスコードとヘッダーを送信し、その後、API Gateway サービスが受信したアプリケーションからのコンテンツを送信します。ストリームが終了するまで(最大 15 分)、アプリケーションからクライアントへのレスポンスのストリーミングを続けます。 多くの一般的な API および Web アプリケーション開発フレームワークは、レスポンスストリーミングの抽象化を提供しています。次のコードスニペットは、FastAPI を使用して HTTP レスポンスストリーミングを実装する方法を示しています。 app = FastAPI ( ) async def stream_response ( ) : yield b"Hello " await asyncio . sleep ( 1 ) yield b"World " await asyncio . sleep ( 1 ) yield b"!" @app . get ( "/" ) async def main ( ) : return StreamingResponse ( stream_response ( ) , media_type = "text/plain" ) HTTP クライアントへのリアルタイムレスポンスストリーミングの追加 HTTP クライアントによって、到着したストリーミングレスポンスフラグメントを処理する方法が異なります。次のコードスニペットは、Node.js アプリケーションでストリーミングレスポンスを処理する方法を示しています。 const request = http . request ( options , ( response ) => { response . on ( 'data' , ( chunk ) => { console . log ( chunk ) ; } ) ; response . on ( 'end' , ( ) => { console . log ( 'Response complete' ) ; } ) ; } ) ; request . end ( ) ; CURL を使用する場合、 –no-buffer 引数を使用して、到着したレスポンスフラグメントを出力できます。 curl --no-buffer { URL } サンプルコード GitHub からこのサンプルプロジェクトをクローン して、API Gateway レスポンスストリーミングの動作を確認してください。README.md の手順に従って、AWS アカウントにサンプルプロジェクトをプロビジョニングします。 考慮事項 レスポンスストリーミングを有効にする前に、次の点を考慮してください。 レスポンスストリーミングは REST API で利用でき、HTTP_PROXY 統合、Lambda 統合(プロキシモード)、およびプライベート統合で使用できます。 API Gateway レスポンスストリーミングは、リージョナル、プライベート、エッジ最適化などの 任意のエンドポイントタイプ で、 カスタムドメイン名 の有無にかかわらず使用できます。 レスポンスストリーミングを使用する場合、シナリオの要件に応じて、レスポンスタイムアウトを最大 15 分まで設定できます。 リージョナルまたはプライベートエンドポイントからのすべてのストリーミングレスポンスには、5 分のアイドルタイムアウトが適用されます。エッジ最適化エンドポイントからのすべてのストリーミングレスポンスには、30 秒のアイドルタイムアウトが適用されます。 各ストリーミングレスポンス内で、最初の 10 MB のレスポンスペイロードには帯域幅制限はありません。10 MB を超えるレスポンスペイロードデータは、2 MB/秒に制限されます。 レスポンスストリーミングは、 オーソライザー 、 WAF 、 アクセス制御 、 TLS/mTLS 、 リクエストスロットリング 、および アクセスログ などの API Gateway セキュリティ機能と互換性があります。 ストリーミングレスポンスを処理する場合、次の機能はサポートされていません:VTL によるレスポンス変換、統合レスポンスキャッシング、およびコンテンツエンコーディング。 Lambda オーソライザー または Amazon Cognito ユーザープール で適切な認可を実装することにより、不正アクセスやその他の潜在的なセキュリティ脅威から API を常に保護してください。詳細については、 REST API 保護ドキュメント および API Gateway セキュリティドキュメント を参照してください。 オブザーバビリティ 実行ログ 、 アクセスログ 、 AWS X-Ray 統合、および Amazon CloudWatch メトリクスなどの既存のオブザーバビリティ機能を、API Gateway レスポンスストリーミングで引き続き使用できます。 既存の アクセスログ変数 に加えて、次の新しい変数が利用可能です。 $content.integration.responseTransferMode – 統合のレスポンス転送モード。 BUFFERED または STREAMED のいずれかです。 $context.integration.timeToAllHeaders – API Gateway が統合接続を確立してから、クライアントからすべての統合レスポンスヘッダーを受信するまでの時間。 $context.integration.timeToFirstContent – API Gateway が統合接続を確立してから、最初のコンテンツバイトを受信するまでの時間。 詳細については、 API Gateway ドキュメント を参照してください。 料金 この新機能により、ストリーミングレスポンスに対して同じ API 呼び出し料金を引き続き支払います。10 MB のレスポンスデータごとに、最も近い 10 MB に切り上げられ、1 つのリクエストとして請求されます。詳細については、 API Gateway 料金ページ を参照してください。 まとめ Amazon API Gateway の新しいレスポンスストリーミング機能により、クラウドで応答性の高い API を構築および提供する方法が強化されます。レスポンスデータが利用可能になるとすぐにストリーミングすることで、最初のバイトまでの時間のパフォーマンスを大幅に改善し、従来のペイロードサイズとタイムアウトの制限を克服できます。これは、リアルタイムの応答性を必要とする AI 駆動アプリケーション、ファイル転送、およびインタラクティブな Web エクスペリエンスに特に価値があります。 API Gateway レスポンスストリーミングの詳細については、 サービスドキュメント を参照してください。 サーバーレスアーキテクチャの構築の詳細については、 Serverless Land を参照してください。
本記事は 2025 年 12 月 2 日 に公開された「 Amazon S3 Vectors now generally available with increased scale and performance 」を翻訳したものです。 Amazon S3 Vectors がスケールとパフォーマンスを大幅に向上させて一般提供を開始しました。S3 Vectors は、ベクトルデータの保存とクエリをネイティブにサポートする初のクラウドオブジェクトストレージです。専用のベクトルデータベースソリューションと比較して、ベクトルの保存とクエリの総コストを最大 90% 削減できます。 7 月に S3 Vectors のプレビューを発表 して以来、ベクトルデータの保存とクエリにこの新機能をいかに早く採用いただいたかに感銘を受けています。わずか 4 か月余りで、25 万以上のベクトルインデックスが作成され、400 億以上のベクトルが取り込まれ、10 億以上のクエリが実行されました(11 月 28 日時点)。 単一のインデックスで最大 20 億のベクトルを保存および検索できるようになりました。これはプレビュー時のインデックスあたり 5,000 万から 40 倍の増加であり、ベクトルバケットあたり最大 20 兆のベクトルを格納できます。これにより、ベクトルデータセット全体を 1 つのインデックスに統合でき、複数の小さなインデックスにシャーディングしたり、複雑なクエリフェデレーションロジックを実装したりする必要がなくなります。 クエリパフォーマンスも最適化されました。頻度の低いクエリは引き続き 1 秒未満で結果を返し、頻度の高いクエリでは約 100 ミリ秒以下のレイテンシーを実現しています。これにより、会話型 AI やマルチエージェントワークフローなどのインタラクティブなアプリケーションに適しています。また、クエリあたり最大 100 件の検索結果を取得できるようになり(以前は 30 件)、検索拡張生成(RAG)アプリケーションにより包括的なコンテキストを提供できます。 書き込みパフォーマンスも大幅に向上し、インデックスへの単一ベクトル更新のストリーミング時に最大 1,000 PUT トランザクション/秒をサポートし、小さなバッチサイズでの書き込みスループットが大幅に向上しました。この高いスループットにより、新しいデータをすぐに検索可能にする必要があるワークロードをサポートし、小規模なデータコーパスを迅速に取り込んだり、同じインデックスに同時に書き込む多数の並行ソースを処理したりできます。 完全なサーバーレスアーキテクチャにより、インフラストラクチャのオーバーヘッドが排除されます。セットアップするインフラストラクチャやプロビジョニングするリソースはありません。ベクトルの保存とクエリに応じて使用した分だけ支払います。この AI 対応ストレージにより、初期の実験やプロトタイピングから大規模な本番デプロイメントまで、AI 開発ライフサイクル全体をサポートするために、任意の量のベクトルデータに迅速にアクセスできます。S3 Vectors は、AI エージェント、推論、セマンティック検索、RAG アプリケーション全体で本番ワークロードに必要なスケールとパフォーマンスを提供するようになりました。 プレビューで開始された 2 つの主要な統合が一般提供になりました。 S3 Vectors を Amazon Bedrock ナレッジベースのベクトルストレージエンジンとして使用できます 。特に、本番グレードのスケールとパフォーマンスで RAG アプリケーションを構築するために使用できます。さらに、 S3 Vectors と Amazon OpenSearch の統合が一般提供になりました 。これにより、OpenSearch を検索および分析機能に使用しながら、S3 Vectors をベクトルストレージレイヤーとして使用できます。 S3 Vectors は、プレビュー時の 5 つの AWS リージョンから拡大し、14 の AWS リージョンで使用できるようになりました。 使い方を見てみましょう この記事では、AWS コンソールと CLI を使用して S3 Vectors を使用する方法を説明します。 まず、S3 ベクトルバケットとインデックスを作成します。 echo "Creating S3 Vector bucket..." aws s3vectors create-vector-bucket \ --vector-bucket-name "$BUCKET_NAME" echo "Creating vector index..." aws s3vectors create-index \ --vector-bucket-name "$BUCKET_NAME" \ --index-name "$INDEX_NAME" \ --data-type "float32" \ --dimension "$DIMENSIONS" \ --distance-metric "$DISTANCE_METRIC" \ --metadata-configuration "nonFilterableMetadataKeys=AMAZON_BEDROCK_TEXT,AMAZON_BEDROCK_METADATA" ディメンションメトリクスは、ベクトルの計算に使用されるモデルのディメンションと一致する必要があります。距離メトリクスは、ベクトル間の距離を計算するアルゴリズムを示します。S3 Vectors は コサイン 距離と ユークリッド 距離をサポートしています。 コンソールを使用してバケットを作成することもできます。作成時に暗号化パラメータを設定する機能が追加されました。デフォルトでは、インデックスはバケットレベルの暗号化を使用しますが、カスタムの AWS Key Management Service (AWS KMS) キーを使用して、インデックスレベルでバケットレベルの暗号化をオーバーライドできます。 ベクトルバケットとベクトルインデックスにタグを追加することもできます。ベクトルインデックスのタグは、アクセス制御とコスト配分に役立ちます。 また、コンソールで直接 プロパティ と アクセス許可 を管理できるようになりました。 同様に、 フィルタリング不可のメタデータ を定義し、ベクトルインデックスの 暗号化 パラメータを設定します。 次に、埋め込み(ベクトル)を作成して保存します。このデモでは、私の常に手元にある AWS スタイルガイドを取り込みます。これは、AWS での投稿、技術ドキュメント、記事の書き方を説明する 800 ページのドキュメントです。 Amazon Bedrock ナレッジベース を使用して、汎用 S3 バケットに保存された PDF ドキュメントを取り込みます。Amazon Bedrock ナレッジベースはドキュメントを読み取り、チャンクと呼ばれる断片に分割します。次に、 Amazon Titan Text Embeddings モデルを使用して各チャンクの埋め込みを計算し、ベクトルとそのメタデータを新しく作成したベクトルバケットに保存します。このプロセスの詳細な手順はこの記事の範囲外ですが、 ドキュメントの手順 を参照できます。 ベクトルをクエリする際、ベクトルごとに最大 50 個のメタデータキーを保存でき、そのうち最大 10 個をフィルタリング不可としてマークできます。フィルタリング可能なメタデータキーを使用して、特定の属性に基づいてクエリ結果をフィルタリングできます。したがって、ベクトル類似性検索とメタデータ条件を組み合わせて結果を絞り込むことができます。また、より大きなコンテキスト情報のために、より多くのフィルタリング不可のメタデータを保存することもできます。Amazon Bedrock ナレッジベースはベクトルを計算して保存します。また、大きなメタデータ(元のテキストのチャンク)も追加します。このメタデータは検索可能なインデックスから除外します。 ベクトルを取り込む他の方法もあります。 S3 Vectors Embed CLI を試すことができます。これは、Amazon Bedrock を使用して埋め込みを生成し、直接コマンドで S3 Vectors に保存するのに役立つコマンドラインツールです。また、 OpenSearch のベクトルストレージエンジンとして S3 Vectors を使用 することもできます。 これでベクトルインデックスをクエリする準備ができました。「open source」の書き方について疑問があるとしましょう。ハイフン付きの「open-source」なのか、ハイフンなしの「open source」なのか?大文字を使うべきかどうか?「open source」に関連する AWS スタイルガイドの関連セクションを検索したいと思います。 # 1. Create embedding request echo '{"inputText":"Should I write open source or open-source"}' | base64 | tr -d '\n' > body_encoded.txt # 2. Compute the embeddings with Amazon Titan Embed model aws bedrock-runtime invoke-model \ --model-id amazon.titan-embed-text-v2:0 \ --body "$(cat body_encoded.txt)" \ embedding.json # Search the S3 Vectors index for similar chunks vector_array=$(cat embedding.json | jq '.embedding') && \ aws s3vectors query-vectors \ --index-arn "$S3_VECTOR_INDEX_ARN" \ --query-vector "{\"float32\": $vector_array}" \ --top-k 3 \ --return-metadata \ --return-distance | jq -r '.vectors[] | "Distance: \(.distance) | Source: \(.metadata."x-amz-bedrock-kb-source-uri" | split("/")[-1]) | Text: \(.metadata.AMAZON_BEDROCK_TEXT[0:100])..."' 最初の結果は次の JSON を示しています。 { "key": "348e0113-4521-4982-aecd-0ee786fa4d1d", "metadata": { "x-amz-bedrock-kb-data-source-id": "0SZY6GYPVS", "x-amz-bedrock-kb-source-uri": "s3://sst-aws-docs/awsstyleguide.pdf", "AMAZON_BEDROCK_METADATA": "{\"createDate\":\"2025-10-21T07:49:38Z\",\"modifiedDate\":\"2025-10-23T17:41:58Z\",\"source\":{\"sourceLocation\":\"s3://sst-aws-docs/awsstyleguide.pdf\"", "AMAZON_BEDROCK_TEXT": "[redacted] open source (adj., n.) Two words. Use open source as an adjective (for example, open source software), or as a noun (for example, the code throughout this tutorial is open source). Don't use open-source, opensource, or OpenSource. [redacted]", "x-amz-bedrock-kb-document-page-number": 98.0 }, "distance": 0.63120436668396 } AWS スタイルガイドの関連セクションが見つかりました。「open source」はハイフンなしで書く必要があります。元のドキュメントの関連する段落と提案を照合するのに役立つように、元のドキュメントのページ番号も取得されました。 もう 1 つ S3 Vectors は統合機能も拡張されました。 AWS CloudFormation を使用してベクトルリソースをデプロイおよび管理したり、 AWS PrivateLink を使用してプライベートネットワーク接続を行ったり、コスト配分とアクセス制御のためにリソースタグ付けを使用したりできるようになりました。 料金と利用可能なリージョン S3 Vectors は、プレビューからの既存の 5 つのリージョン(米国東部(オハイオ、バージニア北部)、米国西部(オレゴン)、アジアパシフィック(シドニー)、欧州(フランクフルト))に加えて、アジアパシフィック(ムンバイ、ソウル、シンガポール、東京)、カナダ(中部)、欧州(アイルランド、ロンドン、パリ、ストックホルム)が追加され、14 の AWS リージョンで利用可能になりました。 Amazon S3 Vectors の料金は 3 つの要素に基づいています。 PUT 料金 は、アップロードするベクトルの論理 GB に基づいて計算されます。各ベクトルには、論理ベクトルデータ、メタデータ、キーが含まれます。 ストレージコスト は、インデックス全体の合計論理ストレージによって決まります。 クエリ料金 には、API ごとの料金と、インデックスサイズ(フィルタリング不可のメタデータを除く)に基づく $/TB 料金が含まれます。インデックスが 100,000 ベクトルを超えてスケールすると、$/TB 料金が低くなるメリットがあります。 詳細は Amazon S3 料金ページをご覧ください 。 S3 Vectors を使い始めるには、 Amazon S3 コンソール にアクセスしてください。ベクトルインデックスを作成し、埋め込みの保存を開始し、スケーラブルな AI アプリケーションの構築を始めることができます。詳細については、 Amazon S3 ユーザーガイド または AWS CLI コマンドリファレンス をご覧ください。 これらの新機能で何を構築されるか楽しみにしています。 AWS re:Post または通常の AWS サポート連絡先 を通じてフィードバックをお寄せください。 — seb 著者について Sébastien Stormacq Seb は 80 年代半ばに初めて Commodore 64 に触れて以来、コードを書いています。情熱、熱意、顧客擁護、好奇心、創造性を独自にブレンドして、ビルダーが AWS クラウドの価値を引き出すよう刺激を与えています。彼の関心はソフトウェアアーキテクチャ、開発者ツール、モバイルコンピューティングです。何かを売り込みたい場合は、API があることを確認してください。Bluesky、X、Mastodon などで @sebsto をフォローしてください。 この記事は Kiro が翻訳を担当し、ソリューションアーキテクト の 榎本 貴之 がレビューしました。
2025 年 5 月、私たちは AWS Transform for mainframe をリリースしました。これは、メインフレームのワークロードを大規模にモダナイズするための、初のエージェント型 AI サービスです。AI 搭載のメインフレームエージェントは、モダナイゼーションの各フェーズにおける複雑でリソース集約型の作業を自動化することで、メインフレームのモダナイゼーションを加速します。COBOL、CICS、DB2、VSAM を含むレガシーメインフレームアプリケーションを最新のクラウド環境へ移行するプロセスを効率化でき、モダナイゼーションの期間を数年から数か月に短縮できます。 2025 年 12 月 1 日、 AWS Transform for mainframe において、AI 搭載の分析機能、Reimagine モダナイゼーションパターンのサポート、テスト自動化を含む強化機能を発表しました。これらの強化機能は、メインフレームのモダナイゼーションにおける 2 つの重要な課題を解決します。すなわち、単にクラウドへ移行するだけでなくアプリケーションを完全に変革する必要性と、テストに多大な時間と専門知識が求められる点です。 メインフレームのモダナイゼーションの再構想 – これは、AI を活用した新しいアプローチで、最新の設計パターンを用いるか、バッチ処理からリアルタイム機能への移行を通じて、顧客のアプリケーションアーキテクチャを完全に再構想するものです。強化されたビジネスロジック抽出機能に加え、 AWS Transform を通じた新しいデータ系統分析や自動データ辞書生成を組み合わせることで、顧客は COBOL などで書かれたモノリシックなメインフレームアプリケーションを、マイクロサービスのようなよりモダンなアーキテクチャスタイルに変革できます。 自動テスト — 顧客は、新しい自動テスト計画生成、テストデータ収集スクリプト、およびテストケース自動化スクリプトを利用できます。AWS Transform for mainframe は、データ移行、結果の検証、端末接続のための機能テストツールも提供します。これらの AI 搭載機能は連携して動作し、テストの期間を短縮するとともに、自動化によって精度を向上させます。 メインフレームのモダナイゼーションの再構想と自動化テスト機能について、さらに詳しく見てみましょう。 メインフレームのモダナイゼーションを再構想する方法 メインフレームのモダナイゼーションは、画一的なアプローチでは対応できないことを認識しています。戦術的なアプローチが既存システムの補強や維持に焦点を当てるのに対し、戦略的モダナイゼーションは、 リプラットフォーム 、 リファクター 、 リプレイス 、そして新しい 再構想 といった明確な選択肢を提供します。 再構想パターンでは、AWS Transform の AI 搭載分析がメインフレームのシステム分析と組織の知識を組み合わせ、詳細な業務・技術ドキュメントおよびアーキテクチャの推奨を作成します。これにより、重要なビジネスロジックを保持しつつ、最新のクラウドネイティブ機能を活用できます。 AWS Transform は、メインフレームのモダナイゼーションを成功させるために不可欠な、新しい高度なデータ分析機能を提供します。これには、データ系統分析や自動データ辞書生成が含まれます。これらの機能は連携して、メインフレームデータの使用方法や関係性に加え、その構造と意味を定義します。顧客はデータ全体の状況を完全に把握できるようになり、モダナイゼーションに関する意思決定を的確に行えるようになります。技術チームは、重要なビジネスロジックや関係性を維持しながら、データアーキテクチャを自信を持って再設計できます。 再構想 戦略は「ヒューマン・イン・ザ・ループ(人による検証)」の原則に従っており、AWS Transform や Kiro などのAI生成アプリケーション仕様やコードが、ドメインエキスパートによって継続的に検証されることを意味します。AIの機能と人間の判断によるこの協働アプローチにより、AI 搭載のモダナイゼーションのスピードを維持しながら、変革リスクを大幅に低減できます。 この手法には、レガシーメインフレームアプリケーションをクラウドネイティブのマイクロサービスに変換するための、3 段階の方法論があります。 既存の COBOL やジョブ 制御言語(JCL)コードからビジネスロジックやルールを抽出するリバースエンジニアリングを、AWS Transform for mainframe を使用して実施します。 マイクロサービス仕様 、モダナイズされたソースコード、Infrastructure as Code(IaC)、およびモダナイズされたデータベースを生成するフォワードエンジニアリングを行います。 生成された マイクロサービスを IaC を使用して Amazon Web Services(AWS) にデプロイし、モダナイズされたアプリケーションの機能をテストします。 マイクロサービスアーキテクチャはメインフレームのモダナイゼーションに大きな利点をもたらしますが、すべてのケースに最適な解決策であるとは限らないことを理解することが重要です。アーキテクチャパターンの選択は、システムの具体的な要件や制約によって決定されるべきです。重要なのは、現在のニーズと将来の目標の両方に合致するアーキテクチャを選択することであり、組織がクラウドネイティブ能力を成熟させるにつれて、アーキテクチャの判断が進化する可能性があることを認識することです。 柔軟なアプローチにより、自社主導の開発とパートナー主導の開発の両方をサポートします。これにより、ビジネスプロセスの整合性を維持しながら、お好みのツールをご利用いただけます。長年にわたるビジネスロジックを保持しつつ、プロジェクトリスクを低減しながら、最新のクラウドアーキテクチャの利点を享受できます。 自動化テストの実践 新しい自動化テスト機能は、リリース時に IBM z/OS メインフレームのバッチアプリケーションスタックをサポートしており、組織がより幅広いモダナイゼーションのシナリオに対応しつつ、一貫したプロセスとツールを維持できるよう支援します。 新しいメインフレーム機能は以下の通りです: テストケースの計画 — メインフレームコード、ビジネスロジック、スケジューラプランからテスト計画を作成します。 テストデータ収集スクリプトの生成 — メインフレームからテスト計画へのデータ収集用の JCL スクリプトを作成します。 テスト自動化スクリプトを生成 — ターゲットの AWS 環境で実行されるモダナイズされたアプリケーションのテストを自動化する実行スクリプトを生成します。 自動化テストを開始するには、まずワークスペースを設定し、各ユーザーに特定の役割を割り当て、ワークスペースへの参加を招待します。詳細については、AWS Transform ユーザーガイドの AWS Transform スタートガイド を参照してください。 [ ワークスペースでジョブを作成 ] を選択します。サポートされているすべての変換ジョブの種類を確認できます。この例では、メインフレーム・アプリケーションをモダナイズするために メインフレーム・モダナイゼーション の仕事を選びます。 新しいジョブが作成されたら、テスト生成のためのモダナイゼーションを開始できます。このワークフローは順次進行型で、AI エージェントの質問に対して必要な入力を提供する場所です。共同作業者を追加し、コードベースやドキュメントが保存されている Amazon Simple Storage Service(Amazon S3) バケット内のリソースの場所を指定できます。 メインフレーム銀行ケースとして、クレジットカード管理システムのサンプルアプリケーションを使用します。これには、プレゼンテーション(BMS画面)、ビジネスロジック(COBOL)、データ(VSAM/DB2)が含まれ、オンライン取引処理およびバッチジョブも含まれます。 コードの分析、ビジネスロジックの抽出、コードの分解、移行ウェーブの計画の手順を終えた後、テストケースの計画、テストデータ収集スクリプトの生成、テスト自動化スクリプトの生成など、新しい自動化テスト機能を体験できます。 新しいテストワークフローは、モダナイゼーションプロジェクトのテスト計画を作成し、テストデータ収集スクリプトを生成します。計画のステップは以下の 3 つです: テスト計画の入力を設定 – テスト計画を他のジョブファイルにリンクできます。テスト計画はメインフレームアプリケーションコードの分析に基づいて生成され、抽出されたビジネスロジック、技術ドキュメント、コード分解、スケジューラプランを使用することで、さらに詳細を任意で提供できます。 テスト計画の範囲を定義 – アプリケーションの実行フローが開始するエントリーポイントとなる特定のプログラムを定義できます。例えば、バッチジョブの JCL です。テスト計画では、各機能テストケースが特定のエントリーポイントから実行を開始するように設計されています。 テスト計画の調整 – テスト計画は順次実行されるテストケースで構成されます。テストケースの詳細ページでは、テストケースの順序を変更したり、新しいケースを追加したり、複数のケースを統合したり、1 つのケースを 2 つに分割したりできます。バッチテストケースは、スケジューラプランに従った JCL のシーケンスで構成されます。 テストデータ収集スクリプトの生成は、機能的同等性テストのためにメインフレームアプリケーションからテストデータを収集します。このステップでは、サンプルアプリケーションのさまざまなデータソース(VSAM ファイルや DB2 データベースなど)からテストデータを収集し、モダナイズされたアプリケーションのテストに使用できる JCL スクリプトを自動生成します。このステップでは、VSAM データセットからテストデータを抽出したり、DB2 テーブルからサンプルデータを照会したり、連続データセットを収集したり、データ収集ワークフローを生成する自動スクリプトを作成します。このステップを完了すると、すぐに使用できる包括的なテストデータ収集スクリプトが準備されます。 自動テストの詳細については、AWS Transform ユーザーガイドの「メインフレームアプリケーションのモダナイゼーション 」を参照してください。 今すぐご利用いただけます AWS Transform for mainframe の新機能は、2025 年 12 月 1 日より、AWS Transform for mainframe が提供されているすべての AWS リージョンで利用可能です。リージョンごとの提供状況や今後のロードマップについては、 AWS Capabilities by Region をご覧ください。 現在、評価および変換を含むコア機能を、AWS のお客様に対して無償で提供しています。詳細については、 AWS Transform の料金ページをご覧ください 。 AWS Transform コンソールでお試しください 。詳細については、 AWS Transform for mainframe 製品ページ をご覧ください。フィードバックは、 AWS re:Post for AWS Transform for mainframe または、普段ご利用の AWS サポート窓口までお送りください。 – Channy 原文は こちら です。
本投稿は、 Sagar Desarda と Yutaka Oka、Tomoya Kudo による記事 「 Trust goes both ways: Amazon CloudFront now supports viewer mTLS 」を翻訳したものです。 本日より、 Amazon CloudFront はエンドユーザーから CloudFront への相互 TLS 認証 (mTLS) をサポートし、高度に分散された機密性の高いアプリケーションのセキュリティを強化します。現代のアーキテクチャでは、クライアント・サーバー間の通信を保護するには標準的な TLS 以上のものが必要であり、mTLS は相互の認証を強制することでこのモデルを拡張します。これにより、データが交換される前にクライアントとサーバーの両方が互いの身元を検証することが保証されます。さらに、この新機能はプロトコルレベルできめ細かなアクセス制御と ID 検証を強制し、規制環境における監査とコンプライアンスを合理化します。 CloudFront を活用したアプリケーションにおける mTLS のメリット mTLS は、サーバーとクライアント両者がデジタル証明書を提示して検証することを要求することで、セキュリティのレイヤーを追加し、相互の認証を実現します。その結果、mTLS は現在、ID 保証、暗号化通信、規制コンプライアンスがビジネスの信頼の基盤となる業界全体で広く採用されています。暗号化による ID 証明を提供し、認証情報ベースの攻撃を防ぎ、分散システム全体でゼロトラストの原則を強制します。主な業界のユースケースには以下が含まれます: 金融サービス: 銀行、決済ゲートウェイ、信頼できる第三者機関 (TTP) との API トランザクションを保護するために、PCI DSS や PSD2 などのフレームワークによって一定のセキュリティ要件が義務付けられています。金融取引プラットフォームは、市場データや取引執行エンドポイントへのアクセスを許可する前に、mTLS を使用してブローカーやパートナー機関を認証することで、セキュリティを強化できます。 IoT および接続デバイス: コネクテッドカー、センサーなどのデバイスがクラウドにテレメトリデータを送信する前に認証し、なりすましデバイスやデータ注入から保護します。 エンタープライズアプリケーション: 社内のマイクロサービス間、または企業システムと HR、給与、分析などの SaaS プラットフォーム間で認証と暗号化を強制し、ラテラルムーブメントや不正なデータアクセスのリスクを軽減します。 ヘルスケア: EHR システム、医療機器、および機密の患者データを交換する API を認証することにより、HIPAA に準拠して保護対象医療情報(PHI)を保護します。 通信およびメディア: エッジノードとオリジンサーバー間の制御およびコンテンツ配信チャネルを保護し、信頼できるインフラストラクチャコンポーネントのみがライブまたはオンデマンドのメディアトラフィックを交換できるようにします。 これらの多様で厳格なセキュリティニーズを満たすため、CloudFront は mTLS をサポートしました。組織はこれを使用して、リクエストがオリジンに到達する前に、エッジで直接アプリケーションやデバイス、サービスなどのクライアントを認証できます。この機能は、mTLS 保護をサービス間トラフィックからユーザー向けシナリオに拡張し、企業が最小限のレイテンシでグローバルにクライアント証明書検証を強制できるようにします。CloudFront mTLS は CloudFront Trust Store とシームレスに統合されるため、お客様は AWS Private Certificate Authority を使用するか、独自の CA を利用し、きめ細かな認証ポリシーを実装して証明書のプロビジョニングを自動化し、運用の複雑さを追加することなくコンプライアンスを達成できます。 はじめに CloudFront ディストリビューションの mTLS 認証を実装するには、まずプライベート認証局を設定し、クライアント証明書を作成します。設定には、ルート認証局と中間認証局の公開鍵証明書を PEM ファイル形式で準備する必要があります。そして、この証明書ファイルを Amazon S3 バケットにアップロードする必要があります。これは認証プロセスで使用されるトラストストアのソースとして機能します。 この例では、OpenSSL を使用してプライベート認証局及びクライアント証明書を作成する方法を示します。または、フルマネージドサービスである AWS Certificate Manager Private CA を使用してこのプロセスを効率化することもできます。詳細については、AWS Private CA の ドキュメント を確認してください。 1.プライベート CA の秘密鍵と証明書を生成します。 # CA 秘密鍵を生成 openssl genrsa -out Root_CA.key 4096 # CA 証明書を作成 openssl req -new -x509 -days 3650 -key Root_CA.key -out Root_CA.pem 1-a. 証明書作成プロセス中に、証明書の識別名(DN)フィールドの情報を提供するよう求められます。 1-b. オプションとして、ルートCAによって署名された中間認証局を作成できます。CloudFront は、mTLS 認証用のルート証明書を含む、最大 4 階層の証明書チェーンをサポートします。ルート CA と中間 CA 証明書を単一の PEM バンドル(CA バンドル)に結合する必要があります。cat コマンドを使用して CA バンドルファイルを作成します。 # CA バンドルを作成 cat Root_CA.pem Intermediate_CA.pem > Trust_store_bundle.pem 2. CA 階層を確立した後、クライアント証明書の秘密鍵と証明書署名要求(CSR)を生成します。 # クライアント証明書の秘密鍵を生成 openssl genrsa -out my_client.key 2048 # CSR を作成 openssl req -new -key my_client.key -out my_client.csr 2-a. クライアント証明書のサブジェクト名、地域、組織、組織単位のプロパティを入力します。オプションのパスワードチャレンジは空のままにしてください。 3. 以前に作成したルート CA を使用してクライアント証明書に署名します。 # ルート CA でクライアント CSR に署名 openssl x509 -req \ -in my_client.csr \ -CA Root_CA.pem \ -CAkey Root_CA.key \ -set_serial 01 \ -out my_client.pem \ -days 3650 \ -sha256 4. これらの手順を完了すると、ディレクトリに次のファイルが存在するはずです。 ファイル 説明 Root_CA.key ルート CA プライベートキー Root_CA.pem または Trust_store_bundle.pem CA バンドル my_client.csr クライアント証明書の署名リクエスト my_client.key クライアント証明書のプライベートキー my_client.pem クライアント証明書 トラストストアの設定 このセクションでは、トラストストアの設定方法について説明します。 前提条件 認証局からのルート CA 証明書または CA バンドル(PEM ファイル)を S3 バケットにアップロードしておく必要があります。(前のセクションを完了した場合は、S3 バケットにアップロードする必要がある Root_CA.pem ファイルをすでに作成しているはずです。) 1. CloudFront コンソールで、左側のメニューの Security の下にある Trust Store を選択します。Create trust store を選択します。 図1: CloudFront トラストストア 2. このページで S3 バケットの場所を指定します。Create trust store を押下します。CA バンドルは読み取られ、CloudFront トラストストアに保存されます 図2: トラストストアの作成 3. トラストストアが作成されると、コンソールはトラストストアの詳細ページに移動します。このページから、 Associate to distribution ボタンを押下して、トラストストアをディストリビューションに関連付けることができます。 図3: トラストストア作成成功 4. このページで、トラストストアを関連付けるディストリビューションを選択できます。 図4: トラストストアを Amazon CloudFront ディストリビューションに関連付け または、次のセクション(図 5 ) のディストリビューション設定からトラストストアを関連付けることもできます。 ディストリビューションの設定 前提条件 対象の CloudFront ディストリビューションのビューワープロトコルが HTTPS only になっている必要があります。 1. ビューワー mTLS 認証を有効にするには、ディストリビューション設定に移動し、Viewer mutual authentication (mTLS) 設定を On に切り替えます。 図5: CloudFront ディストリビューションで mTLS を有効にする 2. ユースケースに適した mTLS パラメータを選択します。 Mode CloudFrontの mTLS は、すべてのクライアントが有効な証明書を要求する Required モードと、同じディストリビューションで mTLS クライアントと非 mTLS クライアントの両方を受け入れて、無効な証明書は拒否する形の混合した認証を同時に可能にする Optional モードを選択可能です。 Trust store ビューワー mTLS 認証を有効にした後、以前に作成したトラストストアを選択して、ディストリビューションに関連付けます。 以下、2つのオプションパラメータがあり、両方ともデフォルトでは False です: Ignore certificate expiration date : これが true の場合、クライアント証明書チェーン内の 1 つ以上の証明書が X509 の期限の検証をパスしない場合(現在時刻が NotBefore より前または NotAfter より後)でも、CloudFront はビューワーからの接続を受け入れます。X509 証明書の他の要素の検証は引き続き適用されます。クライアント証明書は、CA バンドル内の信頼できる証明書チェーンで署名されている必要があります。 Advertise trust store CA names : これが true の場合、CloudFront はディストリビューションが受け入れる認証局名のリストをビューワーにアドバタイズします。これは、トラストストアにある証明書識別名(DN)のリストです。 Connection function(オプション) : Connection function は、ビューワー mTLS のオプションの拡張機能です。mTLS ハンドシェイクプロセスの一部としてカスタム検証を実行できるため、クラアイアンと証明書情報をもとに、接続を許可、拒否、またはログに記録できます。後のセクションで、CloudFrontディストリビューション内で Connection function を使用する方法の例を示します。 CloudFront ビューワー証明書ヘッダー CloudFront は、クライアント証明書から情報を抽出し、HTTP ヘッダーとしてビューワーリクエストに追加できます。これらのヘッダーをキャッシュキーの一部として使用したり、オリジンサーバーに転送することができます。また、CloudFront Functionsまたは Lambda@Edge でビューワーリクエストを処理する際に、これらのヘッダーを読み取ることもできます。 利用可能な CloudFront ビューワー証明書ヘッダーは次のとおりです: CloudFront-Viewer-Cert-Serial-Number (証明書のシリアル番号) CloudFront-Viewer-Cert-Issuer (証明書発行者の識別名) CloudFront-Viewer-Cert-Subject (サブジェクト識別名) CloudFront-Viewer-Cert-Validity (証明書の有効期限 – 開始と終了の ISO8601 形式の日付) CloudFront-Viewer-Cert-PEM (URL エンコードされた PEM 形式のリーフ証明書) CloudFront-Viewer-Cert-Present(証明書が存在する場合 1、存在しない場合 0、 Require mode では常に1) CloudFront-Viewer-Cert-SHA256(クライアント証明書の SHA256 ハッシュ) 詳細については、 Viewer mTLS headers for cache policies and forwarded to origin を参照してください。 mTLS 認証のテスト mTLS 設定をテストするには、curl でクライアント証明書を使用します。 curl --key my_client.key \ --cert my_client.pem \ https://dxxxxxxxxxxxxx.cloudfront.net –key:クライアントの秘密鍵ファイルを指定します。 –cert:クライアントの証明書ファイルを指定します。 dxxxxxxxxxxxxx.cloudfront.netを、mTLS が有効になっている実際の CloudFront ディストリビューションドメイン名に置き換えます。 以下は、成功シナリオと拒否シナリオの例です: 1. 認証成功の例(有効なクライアント証明書を使用): HTTP/2 200 content-type: text/html; charset=UTF-8 content-length:xxx date: xxx ... 2. 認証拒否の例(無効または欠落している証明書を使用): * Request completely sent off * Closing connection * Recv failure: Connection reset by peer * Send failure: Broken pipe curl: (16) Recv failure: Connection reset by peer 次の図は CloudFront での mTLS 認証の全体的なプロセスを示しています。 図6 : CloudFront の mTLS 認証のプロセス CA バンドルを S3 バケットにアップロードします。 トラストストアを作成し、CA 証明書バンドルへの Amazon S3 パスを提供します。 クライアントが CloudFrontとの TLS セッションを開始します。TLS ハンドシェイク中に、クライアントは TLS 証明書を提示します。 CloudFrontはクライアント証明書を検証し、mTLS セッションが確立されます。 4-a. オプションで、TLS ハンドシェイクをトリガーに Connection function を実行できます。クライアント証明書から情報を抽出し、カスタムロジックに基づいて無効な証明書を持つクライアントからの接続を拒否できます。 オプションで、ビューワーリクエストエッジ関数をトリガーして、CloudFront functions を実行できます。 cloudfront-viewer-cert ヘッダーを通じてクライアント証明書から情報を抽出できます。 オリジンリクエストポリシーで cloudfront-viewer-cert ヘッダーを有効にすると、CloudFront はクライアント証明書の情報をオリジンサーバーに転送します。ヘッダーは、設定されたオリジンリクエストポリシーに従って送信されます。 CloudFront は、証明書ベースの検証を実装するために、Connection Function( TLS ハンドシェイク中に実行)とビューワーリクエストエッジ関数(ハンドシェイク完了後に実行)を使って、カスタム認証とセキュリティ制御を可能にします。詳細については、CloudFront Viewer mTLS の ドキュメント を参照してください。 Connection Logs による監視 CloudFrontは、TLS ハンドシェイクに関する詳細な情報をキャプチャする Connection Logs を生成します。 Connection Logs の使用例: mTLS 対応ディストリビューションの監視とトラブルシューティング 成功した mTLS ハンドシェイクとクライアント証明書の追跡 失敗した mTLS ハンドシェイクの可視化 さらに、Connection Functions を使用すると、Connection Logs にカスタムログデータを追加できます。カスタムデータを追加するには、Connection Functions の接続オブジェクトで使用可能な logCustomData ヘルパーメソッドを使用します。 connectionLogCustomData フィールドに最大 800 バイトの有効な UTF-8 文字列をログに記録できます。 既存のアクセスログと同様に、CloudFront は CloudWatch vended logs を通じてConnection Logs を配信し、次の機能を提供します: Connection Logs をCloudWatch Logs、Amazon Data Firehose、Amazon S3に送信 JSON、w3c、Parquet(Amazon S3のみ)などの他の出力ログファイル形式を選択可能 各 mTLS 接続は、CloudFront ログタイプ(Connection ログ、Standard ログ、Realtime ログ)全体で記録される一意の識別子 connectionId を生成します。この統一された識別子を使用して、Connection logs とアクセスログ全体でアクセスパターンを調査および関連付けることができます。例えば、 connectionId を使用して特定のリクエストをトレースすることで、トラブルシューティングと分析がより効率的になります。詳細については、 Observability using connection logs を参照してください。 Connection Functions と CloudFront KeyValueStore を使用した証明書失効検証 mTLS 認証では、証明書が有効期間内であっても、盗難や侵害により証明書が失効する可能性があります。CloudFront Connection Functions とCloudFront KeyValueStore を組み合わせることで、リアルタイムの証明書失効チェックを実装できます。 CloudFront KeyValueStore の準備 まず、失効した証明書のシリアル番号を保存する KeyValueStore を作成します。 1. CloudFrontコンソールで、左側のメニューの Functions を選択します。次に、上部の KeyValueStores タブを開き、Create KeyValueStore を選択します。 図7: KeyValueStore の作成 2. KeyValueStore の名前を入力し、 Create を押下します。必要に応じて Amazon S3 からデータをインポートすることもできます。 3. 作成した KeyValueStore を選択し、キー値ペアの下の編集を選択して、失効した証明書のシリアル番号を入力します。 図8: シリアル番号の入力 4. Save changes を押下してエントリを保存します。 Connection Function の作成 クライアント証明書のシリアル番号をチェックする Connection function を作成します。 1. CloudFront コンソールで、左側のメニューの F unctions を選択します。次に、上部の Connection Functions タブを選択し、 Create connection function を選択します。 2. 関数の名前を入力し、 Create を押下します。 図9: Connection function の作成 3. Associated KeyValueStore の下で、 Associate existing KeyValueStore を選択し、先ほど作成した KeyValueStore を関連付けます。 図10: KeyValueStore の関連づけ 4. 次のコードを Function Code に貼り付け、 Save Change ボタンを押下します。 import cf from 'cloudfront'; async function connectionHandler(connection) { const kvsHandle = cf.kvs(); // 証明書のシリアル番号を取得 const serialNumber = connection.clientCertificate.certificates.leaf.serialNumber.replace(/:/g, ""); // KVS で失効ステータスをチェック const isRevoked = await kvsHandle.exists(serialNumber); if (isRevoked) { // 失効した証明書の接続を拒否 connection.logCustomData(`Revoked certificate: ${serialNumber}`); console.log(`Denying connection for revoked certificate: ${serialNumber}`); return connection.deny(); } // 有効な証明書の接続を許可 connection.logCustomData(`Valid certificate: ${serialNumber}`); console.log(`Allowing connection for valid certificate: ${serialNumber}`); return connection.allow(); } 5. Test タブで、作成した関数をテストできます。証明書情報と KeyValueStore に追加したシリアル番号を入力します。次に、 Test function を選択して、証明書が適切に失効することを確認します。 図11: 関数のテスト 6. Publish タブで、 Publish connection function を押下します。 7. Associated distributions の下で、 Add association を選択し、関数を関連付けるディストリビューションを選択して、 Associate を押下します。 テストと検証 失効した証明書でテストして、接続が拒否されることを確認します: # 失効した証明書でテスト(接続は拒否されるはずです) # 注:実際のCloudFrontディストリビューションドメインに置き換えてください curl --key revoked_client.key \ --cert revoked_client.pem \ https://dxxxxxxxxxxxxx.cloudfront.net # 有効な証明書でテスト(接続は許可されるはずです) curl --key valid_client.key \ --cert valid_client.pem \ https://dxxxxxxxxxxxxx.cloudfront.net まとめ インターネット上のセキュリティは常に信頼にかかっています。mTLS を使用することで、すべての接続の前に相互に検証されます。Amazon CloudFront を通じてビューワー mTLS を使用して、グローバル規模でデプロイおよび運用できるようになりました。速度を落とすことなく、アプリケーションと通信できるユーザーまたはデバイスを正確に決定できます。 AWSドキュメント をチェックして、エッジに mTLS 認証を導入する方法を確認し、ぜひ CloudFront ディストリビューションで mTLS をご利用ください。 著者について Sagar Desarda Sagar Desardaは、データ、分析、Gen AI ISV 向けのテクニカルアカウントマネージャー(TAM)およびビジネス開発(BD)組織の責任者です。Sagarのチームは、お客様と協力して AWS アーキテクチャを最適化し、ビジネスクリティカルなアプリケーションのシームレスな運用を確保し、採用を加速し、北米全体で市場投入の成功を推進します。さらに、Sagar は Edge Networking Services Specialist US チームのリーダーとして、新規ビジネスの成長を推進し、技術的なエンゲージメントを促進し、顧客向けの出版物を執筆しています。 Tomoya Kudo Tomoya Kudo は、東京を拠点とするプロトタイピングエンジニアです。彼の主な焦点は、ベストプラクティスに基づいたソリューションを提案し、プロジェクトの成功を確実にするためのプロトタイプを開発することで、お客様の成功を支援することです。 Yutaka Oka Yutaka Oka は、東京を拠点とするシニアエッジスペシャリストソリューションアーキテクトです。彼の主な焦点は、AWS Edge Services を使用してコンテンツ配信を最適化および保護することでお客様を支援することです。
技術的負債は、今日のエンタープライズ開発チームが直面する最も根強い課題の一つです。調査によると、企業は本来であれば新たな機能拡張に充てられるはずの IT 予算の 20%を、技術的負債への対応に費やしています。レガシーフレームワークのアップグレード、新しいランタイムバージョンへの移行、古いコードパターンのリファクタリングなど、こうした不可欠ながら反復的な作業は、本来であればイノベーションに充てられる貴重な開発者の時間を消費してしまいます。 2025 年 12 月 1 日、組織が大規模なモダナイゼーションに取り組む方法を根本的に変える新しいエージェント AWS Transform Custom を発表できたことをうれしく思います。このインテリジェントエージェントは、Java、Node.js、Python のアップグレード向けにあらかじめ用意された変換機能と、独自の変換を定義できる柔軟性を組み合わせています。特定の変換パターンを学習し、それをコードベース全体にわたって自動化することで、AWS Transform Custom を利用するお客様は、実行時間を最大 80% 削減したケースもあり、開発者はよりイノベーションに集中できるようになります。 ドキュメント、自然言語での説明、コードサンプルを利用して、独自の変換を定義できます。その後、サービスはこれらの特定パターンを数百から数千のリポジトリにわたり一貫して適用し、明示的なフィードバックだけでなく、変換プロジェクト内で開発者が行う手動修正といった暗黙的なシグナルも取り込みながら、その精度を高めていきます。 AWS Transform Custom は、さまざまなモダナイゼーションのニーズに対応できるよう、CLI と Web の両方のインターフェースを提供しています。CLI を利用すると、自然言語での対話を通じて変換を定義し、ローカルのコードベースに対してインタラクティブまたは自律的に実行できます。また、コードモダナイゼーションのパイプラインやワークフローに統合することもでき、機械駆動の自動化に最適です。一方、Web インターフェースは包括的なキャンペーン管理機能を提供し、チームが複数のリポジトリにわたる変換の進捗を大規模に追跡・調整できるよう支援します。 言語およびフレームワークのモダナイゼーション AWS Transform は、追加情報を提供する必要なくランタイムのアップグレードをサポートします。単に必要な構文の変更だけでなく、新しいバージョンに伴う微妙な動作の違いや最適化の機会も理解しています。同じインテリジェントなアプローチは、Node.js、Python、Java のランタイムアップグレードにも適用され、さらに x86 プロセッサから AWS Graviton へのワークロード移行など、インフラレベルの移行にも拡張されます。 また、フレームワークのモダナイゼーションも高度にサポートします。組織が Spring Boot アプリケーションを最新の機能やセキュリティパッチに対応させる必要がある場合、AWS Transform Custom は単にバージョン番号を更新するだけでなく、依存関係の変更、設定の更新、API の変更が連鎖的に及ぼす影響まで理解します。 Angular から React への移行のような大規模な変化に直面しているチームに対しても、AWS Transform Custom は、コンポーネントの変換パターン、状態管理の変換、ルーティングロジックの変換など、移行を成功させるためのパターンを学習できます。 インフラおよびエンタープライズ規模の変革 クラウド環境ではサービスが常に進化しているため、API や SDK の変化に対応する課題は特に深刻になります。AWS Transform Custom は、Java、Python、JavaScript など、企業で使用される幅広いプログラミング言語における AWS SDK の更新をサポートします。このサービスは、API 変更の機械的な側面だけでなく、新しい SDK バージョンで利用可能なベストプラクティスや最適化の機会も把握しています。 コードとしてのインフラストラクチャ の変換は、特に組織がさまざまなツール戦略を評価する際に、もう一つの重要な機能です。標準化を目的として AWS Cloud Development Kit (AWS CDK) のテンプレートを Terraform に変換する場合や、新しいサービス機能に対応するために AWS CloudFormation の設定を更新する場合でも、AWS Transform Custom はこれらのツールの宣言的な性質を理解し、インフラ定義の意図と構造を維持できます。 これらの一般的なシナリオに加え、AWS Transform カスタムは、長年の開発で蓄積された組織固有のコードパターンにも優れた対応力を発揮します。すべての企業には、それぞれ独自のアーキテクチャ規約、ユーティリティライブラリ、コーディング標準があり、これらは時間とともに進化させる必要があります。これらのカスタムパターンを学習し、体系的にリファクタリングを支援することで、組織の知見とベストプラクティスがアプリケーションポートフォリオ全体に一貫して適用されるようにします。 AWS Transform カスタムは、エンタープライズ開発のワークフローを考慮して設計されており、センターオブエクセレンスチームやシステムインテグレーターが組織全体の変換を定義・実行できる一方で、アプリケーション開発者は変換されたコードのレビューや統合に専念できます。その後、DevOps エンジニアは、既存の継続的インテグレーション・継続的デリバリー(CI/CD)パイプラインやソース管理システムとの統合を設定できます。また、 AWS Lambda 関数に特に有用な Java、Node.js、Python のランタイム更新向けの事前構築済み変換や、チームがすぐに活用できるよう AWS SDK のモダナイゼーション向け変換も含まれています。 開始方法 AWS Transform は、事前構築済みおよびカスタムの変換機能を通じて、複雑なコード変換を管理可能にします。まずは、既存の変換を利用してよくあるモダナイゼーションの課題に対応する方法を見てみましょう。今回は、ランタイムのサポート終了(EOL)に伴う AWS Lambda 関数のアップグレードです。 この例では、Python 3.8 がサポート終了(EOL)となりセキュリティ更新が提供されなくなったため、Python 3.8 の Lambda 関数を Python 3.13 に移行する方法を示します。このデモでは CLI を使用しますが、Web インターフェースの強力なキャンペーン管理機能もぜひ試してみてください。 まず、 atx custom def list コマンドを使用して、利用可能な変換定義を確認します。必要に応じて、コマンドを直接実行する代わりに atx と入力するだけで、会話型インターフェースからこの機能にアクセスすることもできます。 このコマンドは、AWS 管理のデフォルト変換に加え、組織内でユーザーが作成した既存のカスタム変換も含め、利用可能なすべての変換を表示します。AWS 管理の変換は AWS/ プレフィックスで識別され、AWS によって管理および更新されていることを示します。結果には、Java ランタイムのモダナイゼーション向けの AWS/java-version-upgrade、Python の AWS SDK 利用更新向けの AWS/python-boto2-to-boto3-migration、Node.js ランタイム更新向けの AWS/nodejs-version-upgrade など、いくつかのオプションが表示されます。 Python 3.8 から 3.13 への移行には、AWS/python-version-upgrade 変換を使用します。 移行は、 atx custom def exec コマンドを使用して実行します。コマンドおよびそのすべてのオプションの詳細については、 ドキュメント を参照してください。ここでは、変換名を指定して自分のプロジェクトリポジトリに対して実行します。検証のために、pytest を追加してユニットテストを実行します。さらに重要な点として、– configuration 入力の additionalPlanContext セクションを使用して、アップグレード先の Python バージョンを指定します。参考までに、デモ用のコマンドはこちらです(わかりやすいように複数行に分けてインデントしています): atx custom def exec -p /mnt/c/Users/vasudeve/Documents/Work/Projects/ATX/lambda/todoapilambda -n AWS/python-version-upgrade -C "pytest" --configuration "additionalPlanContext=アップグレード先の Python バージョンは Python 3.13" -x-t その後、AWS Transform が移行プロセスを開始します。このツールは Lambda 関数コードを分析し、Python 3.8 固有のパターンを特定し、Python 3.13 互換性のために必要な変更を自動的に適用します。これには、非推奨機能の構文の更新、インポート文の修正、バージョン特有の動作の調整が含まれます。 実行後、AWS Transform は包括的なサマリーを提供します。内容には、requirements.txt の依存関係が Python 3.13 対応のパッケージバージョンに更新された報告、非推奨構文が現在の等価表現に置き換えられた事例、AWS Lambda デプロイ用のランタイム設定の更新メモ、移行を検証するための推奨テストケースなどが含まれます。また、移行の成功を証明する証拠も提供されます。 移行後のコードはローカルブランチに存在するため、内容を確認して問題なければマージできます。あるいは、フィードバックを継続的に提供して何度も反復し、移行が完全に完了し、自分の期待に沿ったものになるまで調整することも可能です。 この自動化プロセスにより、通常であれば数時間かかる手作業が、コード品質を維持しながら新しい Python ランタイムとの互換性を保つ、効率的で一貫したアップグレードに変わります。 新しいカスタム変換の作成 AWS 管理の変換は一般的なシナリオに効果的に対応しますが、組織固有のニーズに合わせたカスタム変換を作成することも可能です。AWS Transform が組織固有の要件からどのように学習するかを確認するために、カスタム変換の作成方法を見てみましょう。 atx と入力して atx cli を初期化し、プロセスを開始します。 最初に尋ねられるのは、既存の変換を使用するか、新しい変換を作成するかです。私は新しい変換を作成することを選択します。ここから先は、すべてのやり取りがコマンドではなく自然言語で行われる点に注目してください。 新しいもの と入力しましたが、 新しいものを作成したい と入力しても、まったく同じように理解されます。 その後、どのような変換を行いたいかについて、さらに情報を提供するよう求められます。このデモでは Angular アプリケーションを移行するため、 Angular 16から19へのアプリケーション 移行 と入力します。すると、CLI がこの種類の移行に利用可能なすべての変換を検索します。私の場合、チームですでにいくつかの Angular 移行が作成され利用可能になっているため、それらが表示されます。ただし、Angular 16 から 19 への移行という私の具体的な要求に完全に一致するものはないと警告されます。次に、一覧に表示されている既存の変換のいずれかを選択するか、カスタム変換を作成するかを尋ねられます。 自然言語を使い続け、 create a new one と入力して、カスタム変換を作成することを選択します。繰り返しになりますが、自分の意図を明確に示していれば、この表現はどのようなバリエーションでも構いません。続いて、変換プランをカスタマイズするのに役立つドキュメント、サンプルコード、移行ガイドなどがあるかどうかを含め、いくつかの質問がされます。 このデモでは、AWS Transform が提供する適切なデフォルトのみを利用します。これらの 詳細はわかりません と入力します。ベストプラクティスに従ってください。 と入力すると、CLI から、Angular 16 から Angular 19 への移行のための包括的なトランスフォーメーション定義を作成する旨の応答があります。もちろん、私は事前学習済みのデータを利用して、ベストプラクティスに基づく結果を生成しました。通常通り、この段階では可能な限り多くの情報や関連データを提供することが、より良い結果を得るための推奨事項です。ただし、すべてのデータを事前に揃えておく必要はありません。カスタム変換定義の作成プロセスを進める中で、いつでもデータを追加で提供できます。 変換定義はマークアップファイルとして生成され、サマリーとともに、プレマイグレーション準備、処理と分割、静的依存関係分析、特定の変換ルールの検索と適用、段階的な移行と反復的検証などのフェーズごとに論理的にグループ化された包括的な実装手順のシーケンスが含まれます。 興味深いことに、AWS Transform は問題を最小限に抑えるために、直接 16 から 19 へ移行するのではなく、アプリケーションを段階的に 17 → 18 → 19 へ移行するステップを作成するというベストプラクティスを選択しています。 プランには、各フェーズを確実に完了できることを確認するためのさまざまなテストおよび検証の段階が含まれている点に注意してください。最後には、最終検証フェーズも含まれており、移行を成功として受け入れるためにアプリケーションのすべての側面に対して実施される包括的なテストの終了基準がリスト化されています。 変換定義が作成された後、AWS Transform は次に何を行いたいかを尋ねます。変換定義を確認または修正することができ、このプロセスを何度でも繰り返して、納得のいく定義に仕上げることができます。この変換定義をすでに Angular コードベースに適用することも選択できます。ただし、まずはこの変換を自分だけでなくチームメンバーも利用できるようにして、将来再利用できるようにしたいと思います。そこで、私はこの変換をレジストリに公開するためにオプション 4 を選択します。 このカスタム変換には名前と目的の説明が必要で、ユーザーがレジストリを閲覧する際に表示されます。AWS Transform はこれらをコンテキストから自動的に抽出し、先に進む前に変更したいかどうかを尋ねてくれます。デフォルトの Angular-16から19への移行 は妥当で目的も明確に示されているため、提案を受け入れ、 はい、良さそうです と答えて公開することにしました。 変換定義が作成され公開されたので、任意のコードリポジトリに対して何度でも使用して実行できます。それでは、この変換を Angular 16 で書かれたプロジェクトのコードリポジトリに適用してみましょう。続くプロンプトでオプション 1 を選択すると、CLI は移行したいアプリケーションのファイルシステム上のパスと、必要に応じて使用するビルドコマンドの入力を求めます。 情報を提供すると、AWS Transform はコードベースを解析し、先ほど作成した定義に基づいて、詳細な段階的変換プランを作成します。処理が完了すると、このコードベースに作成した変換定義を適用するための詳細な移行プランを含む JSON ファイルが作成されます。変換定義の作成プロセスと同様に、このプランも必要に応じて確認・反復することができ、フィードバックを提供したり、特定の要件に合わせて調整したりできます。 プランを承認する準備ができたら、自然言語で AWS Transform に対して移行プロセスを開始できることを伝えられます。 よさそうだ と入力して次に進むと、シェル上でプランの実行状況を確認しながら、コードベースに段階的に変更が加えられていきます。 所要時間はアプリケーションの複雑さによって異なります。私の場合、完了するまでに数分かかりました。完了すると、変換のサマリーと、プランの最終検証フェーズに含まれていた各終了基準のステータス、さらに報告されたステータスを裏付けるすべての証拠が提供されます。たとえば、「 アプリケーションビルド — プロダクション 」の基準は合格と記載されており、提供された証拠には、段階的な Git コミット、プロダクションビルドの完了にかかった時間、バンドルサイズ、ビルド出力メッセージ、作成されたすべての出力ファイルの詳細などが含まれています。 まとめ AWS Transform は、組織がコードのモダナイゼーションや技術的負債に取り組む方法における根本的な変化を示しています。このサービスは、かつてはチームごとに分散していた作業を統合されたインテリジェントな機能に変換し、ナレッジサイロを解消するとともに、ベストプラクティスや組織の知識を組織全体でスケーラブルな資産として活用できるようにします。これにより、モダナイゼーションの取り組みを加速させるとともに、開発者は反復的な保守やモダナイゼーション作業に時間を費やすのではなく、イノベーションやビジネス価値の創出により多くの時間を割けるようになります。 知っておくべきこと AWS Transform カスタム は、現在一般提供されています。最初の変換キャンペーンを開始するには はじめにガイド を参照するか、カスタム変換定義の設定方法について詳しく知るには ドキュメント をご覧ください。 原文は こちら です。
本記事は 2025 年 11 月 20 日に公開された “ Multi-key support for Global Secondary Index in Amazon DynamoDB ” を翻訳したものです。 Amazon DynamoDB は、 グローバルセカンダリインデックス (GSI) の複合キーで最大 8 つの属性 をサポートするようになりました。これで、GSIの一部としてアイテムを識別するために最大4つのパーティションキーと4つのソートキーを指定できるようになり、複数の次元に及ぶ大規模なデータにクエリできるようになります。 Amazon DynamoDB は、サーバーレスでフルマネージドの分散型 NoSQL データベースであり、あらゆるスケールで 1 桁ミリ秒のパフォーマンスを実現します。DynamoDB の主要な機能の 1 つは、 スキーマの柔軟性 です。 プライマリキー 以外はすべてオプションです。パーティションキー (PK) と、オプションでソートキー (SK) を持つシンプルなテーブルから始めることができます。どちらも文字列属性として定義すれば、すぐにデータモデルの構築を開始できます。 アプリケーションでは、カーディナリティを高めるためにパーティションキーに複数の属性を使用する必要がある場合があります。同様に、ソートキーでもデータの書き込みやクエリ時に、データのフィルタリング方法に柔軟性を持たせるために複数の属性が必要になることがあります。例えば、ステータスと日付でトランザクションを取得したり、読み取りタイプとタイムスタンプの両方でフィルタリングしたセンサーの読み取り値を取得するアクセスパターンが必要な場合、ソートキーに 2 つの属性を使用することでアプリケーションの効率が大幅に向上します。このような場合、これまでは創意工夫が必要で、アプリケーション側で 属性を結合 して 2 つ以上の属性の複合キーを作成する必要がありました。 この記事では、複合キーの追加属性サポートを備えたグローバルセカンダリインデックスを使用して、同様のデータモデルをより効率的に設計する方法を紹介し、複雑さを軽減した DynamoDB データモデルの例を提供します。 パーティションキーとソートキーの理解 パーティションキーはクエリにおける既知の要素を表し、基本的には user_id 、 account_id 、 sensor_id 、 player_id などのデータ取得時に使用する識別子です。この情報がなければ、テーブル内のアイテムを効率的に検索することが難しくなります。ソートキーは、同じパーティションキーを共有するアイテムに関する質問に答えを提供します。例えば、「 このアカウント の日付別トランザクションを検索する 」や「 このデバイス のセンサー読み取り値とアラームを時系列で表示する 」、「 この顧客のショッピングカート にはどのアイテムが入っているか? 」といった質問です。 新しい GSI が最大 4 つのパーティションキーと 4 つのソートキーをサポートするようになったことで、多次元クエリへのアプローチが変わります。この機能を使用することで、開発者による回避策が不要になり、DynamoDB のパフォーマンスを維持しながら、柔軟性がさらに向上します。 主要な概念 DynamoDB テーブルは 2 つの概念を中心に構築されています: パーティションキーは、データの格納場所を決定するメイン識別子 です。これはアクセスパターンにおける「既知の要素」を表します。パーティションキーは、 Query API などの効率的な API 操作では必ず指定する必要があります。 ソートキー は、関連するアイテムをまとめて格納し、範囲操作を使用して効率的にクエリするためのオプション属性です。ソートキーを使用すると、1 対多のリレーションシップが可能になり、 アイテムコレクション (同じパーティションキーを持つアイテム)が生成されます。 ソートキーには、 エンティティタイプ 、 ステータス 、ISO8601 形式の タイムスタンプ など、異なるエンティティタイプを組み合わせることができます。これらを # 文字で連結し、ソートキー条件を活用して特定のクエリを取得できます。顧客 C#1A2B3C から情報を取得する例を見てみましょう。 すべての注文を取得するには、ソートキー条件として BEGINS_WITH ORDER# を使用します。 PENDING の注文のみを取得したい場合は、探しているステータスを含めたソートキー条件として BEGINS_WITH ORDER#PENDING を使用することもできます。 最後に、2 つの日付の間にある保留中の注文をすべて取得したい場合は、ソートキー条件として BETWEEN ORDER#PENDING#2025-11-01 AND ORDER#PENDING#2025-11-04 を使用します。より詳細な情報を提供するたびに、より小さなデータのサブセットを取得できることに注目してください。 データモデルを設計する際、パーティションキーは「何を探しているのか?」または「主要なものは何か?」という問いに答えます。言い換えれば、データを特定するために 必ず知っておくべき 情報です。ソートキーは「探しているものの、どの側面が欲しいのか?」または「絞り込むのに役立つ詳細は何か?」という問いに答えます。言い換えれば、 データをどのように整理しフィルタリングするか? ということです。 例: 顧客 1A2B3C のショッピングカートでは、どのアイテムがアクティブですか? 必須情報 は 顧客 1A2B3C です。これが探している主要な情報です。どの顧客に属しているかがわからなければ、ショッピングカートのアイテムを見つけることはできません。 ここでは ショッピングカート内のアクティブなアイテム で フィルタリングしてみましょう 。ショッピングカート内のアイテムを ACTIVE ステータスで整理し、さらに一意性のために SKU を追加します。 次の表は、顧客 1A2B3C の 3 つのショッピングカートアイテムを含むサンプルデータモデルを示しています。 パーティションキー ソートキー status sku date C#1A2B3C CART#S#ACTIVE#SKU#123ABC ACTIVE 123ABC 2025-11-04T10:00:00 C#1A2B3C CART#S#ACTIVE#SKU#234BCD ACTIVE 234BCD 2025-11-04T10:05:00 C#1A2B3C CART#S#SAVED#SKU#345CDE SAVED 345CDE 2025-11-04T10:08:00 ソートキーの複数の属性にまたがるクエリが必要な場合、一般的なパターンは結合し複合ソートキーにすることでした。例えば: PK: C#1A2B3C SK: ORDER#PENDING#2024-11-01T10:30:00Z グローバルセカンダリインデックスにおける拡張複合キーの紹介 グローバルセカンダリインデックスは複数属性キーをサポートしており、複数の属性からパーティションキーとソートキーを構成できます。各属性は独自のデータ型 (文字列、数値、バイナリ) を維持し、柔軟なクエリ機能を提供します。GSI は スパース であり、複合キーのいずれかのコンポーネントが欠落している場合、単一キーの GSI と同様にアイテムはインデックス化されません。 複数のパーティションキー : 最大 4 つの属性をパーティションキーとして組み合わせることができます(例: テナント、顧客、部門)。 複数のソートキー : 特定のクエリパターンに対応する最大 4 つのソートキー属性を定義できます。 ネイティブデータ型: 各属性は元の型を保持し、文字列への変換や連結は不要です。 効率的なクエリ : データを再構築することなく、より具体的な属性の組み合わせでクエリを実行できます。 シンプルな シャーディング 手法 : 2 つ以上のパーティションキーを使用して、 ホットパーティション のリスクを軽減します。インテリジェントなシャーディング手法を実装し、データモデル内の情報を活用してトラフィックを分散させることで解決できます。 以下のクエリパターンがサポートされています: クエリには、すべてのパーティションキー属性に対する等価条件 ( = ) が必要です。 ソートキー条件はオプションであり、等価条件 ( = ) を使用して最大 4 つの属性を指定できます。 範囲条件 ( < 、 > 、 <= 、 >= 、 BETWEEN 、 BEGINS_WITH ) は、最後のソートキー属性でのみサポートされています。 クエリでソートキーをスキップすることはできません。例えば、すべてのパーティションキーと 1 番目と 3 番目のソートキーのみを指定するクエリはサポートされていません。 ソートキーは左から右へ部分的に指定できます。例えば、最初のソートキーのみ、または最初と 2 番目のソートキーのみを指定するクエリはサポートされています。 アプリケーションの複雑さを軽減しながら、DynamoDB と同等のパフォーマンスを維持できます。 複合キーの仕組み GSI の拡張複合キーの動作を確認するために、完全な例を見ていきましょう。 シナリオ 1: 注文ダッシュボード 注文を追跡するシステムを構築しています。このシステムには以下の要件があります: システムは注文 ID で注文を追跡し、ステータスとメタデータを更新します。 ユーザーは、ステータス (ACTIVE、PENDING、COMPLETED) と金額のしきい値を組み合わせて注文を検索できます。例えば、11 月 4 日の $100 を超える ACTIVE な注文などです。 ベーステーブルの設計 シナリオ 1 の 2 つのアクセスパターンのうち、ユーザーに関連しないものは 1 つだけです。注文追跡システムをベーステーブルとして使用します。注文が最も基本的な情報単位であるため、システムをスケールさせることができます。 必須情報 は order_id です。 order_id がなければ、テーブル全体を スキャン する必要があります。他のアクセスパターンで注文を日付順に整理するために、生成時刻でソート可能な K-sortable unique identifier (KSUID) を使用します。 この例では注文 ID に対するクエリが含まれていないため、ソートキーは必要ありません。次の表は、顧客 1A2B3C の 3 つの注文を含むサンプルデータモデルを示しています。 パーティションキー order_id customer_id order_date amount status acc_type org_id KSUID1 C#1A2B3C 2025-11-04 200 ACTIVE A OMEGA KSUID2 C#1A2B3C 2025-11-04 145 PENDING A OMEGA KSUID3 C#1A2B3C 2025-11-04 110 PENDING B BRAVO Base Table: Orders Partition Key: order_id Attributes: customer_id, status, order_date, amount, acc_type and org_id 複合キー GSI 設計 ダッシュボードクエリ用に、 customer_id をパーティションキーとし、 status 、 order_date 、 amount で構成されるソートキーを持つ GSI を作成します。不等式はソートキー属性の最後に配置する必要があるため、 amount を最後に配置することで、範囲クエリを使用して価格のしきい値でフィルタリングできます。 必須情報 は 顧客 1A2B3C です。どの顧客に属するかを知らなければ、注文を見つけることはできません。 データをどのように整理してフィルタリングすればよいでしょうか? 特定の日付のアクティブな注文で、$100 を超えるもの で整理およびフィルタリングする必要があります。ステータスと日付を使用した複合キーを使用することで、この顧客の注文を取得できます。 以下の表は、顧客 1A2B3C の 3 つの注文を含むサンプルデータモデルを示しています: GSI PK GSI SK customer_id status order_date amount order_id acc_type org_id C#1A2B3C ACTIVE 2025-11-04 200 KSUID1 A OMEGA C#1A2B3C PENDING 2025-11-04 145 KSUID2 A OMEGA C#1A2B3C PENDING 2025-11-04 110 KSUID3 B BRAVO GSI: OrdersByStatusDateAmount Partition Key: customer_id Sort Key 1: status (equality condition) Sort Key 2: order_date (equality condition) Sort Key 3: amount (range condition) 以下の AWS CLI コマンドでは、顧客 1A2B3C の注文を取得します。 aws dynamodb query \ --table-name orders-table \ --index-name OrdersByStatusDateAmount \ --key-condition-expression "customer_id = :cust" \ --expression-attribute-values '{ ":cust": {"S": "1A2B3C"} }' { "Items": [ { "org_id": {"S": "OMEGA"}, "order_date": {"S": "2025-11-04"}, "status": {"S": "ACTIVE"}, "acc_type": {"S": "A"}, "customer_id": {"S": "1A2B3C"}, "amount": {"N": "200"}, "order_id": {"S": "KSUID1"} }, { "org_id": {"S": "BRAVO"}, "order_date": {"S": "2025-11-04"}, "status": {"S": "PENDING"}, "acc_type": {"S": "B"}, "customer_id": {"S": "1A2B3C"}, "amount": {"N": "110"}, "order_id": {"S": "KSUID3"} }, { "org_id": {"S": "OMEGA"}, "order_date": {"S": "2025-11-04"}, "status": {"S": "PENDING"}, "acc_type": {"S": "A"}, "customer_id": {"S": "1A2B3C"}, "amount": {"N": "145"}, "order_id": {"S": "KSUID2"} } ], "Count": 3, "ScannedCount": 3, "ConsumedCapacity": null } 以下の AWS CLI コマンドは、顧客 1A2B3C の PENDING ステータスの注文をクエリします: aws dynamodb query \ --table-name orders-table \ --index-name OrdersByStatusDateAmount \ --key-condition-expression "customer_id = :cust AND #status = :status" \ --expression-attribute-names '{"#status": "status"}' \ --expression-attribute-values '{ ":cust": {"S": "1A2B3C"}, ":status": {"S": "PENDING"} }' 以下の AWS CLI コマンドは、11 月 4 日に PENDING ステータスとなっている顧客 1A2B3C の注文を取得します: aws dynamodb query \ --table-name orders-table \ --index-name OrdersByStatusDateAmount \ --key-condition-expression "customer_id = :cust AND #status = :status AND order_date = :date" \ --expression-attribute-names '{"#status": "status"}' \ --expression-attribute-values '{ ":cust": {"S": "1A2B3C"}, ":status": {"S": "PENDING"}, ":date": {"S": "2025-11-04"} }' 以下の AWS CLI コマンドは、顧客 1A2B3C の注文のうち、11 月 4 日に PENDING ステータスで金額が 100 ドルを超えるものをクエリします。 aws dynamodb query \ --table-name orders-table \ --index-name OrdersByStatusDateAmount \ --key-condition-expression "customer_id = :cust AND #status = :status AND order_date = :date AND amount > :min_amount" \ --expression-attribute-names '{"#status": "status"}' \ --expression-attribute-values '{ ":cust": {"S": "1A2B3C"}, ":status": {"S": "PENDING"}, ":date": {"S": "2025-11-04"}, ":min_amount": {"N": "100"} }' シナリオ 2: 進化 – トラフィックの増加 このソリューションが成功し、最大規模のエンタープライズ顧客が 1 秒あたり 500 回を超えるレートで注文ステータスをプッシュするようになったと想像してください。要件は変わらず、ユーザーは一定の金額しきい値内でステータスごとに注文をクエリする必要があります。 この大規模なエンタープライズ顧客の導入により、 ホットパーティション が発生する可能性に直面しています。ベーステーブルで 1 つの注文ステータスを NEW から ACTIVE に更新すると、1 WCU を消費する単一の書き込み操作が使用されます。GSI では、NEW ステータスを削除するために 1 つ、ACTIVE に設定するためにもう 1 つ、合計 2 WCU を消費し、 仮想パーティションあたり 1000 WCU の制限 に近づきます。 幸いなことに、status 属性をシャーディングキーとして使用できます。5 つの異なるステータスがあると仮定すると、スループットを最大 5 倍に増加させることができます。パーティションキーを customer_id と status、ソートキーを order_date と amount とする新しい GSI を作成します。 GSI PK GSI SK customer_id status order_date amount order_id acc_type org_id C#1A2B3C ACTIVE 2025-11-04 200 KSUID1 A OMEGA C#1A2B3C PENDING 2025-11-04 145 KSUID2 A OMEGA C#1A2B3C PENDING 2025-11-04 110 KSUID3 B BRAVO GSI: OrdersByOrgAccountStatus Partition Key 1: customer_id Partition Key 2: status Sort Key 2: order_date (equality condition) Sort Key 3: amount (range condition) 複数属性の複合キーを使用する際のベストプラクティス まずクエリパターンを設計してください。GSI を作成する前に、最も頻繁に使用される上位 3 〜 5 つのクエリパターンを特定し、その頻度とパフォーマンス要件を把握します。ベーステーブルの構造は一意性を確保するように設計し、GSI を使用して複合キーパターンを最適化することで、最も一般的なクエリを効率的に処理できるようにします。複合キー GSI を使用すれば、データモデル全体を再構築するのではなく、異なるキーの組み合わせでインデックスを追加することで、新しい要件に対応できます。 キーの順序は慎重に選択してください。GSI の属性の順序は、実行できるクエリに直接影響します。4 つのパーティションキーと 4 つのソートキーを使用する必要はありません。3 つのパーティションキーと 2 つのソートキー、1 つのパーティションキーと 3 つのソートキー、その他の構成など、アクセスパターンに合った組み合わせを選択してください。 複合キー GSI の最も強力な側面の 1 つは、ネイティブデータ型のサポートです。タイムスタンプ、数量、数値比較には Number 型を使用して、適切なソートと数学演算を可能にします。アクティブ/非アクティブや有効/無効などのバイナリ状態には Boolean フラグを使用します。型固有の操作のメリットが失われるため、必要でない限り値を文字列に変換することは避けてください。 最初からスケールを考慮して計画してください。コストを削減するために、指定したキー属性に値を持つ項目のみをインデックス化する スパースインデックス を可能な限り設計してください。プロジェクションタイプは戦略的に選択してください。柔軟性を重視する場合は ALL を、ストレージコストを削減する場合は KEYS_ONLY を、必要な属性のみを射影する場合は INCLUDE を使用します。ベーステーブルに Time to Live (TTL) 戦略を実装して、レコードサイズを長期的に管理し、無制限な増加を防止してください。 まとめと次のステップ この記事では、複合キー GSI の使い方を学びました。この新しい DynamoDB の機能により、属性を連結するような回避策を使用することなく、異なるデータ型や属性をクエリできます。この機能は、標準の GSI ストレージ、スループット、機能以外の追加コストなしで、すべての DynamoDB テーブルで利用可能です。DynamoDB のデータモデルをシンプルにする準備はできましたか?以下の手順に従ってください: クエリパターンを特定する : 現在連結されたソートキーを使用しているクエリを確認します GSI を設計する : データ階層に基づいて、属性をパーティションキーとソートキーの位置にマッピングします。 徹底的にテストする : テストテーブルを作成し、想定される負荷の下でクエリパターンが期待どおりに動作することを検証します。 本番環境にデプロイする : 本番テーブルに新しい GSI を追加し、アプリケーションコードを更新します パフォーマンスを監視する : CloudWatch で GSI のメトリクスを追跡し、必要に応じて最適化します クリーンアップする : GSI で使用されているレガシーの複合属性を削除します。 詳細な実装ガイダンスについては、 DynamoDB でグローバルセカンダリインデックスを使用する方法 と データモデリングのベストプラクティス を参照してください。 この記事の翻訳は Solutions Architect の堤 勇人が担当しました。 著者について Esteban Serna Esteban は、AWSのプリンシパルDynamoDBスペシャリストソリューションアーキテクトで、16年の経験を持つデータベース愛好家です。コンタクトセンターインフラの展開からNoSQLに魅了されるまで、Estebanの歩みは分散コンピューティングの専門化へと導きました。仕事に情熱を持つEstebanは、自身の知識を他者と共有することほど好きなことはありません。
本記事は 2025 年 11 月 20 日に公開された “ Accelerating data modeling accuracy with the Amazon DynamoDB Data Model Validation Tool ” を翻訳したものです。 Introducing the Amazon DynamoDB data modeling MCP tool では、 Amazon DynamoDB Model Context Protocol (MCP) サーバー を発表しました。これは、DynamoDB 固有のツールを Amazon Q Developer 、 Kiro 、Cursor などの AI 搭載アシスタントに接続します。MCP サーバーを使用すると、自然言語を通じて DynamoDB データモデルを設計でき、dynamodb_requirements.md や dynamodb_data_model.md などの構造化されたアーティファクトを生成できます。 Raising the bar on Amazon DynamoDB data modeling では、データモデリングプロンプト自体の品質、要件の収集効率、アクセスパターンの推論、スケーラブルな設計の生成を測定する自動評価フレームワークを紹介しました。このフレームワークは、 Amazon Bedrock 、 DSPy 、 Strands Agents で構築されており、DynamoDB モデリングツールが提供するガイダンスを継続的に改善するのに役立ちます。 2025年11月20日、MCP サーバーの新しいコンポーネントである Amazon DynamoDB Data Model Validation Tool を発表します。この検証ツールは、生成、評価、実行の間のループを閉じるものです。検証ツールは、生成されたデータモデルを Amazon DynamoDB local に対して自動的にテストし、すべてのアクセスパターンが意図したとおりに動作するまで反復的に改善します。 静的な設計から自己検証モデルへ データモデリングは本質的に反復的なプロセスです。従来、開発者はスキーマを手動でデプロイし、テストスクリプトを記述し、結果を分析することでデータモデルを検証していましたが、このプロセスは時間がかかり、一貫性に欠けていました。Data Model Validation Tool は、このサイクルをエンドツーエンドで自動化します。 まず、DynamoDB MCP サーバーは、自然言語または自動データベース分析を通じてデータモデルの設計を支援し、アプリケーションのアクセスパターンに沿ったスキーマを生成します。新しい Data Model Validation Tool は、DynamoDB local を自動的に起動し、読み取りおよび書き込み操作を実行して、各アクセスパターンが期待通りに動作することを確認することで、このプロセスを拡張します。 これにより、エージェントが完全に有効になるまでモデルを改良できるような、生成と検証の反復ループが作成されます。たとえば、パーティションキーの不整合によってクエリが不完全な結果を返すなどのテストが失敗した場合、バリデーターは問題を記録し、スキーマの影響を受けた部分を再生成し、テストを再実行します。このプロセスは、アクセスパターンが正常に合格するまで続きます。 次の図は、選択したエージェントフレームワークを通じて MCP サーバーとどのように対話するかを示しています。 DynamoDB データモデルの設計を支援するようエージェントに依頼すると、エージェントは DynamoDB Model Context Protocol (MCP) サーバーを呼び出します。サーバーは、自然言語での会話か、データモデリング要件を自動的に推測する Database Source Analyzer ツールのいずれかを選択するよう案内します。 このツールは、アプリケーションのアクセスパターンを捉え、スケーラブルでコスト効率の高い設計に整理した DynamoDB データモデルを生成します。 次に、エージェントはデータモデルを検証するかどうかを尋ねます。「はい」を選択すると、Data Model Validation Tool が呼び出されます。 バリデーターは以下のステップを実行します。 DynamoDB local を使用してローカル DynamoDB 環境を起動します。 dynamodb_data_model.json という名前の JSON ファイルを生成します。このファイルには、設計を検証するために必要なアクション (作成するテーブル、テストするアクセスパターン、実行する対応する CLI コマンド) がリストされています。 テーブルとインデックスをローカルに作成し、サンプルデータを挿入します。 dynamodb_data_model.json ファイルに記録された期待される読み取りおよび書き込み操作を実行します。 レスポンスを検証し、各アクセスパターンが正しく効率的に動作することを確認します。 検証ステップが失敗した場合、フィードバックループが自動的にデータモデルを更新し、アクセスパターンが合格するまでテストを再実行します。完了すると、ツールは更新されたモデルと、検証プロセスを要約した validation_result.md ファイルを出力します。 例: 高トラフィックの取引アプリの検証 次の例は、 Deals App の検証結果を示しています。これは、数百万人のユーザーにサービスを提供し、フラッシュセール中に大規模なファンアウトイベントを処理するモバイルファーストシステムです。MCP データモデリングツールがスキーマを生成した後、バリデーターは自動的に DynamoDB local を起動し、次のようなシミュレーション操作を実行します。 カテゴリとブランドで取引を閲覧する 閲覧数で取引の人気を追跡する フォローしているカテゴリの通知を書き込む バリデーターが「GetUserFeed」クエリでエラーが発生したことを検出すると、問題を特定し、関連するインデックスを再生成して、アクセスパターンを再テストします。数分以内に、機能テスト済みで、パフォーマンスを考慮し、DynamoDB のベストプラクティスに沿った、検証済みのデータモデルが完成します。以下は、Amazon Q CLI を使用した検証ツールの出力例です ## Validation Results Summary Status: ⚠ 75% Success (3 out of 4 patterns working) ✔ Query: GetDealById – passed ✔ Query: GetDealByCategory – passed ✔ Query: GetDealByBrand – passed ✖ Query: GetUserFeed – failed Root Cause: missing GSI on followed_categories The Fix: I need to update the JSON file with corrected commands. Let me do that now ## Re-validation Results All 4 access patterns are now working correctly: ✔ Query: GetDealById – passed ✔ Query: GetDealByCategory – passed ✔ Query: GetDealByBrand – passed ✔ Query: GetUserFeed – passed Your DynamoDB model is ready and validated at 100% effectiveness! サンプル検証出力 検証が完了すると、 dynamodb_data_model.json ファイルが作成され、検証テストから得られた主要な発見がハイライトされます。このケースでは、 Deals App データモデルは、テストされたアクセスパターン全体で 100% の成功率を達成し、設計が準備完了であることを確認しました。 # DynamoDB Data Model Validation Report **Overall Status:** ✅ PASSED **Success Rate:** 100% (4 out of 4 patterns successful) ## Access Pattern Results ### Pattern 1: Get deal by ID **Operation:** GetItem **Status:** ✅ Success ```json { "deal_id": "deal_001", "brand": "TechPro", "category": "Electronics", "title": "50% off Bluetooth Headphones", "status": "ACTIVE" } まとめ Amazon DynamoDB Data Model Validation Tool は、生成、評価、検証のループを完結させます。このツールを使用することで、データモデルが見た目だけでなく、実際に正しく動作することを測定可能な形で確信できます。 自然言語モデリングと実行可能な検証により、開発者は DynamoDB スキーマをこれまで以上に速く設計、テスト、改良できるようになりました。これらのツールを使用して DynamoDB 設計ワークフローを加速させる方法や、MCP 環境が進化し続ける中でのフィードバックを共有していただけることを楽しみにしています。 詳細については、 DynamoDB MCP サーバーの GitHub リポジトリ を参照し、検証ツールがワークフローにどのように統合されるかをご確認ください。 この記事の翻訳は Solutions Architect の堤 勇人が担当しました。 著者について Lee Hannigan Lee Hannigan は、アイルランドのドニゴールを拠点とするシニアDynamoDBデータベースエンジニアです。彼は分散システムに関する豊富な専門知識を持ち、ビッグデータおよび分析技術における強固な基盤を有しています。彼の役割において、リーはDynamoDBのパフォーマンス、スケーラビリティ、信頼性の向上に注力しながら、顧客や社内チームがその機能を最大限に活用できるよう支援しています。
本記事は 2025年11月26日 に公開された「 How Octus achieved 85% infrastructure cost reduction with zero downtime migration to Amazon OpenSearch Service | AWS Big Data Blog 」を翻訳したものです。 データ量が指数関数的に増加し続ける中、ミッションクリティカルなワークロードが求める高いパフォーマンスと信頼性を維持しながら、検索インフラストラクチャのコストを最適化するプレッシャーが高まっています。多くの企業は、運用オーバーヘッドが大きく、効率的なスケーリングを制限する複雑で高コストな検索システムを管理しています。検索システム間の移行が必要な場合、この課題はさらに深刻になります。従来、移行には大幅なダウンタイム、複雑なデータ同期、ビジネス運用への大きな影響が伴います。エンタープライズアプリケーションは、カスタマーエクスペリエンス、ビジネスインテリジェンス、運用継続性に影響を与えるサービス中断を許容できません。移行戦略は、移行プロセス全体を通じてゼロダウンタイムを維持し、完全なデータ整合性を確保しながら、コスト最適化と運用改善を実現する必要があります。 2013年に設立された Octus (旧 Reorg)は、世界をリードするバイサイド企業、投資銀行、法律事務所、アドバイザリー企業向けの重要なクレジットインテリジェンスおよびデータプロバイダーです。比類のない人間の専門知識を実績のあるテクノロジー、データ、AI ツールで補完することで、Octus は金融業界全体で決定的なアクションを促す強力なインサイトを提供しています。 この記事では、Octus が Elastic Cloud で実行していた Elasticsearch ワークロードを Amazon OpenSearch Service に移行した方法を紹介します。複数のシステムを管理する状態から、OpenSearch Service を活用したコスト効率の高いソリューションへの移行の道のりをたどります。また、移行を成功させたアーキテクチャの選択と実装戦略を共有します。その結果、移行中もサービスの可用性を中断することなく、パフォーマンスの向上とコスト効率の改善を実現しました。 戦略的要件 Amazon OpenSearch Service への移行を選択した理由となるいくつかの要件を特定しました: コスト効率 :OpenSearch Service の 料金モデル により、パフォーマンスを損なうことなくクラウド支出を最適化できました。 迅速なサポート :AWS は問題解決を加速し、信頼性を高める、信頼できる高品質なサポートを提供しました。 一貫した信頼性 :OpenSearch Service は最大 99.99% の SLA を提供し、Octus のミッションクリティカルなワークロードに必要な信頼性を確保しています。 クエリダウンタイムなしのシームレスな移行 : Migration Assistant for Amazon OpenSearch Service により、移行中もクエリの可用性を中断することなく移行パスを提供し、ビジネス継続性を確保しました。 運用の簡素化 :AWS への統合により、高いセキュリティ基準を維持しながらインフラストラクチャの複雑さを軽減しました。 ソリューション概要 Migration Assistant for Amazon OpenSearch Service は、Elasticsearch から OpenSearch Service への移行を支援するツールスイートを提供します。Octus は移行に以下の機能を使用しました: メタデータ移行: このツールにより、Octus は多様なマッピングと設定を持つ数十のインデックスを移行できました。タイムスタンプメタデータとの後方互換性の問題が特定された際、Migration Assistant ツールに直接統合されたカスタム JavaScript 変換を適用し、インデックス全体のマッピングを自動的に調整して互換性を確保しました。 履歴データ移行: Octus は Reindex-from-Snapshot を使用して、ソースクラスターのポイントインタイムスナップショットから履歴ドキュメントを移行しました。スナップショットは Amazon Simple Storage Service (Amazon S3)に保存されているため、ソースクラスターに影響を与えることなくこのプロセスをスケーリングできました。Reindex-from-Snapshot により、移行中にシャーディングスキームを調整し、ターゲットでのクラスターパフォーマンスを最適化することもできました。 ライブトラフィックリプレイ: バックフィルが完了すると、Octus は Migration Assistant の Traffic Replayer を使用して、キャプチャされたライブトラフィック(Traffic Capture Proxy から)を OpenSearch Service 互換性のために必要なリクエスト変換とともにターゲットクラスターに送信しました。その結果、ターゲットクラスターにはソースクラスターのドキュメントが含まれ、更新がリアルタイムで実行されました。 以下の図は、この移行の実装アーキテクチャ図を示しています。 図 1 – 移行ステップを含む Migration Assistant アーキテクチャ Migration Assistant for Amazon OpenSearch Service の詳細については、 AWS ソリューション のホームページをご覧ください。 図の各ノードは、移行プロセスの以下のステップに対応しています: クライアントトラフィックは既存のクラスターに送信されます。 キャプチャプロキシを備えた Application Load Balancer がトラフィックをソースに中継しながら、データを Amazon Managed Streaming for Apache Kafka (Amazon MSK)にレプリケートします。 移行コンソールを使用して、ポイントインタイムスナップショットを取得します。スナップショットが完了すると、Metadata Migration Tool を使用してターゲットクラスターにインデックス、テンプレート、コンポーネントテンプレート、エイリアスを確立します。継続的なトラフィックキャプチャが行われている状態で、Reindex-from-Snapshot がソースからデータを移行します。 Reindex-from-Snapshot が完了すると、キャプチャされたトラフィックが Amazon MSK から Traffic Replayer によってターゲットクラスターにリプレイされます。 ソースクラスターとターゲットクラスターに送信されたトラフィックのパフォーマンスと動作を、ログとメトリクスを確認して比較します。 ターゲットクラスターの機能が期待どおりであることを確認した後、クライアントを新しいターゲットにリダイレクトします。 完全な移行と最適化の道のり Octus の Elastic Cloud から Amazon OpenSearch Service への移行は、コア移行作業とその後の最適化フェーズの両方を包含しています。目標は、検索インフラストラクチャ、アプリケーション、データを Elastic Cloud から新しい OpenSearch Service ドメインに最小限の中断で正常に移行し、実際の使用データに基づいてパフォーマンスとコストを継続的に最適化することでした。 Octus は社内のカスタムインフラストラクチャフレームワーク(インフラストラクチャ自動化のための内部ツール)を使用して、ターゲットの OpenSearch Service 1.3 ドメインを構築、デプロイ、監視し、移行の堅固な基盤を確立しました。このアプローチにより、フルマネージドの AWS サービスに移行しながら、使い慣れた内部プロセスを活用できました。OpenSearch Service を使用する際のセキュリティベストプラクティスの実装については、 AWS ドキュメント を参照してください。 移行前の最適化 移行を開始する前に、Octus は移行プロセスを効率化するためにソース Elasticsearch クラスターで最適化作業を実施しました。これには、時間の経過とともに蓄積された未使用のインデックスの削除や、移行期間を不必要に延長しストレージ転送コストを増加させる大きなドキュメントの削除が含まれます。これらの準備ステップにより、移行が必要なデータ量が大幅に削減され、全体的な移行の複雑さが最小化され、Migration Assistant ツールをより効率的に使用できるようになりました。 技術的制約とバージョンの考慮事項 移行には、技術的アプローチに影響を与える特定のバージョン互換性の課題がありました。ソース Elasticsearch クラスターはバージョン 7.17 で実行されており、Python クライアントアプリケーションも Elasticsearch 7.17 互換性に制約されていました。移行をサポートするために、チームは Reindex-from-Snapshot を使用しました。これにより、既存のスナップショットから新しい OpenSearch Service クラスターにデータを再インデックスすることで、クロスシステム移行が可能になります。RFS は古いバージョンの Lucene で作成されたインデックスも書き換えるため、最新バージョンの OpenSearch Service への将来のアップグレードが簡素化されます。OpenSearch 1 または 2 への移行を評価しながら、Octus はクライアント側の変更を最小限に抑え、移行の複雑さを軽減するためにターゲットとして OpenSearch 1.3 を選択し、後でより簡単にアップグレードできるようにしました。 バージョンの選択は特に R アプリケーション環境に影響を与えました。R 言語(統計計算とデータ分析のための オープンソースプログラミング言語 )にはネイティブの OpenSearch 1.3 クライアントサポートがなかったためです。この制約により、Octus は ropensci/elastic ライブラリを使用して新しい OpenSearch Service ドメインと統合するカスタムクライアントソリューションを開発する必要がありました。Python 環境も同様の課題を呈し、Elasticsearch 7.17 クライアントの制約により、移行アプローチを慎重に検討する必要がありました。これらのクライアント互換性の懸念は、従来のスナップショットベースの方法よりも Migration Assistant ツールを選択した要因の 1 つでした。Migration Assistant は、移行中のバージョン固有のクライアントインタラクションの管理をより適切にサポートしていたためです。 今後、Octus はアプリケーションスタックの進化とクライアントライブラリサポートの成熟に伴い、新しい OpenSearch バージョンへのアップグレードを計画しており、この移行で達成した安定性を維持しながら、最新の機能とパフォーマンス改善を活用できるようにします。 複数言語にわたるアプリケーションのモダナイゼーション アプリケーションの変更は、複数のプログラミング環境にわたる重要な技術的取り組みでした: レガシー PHP システム(5.6 および Laravel 4.2): Octus は OpenSearch リクエストでのマッピングタイプの非推奨を処理しました。これらのマッピングタイプの指定はサポートされていないためです。elasticsearch コネクタライブラリをユーザー名/パスワード認証で引き続き使用しました。 モダン PHP アプリケーション(8.1 および Laravel 9): これらはより包括的な変更を受け、elasticsearch/elasticsearch ライブラリを opensearch-project/opensearch-php クライアントに置き換え、IAM 認証を活用してクラスターに接続しました。 Python 環境: Django フレームワーク 2.1、3.2、5.2 を使用するバージョン 3.8、3.10、3.11、3.13 にまたがるアプリケーションは、elasticsearch ライブラリを opensearch-py に置き換え、IAM 認証に移行する必要がありました。 R アプリケーション: R 4.5.1 アプリケーションでは、Octus は互換性を確保するためにカスタムライブラリ ropensci/elastic を利用しました。 トラフィックルーティングと強化されたモニタリング 移行を促進するために、Octus は既存のクライアントをリダイレクトして、Migration Assistant の Traffic Capture Proxy を介してソースクラスターにリクエストをルーティングし、ライブトラフィックからターゲットクラスターにデータを移行しました。 このプロセス中に、モニタリングインフラストラクチャは大幅に強化されました。Octus のオブザーバビリティインフラストラクチャは、クラスターマネージャーとデータノード、ネットワーク、データストレージ、セキュリティと IAM アクセスを含む OpenSearch Service クラスターの全体的な健全性を監視します。また、アプリケーションのインデックス作成と検索パフォーマンスも監視します。これにより、ログとメトリクスが Datadog に直接送信されるため、別個のモニタリングクラスターの必要性がなくなり、オブザーバビリティが大幅に向上しました。Datadog モニターは Infrastructure-as-Code を使用して定義され、インフラストラクチャフレームワークにシームレスに統合されました。 カットオーバーと初期結果 Site Reliability Engineering チームはリリースを綿密に計画し、システムアプリケーションのダウンタイムなし、データ損失ゼロで Elasticsearch から OpenSearch Service への移行と Elasticsearch クライアントから OpenSearch Service クライアントへのカットオーバーを成功させました。初期移行フェーズでは、ゼロダウンタイム、データ損失なし、インフラストラクチャとモニタリングの完全な Infrastructure-as-Code 実装、強化されたオブザーバビリティなどの運用上のメリットを達成しながら、 52% のコスト削減 を実現しました。 移行後の最適化 移行後、Octus は新しい OpenSearch Service セットアップの本番環境およびその他の環境からの運用データに基づいて包括的な最適化を実施しました。この実際の使用データは、実際のリソース消費に関する貴重なインサイトを提供し、さらなるクラスターのリサイズに関する情報に基づいた意思決定を可能にしました。 使用メトリクスの分析と戦略的なリサイズにより、Octus はクラスターサイズを運用ニーズにより正確に合わせ、支出を最小限に抑えながら継続的なパフォーマンスを促進しました。この最適化フェーズでは、元の Elastic Cloud コストと比較して追加で 33% のコスト削減 を達成し、一貫した最適なパフォーマンスを維持しながら、合計削減率を 85% にしました。 運用モニタリング Octus は Datadog を使用して検索とインデックス作成のレイテンシーの両方を監視し、Amazon OpenSearch Service クラスターのパフォーマンスをリアルタイムで可視化しています。以下のスクリーンショットは、カスタム Datadog ダッシュボードが OpenSearch Service クラスターのライブビューを提供する方法を示しています。この可視化は、取り込みプロセスの概要と詳細なインサイトの両方を提供し、ストレージとドキュメント数を理解するのに役立ちます。ダッシュボードの下半分は、個々のノードの健全性とパフォーマンスメトリクス(読み取りと書き込みのレイテンシー、スループット、IOPS など)の時系列ビューを表示します。 図 2 – Datadog ダッシュボード 移行のオブザーバビリティ Migration Assistant for Amazon OpenSearch Service は、移行の進捗を観察および検証するためのいくつかのダッシュボードを提供します。これらのオブザーバビリティ機能を使用することで、お客様はバックフィルとライブキャプチャおよびリプレイの進捗の両方を追跡でき、本番ワークロードをターゲットクラスターに切り替える前に信頼性を確保できます。以下のグラフは Octus の移行の例で、約 4TB のデータが約 9 時間(08:00 から 17:00)で移行されました。 図 3 – ディスク使用量によるバックフィル進捗 図 4 – 検索可能なドキュメントによるバックフィル進捗 バックフィルが完了すると、キャプチャされたトラフィックがリプレイされ、ソースクラスターとターゲットクラスター間の継続的なアクティビティが同期されます。 バックフィルが完了した時点(約 17:00)で、ターゲットクラスターはソースより約 467 分遅れていました。リプレイプロセスは、キャプチャされたトラフィックをソースで最初に取り込まれた速度よりも速い速度で処理することで、この遅延を急速に削減しました。 図 5 – バックフィル完了後のリプレイ遅延 遅延時間が 0 に達すると、ターゲットクラスターは完全に同期され、本番トラフィックを安全に再ルーティングできました。Octus は最終的な切り替えを行う前に、数日間ターゲットでリプレイされたトラフィックを観察することを選択しました。 卓越性の達成 Octus の Amazon OpenSearch Service への移行は、顕著な成果をもたらしました: スケーラビリティ – Octus は 3 つの環境で Q&A に利用可能なドキュメント数をほぼ 2 倍に増やし、数週間ではなく数日で実現しました。オートスケーリングルールとコントロールを備えた AWS Fargate を使用した Amazon Elastic Container Service (Amazon ECS)の使用により、ピーク使用時間中のサービスの弾力的なスケーラビリティを実現しています。 コスト削減 – Elastic Cloud から OpenSearch Service に移行することで、Octus の月間インフラストラクチャコストは 85% 削減されました。 検索パフォーマンスの向上 – Octus は移行中も一貫したレスポンスタイムを維持し、レイテンシーへの悪影響はなく、クエリスループットと全体的な検索パフォーマンスが 20% 向上しました。 ゼロダウンタイム – Octus は移行中のダウンタイムがゼロで、アプリケーション全体で 100% のアップタイムを達成しました。 運用オーバーヘッドの削減 – 移行後、Octus の DevOps および SRE チームはメンテナンス負担とオーバーヘッドが 30% 削減されました。1 つのシステムを使用するようになったため、SOC2 コンプライアンスのサポートも簡単になりました。 タイムラインの短縮 – 移行全体が予定より早く完了し、計画から完全な完了まで 1 四半期未満で実現しました。 「Elastic Cloud から Amazon OpenSearch Service への移行は、サードパーティへの依存を最小限に抑え、Octus のシステムインフラストラクチャの信頼性を強化するという、より広範な戦略の重要な要素でした。Migration Assistant for Amazon OpenSearch Service により、データ損失ゼロ、ユーザーへのダウンタイムほぼゼロでシームレスな移行を実行できました。」– Vishal Saxena 氏、CTO、Octus まとめ この記事では、Octus が Migration Assistant for OpenSearch Service を使用して Elasticsearch ワークロードを Elastic Cloud から Amazon OpenSearch Service に正常に移行し、ゼロダウンタイムと大幅な運用改善を達成した方法を紹介しました。 Migration Assistant for OpenSearch Service は、包括的なツールスイートを通じてこの複雑な移行をサポートしました。Metadata Migration 機能は、多様なマッピングと設定を持つ数十のインデックスを移行し、カスタム JavaScript 変換で後方互換性の問題を処理しました。Reindex-from-Snapshot は、ソースクラスターに影響を与えることなくポイントインタイムスナップショットから履歴ドキュメントを移行し、パフォーマンス向上のためにシャーディングスキームも最適化しました。Live Traffic Replay により、移行プロセス全体を通じてターゲットクラスターがリアルタイム更新と同期された状態を維持しました。 移行は複数の側面で大きな成果をもたらしました。Octus は月間インフラストラクチャコストを 85% 削減しながら、3 つの環境で検索可能なドキュメント数をほぼ 2 倍に増やしました。検索パフォーマンスはクエリスループットが 20% 向上し、一貫したレスポンスタイムでレイテンシーへの悪影響はありませんでした。移行はアプリケーション全体でゼロダウンタイムと 100% のアップタイムを維持し、DevOps および SRE チームはメンテナンス負担と運用オーバーヘッドが 30% 削減されました。移行全体は 1 四半期未満で予定より早く完了しました。 Migration Assistant for OpenSearch Service の詳細と同様の成果を達成する方法については、 AWS ソリューション のホームページをご覧ください。 Octus にアクセスして、厳密に検証されたインテリジェンスを迅速に提供し、クレジットライフサイクル全体の専門家に完全な全体像を提供する方法をご覧ください。 LinkedIn と X で Octus をフォローしてください。 著者について Harmandeep Sethi は Octus の SRE エンジニアリングおよびインフラストラクチャフレームワーク責任者で、大規模システムの実装において高パフォーマンスチームをリードしてきた約 10 年の経験があります。オブザーバビリティ、レジリエンスエンジニアリング、インフラストラクチャフレームワークによる運用プロセスの自動化のベストプラクティスを推進することで、Octus の検索エンジンインフラストラクチャとサービスの変革とモダナイゼーションに重要な役割を果たしてきました。 Serhii Shevchenko は Octus の Site Reliability Engineer です。ソフトウェア開発と Site Reliability Engineering で合計 9 年の経験があり、システムの信頼性とパフォーマンスの向上に専門性を持っています。Elasticsearch Cloud から AWS OpenSearch への会社の重要な移行において、アプリケーション側の主要な開発者でした。彼の計画は、クライアント向けダウンタイムゼロで移行を実行する上で重要な役割を果たしました。 Govind Bajaj は Octus の Senior Site Reliability Engineer で、高パフォーマンスのエンジニアリングチームと重要なシステムをサポートするスケーラブルなインフラストラクチャの設計と実装を専門としています。8 年以上の経験を持ち、複雑な問題を分解して実用的で適切に設計されたソリューションに変えることに優れており、安全で観測可能でレジリエントなプラットフォームの構築に強い焦点を当てています。 Virendra Shinde は Octus の Platform 責任者で、クラウドインフラストラクチャ、Site Reliability、Octus 製品スイートを支えるコアフレームワークを統括しています。Octus に入社する前は、Grayscale Investments で 2 年間、投資家ポータルとデータ API をゼロから構築しました。それ以前は、Blackstone で 8 年間、複数の開発チームをリードしました。メリーランド大学で情報管理の修士号を取得しています。 Brian Presley は OpenSearch の Software Development Manager で、OpenSearch Migrations と OpenSearch Serverless の背後にあるチームをリードし、スケーラブルで影響力の高い検索および分析ソリューションを構築しています。 Andre Kurait は AWS の Software Development Engineer II で、テキサス州オースティンを拠点としています。現在、Migration Assistant for Amazon OpenSearch Service に取り組んでいます。Amazon OpenSearch に参加する前は、Amazon Health Services で働いていました。余暇には、旅行、料理、教会のスポーツリーグでのプレーを楽しんでいます。カンザス大学でコンピューターサイエンスと数学の理学士号を取得しています。 Vaibhav Sabharwal は AWS の Senior Solutions Architect で、ニューヨークを拠点としています。新しいクラウドテクノロジーの学習と、お客様のクラウド導入戦略の構築、革新的なソリューションの設計、運用の卓越性の推進を支援することに情熱を持っています。AWS の Financial Services および Storage Technical Field Communities のメンバーとして、業界内の協力的な取り組みに積極的に貢献しています。 この記事は Kiro が翻訳を担当し、ソリューションアーキテクト の 榎本 貴之 がレビューしました。
本記事は 2025年12月2日 に公開された「 Amazon OpenSearch Service improves vector database performance and cost with GPU acceleration and auto-optimization 」を翻訳したものです。 本日、 Amazon OpenSearch Service において、サーバーレス GPU アクセラレーションとベクトルインデックスの自動最適化を発表しました。これにより、大規模なベクトルデータベースをより高速かつ低コストで構築でき、検索品質、速度、コストの最適なトレードオフを実現するようにベクトルインデックスを自動的に最適化できます。 本日発表された新機能は以下のとおりです。 GPU アクセラレーション – GPU アクセラレーションを使用しない場合と比較して、最大 10 倍高速にベクトルデータベースを構築でき、インデックス作成コストを 4 分の 1 に削減できます。また、10 億規模のベクトルデータベースを 1 時間以内に作成できます。コスト削減と速度の大幅な向上により、市場投入までの時間、イノベーションの速度、大規模なベクトル検索の導入において優位性を得ることができます。 自動最適化 – ベクトルの専門知識がなくても、ベクトルフィールドの検索レイテンシー、品質、メモリ要件の最適なバランスを見つけることができます。この最適化により、デフォルトのインデックス設定と比較して、コスト削減と再現率の向上を実現できます。手動でのインデックスチューニングには数週間かかることがあります。 これらの機能を使用して、OpenSearch Service 上でベクトルデータベースをより高速かつコスト効率よく構築できます。生成 AI アプリケーション、製品カタログやナレッジベースの検索などに活用できます。GPU アクセラレーションと自動最適化は、新しい OpenSearch ドメインまたはコレクションを作成するとき、および既存のドメインまたはコレクションを更新するときに有効にできます。 それでは、仕組みを見ていきましょう! ベクトルインデックスの GPU アクセラレーション OpenSearch Service ドメインまたはサーバーレスコレクションで GPU アクセラレーションを有効にすると、OpenSearch Service はベクトルインデックス作成ワークロードを高速化する機会を自動的に検出します。このアクセラレーションにより、OpenSearch Service ドメインまたはサーバーレスコレクション内のベクトルデータ構造の構築が高速化されます。 GPU インスタンスをプロビジョニングしたり、使用状況を管理したり、アイドル時間に対して支払ったりする必要はありません。OpenSearch Service は、アクセラレーションされたワークロードをアカウント内のドメインまたはコレクションの Amazon Virtual Private Cloud (Amazon VPC) に安全に分離します。OpenSearch Compute Units (OCU) – Vector Acceleration の料金を通じて、実際の処理に対してのみ支払います。 GPU アクセラレーションを有効にするには、 OpenSearch Service コンソール に移動し、OpenSearch Service ドメインまたはサーバーレスコレクションを作成または更新するときに、 Advanced features セクションで Enable GPU Acceleration を選択します。 以下の AWS Command Line Interface (AWS CLI) コマンドを使用して、既存の OpenSearch Service ドメインで GPU アクセラレーションを有効にできます。 $ aws opensearch update-domain-config \ --domain-name my-domain \ --aiml-options '{"ServerlessVectorAcceleration": {"Enabled": true}}' GPU 処理用に最適化されたベクトルインデックスを作成できます。この例のインデックスは、 index.knn.remote_index_build.enabled を有効にすることで、テキスト埋め込み用の 768 次元ベクトルを格納します。 PUT my-vector-index { "settings": { "index.knn": true, "index.knn.remote_index_build.enabled": true }, "mappings": { "properties": { "vector_field": { "type": "knn_vector", "dimension": 768, }, "text": { "type": "text" } } } } これで、標準の OpenSearch Service オペレーションを使用して、bulk API でベクトルデータを追加し、インデックスを最適化できます。GPU アクセラレーションは、インデックス作成と force-merge オペレーションに自動的に適用されます。 POST my-vector-index/_bulk {"index": {"_id": "1"}} {"vector_field": [0.1, 0.2, 0.3, ...], "text": "Sample document 1"} {"index": {"_id": "2"}} {"vector_field": [0.4, 0.5, 0.6, ...], "text": "Sample document 2"} インデックス構築のベンチマークを実行したところ、GPU アクセラレーションによる速度向上は 6.4 倍から 13.8 倍の範囲でした。今後の投稿で、さらなるベンチマークと詳細をお届けする予定です。 詳細については、Amazon OpenSearch Service デベロッパーガイドの「 GPU acceleration for vector indexing 」を参照してください。 ベクトルデータベースの自動最適化 新しいベクトル取り込み機能を使用して、 Amazon Simple Storage Service (Amazon S3) からドキュメントを取り込み、ベクトル埋め込みを生成し、インデックスを自動的に最適化し、大規模なベクトルインデックスを数分で構築できます。取り込み中に、自動最適化は OpenSearch Service ドメインまたはサーバーレスコレクションのベクトルフィールドとインデックスに基づいて推奨事項を生成します。これらの推奨事項のいずれかを選択して、手動でマッピングを設定する代わりに、ベクトルデータセットをすばやく取り込んでインデックスを作成できます。 開始するには、 OpenSearch Service コンソール の左側のナビゲーションペインにある Ingestion メニューの下の Vector ingestion を選択します。 以下の手順で新しいベクトル取り込みジョブを作成できます。 データセットの準備 – S3 バケットに OpenSearch Service parquet ドキュメントを準備し、宛先としてドメインまたはコレクションを選択します。 インデックスの設定と最適化の自動化 – ベクトルフィールドを自動最適化するか、手動で設定します。 取り込みとインデックス作成の高速化 – OpenSearch Ingestion パイプラインを使用して、Amazon S3 から OpenSearch Service にデータをロードします。大規模なベクトルインデックスを最大 10 倍高速に、4 分の 1 のコストで構築できます。 ステップ 2 では、自動最適化ベクトルフィールドを使用してベクトルインデックスを設定します。自動最適化は現在、1 つのベクトルフィールドに制限されています。自動最適化ジョブが完了した後に、追加のインデックスマッピングを入力できます。 ベクトルフィールドの最適化設定は、ユースケースによって異なります。たとえば、高い検索品質(再現率)が必要で、より高速な応答が不要な場合は、 Latency requirements (p90) で Modest を選択し、 Acceptable search quality (recall) で 0.9 以上を選択します。ジョブを作成すると、ベクトルデータの取り込みとベクトルインデックスの自動最適化が開始されます。処理時間はベクトルの次元数によって異なります。 詳細については、OpenSearch Service デベロッパーガイドの「 Auto-optimize vector index 」を参照してください。 提供開始 Amazon OpenSearch Service の GPU アクセラレーションは、米国東部 (バージニア北部)、米国西部 (オレゴン)、アジアパシフィック (シドニー)、アジアパシフィック (東京)、欧州 (アイルランド) リージョンで利用可能になりました。OpenSearch Service の自動最適化は、米国東部 (オハイオ)、米国東部 (バージニア北部)、米国西部 (オレゴン)、アジアパシフィック (ムンバイ)、アジアパシフィック (シンガポール)、アジアパシフィック (シドニー)、アジアパシフィック (東京)、欧州 (フランクフルト)、欧州 (アイルランド) リージョンで利用可能になりました。 OpenSearch Service は、ベクトルデータベースのインデックス作成に使用された OCU – Vector Acceleration に対してのみ別途課金されます。詳細については、 OpenSearch Service の料金ページ をご覧ください。 ぜひお試しいただき、 AWS re:Post for Amazon OpenSearch Service または通常の AWS サポート窓口を通じてフィードバックをお寄せください。 — Channy 著者について Channy Yun (윤석찬) は、AWS News Blog のリードブロガーであり、AWS Cloud のプリンシパルデベロッパーアドボケイトです。オープンウェブの愛好家であり、根っからのブロガーとして、コミュニティ主導の学習とテクノロジーの共有を大切にしています。 この記事は Kiro が翻訳を担当し、ソリューションアーキテクト の 榎本 貴之 がレビューしました。
本記事は 2025年11月21日 に公開された「 Introducing Cluster Insights: Unified monitoring dashboard for Amazon OpenSearch Service clusters | AWS Big Data Blog 」を翻訳したものです。 Amazon OpenSearch Service クラスターは、CloudWatch や Amazon OpenSearch Service コンソールを通じてアクセスできる豊富な運用メトリクスを提供し、効果的なパフォーマンスモニタリングとアラート作成をサポートします。しかし、クラスター内の回復力やパフォーマンスの課題を特定することは困難な場合があります。リソースを大量に消費するクエリを特定したり、パフォーマンス低下の傾向を把握したりするプロセスには時間がかかることがあります。 これらの課題に対処するため、私たちは Cluster Insights をリリースしました。これは、厳選されたインサイトと実行可能な緩和手順を提供する統合ダッシュボードです。このダッシュボードは、ノード、インデックス、シャードレベルの詳細なメトリクスを表示し、最高の回復力と可用性を維持するためのセキュリティと回復力のベストプラクティスの簡潔なサマリーを提供します。 このブログでは、主要な機能とメトリクスを含む Cluster Insights のセットアップと使用方法について説明します。最後まで読むと、Cluster Insights を使用して OpenSearch Service クラスター内のパフォーマンスと回復力の問題を認識し、対処する方法を理解できるようになります。 Cluster Insights の使用開始 Cluster Insights は、OpenSearch バージョン 2.17 以降を実行している OpenSearch Service ユーザーに追加料金なしで利用できます。Cluster Insights にアクセスするには、OpenSearch ドメインの管理者レベルの権限が必要です。Cluster Insights は OpenSearch UI からのみ利用できます。OpenSearch UI は、複数のデータソースのサポート、ダッシュボードエクスペリエンスのゼロダウンタイムアップグレード、効果的なチームコラボレーションのためのキュレーションされたワークスペースを提供します。まず、データソース(クラスター)を OpenSearch UI アプリケーションに関連付ける必要があります。詳細な手順は ユーザーガイド に記載されています。OpenSearch UI コンソールのエクスペリエンスは、以下のスクリーンショットのようになります。 OpenSearch UI アプリケーションを使用して Cluster Insights にアクセスするには: Amazon OpenSearch Service コンソールで、OpenSearch UI (Dashboards) に移動し、Application URL を選択して OpenSearch UI アプリケーションにアクセスします。 OpenSearch UI アプリケーションで、左下隅の設定アイコンを選択し、 Data administration を選択します。 Data administration overview ページ、または左側のナビゲーションの Manage data の下で、 Cluster insights を選択します。 Cluster Insights の概要 Cluster insights – Overview は、接続されているすべての OpenSearch ドメインの健全性とインサイトを表示するランディングページとして機能します。5 つのセクションで構成されています: Current cluster status – クラスターの健全性ステータス(Green、Yellow、Red)をドーナツチャートで表示します。 Insights trend – 過去 30 日間の問題パターンを追跡し、新たな問題の特定と解決の進捗状況の追跡に役立ちます。この傾向分析は、運用変更の影響を監視したり、繰り返し発生する問題をトラブルシューティングしたりする際に特に価値があります。 Current open insights – クラスター全体で現在アクティブなインサイトの数と重大度の内訳を表示します。 OpenSearch service clusters – 健全性ステータス、インサイト数、ノード、シャード、アクティブなクエリなどの重要な統計情報とともに、すべてのドメインを一覧表示します。 Top insights by severity – 即座に対応が必要な問題を優先順位付けします。各インサイトには明確な説明と具体的な推奨事項が付属しており、複雑なモニタリングデータを実行可能なタスクに変換します。この優先順位付けされたビューにより、チームはシャードサイズの問題、ディスク容量の問題、パフォーマンスのボトルネックなど、重要な問題に最初に集中できます。 これらのセクションを組み合わせることで、OpenSearch Service インフラストラクチャの包括的なビューが提供され、単一のダッシュボードからクラスターの健全性を評価し、傾向を特定し、重要な問題に対処できます。 クラスターの健全性 Cluster insights – Overview ページの OpenSearch ドメインから特定のクラスターを選択すると、健全性ステータス、アクティブなインサイト、パフォーマンスメトリクスを含むクラスター固有の詳細が表示されます。概要セクションには、シャード、ノード、インデックスの数、合計ドキュメントサイズなどの重要なメトリクスとともにクラスターの健全性が表示されます。また、回復力とセキュリティの領域全体でドメインが従っている設定のベストプラクティスを確認することもできます。 下部のセクションには、現在の問題の詳細なビューを提示する実行可能なインサイトのテーブルが含まれています。このテーブルはランディングページのインサイトを反映していますが、選択したクラスターに影響を与える問題に特化しています。ディスク容量不足やシャード数の問題などの重大度の高い問題や、クラスターのパフォーマンスに影響を与える可能性のある中程度の重大度の懸念事項を確認できます。 各インサイトエントリはインタラクティブな要素として機能します。問題を選択すると、根本原因の特定と具体的な修復手順を含む詳細な分析が表示されます。テーブルには、生成タイムスタンプ、重大度レベル、推奨事項の数、現在のステータスなどの重要なメタデータが含まれているため、ユーザーは問題を効果的に優先順位付けして対処できます。 インサイトの詳細 すべてのインサイトは、詳細な分析と実行可能な推奨事項を提供します。 Shard Count インサイトを例にとると、選択すると問題の包括的な内訳が表示されます。OpenSearch クラスターが JVM ヒープサイズに基づいてノードで許可されているシャード数を超過していることと、影響を受けるリソースの詳細なリストが表示されます。 詳細ビューには、影響を受ける各ノードとインデックスを正確に特定するリソースマップが含まれており、ノード ID、シャード数、問題の原因となっているインデックスなどの重要な情報が表示されます。 推奨事項は 2 つのレベルで整理されています。クラスターレベルの推奨事項は、クラスターのスケーリングやグローバルシャード割り当て設定の調整など、全体的なアーキテクチャの改善に対処します。インデックスレベルの推奨事項は、個々のインデックスに対する具体的なアクションを提供します。たとえば、アイドル状態のシャードを UltraWarm ストレージに移動する提案が表示される場合があります。これらは、過去 10 日間に検索またはインデックス作成操作がなく、少なくとも 5 日以上経過しているシャードであり、アクティブなシャード数を減らすためにウォームストレージに移動する理想的な候補です。このガイダンスはすべて Cluster Insights インターフェース内で直接利用でき、異なるツールやコンソール間を切り替える必要がありません。 Node、Index、Shard、Query ビュー クラスターの健全性の横で、特定のクラスターの Node、Index、Shard、Query の詳細を確認できます。これらのビューは、リソース(CPU、メモリ、ディスク)使用率、検索およびインデックスのレイテンシーなどの重要なメトリクスを表示します。 Node ビュー Node view タブは、クラスター全体の個々のノードのパフォーマンスの包括的なビューを提供します。このテーブルには、全体的なノードの健全性を示すヒートスコア、リソース使用率(CPU、メモリ、ディスク)、検索およびインデックスのレイテンシーとレート、各ノードで実行されている上位 N 個のシャードとクエリを表示するクイックリンクなど、各ノードの重要なメトリクスが表示されます。 このビューは、リソース使用率が高いノードやパフォーマンスが低下しているノードを特定するのに役立ちます。ノード ID をクリックして各ノードをさらに詳しく調べ、時間の経過に伴うリソース使用量の傾向を示す詳細な時間ベースのメトリクスを表示できます。さらに、上位 N 個のシャードリンクをクリックすると、選択したノードで実行されているシャードのみを表示するように自動的にフィルタリングされた Shard View に直接移動でき、パフォーマンスの問題の原因となっている特定のシャードを特定できます。 Index ビュー Index view タブは、インデックスレベルで集計されたパフォーマンスメトリクスを表示します。各インデックスについて、ドキュメント数とストレージサイズ、検索のレイテンシーとレート、インデックスのレイテンシーとレート、インデックスに影響を与える上位 N 個のクエリへのアクセスを監視できます。この視点は、どのインデックスがクラスターの負荷を引き起こしているかを理解し、インデックス設定レベルでの最適化の機会を特定するのに役立ちます。 Shard ビュー Shard view タブは、個々のシャードのメトリクスを表示することで、クラスターパフォーマンスの最も詳細なビューを提供します。各行には、シャード ID と割り当てられたノード、インデックスの関連付けとリソースプレッシャーメトリクス(CPU、メモリ)、シャードごとの検索およびインデックスのレイテンシーが表示されます。この詳細なビューにより、パフォーマンスの問題を引き起こしている特定のシャードを特定し、シャード配置の不均衡を識別し、ターゲットを絞った修復アクションを実行できます。 Query ビュー Cluster insights ページの Query view は、すべてのクエリの実行統計、CPU とメモリの使用量、完了の進捗状況を分解するライブダッシュボードを提供します。これにより、最大のリソース消費を引き起こしているクエリ(上位 N 個のクエリ)を監視できます。ノード、インデックス、ユーザー別の分布を示す直感的なドーナツチャートとスコアボードにより、このインターフェースはオペレーターがパフォーマンスのボトルネックと重いワークロードを迅速に特定し、ターゲットを絞った最適化と自信を持ったスケーリングの決定をサポートします。 Query insights Cluster insights に加えて、Query insights を使用して、Expand、Query、Fetch フェーズ全体で実行されている正確なクエリとレイテンシーを表示することもできます。これにより、検索開発者がクエリをさらに微調整するための貴重なインサイトが得られます。 まとめ Cluster Insights は、OpenSearch Service クラスター管理を事後対応型のトラブルシューティングからプロアクティブな最適化へと変革します。ヒートスコアを備えた統合ダッシュボードと、安定性、回復力、セキュリティの柱全体にわたるベストプラクティスを提供することで、アカウントレベルで検索インフラストラクチャの可視性を提供します。 実行可能な推奨事項とステップバイステップの修復ガイダンスにより、あらゆる経験レベルのユーザーがシャードの不均衡やリソースのボトルネックなどの複雑な問題を効果的に解決できます。 Query insights との統合により、リソース消費パターンのリアルタイムの可視性が提供され、チームは詳細なプロファイリングとレイテンシー分析を通じてパフォーマンスに重要なクエリを特定して最適化できます。 詳細については、 AWS OpenSearch Service ユーザーガイド を参照してください。 著者について Siddhant Gupta は、AWS のシニアプロダクトマネージャー(テクニカル)で、OpenSearch の AI イノベーションをリードしています。技術的な専門知識に関係なく、高度な AI 機能を顧客がアクセスしやすく実用的なものにすることに注力しています。彼の仕事は、最先端の AI テクノロジーをスケーラブルでユーザーフレンドリーなソリューションにシームレスに統合することに重点を置いています。 Varunsrivathsa Venkatesha は、AWS のソフトウェア開発マネージャーで、Intelligent Domain Management チームをリードしています。Amazon OpenSearch Service のモニタリングおよびリカバリサービスに注力し、これらのサービスを活用して顧客にシームレスなドメイン管理エクスペリエンスを提供しています。 Gagandeep Juneja は、AWS のシニアソフトウェア開発エンジニアで、OpenSearch に取り組んでいます。 Jinhwan Hyon は、韓国ソウルを拠点とする AWS のスペシャリストソリューションアーキテクトで、Amazon OpenSearch Service に注力しています。データと分析に関心があり、顧客が AI をデータ戦略に統合するのを支援することに情熱を持っています。特に生成 AI とインテリジェントエージェントに魅了されており、これらのテクノロジーが意思決定を革新し、複雑なビジネス課題を解決する方法を探求しています。 この記事は Kiro が翻訳を担当し、ソリューションアーキテクト の 榎本 貴之 がレビューしました。
本記事は 2025年11月11日 に公開された「 Introducing the Amazon OpenSearch Lens for the AWS Well-Architected Framework | AWS Big Data Blog 」を翻訳したものです。 今年初め、AWS は AWS Well-Architected ホワイトペーパーである Amazon OpenSearch Service レンズ をリリースしました。AWS Well-Architected フレームワークは、アーキテクチャを評価し、スケーラブルな設計を実装するための一貫したアプローチを提供します。このフレームワークを使用して、Amazon OpenSearch Service レンズは AWS Well-Architected レビューを実施し、OpenSearch Service デプロイメントの技術的リスクを評価・特定する方法を概説しています。 この記事では、Amazon OpenSearch Service レンズを使用して、OpenSearch Service ワークロードをアーキテクチャのベストプラクティスに照らして評価する方法を紹介します。 AWS Well-Architected フレームワークの理解 AWS では、適切に設計されたクラウド環境は、ビジネス成果の達成を支援するための基盤となります。AWS Well-Architected フレームワークは、AWS がさまざまな業界の組織と協力して得た集合的な経験を、アーキテクチャを評価し、時間とともにスケールする設計を実装するための構造化されたアプローチとして凝縮したものです。AWS Well-Architected フレームワークは、運用上の優秀性、セキュリティ、信頼性、パフォーマンス効率、コスト最適化、持続可能性の 6 つの柱で構成されています。このフレームワークを使用することで、クラウドアーキテクト、システムビルダー、エンジニア、開発者は、アプリケーションとワークロードのための安全で高性能、回復力があり、効率的なインフラストラクチャを構築できます。 OpenSearch Service レンズ OpenSearch Service レンズは、Amazon OpenSearch Service をクラウドネイティブなアプローチで使用するための、お客様実証済みの設計原則とベストプラクティスのコレクションです。これらの推奨事項は、AWS がお客様、AWS パートナー、コミュニティ、および AWS OpenSearch テクニカルスペシャリストコミュニティから収集した知見に基づいています。 OpenSearch Service レンズは AWS Well-Architected フレームワークを拡張し、Amazon OpenSearch ワークロードに固有の重要なアーキテクチャ上の質問に対処するのに役立ちます。例えば: 最適なパフォーマンスのために Amazon OpenSearch Service ドメインをどのようにサイジングおよび設定しますか? コストとアクセシビリティのバランスを取るために、どのようなデータ保持およびライフサイクル管理戦略が役立ちますか? 検索機能を維持しながら機密データを保護するセキュリティコントロールをどのように実装しますか? データ量が増加しても信頼性の高い検索エクスペリエンスを確保するための運用プラクティスは何ですか? OpenSearch Service レンズは、モノのインターネット(IoT)、ゲーム、人工知能(AI)と機械学習(ML)、SAP、サーバーレステクノロジーなどの専門的なワークロードに焦点を当てた AWS Well-Architected レンズのコレクションに加わります。 このレンズは、評価と改善のための最も一般的な領域のいくつかを強調しています。AWS Well-Architected フレームワークの 6 つの柱全体にわたって整合し、洞察を提供するように設計されています: 運用上の優秀性 は、ビジネス価値を提供するためのシステムの実行と監視、およびプロセスと手順の継続的な改善に焦点を当てています。このトピックには、開発をサポートしワークロードを効果的に実行する能力、運用に関する洞察を得ること、およびビジネス価値を提供するためのサポートプロセスの継続的な改善が含まれます。 セキュリティ は、データとシステムの保護に焦点を当てています。これは、ユーザーとアプリケーションのための きめ細かなアクセス制御 の実装、暗号化とネットワーク制御によるドメインアクセスの保護、脆弱性の検出と軽減、潜在的な攻撃対象領域の削減、および機密データの保護に対処します。 信頼性 は、エンドユーザー環境が期待どおりに正しく一貫して動作することを確保することに焦点を当てています。このトピックには、自動災害復旧メカニズムの実装、高可用性のための マルチアベイラビリティーゾーンデプロイメント の設計、需要に応じた ドメイン容量のスケーリング 、および人的エラーを削減するための運用タスクの自動化が含まれます。また、 バックアップとリストア戦略の実装 、クラスター状態の管理、およびサービスのパフォーマンスと可用性を維持するための監視とアラートの設定もカバーしています。 パフォーマンス効率 は、Amazon OpenSearch Service リソースの効果的な使用に焦点を当てています。これには、ワークロード要件に基づいた適切なインスタンスタイプとストレージオプションの選択、パフォーマンス監視と最適化戦略の実装、および運用オーバーヘッドを削減するための OpenSearch Service 機能の使用が含まれます。また、ドメイン設定のチューニング、データインデックスパターンの管理、およびコスト効率を維持しながら最高のパフォーマンスを達成するための検索と分析クエリの最適化もカバーしています。 コスト最適化 は、費用の効果的な管理に焦点を当てています。このトピックでは、ワークロードごとにドメイン費用を追跡するためのコスト配分タグの実装、ニーズに基づいた適切なインスタンスタイプとストレージオプションの選択、および予測可能なワークロードのためのリザーブドインスタンスなどのコスト効率の高い支払いオプションの選択に対処します。また、アクセス頻度の低いデータのための UltraWarm およびコールドストレージ階層の使用、ストレージコストを管理するためのインデックスライフサイクルポリシーの実装、およびドメインの適正サイズ化とパフォーマンス対コスト比の最適化のための使用パターンの監視もカバーしています。 持続可能性 は、クラウドワークロードの実行による環境への影響を最小限に抑えることに焦点を当てています。OpenSearch のトピックでは、効率的なドメインサイジング戦略の実装、パフォーマンス対エネルギー比が最も優れたインスタンスタイプの選択、およびアクティブなコンピューティングフットプリントを削減するための保持ポリシーの最適化と異なるストレージ階層の使用に対処します。 このレンズを Amazon OpenSearch Service ワークロードに適用することで、一般的なアーキテクチャ原則を超えて、検索と分析の実装の特性に対処する洞察を得ることができます。OpenSearch Service レンズは、新しい Amazon OpenSearch Service アーキテクチャの設計や既存のデプロイメントの最適化において、AWS のベストプラクティスに沿ったアーキテクチャ上の意思決定を行うための一貫したフレームワークを提供します。 OpenSearch レンズの使用開始 Amazon OpenSearch Service レンズを使い始めるには、AWS Well-Architected フレームワークの 6 つの柱(運用上の優秀性、セキュリティ、信頼性、パフォーマンス効率、コスト最適化、持続可能性)を確認してください。 次に、AWS マネジメントコンソールにサインインし、 AWS Well-Architected Tool を開きます。カスタムレンズに移動し、Amazon OpenSearch Service レンズをインポートします。レンズをインポートした後、専門的なアンケートを使用して OpenSearch Service ワークロードをベストプラクティスに照らして評価でき、アンケートを完了すると、洞察に富んだフィードバックを得ることができます。 次に、チームとアーキテクチャレビューを計画し、レンズの基準を使用して Amazon OpenSearch Service ドメインを評価します。うまく機能している点とデプロイメントを改善できる点を含め、評価結果を文書化します。Amazon OpenSearch Service レンズの質問を理解するためのヘルプについては、 レンズのドキュメント を参照してください。 AWS サポートプラン をお持ちの場合は、アーキテクチャレビューのサポートをリクエストできます。OpenSearch Service レンズの質問は、知識をテストするためではなく、アーキテクチャ上の意思決定をガイドすることを目的としています。各質問の背後にあるアーキテクチャ原則を理解することに焦点を当ててください。評価を完了したら、ワークロードのパフォーマンス、データの耐久性、およびコスト効率に影響を与える可能性のある発見事項に対処する優先順位付けされた改善計画を作成します。これらの改善の実装についてのヘルプが必要な場合は、AWS プロフェッショナルサービスまたは Amazon OpenSearch Service を専門とする AWS パートナーと協力できます。 まとめと次のステップ Amazon OpenSearch Service レンズは、ビジネス要件に沿った適切に設計された検索と分析ワークロードを構築するための実用的なガイダンスを提供します。AWS Well-Architected Tool にアクセスし、このレンズを OpenSearch Service ドメインに適用することから始めてください。アーキテクチャレビューを開発プロセスの定期的な一部にしてください。他の人が OpenSearch Service の実装を改善するのに役立つよう、AWS コミュニティと経験を共有することを検討してください。 AWS Well-Architected レンズの詳細については、 AWS Well-Architected Tool ユーザーガイド を参照してください。この専門的なガイダンスをアーキテクチャレビューに組み込み、AWS 上の検索と分析ワークロードの継続的な改善を推進するために使用することをお勧めします。 AWS は、新しいサービス機能とアーキテクチャのベストプラクティスを反映するために、Amazon OpenSearch Service レンズを定期的に更新しています。これらの更新により、アーキテクチャの卓越性を維持しながら、Amazon OpenSearch Service の最新の改善を活用できます。 お客様の成功事例や追加リソースを含む Amazon OpenSearch Service の詳細については、 Amazon OpenSearch Service ページをご覧ください。 著者について Muslim Abu-Taha は、アラブ首長国連邦ドバイを拠点とする Amazon OpenSearch のシニアワールドワイドスペシャリストソリューションアーキテクトです。ヨーロッパ、中東、アフリカのお客様と協力し、AWS OpenSearch ワークロードの導入とスケーリングをサポートしています。 Shih-Yong Wang は、台湾の AWS のソリューションアーキテクトです。20 年以上の IT 専門知識を活用して、さまざまな業界のお客様を支援しています。AWS サービスを戦略的に活用することで、ビジネス価値を促進し、イノベーションの無限の機会を創出するお手伝いをしています。 貢献者 著者は、この新しい AWS Well-Architected フレームワーク用 OpenSearch レンズの開発に貴重な協力をいただいた以下の方々に感謝いたします:Muslim Abu-Taha(Amazon OpenSearch シニアワールドワイドスペシャリストソリューションアーキテクト)、Shih-Yong Wang(ソリューションアーキテクチャマネージャー)、Ankush Agarwal(ソリューションアーキテクト)、Jun-Tin Yeh(クラウド最適化サクセスソリューションアーキテクト)。 また、技術レビューに貢献いただいた以下の方々にも感謝いたします:Cedric Pelvet(プリンシパル OpenSearch ソリューションアーキテクト)、Hajer Bouafif(シニア OpenSearch ソリューションアーキテクト)、Francisco Losada(OpenSearch ソリューションアーキテクト)、Bharav Patel(OpenSearch ソリューションアーキテクト)、Praveen Prasad(シニアスペシャリストテクニカルアカウントマネージャー)。 この記事は Kiro が翻訳を担当し、ソリューションアーキテクトの榎本 貴之がレビューしました。
本記事は 2025年10月28日 に公開された「 Amazon Kinesis Data Streams now supports 10x larger record sizes: Simplifying real-time data processing | AWS Big Data Blog 」を翻訳したものです。 Amazon Kinesis Data Streams で、レコードサイズの上限が従来の 10 倍となる 10MiB までサポートされるようになりました。この機能強化により、既存の Kinesis Data Streams API をそのまま使用しながら、断続的に発生する大きなデータペイロードをデータストリームに送信できるようになりました。また、 PutRecords リクエストの最大サイズも 5MiB から 10MiB に 2 倍に拡大され、IoT 分析、変更データキャプチャ(CDC)、生成 AI ワークロードにおけるデータパイプラインの簡素化と運用オーバーヘッドの削減が実現します。 この記事では、Amazon Kinesis Data Streams の大規模レコードサポートについて、主なユースケース、最大レコードサイズの設定、スロットリングの考慮事項、最適なパフォーマンスのためのベストプラクティスを解説します。 実際のユースケース データ量の増加とユースケースの進化に伴い、ストリーミングワークロードでより大きなレコードサイズをサポートする需要が高まっています。従来、1MiB を超えるレコードを処理する必要がある場合、以下の 2 つの選択肢がありました。 プロデューサーアプリケーションで大きなレコードを複数の小さなレコードに分割し、コンシューマーアプリケーションで再構成する 大きなレコードを Amazon Simple Storage Service (Amazon S3) に保存し、メタデータのみを Kinesis Data Streams 経由で送信する これらのアプローチは有用ですが、データパイプラインに複雑さを加え、追加のコードが必要となり、運用オーバーヘッドが増加し、特に断続的に大きなレコードをストリーミングする必要がある場合にエラー処理やデバッグが複雑になります。 この機能強化により、さまざまな業界やユースケースで断続的なデータペイロードを扱うお客様の使いやすさが向上し、運用オーバーヘッドが削減されます。IoT 分析の分野では、コネクテッドカーや産業機器が生成するセンサーテレメトリデータの量が増加しており、個々のテレメトリレコードのサイズが従来の Kinesis の 1MiB 制限を超えることがあります。これにより、お客様は大きなレコードを複数の小さなレコードに分割したり、大きなレコードを別途保存してメタデータのみを Kinesis 経由で送信するなど、複雑な回避策を実装する必要がありました。同様に、データベースの変更データキャプチャ(CDC)パイプラインでは、特に一括操作やスキーマ変更時に大きなトランザクションレコードが生成されることがあります。機械学習と生成 AI の分野では、より豊富な特徴セットや音声・画像などのマルチモーダルデータタイプをサポートするために、より大きなペイロードの取り込みが求められるようになっています。Kinesis のレコードサイズ制限が 1MiB から 10MiB に引き上げられたことで、これらの複雑な回避策の必要性が軽減され、IoT、CDC、高度な分析のユースケースにおけるデータパイプラインの簡素化と運用オーバーヘッドの削減が実現します。お客様は、使い慣れた Kinesis API を使用して、これらの断続的な大規模データレコードをより簡単に取り込み、処理できるようになりました。 仕組み より大きなレコードの処理を開始するには: AWS コンソール、AWS CLI、または AWS SDK を使用して、ストリームの最大レコードサイズ制限( maxRecordSize )を更新します。 プロデューサーでは引き続き同じ PutRecord および PutRecords API を使用します。 コンシューマーでは引き続き同じ GetRecords または SubscribeToShard API を使用します。 ストリームは数秒間 Updating ステータスになった後、より大きなレコードを取り込む準備が整います。 使用開始 Kinesis Data Streams でより大きなレコードの処理を開始するには、AWS マネジメントコンソール、CLI、または SDK を使用して最大レコードサイズを更新できます。 AWS マネジメントコンソールでの手順: Kinesis Data Streams コンソールに移動します。 ストリームを選択し、 設定 タブを選択します。 最大レコードサイズ の横にある 編集 を選択します。 希望する最大レコードサイズ(最大 10MiB)を設定します。 変更を保存します。 注意: この設定は、この Kinesis データストリームの最大レコードサイズのみを調整します。この制限を引き上げる前に、すべてのダウンストリームアプリケーションがより大きなレコードを処理できることを確認してください。 Kinesis Client Library(バージョン 2.x 以降)、 Amazon Data Firehose から Amazon S3 への配信、 AWS Lambda など、一般的なコンシューマーのほとんどは 1MiB を超えるレコードの処理をサポートしています。詳細については、 大規模レコードに関する Amazon Kinesis Data Streams のドキュメント を参照してください。 AWS CLI を使用してこの設定を更新することもできます: aws kinesis update-max-record-size \ --stream-arn <stream-arn> \ --max-record-size-in-ki-b 5000 または AWS SDK を使用する場合: import boto3 client = boto3.client('kinesis') response = client.update_max_record_size( StreamARN='arn:aws:kinesis:us-west-2:123456789012:stream/my-stream', MaxRecordSizeInKiB=5000 ) スロットリングと最適なパフォーマンスのためのベストプラクティス 大規模レコードのサポートにおいても、個々のシャードのスループット制限(書き込み 1MiB/秒、読み取り 2MiB/秒)は変更されません。大規模レコードを扱うために、スロットリングの仕組みを理解しましょう。ストリーム内の各シャードは 1MiB/秒のスループット容量を持っています。大規模レコードに対応するため、各シャードは一時的に最大 10MiB/秒までバーストし、最終的には平均 1MiB/秒に収束します。この動作を視覚化するために、各シャードが 1MiB/秒で補充される 容量タンク を持っていると考えてください。大きなレコード(例えば 10MiB のレコード)を送信した後、タンクはすぐに補充を開始し、容量が利用可能になるにつれて小さなレコードを送信できるようになります。大規模レコードをサポートするこの容量は、ストリームに継続的に補充されます。補充速度は、大規模レコードのサイズ、ベースラインレコードのサイズ、全体的なトラフィックパターン、選択したパーティションキー戦略によって異なります。大規模レコードを処理する際、各シャードはバースト容量を活用してこれらの大きなペイロードを処理しながら、ベースライントラフィックの処理を継続します。 Kinesis Data Streams が異なる割合の大規模レコードをどのように処理するかを説明するために、簡単なテストの結果を見てみましょう。テスト構成として、オンデマンドストリーム(デフォルトで 4 シャード)に 1 秒あたり 50 レコードの速度でデータを送信するプロデューサーを設定しました。ベースラインレコードは 10KiB、大規模レコードは 2MiB です。大規模レコードの割合を総ストリームトラフィックの 1% から 5% まで段階的に増加させる複数のテストケースと、大規模レコードを含まないベースラインケースを実施しました。一貫したテスト条件を確保するため、大規模レコードを時間的に均等に分散させました。例えば、1% のシナリオでは、100 件のベースラインレコードごとに 1 件の大規模レコードを送信しました。以下のグラフは結果を示しています: グラフでは、水平方向の注釈がスロットリング発生のピークを示しています。青い線で表されるベースラインシナリオでは、スロットリングイベントは最小限です。大規模レコードの割合が 1% から 5% に増加するにつれて、ストリームがデータをスロットリングする頻度が増加し、2% と 5% のシナリオ間でスロットリングイベントが顕著に加速しています。このテストは、Kinesis Data Streams が増加する大規模レコードの割合をどのように管理するかを示しています。 最適なパフォーマンスのために、大規模レコードを総レコード数の 1〜2% に維持することをお勧めします。本番環境では、実際のストリーム動作は、ベースラインレコードのサイズ、大規模レコードのサイズ、大規模レコードがストリームに出現する頻度という 3 つの主要な要因に基づいて異なります。特定の動作を判断するために、実際の需要パターンでテストすることをお勧めします。 オンデマンドストリームでは、シャードあたりの受信トラフィックが 500 KB/秒を超えると、15 分以内にシャードが分割されます。親シャードのハッシュキー値は子シャードに均等に再分配されます。Kinesis はストリームを自動的にスケーリングしてシャード数を増やし、採用されているパーティションキー戦略に応じて大規模レコードをより多くのシャードに分散できるようにします。 大規模レコードで最適なパフォーマンスを得るために: ランダムなパーティションキー戦略を使用して、大規模レコードをシャード間で均等に分散させます。 プロデューサーアプリケーションにバックオフとリトライロジックを実装します。 シャードレベルのメトリクスを監視して、潜在的なボトルネックを特定します。 大規模レコードを継続的にストリーミングする必要がある場合は、Amazon S3 を使用してペイロードを保存し、メタデータ参照のみをストリームに送信することを検討してください。詳細については、 Amazon Kinesis Data Streams での大規模レコードの処理 を参照してください。 まとめ Amazon Kinesis Data Streams で、レコードサイズの上限が従来の 1MiB から 10 倍の 10MiB までサポートされるようになりました。この機能強化により、複雑な回避策が不要になり、IoT 分析、変更データキャプチャ、AI/ML ワークロードのデータパイプラインが簡素化されます。既存の Kinesis Data Streams API をコード変更なしでそのまま使用でき、断続的な大規模ペイロードの処理における柔軟性が向上します。 最適なパフォーマンスのために、大規模レコードを総レコード数の 1〜2% に維持することをお勧めします。 大規模レコードで最良の結果を得るには、均等に分散されたパーティションキー戦略を実装してレコードをシャード間で均等に分散させ、プロデューサーアプリケーションにバックオフとリトライロジックを含め、シャードレベルのメトリクスを監視して潜在的なボトルネックを特定してください。 最大レコードサイズを引き上げる前に、すべてのダウンストリームアプリケーションとコンシューマーがより大きなレコードを処理できることを確認してください。 この機能を活用して、より強力で効率的なストリーミングアプリケーションを構築されることを楽しみにしています。詳細については、 Amazon Kinesis Data Streams のドキュメント をご覧ください。 著者について Sumant Nemmani は Amazon Kinesis Data Streams のプロダクトマネージャーです。お客様から学ぶことに情熱を持ち、AWS で価値を引き出すお手伝いをすることを楽しんでいます。仕事以外では、バンド Project Mishram で音楽を作ったり、旅行中に歴史や食べ物を探索したり、テクノロジーや歴史に関する長編ポッドキャストを聴いたりしています。 Umesh Chaudhari は AWS のシニアストリーミングソリューションアーキテクトです。お客様と協力してリアルタイムデータ処理システムの設計と構築を行っています。データ分析システムのアーキテクチャ設計、設計、開発を含むソフトウェアエンジニアリングの豊富な経験を持っています。仕事以外では、旅行やテクノロジートレンドのフォローを楽しんでいます。 Pratik Patel はシニアテクニカルアカウントマネージャーであり、ストリーミング分析のスペシャリストです。AWS のお客様と協力し、ベストプラクティスを使用したソリューションの計画と構築を支援する継続的なサポートと技術ガイダンスを提供し、お客様の AWS 環境を運用上健全に保つことに積極的に取り組んでいます。 この記事は Kiro が翻訳を担当し、ソリューションアーキテクト の 榎本 貴之 がレビューしました。
本記事は 2025年11月10日 に公開された「 Amazon MSK Express brokers now support Intelligent Rebalancing for 180 times faster operation performance | AWS Big Data Blog 」を翻訳したものです。 本日より、 Amazon Managed Streaming for Apache Kafka (Amazon MSK) Provisioned クラスターで Express ブローカー を使用するすべての新規クラスターで、追加料金なしで Intelligent Rebalancing がサポートされます。この新機能により、Apache Kafka クラスターのスケールアップまたはスケールダウン時に自動的なパーティションバランシング操作を実行できます。Intelligent Rebalancing は、Express ブローカーを使用する Amazon MSK クラスターの Kafka リソースを最適にリバランスすることで、キャパシティ使用率を最大化し、パフォーマンスを向上させます。これにより、パーティションを個別に管理したり、サードパーティツールを使用したりする必要がなくなります。Amazon MSK Express ブローカーの Intelligent Rebalancing は、Standard ブローカーと比較して最大 180 倍高速にこれらの操作を実行します。 Amazon MSK Express ブローカーは、使いやすさ、クラス最高の価格性能比、予測可能な可用性を実現するために Apache Kafka を再設計し、 2024年11月 にリリースしました。Amazon MSK Express ブローカーは、Apache Kafka を実行する Standard ブローカーと比較して、ブローカーあたり最大 3 倍のスループットを提供し、最大 20 倍高速にスケールし、復旧時間を 90% 短縮するように設計されています。リリース以降、Amazon MSK Express ブローカーを 追加の AWS リージョン やインスタンスタイプに拡大し、最近では Express ブローカーあたりのパーティション数を 5 倍に増加 し、パーティションに制約されるワークロードの価格性能比を最大 50% 向上させました。 Intelligent Rebalancing により、Amazon MSK Express ブローカークラスターは、クラスターパフォーマンスを最大化するためのインテリジェントな Amazon MSK のデフォルト設定に基づいて、リソースの不均衡や過負荷を継続的に監視されます。必要に応じて、クライアントがデータを生成および消費するためのクラスターの可用性に影響を与えることなく、ブローカーが効率的にスケールされます。お客様は、クラスター管理操作を簡素化しながら、Express ブローカー向け Amazon MSK Provisioned クラスターのスケーリングとパフォーマンスのメリットを最大限に活用できるようになりました。 この記事では、Intelligent Rebalancing 機能を紹介し、操作パフォーマンスを向上させる仕組みの例を示します。 Intelligent Rebalancing を使用するタイミング Intelligent Rebalancing により、Amazon MSK Express ブローカーは、追加のツールや設定を必要とせずに、Kafka クラスターを管理およびスケールするための完全に自動化されたソリューションを提供するようになりました。Intelligent Rebalancing は、すべての新しい Amazon MSK Express ブローカークラスターでデフォルトで有効になっているため、常に有効にしておくことをお勧めします。Intelligent Rebalancing は、Amazon MSK のベストプラクティスを使用して、以下の状況で自動リバランシングをトリガーします。 クラスターのスケールインとスケールアウト : お客様が Amazon MSK Express ブローカークラスターにブローカーを 追加 または 削除 すると、Intelligent Rebalancing は自動的にパーティションを再分散し、ブローカー間でリソース使用率のバランスを取ります。これにより、クラスターは最高のパフォーマンスで動作し続け、単一の更新操作でスケールインとスケールアウトが可能になります。 定常状態のリバランシング : 通常の運用中でも、Intelligent Rebalancing は Amazon MSK Express ブローカークラスターを継続的に監視し、リソースの不均衡やホットスポットを検出するとリバランシングをトリガーします。たとえば、パーティションの不均等な分散や偏ったトラフィックパターンにより特定のブローカーが過負荷になった場合、Intelligent Rebalancing は自動的にパーティションを使用率の低いブローカーに移動してバランスを回復します。 Intelligent Rebalancing の使用方法 Intelligent Rebalancing の威力を示すために、Amazon MSK Express ブローカークラスターでいくつかのテストを実行してみましょう。 スケーリングテスト : まず、3 つのブローカーを持つ Amazon MSK Express ブローカークラスターを作成します。次に、ワークロードの急激な増加をシミュレートするために、クラスターを 6 つのブローカーに急速にスケールアップし、その後 3 つのブローカーに戻します。 Intelligent Rebalancing が有効になっていると、パーティションのリバランシングが 5〜10 分以内に完了し、クラスターがパフォーマンスを低下させることなく増加したスループットを維持できることがわかります。 RebalanceInProgress メトリクスを使用して、現在および過去のリバランシング操作を追跡できます。下の画像では、このリバランシング中にプロデューサー側のクライアントが影響を受けていないことも確認できます。 次に、トラフィックの大部分を単一のブローカーに向けることで、クラスターに不均衡を作成します。Intelligent Rebalancing がこの不均衡を数分以内に検出し、自動的にパーティションを再分散して、クラスターを最適な状態に復元することがわかります。 Intelligent Rebalancing 機能はホットスポットを検出し、影響を受けたパーティションを他のブローカーに自動的に再分散して、リソース使用率を最適化します。Intelligent Rebalancing がなければ、リソースの不均衡は持続し、パフォーマンスの問題やお客様による手動介入の必要性につながる可能性があります。 これらのテストは、Amazon MSK Express ブローカーの Intelligent Rebalancing により、さまざまなワークロード条件下でも一貫して高いパフォーマンスを維持しながら、Kafka クラスターをシームレスにスケールできることを示しています。 まとめ Express ブローカーを使用する Amazon MSK Provisioned クラスター向けの Intelligent Rebalancing は、今後数週間にわたって Amazon MSK Express ブローカーがサポートされているすべての AWS リージョン で展開されています。この機能は、Express ブローカーを使用するすべての新しい Amazon MSK Provisioned クラスターで追加料金なしで自動的に有効になります。 開始するには、Amazon MSK コンソールにアクセスしてください。詳細については、 Amazon MSK デベロッパーガイド を参照してください。 著者について Swapna Bandla は、AWS のシニアストリーミングソリューションアーキテクトです。リアルタイムデータ処理と分析に関する深い理解を持ち、AWS Well-Architected のベストプラクティスに沿ったスケーラブルでクラウドネイティブなソリューションの設計においてお客様をサポートしています。Swapna は、組織がデータの可能性を最大限に引き出してビジネス価値を創出することを支援することに情熱を注いでいます。仕事以外では、家族との時間を大切にしています。 Masudur Rahaman Sayem は、AWS のストリーミングデータアーキテクトで、IT 業界で 25 年以上の経験があります。世界中の AWS のお客様と協力して、複雑なビジネス課題に対応する高度なデータストリーミングソリューションを設計・実装しています。分散アーキテクチャに強い関心と情熱を持ち、インターネット規模のエンタープライズグレードソリューションの設計に活かしています。 Shakhi Hali は、AWS の Amazon Managed Streaming for Apache Kafka (Amazon MSK) のプリンシパルプロダクトマネージャーです。お客様がリアルタイムデータからビジネス価値を生み出すことを支援することに情熱を注いでいます。MSK に参加する前は、Amazon S3 のプロダクトマネージャーでした。余暇には、旅行、料理、家族との時間を楽しんでいます。 この記事は Kiro が翻訳を担当し、ソリューションアーキテクト の 榎本 貴之 がレビューしました。