<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/">
    <channel>
        <title>AWSops 사용자 가이드 Blog</title>
        <link>https://www.atomai.click/awsops/ja/whatsnew</link>
        <description>AWSops 사용자 가이드 Blog</description>
        <lastBuildDate>Wed, 17 Jun 2026 00:00:00 GMT</lastBuildDate>
        <docs>https://validator.w3.org/feed/docs/rss2.html</docs>
        <generator>https://github.com/jpmonette/feed</generator>
        <language>ja</language>
        <item>
            <title><![CDATA[v2.0.0 — 新アーキテクチャの上に建て直した AWSops]]></title>
            <link>https://www.atomai.click/awsops/ja/whatsnew/2026/06/17/v2.0.0</link>
            <guid>https://www.atomai.click/awsops/ja/whatsnew/2026/06/17/v2.0.0</guid>
            <pubDate>Wed, 17 Jun 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[Terraform ベースの MSA へ全面再構築 — 非公開エッジ（CloudFront VPC Origin → 内部 ALB → Fargate）、Aurora 永続状態、アプリ内ログイン、AgentCore セクションエージェント、非同期ワーカー。ストリーミング AI アシスタント・AI 診断・トポロジー・EKS・テーマ・モバイルを全面強化。]]></description>
            <content:encoded><![CDATA[<p>AWSops を<strong>新しいアーキテクチャの上にゼロから建て直した v2.0.0</strong> をリリースします。単一 EC2 モノリシックを <strong>Terraform ベースの MSA</strong> に再構築し、その上で AI アシスタント・AI 診断・トポロジー・EKS・コストなど、ほぼすべての画面を作り直しました。ユーザー視点では、専用ドメイン・アプリ内ログイン・テーマ・モバイルまで、体験全体が新しくなっています。</p>
<div class="theme-admonition theme-admonition-tip admonition_xJq3 alert alert--success"><div class="admonitionHeading_Gvgb"><span class="admonitionIcon_Rf37"><svg viewBox="0 0 12 16"><path fill-rule="evenodd" d="M6.5 0C3.48 0 1 2.19 1 5c0 .92.55 2.25 1 3 1.34 2.25 1.78 2.78 2 4v1h5v-1c.22-1.22.66-1.75 2-4 .45-.75 1-2.08 1-3 0-2.81-2.48-5-5.5-5zm3.64 7.48c-.25.44-.47.8-.67 1.11-.86 1.41-1.25 2.06-1.45 3.23-.02.05-.02.11-.02.17H5c0-.06 0-.13-.02-.17-.2-1.17-.59-1.83-1.45-3.23-.2-.31-.42-.67-.67-1.11C2.44 6.78 2 5.65 2 5c0-2.2 2.02-4 4.5-4 1.22 0 2.36.42 3.22 1.19C10.55 2.94 11 3.94 11 5c0 .66-.44 1.78-.86 2.48zM4 14h5c-.23 1.14-1.3 2-2.5 2s-2.27-.86-2.5-2z"></path></svg></span>主な変更点</div><div class="admonitionContent_BuS1"><p><strong>Terraform MSA 移行（ECS Fargate + Aurora）</strong> · <strong>非公開エッジ + アプリ内ログイン（RS256）</strong> · <strong>ストリーミング AI アシスタント（ドメイン自動ルーティング・スレッド永続化）</strong> · <strong>AI 診断レポート（深度選択 · MD/DOCX/PDF）</strong> · <strong>リクエストフロー トポロジーグラフ</strong> · <strong>EKS フリート + イン・クラスター照会</strong> · <strong>3 種テーマ + モバイルレスポンシブ</strong></p></div></div>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="新アーキテクチャ全面再構築">新アーキテクチャ（全面再構築）<a href="https://www.atomai.click/awsops/ja/whatsnew/2026/06/17/v2.0.0#%E6%96%B0%E3%82%A2%E3%83%BC%E3%82%AD%E3%83%86%E3%82%AF%E3%83%81%E3%83%A3%E5%85%A8%E9%9D%A2%E5%86%8D%E6%A7%8B%E7%AF%89" class="hash-link" aria-label="新アーキテクチャ（全面再構築）への直接リンク" title="新アーキテクチャ（全面再構築）への直接リンク" translate="no">​</a></h2>
<p>v1 の単一 EC2 ホスト（ビルド・運用・ローカル状態が一箇所に集約されていた構造）を解消し、コンポーネントを独立してデプロイ・スケールできる構造に再設計しました。</p>
<table><thead><tr><th>領域</th><th>内容</th></tr></thead><tbody><tr><td><strong>IaC</strong></td><td>CDK → <strong>Terraform</strong>（S3 backend）</td></tr><tr><td><strong>コンピュート</strong></td><td>単一 EC2 → <strong>ECS Fargate</strong>（web/worker 分離、arm64）</td></tr><tr><td><strong>データ</strong></td><td>ローカル状態 → <strong>Aurora Serverless v2 (PostgreSQL 17)</strong> で永続化</td></tr><tr><td><strong>エッジ</strong></td><td>公開 ALB → <strong>CloudFront VPC Origin → 内部 ALB → Fargate</strong>（公開 ALB なし、TLS end-to-end）</td></tr><tr><td><strong>認証</strong></td><td>エッジ exp-only → <strong>Cognito + Lambda@Edge RS256 JWKS 検証</strong></td></tr><tr><td><strong>長時間タスク</strong></td><td>イン・プロセス → <strong>非同期ワーカーティア</strong>（SQS + Step Functions + Lambda/Fargate）</td></tr><tr><td><strong>パス</strong></td><td><code>/awsops</code> プレフィックス → <strong>ルートパス（<code>/</code>）</strong>、専用ドメイン</td></tr></tbody></table>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="新しくなった体験">新しくなった体験<a href="https://www.atomai.click/awsops/ja/whatsnew/2026/06/17/v2.0.0#%E6%96%B0%E3%81%97%E3%81%8F%E3%81%AA%E3%81%A3%E3%81%9F%E4%BD%93%E9%A8%93" class="hash-link" aria-label="新しくなった体験への直接リンク" title="新しくなった体験への直接リンク" translate="no">​</a></h2>
<ul>
<li class=""><strong>アプリ内ログイン</strong> — 独自の <code>/login</code> フォームからメール・パスワードでログインします。未認証リクエストはエッジでログイン画面へ誘導されます。</li>
<li class=""><strong>3 種テーマ</strong> — <strong>Cobalt（デフォルト） · Teal · Dark</strong> のテーマピッカー。選択は保存され、チャートやブランドマークまでテーマに合わせて変わります。</li>
<li class=""><strong>モバイルレスポンシブ</strong> — トップバー + ボトム 5 タブ + スライドドロワーにより、狭い画面でも全機能を利用できます。</li>
<li class=""><strong>コマンドパレット</strong> — <code>Cmd-K</code>（または <code>Ctrl-K</code>）で任意のページ・リソースへ直接移動し、テーマを切り替えられます。</li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="ai--より速くより賢く">AI — より速く、より賢く<a href="https://www.atomai.click/awsops/ja/whatsnew/2026/06/17/v2.0.0#ai--%E3%82%88%E3%82%8A%E9%80%9F%E3%81%8F%E3%82%88%E3%82%8A%E8%B3%A2%E3%81%8F" class="hash-link" aria-label="AI — より速く、より賢くへの直接リンク" title="AI — より速く、より賢くへの直接リンク" translate="no">​</a></h2>
<ul>
<li class=""><strong>AI アシスタント</strong> — 質問への回答をトークン単位で<strong>ストリーミング</strong>し、<strong>マークダウン（表・コード・リスト）<strong>で回答します。質問は</strong>ドメイン（ネットワーク・コスト・セキュリティなど）へ自動ルーティング</strong>され、会話は<strong>永続保存</strong>されてドロワーとフルスクリーンが同じ履歴を共有します。</li>
<li class=""><strong>AI 診断</strong> — <strong>Light / Mid / Deep</strong> の深度でアカウントの運用状態の総合レポートを生成し、<strong>MD · DOCX · PDF</strong> でエクスポートします。意図と実際の対比（不変条件）チェックと、前回レポートとの変化に関するインサイトもあわせて提供します。</li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="より広い可視性">より広い可視性<a href="https://www.atomai.click/awsops/ja/whatsnew/2026/06/17/v2.0.0#%E3%82%88%E3%82%8A%E5%BA%83%E3%81%84%E5%8F%AF%E8%A6%96%E6%80%A7" class="hash-link" aria-label="より広い可視性への直接リンク" title="より広い可視性への直接リンク" translate="no">​</a></h2>
<ul>
<li class=""><strong>トポロジー</strong> — Route53 → CloudFront → LB → Target Group → ターゲットへと続く<strong>リクエストフローグラフ</strong>。ノードクリックでフォーカスモード + 詳細パネル（ARN コピー・AI への質問）。</li>
<li class=""><strong>リソースインベントリ</strong> — EC2・Lambda・RDS・S3・VPC・IAM など <strong>20 種余り</strong>をソート・検索・詳細照会。</li>
<li class=""><strong>EKS / Kubernetes</strong> — クラスターの<strong>フリートサマリー</strong>と、ノード・ポッド・デプロイメントの<strong>イン・クラスター照会</strong>（読み取り専用）、OpenCost のインストール案内。</li>
<li class=""><strong>コスト</strong> — サービス別のコスト分解・ドリルダウン、月末予測、そして <strong>Bedrock モデル使用量</strong>（トークン・レイテンシー・コスト・キャッシュ削減額）。</li>
<li class=""><strong>データソース探索</strong> — 接続済みのオブザーバビリティデータソースを**ネイティブクエリ言語（PromQL/LogQL/TraceQL/SQL）**で読み取り専用照会。</li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="読み取り専用の運用姿勢">読み取り専用の運用姿勢<a href="https://www.atomai.click/awsops/ja/whatsnew/2026/06/17/v2.0.0#%E8%AA%AD%E3%81%BF%E5%8F%96%E3%82%8A%E5%B0%82%E7%94%A8%E3%81%AE%E9%81%8B%E7%94%A8%E5%A7%BF%E5%8B%A2" class="hash-link" aria-label="読み取り専用の運用姿勢への直接リンク" title="読み取り専用の運用姿勢への直接リンク" translate="no">​</a></h2>
<p>AWSops は運用状況を<strong>観察・分析・診断</strong>することに集中し、**AWS リソースを変更しません。**インストール・変更が必要な作業については、ユーザーが自ら実行できるようスクリプトとガイドを提供します。</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="利用ガイド">利用ガイド<a href="https://www.atomai.click/awsops/ja/whatsnew/2026/06/17/v2.0.0#%E5%88%A9%E7%94%A8%E3%82%AC%E3%82%A4%E3%83%89" class="hash-link" aria-label="利用ガイドへの直接リンク" title="利用ガイドへの直接リンク" translate="no">​</a></h2>
<p>新しい画面ごとの使い方はガイドドキュメントをご覧ください:</p>
<ul>
<li class=""><a class="" href="https://www.atomai.click/awsops/ja/intro">AWSops の紹介</a></li>
<li class=""><a class="" href="https://www.atomai.click/awsops/ja/getting-started/login">ログイン</a> · <a class="" href="https://www.atomai.click/awsops/ja/getting-started/navigation">画面構成とテーマ</a></li>
<li class=""><a class="" href="https://www.atomai.click/awsops/ja/overview/dashboard">ダッシュボード</a> · <a class="" href="https://www.atomai.click/awsops/ja/overview/assistant">AI アシスタント</a> · <a class="" href="https://www.atomai.click/awsops/ja/operations/ai-diagnosis">AI 診断</a></li>
</ul>]]></content:encoded>
            <category>Release</category>
            <category>AI</category>
            <category>Infrastructure</category>
            <category>Deployment</category>
            <category>Monitoring</category>
        </item>
        <item>
            <title><![CDATA[v1.9.0 — イベント事前スケーリング + Aurora データ層基盤 (ADR-030)]]></title>
            <link>https://www.atomai.click/awsops/ja/whatsnew/2026/05/27/v1.9.0</link>
            <guid>https://www.atomai.click/awsops/ja/whatsnew/2026/05/27/v1.9.0</guid>
            <pubDate>Wed, 27 May 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[ADR-010 Phase 1+2 イベント事前スケーリング（BedRock プラン + レビュー後実行スクリプト）、ADR-030 Aurora Serverless v2 基盤（CDK スタック + スキーマ + db.ts）、ADR-029 変更作業ゲート、AI コードレビューワークフロー。]]></description>
            <content:encoded><![CDATA[<p>運用負荷が予測されるイベント（セール、ライブストリーミング、四半期末など）に備えてリソースを事前にウォームアップする<strong>イベント事前スケーリング</strong>を v1.9.0 に追加しました。同時に、単一 EC2 ホストにビルド・運用・ローカル JSON 状態がすべて集約されていた構造を解消するための <strong>ADR-030 Aurora データ層基盤</strong>（CDK スタック・スキーマ・<code>db.ts</code>）も導入しました。本リリースの Aurora は<strong>デフォルト off / opt-in</strong> で入っており、既存の単一ホストデプロイには影響しません。</p>
<div class="theme-admonition theme-admonition-tip admonition_xJq3 alert alert--success"><div class="admonitionHeading_Gvgb"><span class="admonitionIcon_Rf37"><svg viewBox="0 0 12 16"><path fill-rule="evenodd" d="M6.5 0C3.48 0 1 2.19 1 5c0 .92.55 2.25 1 3 1.34 2.25 1.78 2.78 2 4v1h5v-1c.22-1.22.66-1.75 2-4 .45-.75 1-2.08 1-3 0-2.81-2.48-5-5.5-5zm3.64 7.48c-.25.44-.47.8-.67 1.11-.86 1.41-1.25 2.06-1.45 3.23-.02.05-.02.11-.02.17H5c0-.06 0-.13-.02-.17-.2-1.17-.59-1.83-1.45-3.23-.2-.31-.42-.67-.67-1.11C2.44 6.78 2 5.65 2 5c0-2.2 2.02-4 4.5-4 1.22 0 2.36.42 3.22 1.19C10.55 2.94 11 3.94 11 5c0 .66-.44 1.78-.86 2.48zM4 14h5c-.23 1.14-1.3 2-2.5 2s-2.27-.86-2.5-2z"></path></svg></span>主な変更点</div><div class="admonitionContent_BuS1"><p><strong>イベント事前スケーリング (ADR-010 Phase 1+2)</strong> · <strong>Aurora Serverless v2 基盤 (ADR-030 Phase 1)</strong> · <strong>ADR-029 変更作業ゲート</strong> · <strong>AI コードレビューワークフロー</strong> · <strong>ゾンビ接続クリーンアップの強化</strong></p></div></div>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="イベント事前スケーリング-adr-010-phase-12">イベント事前スケーリング (ADR-010 Phase 1+2)<a href="https://www.atomai.click/awsops/ja/whatsnew/2026/05/27/v1.9.0#%E3%82%A4%E3%83%99%E3%83%B3%E3%83%88%E4%BA%8B%E5%89%8D%E3%82%B9%E3%82%B1%E3%83%BC%E3%83%AA%E3%83%B3%E3%82%B0-adr-010-phase-12" class="hash-link" aria-label="イベント事前スケーリング (ADR-010 Phase 1+2)への直接リンク" title="イベント事前スケーリング (ADR-010 Phase 1+2)への直接リンク" translate="no">​</a></h2>
<p>大規模トラフィックイベントの開始前にリソースをウォームアップできるよう、<code>/event-scaling</code> 管理者ページが追加されました。登録からスクリプトのダウンロードまで 4 ステップで動作します:</p>
<ol>
<li class=""><strong>イベント登録</strong> — イベント名、開始/終了時刻、影響を受けるリソースタグ</li>
<li class=""><strong>過去メトリクスの収集</strong> — 同じイベントが過去にあった場合、その区間の CloudWatch メトリクス（ASG・RDS・MSK・EBS・ALB）を GetMetricData バッチで収集</li>
<li class=""><strong>AI ウォームアッププラン生成</strong> — Bedrock Sonnet 4.6 がリソースごとに多段階の事前スケールプランを生成し、<code>PLAN_JSON</code> マーカーで構造化された結果を返却</li>
<li class=""><strong>bash スクリプトのダウンロード</strong> — リソースタイプごとに安全なスクリプトを生成（KEDA・HPA、Aurora リーダー追加、MSK パーティション拡張、ASG warm pool、EBS IOPS ブースト）</li>
</ol>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="レビュー後実行-mutation-by-review">レビュー後実行 (mutation-by-review)<a href="https://www.atomai.click/awsops/ja/whatsnew/2026/05/27/v1.9.0#%E3%83%AC%E3%83%93%E3%83%A5%E3%83%BC%E5%BE%8C%E5%AE%9F%E8%A1%8C-mutation-by-review" class="hash-link" aria-label="レビュー後実行 (mutation-by-review)への直接リンク" title="レビュー後実行 (mutation-by-review)への直接リンク" translate="no">​</a></h3>
<p>ダッシュボードは**変更作業を直接実行しません。**スクリプトはダウンロード専用であり、オペレーターがレビューした後、適切な環境（<code>kubectl</code>、<code>aws cli</code>）で自ら適用します。これは ADR-029（Proposed）の変更作業ゲートモデル — 「AI が生成した mutating action は明示的な人間の承認後にのみ実行される」— と一致しています。</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="関連ファイル">関連ファイル<a href="https://www.atomai.click/awsops/ja/whatsnew/2026/05/27/v1.9.0#%E9%96%A2%E9%80%A3%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB" class="hash-link" aria-label="関連ファイルへの直接リンク" title="関連ファイルへの直接リンク" translate="no">​</a></h3>
<table><thead><tr><th>ファイル</th><th>役割</th></tr></thead><tbody><tr><td><code>src/app/event-scaling/page.tsx</code></td><td>イベント登録・メトリクスチャート・プラン表示・スクリプトダウンロード UI（admin 専用）</td></tr><tr><td><code>src/app/api/event-scaling/route.ts</code></td><td>CRUD + メトリクス + Bedrock プラン + スクリプト（GET/POST/PUT/DELETE）</td></tr><tr><td><code>src/lib/event-scaling.ts</code></td><td>データモデル + JSON 永続化（<code>data/event-scaling/</code>）</td></tr><tr><td><code>src/lib/event-scaling-prompts.ts</code></td><td>Bedrock Sonnet 4.6 プロンプト + <code>PLAN_JSON</code> パース</td></tr><tr><td><code>src/lib/event-scaling-scripts.ts</code></td><td>リソースタイプ別 bash スクリプト生成器</td></tr><tr><td><code>src/lib/queries/event-scaling.ts</code></td><td>CloudWatch GetMetricData + ASG/RDS/MSK/EBS/ALB リソース状態クエリ</td></tr></tbody></table>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="aurora-データ層基盤-adr-030-phase-1">Aurora データ層基盤 (ADR-030 Phase 1)<a href="https://www.atomai.click/awsops/ja/whatsnew/2026/05/27/v1.9.0#aurora-%E3%83%87%E3%83%BC%E3%82%BF%E5%B1%A4%E5%9F%BA%E7%9B%A4-adr-030-phase-1" class="hash-link" aria-label="Aurora データ層基盤 (ADR-030 Phase 1)への直接リンク" title="Aurora データ層基盤 (ADR-030 Phase 1)への直接リンク" translate="no">​</a></h2>
<p>ビルドサーバーと運用サーバーが同じ EC2 に集約されており、AgentCore の Docker ビルド時に Next.js の遅延が跳ね上がり、Steampipe FDW クエリがタイムアウトする問題を解決するため、ADR-030 で **ECS Fargate ワークロード + Aurora アプリ状態 + デュアル ECR（Dev=Private、Prod=Public）**への移行を決定しました。v1.9.0 にはそのうち <strong>Phase 1 の基盤</strong>のみが入ります。</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="導入されたもの">導入されたもの<a href="https://www.atomai.click/awsops/ja/whatsnew/2026/05/27/v1.9.0#%E5%B0%8E%E5%85%A5%E3%81%95%E3%82%8C%E3%81%9F%E3%82%82%E3%81%AE" class="hash-link" aria-label="導入されたものへの直接リンク" title="導入されたものへの直接リンク" translate="no">​</a></h3>
<table><thead><tr><th>コンポーネント</th><th>説明</th></tr></thead><tbody><tr><td><code>infra-cdk/lib/awsops-data-stack.ts</code></td><td>Aurora Serverless v2 PostgreSQL 15.5（0.5–4 ACU、Writer + Reader、KMS 暗号化、IAM 認証、Private Subnet、<code>rds.logical_replication=1</code>）</td></tr><tr><td><code>infra-cdk/data/schema.sql</code></td><td>idempotent な 7 テーブルスキーマ（<code>inventory_snapshots</code>、<code>cost_snapshots</code>、<code>agentcore_memory</code>、<code>agentcore_stats</code>、<code>alert_diagnosis</code>、<code>event_scaling_plans</code>、<code>report_schedules</code>）+ <code>schema_migrations</code> バージョントラッキング + <code>touch_updated_at</code> トリガー</td></tr><tr><td><code>src/lib/db.ts</code></td><td>アプリ側 pg Pool（Steampipe のプールとは分離）。<code>AURORA_DATABASE_URL</code> DSN または <code>AURORA_HOST/USER/PASSWORD/DB</code> の個別環境変数、<code>isAuroraEnabled()</code> / <code>checkDbHealth()</code> ヘルパー</td></tr><tr><td><code>scripts/13-deploy-aurora.sh</code></td><td>CDK デプロイ + Secrets Manager から認証情報を取得して <code>psql</code> でスキーマ適用。<code>deploy / schema / status / dsn</code> サブコマンド</td></tr></tbody></table>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="opt-in-デプロイ">opt-in デプロイ<a href="https://www.atomai.click/awsops/ja/whatsnew/2026/05/27/v1.9.0#opt-in-%E3%83%87%E3%83%97%E3%83%AD%E3%82%A4" class="hash-link" aria-label="opt-in デプロイへの直接リンク" title="opt-in デプロイへの直接リンク" translate="no">​</a></h3>
<p>デフォルトは off です。有効化するにはコンテキストフラグを明示します:</p>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#F8F8F2"><span class="token builtin class-name" style="color:rgb(189, 147, 249)">cd</span><span class="token plain"> infra-cdk</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">npx cdk deploy AwsopsDataStack </span><span class="token parameter variable" style="color:rgb(189, 147, 249);font-style:italic">-c</span><span class="token plain"> </span><span class="token assign-left variable" style="color:rgb(189, 147, 249);font-style:italic">enableAurora</span><span class="token operator">=</span><span class="token plain">true</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token comment" style="color:rgb(98, 114, 164)"># または、スクリプトを使用</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token punctuation" style="color:rgb(248, 248, 242)">..</span><span class="token plain">/scripts/13-deploy-aurora.sh deploy</span><br></span></code></pre></div></div>
<p>このようにゲートした理由は、(1) Aurora Serverless v2 の最低 0.5 ACU 課金（~$43/月）がすべての環境に適しているわけではないこと、(2) Phase 1 の dual-write がまだ入っておらず、実際のデータは依然として <code>data/*.json</code> に蓄積されるためです。</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="steampipe-はそのまま">Steampipe はそのまま<a href="https://www.atomai.click/awsops/ja/whatsnew/2026/05/27/v1.9.0#steampipe-%E3%81%AF%E3%81%9D%E3%81%AE%E3%81%BE%E3%81%BE" class="hash-link" aria-label="Steampipe はそのままへの直接リンク" title="Steampipe はそのままへの直接リンク" translate="no">​</a></h3>
<p>ADR-030 の微妙なポイント: <strong>Steampipe は stateless</strong> です。FDW が AWS API をリアルタイムに照会し、結果を一時的にインメモリに置く構造のため、コンテナが再起動しても失われる「データ」はありません。Aurora が置き換えるのは Steampipe ではなく、ダッシュボード自体が EC2 のディスクに蓄積していた <code>data/*.json</code>（インベントリ・Cost・メモリ・alert 記録・event-scaling プランなど）です。</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="次のリリース予定-phase-1-dual-write">次のリリース予定 (Phase 1 dual-write)<a href="https://www.atomai.click/awsops/ja/whatsnew/2026/05/27/v1.9.0#%E6%AC%A1%E3%81%AE%E3%83%AA%E3%83%AA%E3%83%BC%E3%82%B9%E4%BA%88%E5%AE%9A-phase-1-dual-write" class="hash-link" aria-label="次のリリース予定 (Phase 1 dual-write)への直接リンク" title="次のリリース予定 (Phase 1 dual-write)への直接リンク" translate="no">​</a></h3>
<p>7 つのソースファイルにデュアル書き込み経路が入ります。書き込みは JSON と Aurora の両方に行われ、読み取りは <strong>7 日間のパリティゲートが通過するまで</strong> JSON 側から行います:</p>
<ul>
<li class=""><code>resource-inventory.ts</code>、<code>cost-snapshot.ts</code>、<code>agentcore-memory.ts</code>、<code>agentcore-stats.ts</code>、<code>alert-knowledge.ts</code>、<code>event-scaling.ts</code>、<code>report-scheduler.ts</code></li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="adr-029-変更作業フレームワーク-proposed">ADR-029: 変更作業フレームワーク (Proposed)<a href="https://www.atomai.click/awsops/ja/whatsnew/2026/05/27/v1.9.0#adr-029-%E5%A4%89%E6%9B%B4%E4%BD%9C%E6%A5%AD%E3%83%95%E3%83%AC%E3%83%BC%E3%83%A0%E3%83%AF%E3%83%BC%E3%82%AF-proposed" class="hash-link" aria-label="ADR-029: 変更作業フレームワーク (Proposed)への直接リンク" title="ADR-029: 変更作業フレームワーク (Proposed)への直接リンク" translate="no">​</a></h2>
<p>イベント事前スケーリングがレビュー後実行として導入された理由は、ADR-010 Phase 3（自動実行）のゲートモデルがまだ決まっていないためです。ADR-029 はそのゲート — 「どのような条件で、AI が生成した変更作業を、どのような権限モデルで実行可能にするか」— を Proposed 状態で登録し、今後の Phase 3 作業の前提条件を明示します。</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="ai-コードレビューワークフロー">AI コードレビューワークフロー<a href="https://www.atomai.click/awsops/ja/whatsnew/2026/05/27/v1.9.0#ai-%E3%82%B3%E3%83%BC%E3%83%89%E3%83%AC%E3%83%93%E3%83%A5%E3%83%BC%E3%83%AF%E3%83%BC%E3%82%AF%E3%83%95%E3%83%AD%E3%83%BC" class="hash-link" aria-label="AI コードレビューワークフローへの直接リンク" title="AI コードレビューワークフローへの直接リンク" translate="no">​</a></h2>
<p>PR がオープンまたは更新された際に Claude が自動でコードレビューを行う GitHub Actions ワークフローが追加されました（<code>.github/workflows/claude-review.yml</code>）。AWSops のコンベンション（Steampipe pg Pool、basePath、SCP ブロックカラムなど）に合わせたレビュープロンプトを使用します。</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="ゾンビ接続クリーンアップの強化">ゾンビ接続クリーンアップの強化<a href="https://www.atomai.click/awsops/ja/whatsnew/2026/05/27/v1.9.0#%E3%82%BE%E3%83%B3%E3%83%93%E6%8E%A5%E7%B6%9A%E3%82%AF%E3%83%AA%E3%83%BC%E3%83%B3%E3%82%A2%E3%83%83%E3%83%97%E3%81%AE%E5%BC%B7%E5%8C%96" class="hash-link" aria-label="ゾンビ接続クリーンアップの強化への直接リンク" title="ゾンビ接続クリーンアップの強化への直接リンク" translate="no">​</a></h2>
<p><code>src/lib/steampipe.ts</code> のゾンビクリーンアップ処理が、プールから connection を借りるのではなく、専用の短命 <code>Client</code> を使用するように変更されました。Cost Explorer/IAM サマリーの FDW が hung 状態でプール全体が枯渇しても、クリーンアップは継続して動作します。しきい値も 90 秒に短縮されました。</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="統計比較">統計比較<a href="https://www.atomai.click/awsops/ja/whatsnew/2026/05/27/v1.9.0#%E7%B5%B1%E8%A8%88%E6%AF%94%E8%BC%83" class="hash-link" aria-label="統計比較への直接リンク" title="統計比較への直接リンク" translate="no">​</a></h2>
<table><thead><tr><th>項目</th><th>v1.8.1</th><th>v1.9.0</th><th>変更</th></tr></thead><tbody><tr><td>ページ</td><td>41</td><td><strong>43</strong></td><td>+2（<code>/event-scaling</code>、<code>/login</code> の訂正反映）</td></tr><tr><td>API ルート</td><td>18</td><td><strong>19</strong></td><td>+1（<code>/api/event-scaling</code>）</td></tr><tr><td>SQL クエリファイル</td><td>25</td><td><strong>26</strong></td><td>+1（<code>event-scaling.ts</code>）</td></tr><tr><td>ADR</td><td>28 (001-028)</td><td><strong>30 (001-030)</strong></td><td>+2（029 Proposed、030 Accepted）</td></tr><tr><td>CDK スタック</td><td>3（Awsops·Cognito·AgentCore）</td><td><strong>4</strong></td><td>+1（<code>AwsopsDataStack</code>、opt-in）</td></tr><tr><td>デプロイスクリプト</td><td>12 段階</td><td><strong>13 段階</strong></td><td>+1（<code>13-deploy-aurora.sh</code>）</td></tr><tr><td>lib ファイル</td><td>27</td><td><strong>31</strong></td><td>+4（<code>event-scaling*</code> 3 個、<code>db.ts</code>）</td></tr></tbody></table>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="参考">参考<a href="https://www.atomai.click/awsops/ja/whatsnew/2026/05/27/v1.9.0#%E5%8F%82%E8%80%83" class="hash-link" aria-label="参考への直接リンク" title="参考への直接リンク" translate="no">​</a></h2>
<ul>
<li class=""><a href="https://github.com/whchoi98/awsops/blob/main/docs/decisions/010-event-driven-pre-scaling.md" target="_blank" rel="noopener noreferrer" class="">ADR-010: イベント駆動事前スケーリング</a>（Phase 1+2 Accepted）</li>
<li class=""><a href="https://github.com/whchoi98/awsops/blob/main/docs/decisions/029-mutating-action-framework.md" target="_blank" rel="noopener noreferrer" class="">ADR-029: 変更作業フレームワーク</a>（Proposed）</li>
<li class=""><a href="https://github.com/whchoi98/awsops/blob/main/docs/decisions/030-ecs-fargate-aurora-split.md" target="_blank" rel="noopener noreferrer" class="">ADR-030: ECS Fargate + Aurora + デュアル ECR</a>（Accepted、Phase 1 部分実装）</li>
</ul>]]></content:encoded>
            <category>Release</category>
            <category>AI</category>
            <category>Infrastructure</category>
            <category>Deployment</category>
            <category>Monitoring</category>
        </item>
        <item>
            <title><![CDATA[v1.8.1 — アラートトリガー AI 診断 + ドキュメント大幅拡充]]></title>
            <link>https://www.atomai.click/awsops/ja/whatsnew/2026/04/23/v1.8.1</link>
            <guid>https://www.atomai.click/awsops/ja/whatsnew/2026/04/23/v1.8.1</guid>
            <pubDate>Thu, 23 Apr 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[ADR-009 アラートパイプライン（CloudWatch/Alertmanager/Grafana ウェブフック → 相関分析 → 自動 Bedrock 診断 → Slack 通知）、ADR 18 件 + ランブック 5 件 + モジュール CLAUDE.md 11 個を追加。]]></description>
            <content:encoded><![CDATA[<p>外部アラートシステムのイベントを受信し、<strong>相関分析 → 自動 AI 根本原因分析 → Slack 通知</strong>まで一括処理するパイプラインを追加しました。あわせて ADR 18 件、ランブック 5 件、モジュール CLAUDE.md 11 個、Web ガイド 2 ページ（KO+EN）が追加され、プロジェクトドキュメントが大幅に強化されました。</p>
<div class="theme-admonition theme-admonition-tip admonition_xJq3 alert alert--success"><div class="admonitionHeading_Gvgb"><span class="admonitionIcon_Rf37"><svg viewBox="0 0 12 16"><path fill-rule="evenodd" d="M6.5 0C3.48 0 1 2.19 1 5c0 .92.55 2.25 1 3 1.34 2.25 1.78 2.78 2 4v1h5v-1c.22-1.22.66-1.75 2-4 .45-.75 1-2.08 1-3 0-2.81-2.48-5-5.5-5zm3.64 7.48c-.25.44-.47.8-.67 1.11-.86 1.41-1.25 2.06-1.45 3.23-.02.05-.02.11-.02.17H5c0-.06 0-.13-.02-.17-.2-1.17-.59-1.83-1.45-3.23-.2-.31-.42-.67-.67-1.11C2.44 6.78 2 5.65 2 5c0-2.2 2.02-4 4.5-4 1.22 0 2.36.42 3.22 1.19C10.55 2.94 11 3.94 11 5c0 .66-.44 1.78-.86 2.48zM4 14h5c-.23 1.14-1.3 2-2.5 2s-2.27-.86-2.5-2z"></path></svg></span>主な変更点</div><div class="admonitionContent_BuS1"><p><strong>アラートトリガー AI 診断 (ADR-009)</strong> · <strong>4 種ウェブフック (CloudWatch/Alertmanager/Grafana/Generic)</strong> · <strong>HMAC 認証</strong> · <strong>Slack Block Kit</strong> · <strong>ADR 18 件新規</strong> · <strong>ランブック 5 件新規</strong> · <strong>Web ガイド拡充</strong></p></div></div>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="アラートトリガー-ai-診断-adr-009">アラートトリガー AI 診断 (ADR-009)<a href="https://www.atomai.click/awsops/ja/whatsnew/2026/04/23/v1.8.1#%E3%82%A2%E3%83%A9%E3%83%BC%E3%83%88%E3%83%88%E3%83%AA%E3%82%AC%E3%83%BC-ai-%E8%A8%BA%E6%96%AD-adr-009" class="hash-link" aria-label="アラートトリガー AI 診断 (ADR-009)への直接リンク" title="アラートトリガー AI 診断 (ADR-009)への直接リンク" translate="no">​</a></h2>
<p>重大度 <code>critical</code> のインシデント発生時に、自動的に部分 AI 診断が実行されます。</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="パイプラインの流れ">パイプラインの流れ<a href="https://www.atomai.click/awsops/ja/whatsnew/2026/04/23/v1.8.1#%E3%83%91%E3%82%A4%E3%83%97%E3%83%A9%E3%82%A4%E3%83%B3%E3%81%AE%E6%B5%81%E3%82%8C" class="hash-link" aria-label="パイプラインの流れへの直接リンク" title="パイプラインの流れへの直接リンク" translate="no">​</a></h3>
<div class="language-text codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#F8F8F2"><span class="token plain">[CloudWatch Alarm] → SNS Topic → SQS Queue</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">                                    ↓</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">                            [EC2 Poller (15s)]</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">                                    ↓</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">[Alertmanager/Grafana/Generic] → POST /api/alert-webhook</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">                                    ↓</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">                            [alert-correlation.ts]</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">                                    ↓</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">                         [alert-diagnosis.ts (AI)]</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">                                    ↓</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">                          [Slack/SNS 送信]</span><br></span></code></pre></div></div>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="サポートするソース">サポートするソース<a href="https://www.atomai.click/awsops/ja/whatsnew/2026/04/23/v1.8.1#%E3%82%B5%E3%83%9D%E3%83%BC%E3%83%88%E3%81%99%E3%82%8B%E3%82%BD%E3%83%BC%E3%82%B9" class="hash-link" aria-label="サポートするソースへの直接リンク" title="サポートするソースへの直接リンク" translate="no">​</a></h3>
<table><thead><tr><th>ソース</th><th>受信方式</th><th>正規化スキーマ</th></tr></thead><tbody><tr><td><strong>CloudWatch Alarms</strong></td><td>SNS → SQS → EC2 ポーリング</td><td>CloudWatch イベント</td></tr><tr><td><strong>Prometheus Alertmanager</strong></td><td>直接ウェブフック（HMAC）</td><td>Alertmanager v4</td></tr><tr><td><strong>Grafana Alerting</strong></td><td>直接ウェブフック（HMAC）</td><td>Grafana unified</td></tr><tr><td><strong>Generic JSON</strong></td><td>直接ウェブフック（HMAC）</td><td>カスタムスキーマ</td></tr></tbody></table>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="相関分析エンジン">相関分析エンジン<a href="https://www.atomai.click/awsops/ja/whatsnew/2026/04/23/v1.8.1#%E7%9B%B8%E9%96%A2%E5%88%86%E6%9E%90%E3%82%A8%E3%83%B3%E3%82%B8%E3%83%B3" class="hash-link" aria-label="相関分析エンジンへの直接リンク" title="相関分析エンジンへの直接リンク" translate="no">​</a></h3>
<p><code>src/lib/alert-correlation.ts</code> が個別のアラートを<strong>インシデント</strong>にグループ化します:</p>
<table><thead><tr><th>基準</th><th>デフォルト値</th><th>説明</th></tr></thead><tbody><tr><td>時間ウィンドウ</td><td>5 分</td><td>同一サービスで 5 分以内に発生したアラートをマージ</td></tr><tr><td>共通サービス</td><td>1 つ以上</td><td><code>labels.service</code> または <code>resource</code> の一致</td></tr><tr><td>共通ネームスペース</td><td>1 つ以上</td><td>K8s アラートの <code>labels.namespace</code> の一致</td></tr><tr><td>重複排除</td><td>1 分</td><td>同一 <code>fingerprint</code> のアラートを 1 分以内は重複抑止</td></tr><tr><td>重大度エスカレーション</td><td>warning 3 件が 5 分以内</td><td>→ critical に昇格</td></tr></tbody></table>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="スコープ制限付き自動診断">スコープ制限付き自動診断<a href="https://www.atomai.click/awsops/ja/whatsnew/2026/04/23/v1.8.1#%E3%82%B9%E3%82%B3%E3%83%BC%E3%83%97%E5%88%B6%E9%99%90%E4%BB%98%E3%81%8D%E8%87%AA%E5%8B%95%E8%A8%BA%E6%96%AD" class="hash-link" aria-label="スコープ制限付き自動診断への直接リンク" title="スコープ制限付き自動診断への直接リンク" translate="no">​</a></h3>
<p>全体 15 セクション診断とは異なり、<strong>発火したアラートの範囲のみ</strong>に制限され、1〜2 分以内に完了します:</p>
<ol>
<li class=""><strong>AlertContext のビルド</strong> — 影響を受けたサービス/リソース/ネームスペース、発火時刻（<code>since</code>）を抽出</li>
<li class=""><strong>スコープ制限付き収集</strong> — CloudWatch メトリクスを <code>since</code> 基準で ±10 分、該当リソースのみにフィルタリング</li>
<li class=""><strong>関連セクションの選択</strong> — Compute / Network / Container など 3〜5 個のみ実行</li>
<li class=""><strong>変更検知</strong> — Terraform state / CloudTrail の最近の変更を比較</li>
<li class=""><strong>Bedrock Sonnet 分析</strong> — 根本原因の推定 + Next Steps の提案</li>
</ol>
<div class="language-typescript codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-typescript codeBlock_bY9V thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#F8F8F2"><span class="token comment" style="color:rgb(98, 114, 164)">// src/lib/alert-diagnosis.ts (中核インターフェース)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">interface</span><span class="token plain"> </span><span class="token class-name maybe-class-name">AlertContext</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  services</span><span class="token operator">:</span><span class="token plain"> </span><span class="token builtin" style="color:rgb(189, 147, 249)">string</span><span class="token punctuation" style="color:rgb(248, 248, 242)">[</span><span class="token punctuation" style="color:rgb(248, 248, 242)">]</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  resources</span><span class="token operator">:</span><span class="token plain"> </span><span class="token builtin" style="color:rgb(189, 147, 249)">string</span><span class="token punctuation" style="color:rgb(248, 248, 242)">[</span><span class="token punctuation" style="color:rgb(248, 248, 242)">]</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  namespaces</span><span class="token operator">:</span><span class="token plain"> </span><span class="token builtin" style="color:rgb(189, 147, 249)">string</span><span class="token punctuation" style="color:rgb(248, 248, 242)">[</span><span class="token punctuation" style="color:rgb(248, 248, 242)">]</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  since</span><span class="token operator">:</span><span class="token plain"> </span><span class="token known-class-name class-name">Date</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain">     </span><span class="token comment" style="color:rgb(98, 114, 164)">// 発火時刻 − 10分</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  until</span><span class="token operator">:</span><span class="token plain"> </span><span class="token known-class-name class-name">Date</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain">     </span><span class="token comment" style="color:rgb(98, 114, 164)">// 発火時刻 + 10分</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><br></span></code></pre></div></div>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="slack-通知-block-kit">Slack 通知 (Block Kit)<a href="https://www.atomai.click/awsops/ja/whatsnew/2026/04/23/v1.8.1#slack-%E9%80%9A%E7%9F%A5-block-kit" class="hash-link" aria-label="Slack 通知 (Block Kit)への直接リンク" title="Slack 通知 (Block Kit)への直接リンク" translate="no">​</a></h3>
<p>重大度に応じたチャンネルルーティング + スレッド更新で動作します:</p>
<table><thead><tr><th>重大度</th><th>デフォルトチャンネル</th><th>色</th></tr></thead><tbody><tr><td><code>critical</code></td><td><code>#incidents</code></td><td>🔴 赤</td></tr><tr><td><code>warning</code></td><td><code>#alerts</code></td><td>🟠 オレンジ</td></tr><tr><td><code>info</code></td><td><code>#alerts-low</code></td><td>🔵 青</td></tr></tbody></table>
<ul>
<li class="">最初のアラートは<strong>メインメッセージ</strong>、後続イベント（追加アラートのマージ、AI 診断結果、解決）は<strong>同一スレッドへの reply</strong></li>
<li class="">Webhook モードと Bot Token モードの両方でスレッディングをサポート（<code>thread_ts</code> の再利用）</li>
<li class="">CloudWatch <code>OK</code> または Alertmanager <code>resolved</code> の受信時に ✅ 解決通知</li>
</ul>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="hmac-認証">HMAC 認証<a href="https://www.atomai.click/awsops/ja/whatsnew/2026/04/23/v1.8.1#hmac-%E8%AA%8D%E8%A8%BC" class="hash-link" aria-label="HMAC 認証への直接リンク" title="HMAC 認証への直接リンク" translate="no">​</a></h3>
<p>共有シークレットは <code>data/config.json</code> の <code>alertWebhookSecret</code> に保存します:</p>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#F8F8F2"><span class="token function" style="color:rgb(80, 250, 123)">curl</span><span class="token plain"> </span><span class="token parameter variable" style="color:rgb(189, 147, 249);font-style:italic">-X</span><span class="token plain"> POST https://awsops.example.com/awsops/api/alert-webhook </span><span class="token punctuation" style="color:rgb(248, 248, 242)">\</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token parameter variable" style="color:rgb(189, 147, 249);font-style:italic">-H</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">'X-Alert-Source: generic'</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">\</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token parameter variable" style="color:rgb(189, 147, 249);font-style:italic">-H</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"X-Signature-256: sha256=</span><span class="token string variable" style="color:rgb(189, 147, 249);font-style:italic">$(</span><span class="token string variable builtin class-name" style="color:rgb(189, 147, 249);font-style:italic">printf</span><span class="token string variable" style="color:rgb(189, 147, 249);font-style:italic"> </span><span class="token string variable string" style="color:rgb(255, 121, 198);font-style:italic">'%s'</span><span class="token string variable" style="color:rgb(189, 147, 249);font-style:italic"> </span><span class="token string variable string" style="color:rgb(255, 121, 198);font-style:italic">"</span><span class="token string variable string variable" style="color:rgb(189, 147, 249);font-style:italic">$BODY</span><span class="token string variable string" style="color:rgb(255, 121, 198);font-style:italic">"</span><span class="token string variable" style="color:rgb(189, 147, 249);font-style:italic"> </span><span class="token string variable operator" style="color:rgb(189, 147, 249);font-style:italic">|</span><span class="token string variable" style="color:rgb(189, 147, 249);font-style:italic"> openssl dgst </span><span class="token string variable parameter variable" style="color:rgb(189, 147, 249);font-style:italic">-sha256</span><span class="token string variable" style="color:rgb(189, 147, 249);font-style:italic"> </span><span class="token string variable parameter variable" style="color:rgb(189, 147, 249);font-style:italic">-hmac</span><span class="token string variable" style="color:rgb(189, 147, 249);font-style:italic"> </span><span class="token string variable string" style="color:rgb(255, 121, 198);font-style:italic">"</span><span class="token string variable string variable" style="color:rgb(189, 147, 249);font-style:italic">$SECRET</span><span class="token string variable string" style="color:rgb(255, 121, 198);font-style:italic">"</span><span class="token string variable" style="color:rgb(189, 147, 249);font-style:italic"> </span><span class="token string variable operator" style="color:rgb(189, 147, 249);font-style:italic">|</span><span class="token string variable" style="color:rgb(189, 147, 249);font-style:italic"> </span><span class="token string variable function" style="color:rgb(80, 250, 123);font-style:italic">awk</span><span class="token string variable" style="color:rgb(189, 147, 249);font-style:italic"> </span><span class="token string variable string" style="color:rgb(255, 121, 198);font-style:italic">'{print $2}'</span><span class="token string variable" style="color:rgb(189, 147, 249);font-style:italic">)</span><span class="token string" style="color:rgb(255, 121, 198)">"</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">\</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token parameter variable" style="color:rgb(189, 147, 249);font-style:italic">-H</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">'Content-Type: application/json'</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">\</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token parameter variable" style="color:rgb(189, 147, 249);font-style:italic">-d</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"</span><span class="token string variable" style="color:rgb(189, 147, 249);font-style:italic">$BODY</span><span class="token string" style="color:rgb(255, 121, 198)">"</span><br></span></code></pre></div></div>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="アラートナレッジベース">アラートナレッジベース<a href="https://www.atomai.click/awsops/ja/whatsnew/2026/04/23/v1.8.1#%E3%82%A2%E3%83%A9%E3%83%BC%E3%83%88%E3%83%8A%E3%83%AC%E3%83%83%E3%82%B8%E3%83%99%E3%83%BC%E3%82%B9" class="hash-link" aria-label="アラートナレッジベースへの直接リンク" title="アラートナレッジベースへの直接リンク" translate="no">​</a></h3>
<p><code>data/alert-diagnosis/</code> 以下に診断記録が永続保存されます:</p>
<table><thead><tr><th>ファイル</th><th>内容</th></tr></thead><tbody><tr><td><code>incidents/&lt;id&gt;.json</code></td><td>個別インシデント + AI 診断結果</td></tr><tr><td><code>summary-&lt;YYYY-MM&gt;.json</code></td><td>月間統計（top services、alert names、resolution time）</td></tr></tbody></table>
<p>UI の <strong>Knowledge Base</strong> タブで過去の類似インシデントを検索でき、新しいインシデント発生時には類似度ベースで自動レコメンドされます。</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="ドキュメント大幅拡充">ドキュメント大幅拡充<a href="https://www.atomai.click/awsops/ja/whatsnew/2026/04/23/v1.8.1#%E3%83%89%E3%82%AD%E3%83%A5%E3%83%A1%E3%83%B3%E3%83%88%E5%A4%A7%E5%B9%85%E6%8B%A1%E5%85%85" class="hash-link" aria-label="ドキュメント大幅拡充への直接リンク" title="ドキュメント大幅拡充への直接リンク" translate="no">​</a></h2>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="adr-18-件新規-011-028">ADR 18 件新規 (011-028)<a href="https://www.atomai.click/awsops/ja/whatsnew/2026/04/23/v1.8.1#adr-18-%E4%BB%B6%E6%96%B0%E8%A6%8F-011-028" class="hash-link" aria-label="ADR 18 件新規 (011-028)への直接リンク" title="ADR 18 件新規 (011-028)への直接リンク" translate="no">​</a></h3>
<p>v1.8.0 で追加された機能の設計上の意思決定を公式化しました:</p>
<table><thead><tr><th>番号</th><th>テーマ</th></tr></thead><tbody><tr><td>ADR-011</td><td>外部データソース統合（SSRF 防御 + allowlist）</td></tr><tr><td>ADR-012</td><td>SNS 通知戦略</td></tr><tr><td>ADR-013</td><td>自動収集調査エージェント</td></tr><tr><td>ADR-014</td><td>レポート生成とスケジューリング</td></tr><tr><td>ADR-015</td><td>AI ルーティングの優先順位</td></tr><tr><td>ADR-016</td><td>Bedrock モデル選択戦略</td></tr><tr><td>ADR-017</td><td>キャッシュウォーマーの設計</td></tr><tr><td>ADR-018</td><td>Cognito 認証フロー</td></tr><tr><td>ADR-019</td><td>SSE ストリーミング</td></tr><tr><td>ADR-020</td><td>HMAC ウェブフック認証</td></tr><tr><td>ADR-021</td><td>Admin Email 権限モデル</td></tr><tr><td>ADR-022</td><td>CDK スタック分離</td></tr><tr><td>ADR-023</td><td>マルチルート並列実行</td></tr><tr><td>ADR-024</td><td>i18n（ko/en）サポート</td></tr><tr><td>ADR-025</td><td>Code Interpreter サンドボックス</td></tr><tr><td>ADR-026</td><td>CloudFront + Lambda@Edge</td></tr><tr><td>ADR-027</td><td>OpenCost + Prometheus（EKS コスト）</td></tr><tr><td>ADR-028</td><td>Memory Store（会話履歴）</td></tr></tbody></table>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="ランブック-5-件新規">ランブック 5 件新規<a href="https://www.atomai.click/awsops/ja/whatsnew/2026/04/23/v1.8.1#%E3%83%A9%E3%83%B3%E3%83%96%E3%83%83%E3%82%AF-5-%E4%BB%B6%E6%96%B0%E8%A6%8F" class="hash-link" aria-label="ランブック 5 件新規への直接リンク" title="ランブック 5 件新規への直接リンク" translate="no">​</a></h3>
<p>運用の現場で実際に使えるトラブルシューティング/設定ガイド:</p>
<ul>
<li class=""><code>alert-pipeline-troubleshoot.md</code> — ウェブフックが届かないとき、相関分析がインシデントを作れないとき、Slack に表示されないとき</li>
<li class=""><code>cache-warmer-operations.md</code> — キャッシュウォーマーのデバッグ、クエリの追加/削除</li>
<li class=""><code>cognito-auth-troubleshoot.md</code> — Lambda@Edge、HttpOnly クッキー、OAuth2 コールバックの問題</li>
<li class=""><code>deploy-flow.md</code> — 11 段階デプロイスクリプトの運用マニュアル</li>
<li class=""><code>multi-account-setup.md</code> — Aggregator 設定、クロスアカウント IAM ロール、検証手順</li>
</ul>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="モジュール-claudemd-11-個新規">モジュール CLAUDE.md 11 個新規<a href="https://www.atomai.click/awsops/ja/whatsnew/2026/04/23/v1.8.1#%E3%83%A2%E3%82%B8%E3%83%A5%E3%83%BC%E3%83%AB-claudemd-11-%E5%80%8B%E6%96%B0%E8%A6%8F" class="hash-link" aria-label="モジュール CLAUDE.md 11 個新規への直接リンク" title="モジュール CLAUDE.md 11 個新規への直接リンク" translate="no">​</a></h3>
<p>各ソースモジュールの役割/ルール/主要ファイルを Claude コンテキストファイルとして整理:</p>
<table><thead><tr><th>パス</th><th>説明</th></tr></thead><tbody><tr><td><code>docs/CLAUDE.md</code></td><td>ドキュメント構成</td></tr><tr><td><code>runbooks/CLAUDE.md</code></td><td>ランブックインデックス</td></tr><tr><td><code>decisions/CLAUDE.md</code></td><td>ADR インデックス</td></tr><tr><td><code>agent/CLAUDE.md</code></td><td>Strands Agent + 19 Lambda</td></tr><tr><td><code>scripts/CLAUDE.md</code></td><td>11 段階デプロイスクリプト</td></tr><tr><td><code>tests/CLAUDE.md</code></td><td>Vitest 構成</td></tr><tr><td><code>infra-cdk/CLAUDE.md</code></td><td>CDK スタック構成</td></tr><tr><td><code>src/app/ai-diagnosis/CLAUDE.md</code></td><td>AI 総合診断ページ</td></tr><tr><td><code>src/app/alert-settings/CLAUDE.md</code></td><td>アラート設定ページ</td></tr><tr><td><code>src/app/k8s/CLAUDE.md</code></td><td>K8s ページ</td></tr><tr><td><code>src/lib/collectors/CLAUDE.md</code></td><td>7 種 Auto-Collect エージェント</td></tr></tbody></table>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="web-ガイド拡充">Web ガイド拡充<a href="https://www.atomai.click/awsops/ja/whatsnew/2026/04/23/v1.8.1#web-%E3%82%AC%E3%82%A4%E3%83%89%E6%8B%A1%E5%85%85" class="hash-link" aria-label="Web ガイド拡充への直接リンク" title="Web ガイド拡充への直接リンク" translate="no">​</a></h3>
<p>Docusaurus ガイドに v1.8 の機能を反映しました:</p>
<ul>
<li class=""><code>monitoring/ai-diagnosis.md</code> — 15 セクション診断、エクスポート形式（DOCX/MD/PDF/PPTX）、スケジューリング、コスト管理のヒント</li>
<li class=""><code>monitoring/alerts.md</code> — アラートパイプラインの全体フロー、HMAC、相関分析、Slack スレッディング、ナレッジベース</li>
<li class=""><code>intro.md</code> — 40 ページ / 18 API / 11 AI ルートを反映、「AI 総合診断 &amp; アラートパイプライン」機能ブロックを追加</li>
<li class=""><code>faq/troubleshooting.md</code> — Slack 通知の失敗 / AI 診断の部分失敗ケース</li>
<li class="">韓国語（<code>docs/</code>）+ 英語（<code>i18n/en/docusaurus-plugin-content-docs/current/</code>）の両方に反映</li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="バグ修正ハイライト">バグ修正ハイライト<a href="https://www.atomai.click/awsops/ja/whatsnew/2026/04/23/v1.8.1#%E3%83%90%E3%82%B0%E4%BF%AE%E6%AD%A3%E3%83%8F%E3%82%A4%E3%83%A9%E3%82%A4%E3%83%88" class="hash-link" aria-label="バグ修正ハイライトへの直接リンク" title="バグ修正ハイライトへの直接リンク" translate="no">​</a></h2>
<table><thead><tr><th>項目</th><th>説明</th></tr></thead><tbody><tr><td><strong>webpack の動的 import</strong></td><td>コレクターの動的 import に <code>/* webpackInclude: /\.(ts|tsx|js)$/ */</code> マジックコメントを追加 — CLAUDE.md が webpack context に含まれてビルドが失敗する問題を解決</td></tr><tr><td><strong>Bedrock モデル ID</strong></td><td>アラート診断に <code>global.anthropic.claude-sonnet-4-6</code> を使用</td></tr><tr><td><strong>Slack スレッドの再利用</strong></td><td>Webhook モードでも <code>thread_ts</code> を保存して後続イベントに reply</td></tr><tr><td><strong>レポートダウンロード</strong></td><td>S3 presigned URL の代わりにプロキシ URL を使用 — STS セッション期限切れ時の 404 を解決</td></tr><tr><td><strong>SNS メール</strong></td><td>マークダウンをプレーンテキストに変換してから送信</td></tr><tr><td><strong>キャッシュウォーマー</strong></td><td>Monitoring クエリを除外（CloudWatch FDW 呼び出しが pg Pool を枯渇させるため）</td></tr><tr><td><strong>Silent なクッキー削除</strong></td><td>HttpOnly クッキーは <code>POST /api/auth</code> によるサーバーサイド削除</td></tr></tbody></table>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="主なファイル変更">主なファイル変更<a href="https://www.atomai.click/awsops/ja/whatsnew/2026/04/23/v1.8.1#%E4%B8%BB%E3%81%AA%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E5%A4%89%E6%9B%B4" class="hash-link" aria-label="主なファイル変更への直接リンク" title="主なファイル変更への直接リンク" translate="no">​</a></h2>
<table><thead><tr><th>ファイル</th><th>変更内容</th></tr></thead><tbody><tr><td><code>src/app/api/alert-webhook/route.ts</code></td><td>4 種ソースのウェブフック受信 + HMAC 検証 + 相関分析トリガー + アクティブインシデント GET</td></tr><tr><td><code>src/app/api/notification/route.ts</code></td><td>Slack Block Kit / SNS 送信（重大度チャンネルルーティング、マークダウン→プレーンテキスト）</td></tr><tr><td><code>src/lib/alert-types.ts</code></td><td>ソース別の正規化関数（CloudWatch/Alertmanager/Grafana/Generic）</td></tr><tr><td><code>src/lib/alert-correlation.ts</code></td><td>相関分析エンジン（30 秒バッファ、時間/サービス/リソースのマッチング）</td></tr><tr><td><code>src/lib/alert-diagnosis.ts</code></td><td>診断オーケストレーター（戦略選択、並列コレクター、AlertContext スコープ）</td></tr><tr><td><code>src/lib/alert-knowledge.ts</code></td><td>ナレッジベース（JSONL 保存、月間サマリー、類似度検索）</td></tr><tr><td><code>src/lib/slack-notification.ts</code></td><td>Slack クライアント（Bot Token/Webhook、スレッド更新）</td></tr><tr><td><code>src/lib/alert-sqs-poller.ts</code></td><td>SQS バックグラウンドポーラー（SNS→SQS→EC2、DLQ、Rate Limit）</td></tr><tr><td><code>src/app/alert-settings/page.tsx</code></td><td>アラート設定管理ページ（Admin 専用）</td></tr><tr><td><code>docs/decisions/ADR-011~028.md</code></td><td>18 個の ADR を新規追加</td></tr><tr><td><code>docs/runbooks/*.md</code></td><td>5 個のランブックを新規追加</td></tr><tr><td><code>web/docs/monitoring/ai-diagnosis.md</code></td><td>AI 総合診断ガイド</td></tr><tr><td><code>web/docs/monitoring/alerts.md</code></td><td>アラートパイプラインガイド</td></tr></tbody></table>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="バージョン比較">バージョン比較<a href="https://www.atomai.click/awsops/ja/whatsnew/2026/04/23/v1.8.1#%E3%83%90%E3%83%BC%E3%82%B8%E3%83%A7%E3%83%B3%E6%AF%94%E8%BC%83" class="hash-link" aria-label="バージョン比較への直接リンク" title="バージョン比較への直接リンク" translate="no">​</a></h2>
<table><thead><tr><th>項目</th><th>v1.8.0</th><th>v1.8.1</th><th>変更</th></tr></thead><tbody><tr><td>アラートパイプライン</td><td>—</td><td><strong>ウェブフック + 相関分析 + AI 診断</strong></td><td>新規</td></tr><tr><td>サポートするアラートソース</td><td>—</td><td><strong>4 種 (CloudWatch/Alertmanager/Grafana/Generic)</strong></td><td>新規</td></tr><tr><td>Slack 通知</td><td>—</td><td><strong>Block Kit + スレッド更新</strong></td><td>新規</td></tr><tr><td>ADR</td><td>10 個 (001-010)</td><td><strong>28 個 (001-028)</strong></td><td>+18</td></tr><tr><td>ランブック</td><td>—</td><td><strong>5 個</strong></td><td>新規</td></tr><tr><td>モジュール CLAUDE.md</td><td>7 個</td><td><strong>18 個</strong></td><td>+11</td></tr><tr><td>Web ガイドページ</td><td>39</td><td><strong>41</strong></td><td>+2 (ai-diagnosis, alerts)</td></tr></tbody></table>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="参考">参考<a href="https://www.atomai.click/awsops/ja/whatsnew/2026/04/23/v1.8.1#%E5%8F%82%E8%80%83" class="hash-link" aria-label="参考への直接リンク" title="参考への直接リンク" translate="no">​</a></h2>
<ul>
<li class="">ADR-009: アラートトリガー AI 診断</li>
<li class="">ADR-012: SNS 通知戦略</li>
<li class="">ADR-013: 自動収集調査エージェント</li>
<li class="">ADR-020: HMAC ウェブフック認証</li>
</ul>]]></content:encoded>
            <category>Release</category>
            <category>alerts</category>
            <category>AI</category>
            <category>observability</category>
            <category>Docs</category>
        </item>
        <item>
            <title><![CDATA[v1.8.0 — 外部オブザーバビリティ統合 + AI 総合診断]]></title>
            <link>https://www.atomai.click/awsops/ja/whatsnew/2026/04/07/v1.8.0</link>
            <guid>https://www.atomai.click/awsops/ja/whatsnew/2026/04/07/v1.8.0</guid>
            <pubDate>Tue, 07 Apr 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[7 種の外部オブザーバビリティプラットフォーム連携 + 自然言語→クエリ、AI ルーティング 10→11（datasource）、15 セクション AI 総合診断（DOCX/PDF/スケジュール）、SSRF 防止。]]></description>
            <content:encoded><![CDATA[<p>外部オブザーバビリティスタックをデータソースとして連携し、<strong>自然言語をクエリに変換</strong>する機能と <strong>15 セクション AI 総合診断</strong>レポートを追加した大型リリースです。</p>
<div class="theme-admonition theme-admonition-tip admonition_xJq3 alert alert--success"><div class="admonitionHeading_Gvgb"><span class="admonitionIcon_Rf37"><svg viewBox="0 0 12 16"><path fill-rule="evenodd" d="M6.5 0C3.48 0 1 2.19 1 5c0 .92.55 2.25 1 3 1.34 2.25 1.78 2.78 2 4v1h5v-1c.22-1.22.66-1.75 2-4 .45-.75 1-2.08 1-3 0-2.81-2.48-5-5.5-5zm3.64 7.48c-.25.44-.47.8-.67 1.11-.86 1.41-1.25 2.06-1.45 3.23-.02.05-.02.11-.02.17H5c0-.06 0-.13-.02-.17-.2-1.17-.59-1.83-1.45-3.23-.2-.31-.42-.67-.67-1.11C2.44 6.78 2 5.65 2 5c0-2.2 2.02-4 4.5-4 1.22 0 2.36.42 3.22 1.19C10.55 2.94 11 3.94 11 5c0 .66-.44 1.78-.86 2.48zM4 14h5c-.23 1.14-1.3 2-2.5 2s-2.27-.86-2.5-2z"></path></svg></span>主な変更点</div><div class="admonitionContent_BuS1"><p><strong>7 種オブザーバビリティ連携</strong> · <strong>自然言語 → PromQL/LogQL/TraceQL/SQL</strong> · <strong>AI ルーティング 10→11（<code>datasource</code>）</strong> · <strong>15 セクション総合診断 + DOCX/PDF/スケジュール</strong> · <strong>SSRF 防止</strong></p></div></div>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="外部オブザーバビリティ統合7-種">外部オブザーバビリティ統合（7 種）<a href="https://www.atomai.click/awsops/ja/whatsnew/2026/04/07/v1.8.0#%E5%A4%96%E9%83%A8%E3%82%AA%E3%83%96%E3%82%B6%E3%83%BC%E3%83%90%E3%83%93%E3%83%AA%E3%83%86%E3%82%A3%E7%B5%B1%E5%90%887-%E7%A8%AE" class="hash-link" aria-label="外部オブザーバビリティ統合（7 種）への直接リンク" title="外部オブザーバビリティ統合（7 種）への直接リンク" translate="no">​</a></h2>
<p>AWS データに加えて、既存のオブザーバビリティプラットフォームをデータソースとして連携します。</p>
<table><thead><tr><th>種類</th><th>プラットフォーム</th></tr></thead><tbody><tr><td>Metrics</td><td>Prometheus · Dynatrace · Datadog</td></tr><tr><td>Logs</td><td>Loki · ClickHouse</td></tr><tr><td>Traces</td><td>Tempo · Jaeger</td></tr></tbody></table>
<ul>
<li class=""><code>/datasources</code> — データソース CRUD · 接続テスト · 認証設定</li>
<li class=""><code>/datasources/explore</code> — 直接クエリ実行 + <strong>AI クエリ生成（自然言語 → PromQL/LogQL/TraceQL/SQL）</strong></li>
<li class="">AI アシスタントの <code>datasource</code> ルートが外部メトリクスの質問を自動分類（AI ルーティングを <strong>10 → 11</strong> に拡張）</li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="ai-総合診断15-セクション">AI 総合診断（15 セクション）<a href="https://www.atomai.click/awsops/ja/whatsnew/2026/04/07/v1.8.0#ai-%E7%B7%8F%E5%90%88%E8%A8%BA%E6%96%AD15-%E3%82%BB%E3%82%AF%E3%82%B7%E3%83%A7%E3%83%B3" class="hash-link" aria-label="AI 総合診断（15 セクション）への直接リンク" title="AI 総合診断（15 セクション）への直接リンク" translate="no">​</a></h2>
<ul>
<li class="">Bedrock Opus がインフラ全体を <strong>15 セクション</strong>で自動分析 — コスト/セキュリティ/信頼性を中心に</li>
<li class=""><strong>DOCX · Markdown · ブラウザ Print-to-PDF</strong> エクスポート</li>
<li class=""><strong>週次/隔週/月次</strong>の自動スケジュール（report scheduler）</li>
<li class="">印刷用レポートページ <code>/ai-diagnosis/report</code>（A4 ページブレーク）</li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="セキュリティssrf-防止">セキュリティ（SSRF 防止）<a href="https://www.atomai.click/awsops/ja/whatsnew/2026/04/07/v1.8.0#%E3%82%BB%E3%82%AD%E3%83%A5%E3%83%AA%E3%83%86%E3%82%A3ssrf-%E9%98%B2%E6%AD%A2" class="hash-link" aria-label="セキュリティ（SSRF 防止）への直接リンク" title="セキュリティ（SSRF 防止）への直接リンク" translate="no">​</a></h2>
<ul>
<li class=""><code>datasource-client.ts</code> の URL 検証が、AI ルートを含むすべての外部 fetch 経路を保護</li>
<li class="">allowlist ベースのプライベートネットワークアクセス制御 + IPv6 プライベート/リンクローカル（<code>fc00::/7</code>、<code>fe80::/10</code>）の検知</li>
<li class="">データソースクエリ・AI クエリ生成は管理者専用</li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="その他">その他<a href="https://www.atomai.click/awsops/ja/whatsnew/2026/04/07/v1.8.0#%E3%81%9D%E3%81%AE%E4%BB%96" class="hash-link" aria-label="その他への直接リンク" title="その他への直接リンク" translate="no">​</a></h2>
<ul>
<li class="">マルチルート合成に <strong>Converse Stream API</strong> + AgentCore 応答のタイピング効果</li>
<li class="">ゾンビ PostgreSQL コネクションの自動クリーンアップ、モニタリングクエリの時間範囲フィルターで pg pool 枯渇を防止</li>
<li class="">EKS Access Entry の状態表示 + kubeconfig 登録、EKS サービスリソースタブ</li>
</ul>]]></content:encoded>
            <category>Release</category>
            <category>observability</category>
            <category>AI</category>
            <category>diagnosis</category>
            <category>Security</category>
        </item>
        <item>
            <title><![CDATA[v1.7.3 — AI 総合診断 Overhaul + Auto-Collect エージェント]]></title>
            <link>https://www.atomai.click/awsops/ja/whatsnew/2026/04/06/v1.7.3</link>
            <guid>https://www.atomai.click/awsops/ja/whatsnew/2026/04/06/v1.7.3</guid>
            <pubDate>Mon, 06 Apr 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[AI 総合診断のリニューアル（DOCX/MD/PDF エクスポート、定期レポート）、6 種の自動収集エージェント、FinOps MCP、EKS UX の大幅改善。]]></description>
            <content:encoded><![CDATA[<p><strong>AI 総合診断</strong>が完全に新しくなりました。DOCX/Markdown/PDF の <strong>3 種エクスポート</strong>、<strong>定期レポート</strong>（週次/隔週/月次）、そしてデータを自動収集する <strong>6 種の Auto-Collect エージェント</strong>を追加しました。EKS ページも、クラスターアクセス管理、Describe パネル、Service Resources タブなど大幅に改善されました。</p>
<div class="theme-admonition theme-admonition-tip admonition_xJq3 alert alert--success"><div class="admonitionHeading_Gvgb"><span class="admonitionIcon_Rf37"><svg viewBox="0 0 12 16"><path fill-rule="evenodd" d="M6.5 0C3.48 0 1 2.19 1 5c0 .92.55 2.25 1 3 1.34 2.25 1.78 2.78 2 4v1h5v-1c.22-1.22.66-1.75 2-4 .45-.75 1-2.08 1-3 0-2.81-2.48-5-5.5-5zm3.64 7.48c-.25.44-.47.8-.67 1.11-.86 1.41-1.25 2.06-1.45 3.23-.02.05-.02.11-.02.17H5c0-.06 0-.13-.02-.17-.2-1.17-.59-1.83-1.45-3.23-.2-.31-.42-.67-.67-1.11C2.44 6.78 2 5.65 2 5c0-2.2 2.02-4 4.5-4 1.22 0 2.36.42 3.22 1.19C10.55 2.94 11 3.94 11 5c0 .66-.44 1.78-.86 2.48zM4 14h5c-.23 1.14-1.3 2-2.5 2s-2.27-.86-2.5-2z"></path></svg></span>主な変更点</div><div class="admonitionContent_BuS1"><p><strong>AI 総合診断リニューアル</strong> · <strong>DOCX/MD/PDF エクスポート</strong> · <strong>定期レポート</strong> · <strong>6 種 Auto-Collect エージェント</strong> · <strong>FinOps MCP 5 ツール</strong> · <strong>EKS クラスターアクセス管理</strong> · <strong>Powerpipe exit code 2 の処理</strong></p></div></div>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="ai-総合診断リニューアル">AI 総合診断リニューアル<a href="https://www.atomai.click/awsops/ja/whatsnew/2026/04/06/v1.7.3#ai-%E7%B7%8F%E5%90%88%E8%A8%BA%E6%96%AD%E3%83%AA%E3%83%8B%E3%83%A5%E3%83%BC%E3%82%A2%E3%83%AB" class="hash-link" aria-label="AI 総合診断リニューアルへの直接リンク" title="AI 総合診断リニューアルへの直接リンク" translate="no">​</a></h2>
<p>従来の <code>/diagnosis</code> パスが <code>/ai-diagnosis</code> に変更され、UI 全般がリニューアルされました。</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="before--after">Before / After<a href="https://www.atomai.click/awsops/ja/whatsnew/2026/04/06/v1.7.3#before--after" class="hash-link" aria-label="Before / Afterへの直接リンク" title="Before / Afterへの直接リンク" translate="no">​</a></h3>
<table><thead><tr><th>項目</th><th>Before (v1.7.2)</th><th>After (v1.7.3)</th></tr></thead><tbody><tr><td>パス</td><td><code>/diagnosis</code></td><td><strong><code>/ai-diagnosis</code></strong></td></tr><tr><td>名称</td><td>総合診断</td><td><strong>AI 総合診断</strong></td></tr><tr><td>エクスポート</td><td>PPTX</td><td><strong>DOCX + Markdown + PDF</strong></td></tr><tr><td>定期レポート</td><td>—</td><td><strong>週次/隔週/月次</strong></td></tr><tr><td>S3 アップロード</td><td>—</td><td><strong>DOCX + MD の自動アップロード</strong></td></tr></tbody></table>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="3-種エクスポート">3 種エクスポート<a href="https://www.atomai.click/awsops/ja/whatsnew/2026/04/06/v1.7.3#3-%E7%A8%AE%E3%82%A8%E3%82%AF%E3%82%B9%E3%83%9D%E3%83%BC%E3%83%88" class="hash-link" aria-label="3 種エクスポートへの直接リンク" title="3 種エクスポートへの直接リンク" translate="no">​</a></h3>
<p><strong>DOCX</strong> — <code>docx</code> パッケージベースの A4 プロフェッショナルレポート:</p>
<ul>
<li class="">表紙（タイトル、ヘルススコア、アカウントエイリアス、日付）</li>
<li class="">目次（ハイパーリンク、Heading 1-3）</li>
<li class="">セクション別アクセントカラー（コスト=緑、セキュリティ=赤、ネットワーク/EKS=紫、アイドル/MSK=オレンジ）</li>
<li class="">マークダウン解析（見出し、テーブル、リスト、引用、インラインコード/ボールド/イタリック）</li>
</ul>
<p><strong>Markdown</strong> — すべてのセクションを 1 つの <code>.md</code> ファイルにまとめてエクスポートします。</p>
<p><strong>PDF</strong> — <code>/ai-diagnosis/report</code> 専用印刷ページ:</p>
<ul>
<li class="">白背景の A4 レイアウト、CSS <code>@media print</code> によるページ区切り</li>
<li class="">「印刷 / PDF 保存」ボタンでブラウザの Print-to-PDF</li>
</ul>
<div class="language-typescript codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-typescript codeBlock_bY9V thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#F8F8F2"><span class="token comment" style="color:rgb(98, 114, 164)">// src/lib/report-docx.ts (主要な構造)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">const</span><span class="token plain"> doc </span><span class="token operator">=</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">new</span><span class="token plain"> </span><span class="token class-name maybe-class-name">Document</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  sections</span><span class="token operator">:</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">[</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token function" style="color:rgb(80, 250, 123)">coverPage</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token plain">title</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"> healthScore</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"> accountAlias</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"> date</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token function" style="color:rgb(80, 250, 123)">tableOfContents</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token spread operator">...</span><span class="token plain">sections</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token method function property-access" style="color:rgb(80, 250, 123)">map</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token plain">s </span><span class="token arrow operator">=&gt;</span><span class="token plain"> </span><span class="token function" style="color:rgb(80, 250, 123)">sectionPage</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token plain">s</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"> accentColor</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token punctuation" style="color:rgb(248, 248, 242)">]</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">const</span><span class="token plain"> buffer </span><span class="token operator">=</span><span class="token plain"> </span><span class="token keyword control-flow" style="color:rgb(189, 147, 249);font-style:italic">await</span><span class="token plain"> </span><span class="token maybe-class-name">Packer</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token method function property-access" style="color:rgb(80, 250, 123)">toBuffer</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token plain">doc</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><br></span></code></pre></div></div>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="定期レポート">定期レポート<a href="https://www.atomai.click/awsops/ja/whatsnew/2026/04/06/v1.7.3#%E5%AE%9A%E6%9C%9F%E3%83%AC%E3%83%9D%E3%83%BC%E3%83%88" class="hash-link" aria-label="定期レポートへの直接リンク" title="定期レポートへの直接リンク" translate="no">​</a></h3>
<table><thead><tr><th>項目</th><th>説明</th></tr></thead><tbody><tr><td>頻度</td><td>週次 / 隔週 / 月次</td></tr><tr><td>タイムゾーン</td><td>KST (UTC+9)</td></tr><tr><td>設定</td><td>曜日（0-6）、日付（1-28）、時刻（0-23）</td></tr><tr><td>保存先</td><td><code>data/report-schedule.json</code></td></tr><tr><td>チェック周期</td><td>5 分ごとにスケジュールを確認</td></tr></tbody></table>
<div class="language-typescript codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-typescript codeBlock_bY9V thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#F8F8F2"><span class="token comment" style="color:rgb(98, 114, 164)">// src/lib/report-scheduler.ts</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">type</span><span class="token plain"> </span><span class="token class-name maybe-class-name">Schedule</span><span class="token plain"> </span><span class="token operator">=</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  enabled</span><span class="token operator">:</span><span class="token plain"> </span><span class="token builtin" style="color:rgb(189, 147, 249)">boolean</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  frequency</span><span class="token operator">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">'weekly'</span><span class="token plain"> </span><span class="token operator">|</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">'biweekly'</span><span class="token plain"> </span><span class="token operator">|</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">'monthly'</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  dayOfWeek</span><span class="token operator">?</span><span class="token operator">:</span><span class="token plain"> </span><span class="token builtin" style="color:rgb(189, 147, 249)">number</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain">   </span><span class="token comment" style="color:rgb(98, 114, 164)">// 0=日 ~ 6=土</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  dayOfMonth</span><span class="token operator">?</span><span class="token operator">:</span><span class="token plain"> </span><span class="token builtin" style="color:rgb(189, 147, 249)">number</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain">  </span><span class="token comment" style="color:rgb(98, 114, 164)">// 1~28</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  hour</span><span class="token operator">:</span><span class="token plain"> </span><span class="token builtin" style="color:rgb(189, 147, 249)">number</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain">         </span><span class="token comment" style="color:rgb(98, 114, 164)">// KST 基準</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  language</span><span class="token operator">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">'ko'</span><span class="token plain"> </span><span class="token operator">|</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">'en'</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><br></span></code></pre></div></div>
<p>UI でトグルの ON/OFF、頻度/曜日/時刻/言語を設定すると、自動的にレポートが生成され S3 にアップロードされます。</p>
<div class="theme-admonition theme-admonition-info admonition_xJq3 alert alert--info"><div class="admonitionHeading_Gvgb"><span class="admonitionIcon_Rf37"><svg viewBox="0 0 14 16"><path fill-rule="evenodd" d="M7 2.3c3.14 0 5.7 2.56 5.7 5.7s-2.56 5.7-5.7 5.7A5.71 5.71 0 0 1 1.3 8c0-3.14 2.56-5.7 5.7-5.7zM7 1C3.14 1 0 4.14 0 8s3.14 7 7 7 7-3.14 7-7-3.14-7-7-7zm1 3H6v5h2V4zm0 6H6v2h2v-2z"></path></svg></span>S3 アップロード</div><div class="admonitionContent_BuS1"><p>DOCX と Markdown ファイルは <code>awsops-deploy-{accountId}/reports/</code> パスに自動アップロードされます。7 日間有効な Presigned URL を通じてダウンロードできます。CDK スタックに S3 PutObject/GetObject 権限が自動追加されます。</p></div></div>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="6-種の-auto-collect-エージェント">6 種の Auto-Collect エージェント<a href="https://www.atomai.click/awsops/ja/whatsnew/2026/04/06/v1.7.3#6-%E7%A8%AE%E3%81%AE-auto-collect-%E3%82%A8%E3%83%BC%E3%82%B8%E3%82%A7%E3%83%B3%E3%83%88" class="hash-link" aria-label="6 種の Auto-Collect エージェントへの直接リンク" title="6 種の Auto-Collect エージェントへの直接リンク" translate="no">​</a></h2>
<p>AI 総合診断レポートのデータ収集を自動化する専用エージェントです。各エージェントはマルチソースから並列にデータを収集し、ライブステータスをストリーミングします。</p>
<table><thead><tr><th>エージェント</th><th>ソース</th><th>収集項目</th></tr></thead><tbody><tr><td><strong>EKS Optimize</strong></td><td>Prometheus + K8s + Steampipe</td><td>CPU/メモリ使用率、スロットリング、Pod 再起動、HTTP 5xx、ノード使用率</td></tr><tr><td><strong>DB Optimize</strong></td><td>Steampipe + CloudWatch</td><td>RDS/ElastiCache/OpenSearch のインスタンス発見 + メトリクスベースのライトサイジング</td></tr><tr><td><strong>MSK Optimize</strong></td><td>Steampipe + CloudWatch + Prometheus</td><td>ブローカーメトリクス、メッセージスループット、コンシューマーラグ、パーティション数</td></tr><tr><td><strong>Idle Scan</strong></td><td>Steampipe</td><td>未アタッチ EBS、gp2 ボリューム、未使用 EIP、停止中 EC2、90 日超のスナップショット、未使用 SG + コスト見積もり</td></tr><tr><td><strong>Trace Analyze</strong></td><td>Tempo/Jaeger + Prometheus</td><td>サービス別エラートレース、500ms 超のスロートレース</td></tr><tr><td><strong>Incident</strong></td><td>CloudWatch + K8s + Prometheus</td><td>ALARM 状態のアラーム、Warning イベント、HTTP 5xx の急増、CPU スパイク、メモリ圧迫</td></tr></tbody></table>
<div class="language-typescript codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-typescript codeBlock_bY9V thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#F8F8F2"><span class="token comment" style="color:rgb(98, 114, 164)">// src/lib/collectors/types.ts</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token keyword module" style="color:rgb(189, 147, 249);font-style:italic">export</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">interface</span><span class="token plain"> </span><span class="token class-name maybe-class-name">Collector</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token function" style="color:rgb(80, 250, 123)">collect</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token plain">send</span><span class="token operator">:</span><span class="token plain"> </span><span class="token maybe-class-name">SendFn</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"> accountId</span><span class="token operator">?</span><span class="token operator">:</span><span class="token plain"> </span><span class="token builtin" style="color:rgb(189, 147, 249)">string</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"> isEn</span><span class="token operator">?</span><span class="token operator">:</span><span class="token plain"> </span><span class="token builtin" style="color:rgb(189, 147, 249)">boolean</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token operator">:</span><span class="token plain"> </span><span class="token known-class-name class-name">Promise</span><span class="token operator">&lt;</span><span class="token maybe-class-name">CollectorResult</span><span class="token operator">&gt;</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token function" style="color:rgb(80, 250, 123)">formatContext</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token plain">data</span><span class="token operator">:</span><span class="token plain"> </span><span class="token maybe-class-name">CollectorResult</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token operator">:</span><span class="token plain"> </span><span class="token builtin" style="color:rgb(189, 147, 249)">string</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  analysisPrompt</span><span class="token operator">:</span><span class="token plain"> </span><span class="token builtin" style="color:rgb(189, 147, 249)">string</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  displayName</span><span class="token operator">:</span><span class="token plain"> </span><span class="token builtin" style="color:rgb(189, 147, 249)">string</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><br></span></code></pre></div></div>
<div class="theme-admonition theme-admonition-tip admonition_xJq3 alert alert--success"><div class="admonitionHeading_Gvgb"><span class="admonitionIcon_Rf37"><svg viewBox="0 0 12 16"><path fill-rule="evenodd" d="M6.5 0C3.48 0 1 2.19 1 5c0 .92.55 2.25 1 3 1.34 2.25 1.78 2.78 2 4v1h5v-1c.22-1.22.66-1.75 2-4 .45-.75 1-2.08 1-3 0-2.81-2.48-5-5.5-5zm3.64 7.48c-.25.44-.47.8-.67 1.11-.86 1.41-1.25 2.06-1.45 3.23-.02.05-.02.11-.02.17H5c0-.06 0-.13-.02-.17-.2-1.17-.59-1.83-1.45-3.23-.2-.31-.42-.67-.67-1.11C2.44 6.78 2 5.65 2 5c0-2.2 2.02-4 4.5-4 1.22 0 2.36.42 3.22 1.19C10.55 2.94 11 3.94 11 5c0 .66-.44 1.78-.86 2.48zM4 14h5c-.23 1.14-1.3 2-2.5 2s-2.27-.86-2.5-2z"></path></svg></span>Collector パターン</div><div class="admonitionContent_BuS1"><p>すべてのエージェントが同じ <code>Collector</code> インターフェースを実装します。<code>collect()</code> は <code>Promise.allSettled</code> でマルチソースを並列収集し、<code>SendFn</code> コールバックで進行状況をリアルタイムに伝達します。新しいエージェントを追加する際は、このインターフェースを実装するだけで済みます。</p></div></div>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="finops-mcp-lambda">FinOps MCP Lambda<a href="https://www.atomai.click/awsops/ja/whatsnew/2026/04/06/v1.7.3#finops-mcp-lambda" class="hash-link" aria-label="FinOps MCP Lambdaへの直接リンク" title="FinOps MCP Lambdaへの直接リンク" translate="no">​</a></h2>
<p>Cost Gateway に <strong>5 つの FinOps ツール</strong>が追加されました。</p>
<table><thead><tr><th>ツール</th><th>ソース</th><th>説明</th></tr></thead><tbody><tr><td><code>get_rightsizing_recommendations</code></td><td>Compute Optimizer</td><td>EC2/RDS/ECS/Lambda のライトサイジング + 月間削減額</td></tr><tr><td><code>get_savings_plans_recommendations</code></td><td>Cost Explorer</td><td>Savings Plans の購入推奨（1 年/3 年、No Upfront）</td></tr><tr><td><code>get_reserved_instance_recommendations</code></td><td>Cost Explorer</td><td>RI の購入推奨（EC2/RDS/ElastiCache/Redshift）</td></tr><tr><td><code>get_cost_optimization_hub_recommendations</code></td><td>Cost Optimization Hub</td><td>統合最適化推奨（Rightsize/Stop/Upgrade/SP）</td></tr><tr><td><code>get_trusted_advisor_cost_checks</code></td><td>Trusted Advisor</td><td>コスト最適化カテゴリのチェック + フラグ付きリソース</td></tr></tbody></table>
<p>すべてのツールは <code>target_account_id</code> パラメータによるクロスアカウント照会をサポートします。</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="eksk8s-ux-の大幅改善">EKS/K8s UX の大幅改善<a href="https://www.atomai.click/awsops/ja/whatsnew/2026/04/06/v1.7.3#eksk8s-ux-%E3%81%AE%E5%A4%A7%E5%B9%85%E6%94%B9%E5%96%84" class="hash-link" aria-label="EKS/K8s UX の大幅改善への直接リンク" title="EKS/K8s UX の大幅改善への直接リンク" translate="no">​</a></h2>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="クラスターアクセス管理">クラスターアクセス管理<a href="https://www.atomai.click/awsops/ja/whatsnew/2026/04/06/v1.7.3#%E3%82%AF%E3%83%A9%E3%82%B9%E3%82%BF%E3%83%BC%E3%82%A2%E3%82%AF%E3%82%BB%E3%82%B9%E7%AE%A1%E7%90%86" class="hash-link" aria-label="クラスターアクセス管理への直接リンク" title="クラスターアクセス管理への直接リンク" translate="no">​</a></h3>
<table><thead><tr><th>機能</th><th>説明</th></tr></thead><tbody><tr><td><strong>アクセス状態バッジ</strong></td><td>クラスターごとに「Access Entry」登録の有無を表示</td></tr><tr><td><strong>ワンクリック登録</strong></td><td>「Register ViewPolicy」ボタンで Access Entry + Policy を自動作成</td></tr><tr><td><strong>接続検知</strong></td><td>K8s クエリ結果の <code>context_name</code> の有無で実際の接続状態を判別</td></tr><tr><td><strong>CLI ガイド</strong></td><td>未接続クラスターに対して EC2 Role ARN ベースの登録コマンドを案内</td></tr></tbody></table>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="新機能">新機能<a href="https://www.atomai.click/awsops/ja/whatsnew/2026/04/06/v1.7.3#%E6%96%B0%E6%A9%9F%E8%83%BD" class="hash-link" aria-label="新機能への直接リンク" title="新機能への直接リンク" translate="no">​</a></h3>
<table><thead><tr><th>機能</th><th>ファイル</th><th>説明</th></tr></thead><tbody><tr><td><strong>Describe パネル</strong></td><td><code>K9sDetailPanel</code></td><td>JSONB 詳細情報（labels、annotations、containers、volumes、conditions）</td></tr><tr><td><strong>Service Resources タブ</strong></td><td><code>k8s.ts</code></td><td>サービス別 CPU/Memory バーチャート（Pod セレクタージョイン）</td></tr><tr><td><strong>クラスターフィルター</strong></td><td><code>k8s/page.tsx</code></td><td>クラスターカードのクリックでノード/Pod/イベント/サービスをフィルタリング</td></tr><tr><td><strong>StatsCard ナビゲーション</strong></td><td><code>StatsCard.tsx</code></td><td>Nodes→<code>/k8s/nodes</code>、Pods→<code>/k8s/pods</code> などクリックで遷移</td></tr><tr><td><strong>SQL 統合</strong></td><td><code>queries/k8s.ts</code></td><td>インライン SQL を中央クエリファイルへ移動 + キャッシュウォーマーを追加</td></tr></tbody></table>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="バグ修正">バグ修正<a href="https://www.atomai.click/awsops/ja/whatsnew/2026/04/06/v1.7.3#%E3%83%90%E3%82%B0%E4%BF%AE%E6%AD%A3" class="hash-link" aria-label="バグ修正への直接リンク" title="バグ修正への直接リンク" translate="no">​</a></h3>
<ul>
<li class=""><code>external_ip</code> → <code>external_ips</code> のカラム名を修正（サービス 0/0 バグ）</li>
<li class="">EC2 IAM Role ARN の切り捨てを修正（SQL <code>||</code> 演算子のフィルター衝突）</li>
<li class="">Register クリック時のクラスターフィルタートグルを防止（<code>stopPropagation</code>）</li>
<li class="">登録後にポーリングで接続を確認（5 回 × 3 秒）</li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="benchmark-powerpipe-exit-code-2-の処理">Benchmark: Powerpipe Exit Code 2 の処理<a href="https://www.atomai.click/awsops/ja/whatsnew/2026/04/06/v1.7.3#benchmark-powerpipe-exit-code-2-%E3%81%AE%E5%87%A6%E7%90%86" class="hash-link" aria-label="Benchmark: Powerpipe Exit Code 2 の処理への直接リンク" title="Benchmark: Powerpipe Exit Code 2 の処理への直接リンク" translate="no">​</a></h2>
<p>Powerpipe はベンチマークコントロールにアラームがあると <strong>exit code 2</strong> で終了します。これは正常な動作ですが、従来のコードは異常終了として処理していました。</p>
<table><thead><tr><th>項目</th><th>Before</th><th>After</th></tr></thead><tbody><tr><td>判定基準</td><td>exit code === 0</td><td><strong>出力ファイルの存在 + サイズ &gt; 0</strong></td></tr><tr><td>exit code 2</td><td>エラー処理</td><td><strong>正常処理</strong></td></tr></tbody></table>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#F8F8F2"><span class="token comment" style="color:rgb(98, 114, 164)"># exit code は無視し、出力ファイルの有効性で判断</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">powerpipe benchmark run </span><span class="token punctuation" style="color:rgb(248, 248, 242)">..</span><span class="token plain">. </span><span class="token operator">&gt;</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"</span><span class="token string variable" style="color:rgb(189, 147, 249);font-style:italic">${tmpFile}</span><span class="token string" style="color:rgb(255, 121, 198)">"</span><span class="token plain"> </span><span class="token operator file-descriptor important">2</span><span class="token operator">&gt;</span><span class="token string" style="color:rgb(255, 121, 198)">"</span><span class="token string variable" style="color:rgb(189, 147, 249);font-style:italic">${errorFile}</span><span class="token string" style="color:rgb(255, 121, 198)">"</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">\</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">if</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">[</span><span class="token plain"> </span><span class="token parameter variable" style="color:rgb(189, 147, 249);font-style:italic">-s</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"</span><span class="token string variable" style="color:rgb(189, 147, 249);font-style:italic">${tmpFile}</span><span class="token string" style="color:rgb(255, 121, 198)">"</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">]</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">then</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token function" style="color:rgb(80, 250, 123)">mv</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"</span><span class="token string variable" style="color:rgb(189, 147, 249);font-style:italic">${tmpFile}</span><span class="token string" style="color:rgb(255, 121, 198)">"</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"</span><span class="token string variable" style="color:rgb(189, 147, 249);font-style:italic">${resultFile}</span><span class="token string" style="color:rgb(255, 121, 198)">"</span><span class="token plain"> </span><span class="token operator">&amp;&amp;</span><span class="token plain"> </span><span class="token builtin class-name" style="color:rgb(189, 147, 249)">echo</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"done"</span><span class="token plain"> </span><span class="token operator">&gt;</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"</span><span class="token string variable" style="color:rgb(189, 147, 249);font-style:italic">${statusFile}</span><span class="token string" style="color:rgb(255, 121, 198)">"</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">else</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token builtin class-name" style="color:rgb(189, 147, 249)">echo</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"error"</span><span class="token plain"> </span><span class="token operator">&gt;</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"</span><span class="token string variable" style="color:rgb(189, 147, 249);font-style:italic">${statusFile}</span><span class="token string" style="color:rgb(255, 121, 198)">"</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">fi</span><br></span></code></pre></div></div>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="インフラ-s3-レポートアップロード--update-infra-スクリプト">インフラ: S3 レポートアップロード + update-infra スクリプト<a href="https://www.atomai.click/awsops/ja/whatsnew/2026/04/06/v1.7.3#%E3%82%A4%E3%83%B3%E3%83%95%E3%83%A9-s3-%E3%83%AC%E3%83%9D%E3%83%BC%E3%83%88%E3%82%A2%E3%83%83%E3%83%97%E3%83%AD%E3%83%BC%E3%83%89--update-infra-%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%97%E3%83%88" class="hash-link" aria-label="インフラ: S3 レポートアップロード + update-infra スクリプトへの直接リンク" title="インフラ: S3 レポートアップロード + update-infra スクリプトへの直接リンク" translate="no">​</a></h2>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="s3-ポリシー">S3 ポリシー<a href="https://www.atomai.click/awsops/ja/whatsnew/2026/04/06/v1.7.3#s3-%E3%83%9D%E3%83%AA%E3%82%B7%E3%83%BC" class="hash-link" aria-label="S3 ポリシーへの直接リンク" title="S3 ポリシーへの直接リンク" translate="no">​</a></h3>
<p>CDK スタックに EC2 ロールの S3 権限が追加されました:</p>
<div class="language-typescript codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-typescript codeBlock_bY9V thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#F8F8F2"><span class="token comment" style="color:rgb(98, 114, 164)">// infra-cdk/lib/awsops-stack.ts</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">ec2Role</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token method function property-access" style="color:rgb(80, 250, 123)">addToPolicy</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">new</span><span class="token plain"> </span><span class="token class-name">iam</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token method function property-access maybe-class-name" style="color:rgb(80, 250, 123)">PolicyStatement</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  actions</span><span class="token operator">:</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">[</span><span class="token string" style="color:rgb(255, 121, 198)">'s3:PutObject'</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">'s3:GetObject'</span><span class="token punctuation" style="color:rgb(248, 248, 242)">]</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  resources</span><span class="token operator">:</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">[</span><span class="token template-string template-punctuation string" style="color:rgb(255, 121, 198)">`</span><span class="token template-string string" style="color:rgb(255, 121, 198)">arn:aws:s3:::awsops-deploy-</span><span class="token template-string interpolation interpolation-punctuation punctuation" style="color:rgb(248, 248, 242)">${</span><span class="token template-string interpolation keyword" style="color:rgb(189, 147, 249);font-style:italic">this</span><span class="token template-string interpolation punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token template-string interpolation property-access">account</span><span class="token template-string interpolation interpolation-punctuation punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token template-string string" style="color:rgb(255, 121, 198)">/reports/*</span><span class="token template-string template-punctuation string" style="color:rgb(255, 121, 198)">`</span><span class="token punctuation" style="color:rgb(248, 248, 242)">]</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><br></span></code></pre></div></div>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="update-infra-スクリプト">update-infra スクリプト<a href="https://www.atomai.click/awsops/ja/whatsnew/2026/04/06/v1.7.3#update-infra-%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%97%E3%83%88" class="hash-link" aria-label="update-infra スクリプトへの直接リンク" title="update-infra スクリプトへの直接リンク" translate="no">​</a></h3>
<p>EC2 を置き換えずに CDK スタックを安全に更新する <code>00-update-infra.sh</code> スクリプト:</p>
<ol>
<li class=""><strong>既存スタックのパラメータ読み取り</strong> — CloudFormation から現在の値を保持</li>
<li class=""><strong>CDK コンテキストの復元</strong> — VPC、TGW、ドメインなどをライブインフラから再抽出</li>
<li class=""><strong>cdk diff プレビュー</strong> — EC2 置き換えの有無を警告</li>
<li class=""><strong>デプロイ</strong> — <code>--no-rollback</code> で安全にデプロイ</li>
</ol>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="バージョン比較">バージョン比較<a href="https://www.atomai.click/awsops/ja/whatsnew/2026/04/06/v1.7.3#%E3%83%90%E3%83%BC%E3%82%B8%E3%83%A7%E3%83%B3%E6%AF%94%E8%BC%83" class="hash-link" aria-label="バージョン比較への直接リンク" title="バージョン比較への直接リンク" translate="no">​</a></h2>
<table><thead><tr><th>項目</th><th>v1.7.2</th><th>v1.7.3</th><th>変更</th></tr></thead><tbody><tr><td>診断パス</td><td><code>/diagnosis</code></td><td><strong><code>/ai-diagnosis</code></strong></td><td>名称変更</td></tr><tr><td>エクスポート</td><td>PPTX</td><td><strong>DOCX + MD + PDF</strong></td><td>3 種</td></tr><tr><td>定期レポート</td><td>—</td><td><strong>週次/隔週/月次</strong></td><td>新規</td></tr><tr><td>Auto-Collect</td><td>—</td><td><strong>6 種エージェント</strong></td><td>新規</td></tr><tr><td>FinOps ツール</td><td>—</td><td><strong>5 つの MCP ツール</strong></td><td>新規</td></tr><tr><td>EKS アクセス</td><td>手動</td><td><strong>ワンクリック登録</strong></td><td>改善</td></tr><tr><td>Benchmark</td><td>exit code 依存</td><td><strong>出力ファイル検証</strong></td><td>修正</td></tr></tbody></table>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="主なファイル変更">主なファイル変更<a href="https://www.atomai.click/awsops/ja/whatsnew/2026/04/06/v1.7.3#%E4%B8%BB%E3%81%AA%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E5%A4%89%E6%9B%B4" class="hash-link" aria-label="主なファイル変更への直接リンク" title="主なファイル変更への直接リンク" translate="no">​</a></h2>
<table><thead><tr><th>ファイル</th><th>変更内容</th></tr></thead><tbody><tr><td><code>src/app/ai-diagnosis/page.tsx</code></td><td>診断ページのリニューアル（パス変更、スケジュール UI）</td></tr><tr><td><code>src/app/ai-diagnosis/report/page.tsx</code></td><td>PDF 印刷専用ページ</td></tr><tr><td><code>src/app/api/report/route.ts</code></td><td>レポート生成 API（15 セクション、S3 アップロード）</td></tr><tr><td><code>src/lib/report-docx.ts</code></td><td>DOCX 生成器（表紙、目次、セクション別スタイル）</td></tr><tr><td><code>src/lib/report-scheduler.ts</code></td><td>定期レポートスケジューラ（5 分チェック）</td></tr><tr><td><code>src/lib/report-prompts.ts</code></td><td>15 セクション別の Bedrock 分析プロンプト</td></tr><tr><td><code>src/lib/report-generator.ts</code></td><td>データ収集オーケストレーター</td></tr><tr><td><code>src/lib/collectors/*.ts</code></td><td>6 種の Auto-Collect エージェント</td></tr><tr><td><code>agent/lambda/aws_finops_mcp.py</code></td><td>FinOps MCP Lambda（5 ツール）</td></tr><tr><td><code>src/app/api/benchmark/route.ts</code></td><td>Powerpipe exit code 2 の処理</td></tr><tr><td><code>src/lib/queries/k8s.ts</code></td><td>K8s SQL クエリ統合 + Service Resources</td></tr><tr><td><code>src/components/dashboard/StatsCard.tsx</code></td><td>クリックナビゲーション（<code>href</code> prop）</td></tr><tr><td><code>infra-cdk/lib/awsops-stack.ts</code></td><td>S3 reports/* ポリシーを追加</td></tr><tr><td><code>scripts/00-update-infra.sh</code></td><td>安全なインフラ更新スクリプト</td></tr></tbody></table>]]></content:encoded>
            <category>Release</category>
            <category>AI</category>
            <category>Container</category>
            <category>Cost</category>
            <category>Deployment</category>
        </item>
        <item>
            <title><![CDATA[v1.7.2 — External Datasources + Dynamic VPC CIDR]]></title>
            <link>https://www.atomai.click/awsops/ja/whatsnew/2026/04/01/v1.7.2</link>
            <guid>https://www.atomai.click/awsops/ja/whatsnew/2026/04/01/v1.7.2</guid>
            <pubDate>Wed, 01 Apr 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[Grafana スタイルの外部データソース管理（7 種）、SSRF/SQL Injection 防御、動的 VPC CIDR、データソース診断エージェントを追加。]]></description>
            <content:encoded><![CDATA[<p>Prometheus、Loki、ClickHouse など <strong>7 種の外部データソース</strong>を Grafana スタイルで管理できる機能を追加しました。SSRF 防御と SQL Injection 防止を含むセキュリティレイヤー、<strong>動的 VPC CIDR</strong> 設定、そしてデータソース接続の問題を診断する<strong>専用エージェント</strong>も同時にリリースします。</p>
<div class="theme-admonition theme-admonition-tip admonition_xJq3 alert alert--success"><div class="admonitionHeading_Gvgb"><span class="admonitionIcon_Rf37"><svg viewBox="0 0 12 16"><path fill-rule="evenodd" d="M6.5 0C3.48 0 1 2.19 1 5c0 .92.55 2.25 1 3 1.34 2.25 1.78 2.78 2 4v1h5v-1c.22-1.22.66-1.75 2-4 .45-.75 1-2.08 1-3 0-2.81-2.48-5-5.5-5zm3.64 7.48c-.25.44-.47.8-.67 1.11-.86 1.41-1.25 2.06-1.45 3.23-.02.05-.02.11-.02.17H5c0-.06 0-.13-.02-.17-.2-1.17-.59-1.83-1.45-3.23-.2-.31-.42-.67-.67-1.11C2.44 6.78 2 5.65 2 5c0-2.2 2.02-4 4.5-4 1.22 0 2.36.42 3.22 1.19C10.55 2.94 11 3.94 11 5c0 .66-.44 1.78-.86 2.48zM4 14h5c-.23 1.14-1.3 2-2.5 2s-2.27-.86-2.5-2z"></path></svg></span>主な変更点</div><div class="admonitionContent_BuS1"><p><strong>外部データソース 7 種</strong> · <strong>SSRF 防御</strong> · <strong>SQL Injection 防止</strong> · <strong>動的 VPC CIDR</strong> · <strong>データソース診断エージェント</strong></p></div></div>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="外部データソース管理">外部データソース管理<a href="https://www.atomai.click/awsops/ja/whatsnew/2026/04/01/v1.7.2#%E5%A4%96%E9%83%A8%E3%83%87%E3%83%BC%E3%82%BF%E3%82%BD%E3%83%BC%E3%82%B9%E7%AE%A1%E7%90%86" class="hash-link" aria-label="外部データソース管理への直接リンク" title="外部データソース管理への直接リンク" translate="no">​</a></h2>
<p>Grafana のデータソース管理と同様の方式で、外部オブザーバビリティ（Observability）ツールを AWSops から直接接続してクエリできます。</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="サポートするデータソース-7-種">サポートするデータソース 7 種<a href="https://www.atomai.click/awsops/ja/whatsnew/2026/04/01/v1.7.2#%E3%82%B5%E3%83%9D%E3%83%BC%E3%83%88%E3%81%99%E3%82%8B%E3%83%87%E3%83%BC%E3%82%BF%E3%82%BD%E3%83%BC%E3%82%B9-7-%E7%A8%AE" class="hash-link" aria-label="サポートするデータソース 7 種への直接リンク" title="サポートするデータソース 7 種への直接リンク" translate="no">​</a></h3>
<table><thead><tr><th>タイプ</th><th>クエリ言語</th><th>主な用途</th></tr></thead><tbody><tr><td><strong>Prometheus</strong></td><td>PromQL</td><td>メトリクス収集/クエリ</td></tr><tr><td><strong>Loki</strong></td><td>LogQL</td><td>ログ集約/検索</td></tr><tr><td><strong>Tempo</strong></td><td>TraceQL</td><td>分散トレーシング</td></tr><tr><td><strong>ClickHouse</strong></td><td>SQL</td><td>分析用データウェアハウス</td></tr><tr><td><strong>Jaeger</strong></td><td>Trace API</td><td>分散トレーシング</td></tr><tr><td><strong>Dynatrace</strong></td><td>API</td><td>APM / フルスタック可観測性</td></tr><tr><td><strong>Datadog</strong></td><td>API</td><td>モニタリング / APM</td></tr></tbody></table>
<div style="border-radius:8px;overflow:hidden;box-shadow:0 4px 24px rgba(0,0,0,0.4);margin-bottom:1.5rem;position:relative"><canvas></canvas></div>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="機能詳細">機能詳細<a href="https://www.atomai.click/awsops/ja/whatsnew/2026/04/01/v1.7.2#%E6%A9%9F%E8%83%BD%E8%A9%B3%E7%B4%B0" class="hash-link" aria-label="機能詳細への直接リンク" title="機能詳細への直接リンク" translate="no">​</a></h3>
<table><thead><tr><th>機能</th><th>説明</th></tr></thead><tbody><tr><td><strong>CRUD</strong></td><td>データソースの登録/更新/削除（Admin 専用）</td></tr><tr><td><strong>Connection Test</strong></td><td>ワンクリック接続テスト + 応答時間（ms）測定</td></tr><tr><td><strong>Query Execution</strong></td><td>タイプ別クエリ言語で即時実行</td></tr><tr><td><strong>4 種の認証</strong></td><td>None、Basic Auth、Bearer Token、Custom Header</td></tr><tr><td><strong>Credential Masking</strong></td><td>API 応答でパスワード/トークン → <code>***</code> にマスキング</td></tr><tr><td><strong>i18n</strong></td><td>韓国語 + 英語をサポート</td></tr></tbody></table>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="認証設定の例">認証設定の例<a href="https://www.atomai.click/awsops/ja/whatsnew/2026/04/01/v1.7.2#%E8%AA%8D%E8%A8%BC%E8%A8%AD%E5%AE%9A%E3%81%AE%E4%BE%8B" class="hash-link" aria-label="認証設定の例への直接リンク" title="認証設定の例への直接リンク" translate="no">​</a></h3>
<p>4 つの認証方式をサポートしており、データソースのタイプに応じて適切な方式を選択します:</p>
<div class="language-typescript codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-typescript codeBlock_bY9V thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#F8F8F2"><span class="token comment" style="color:rgb(98, 114, 164)">// src/lib/datasource-client.ts</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">type</span><span class="token plain"> </span><span class="token class-name maybe-class-name">AuthType</span><span class="token plain"> </span><span class="token operator">=</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">'none'</span><span class="token plain"> </span><span class="token operator">|</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">'basic'</span><span class="token plain"> </span><span class="token operator">|</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">'bearer'</span><span class="token plain"> </span><span class="token operator">|</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">'custom-header'</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token comment" style="color:rgb(98, 114, 164)">// Basic Auth → Authorization: Basic base64(user:pass)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token comment" style="color:rgb(98, 114, 164)">// Bearer Token → Authorization: Bearer &lt;token&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token comment" style="color:rgb(98, 114, 164)">// Custom Header → ユーザー指定のヘッダー名: 値</span><br></span></code></pre></div></div>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="configjson-のデータソース設定">config.json のデータソース設定<a href="https://www.atomai.click/awsops/ja/whatsnew/2026/04/01/v1.7.2#configjson-%E3%81%AE%E3%83%87%E3%83%BC%E3%82%BF%E3%82%BD%E3%83%BC%E3%82%B9%E8%A8%AD%E5%AE%9A" class="hash-link" aria-label="config.json のデータソース設定への直接リンク" title="config.json のデータソース設定への直接リンク" translate="no">​</a></h3>
<p><code>data/config.json</code> に <code>datasources</code> 配列を追加してデータソースを管理します:</p>
<div class="language-json codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-json codeBlock_bY9V thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#F8F8F2"><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token property">"costEnabled"</span><span class="token operator">:</span><span class="token plain"> </span><span class="token boolean">true</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token property">"agentRuntimeArn"</span><span class="token operator">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"arn:aws:bedrock-agentcore:..."</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token property">"datasources"</span><span class="token operator">:</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">[</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">      </span><span class="token property">"id"</span><span class="token operator">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"prom-1"</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">      </span><span class="token property">"name"</span><span class="token operator">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"Production Prometheus"</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">      </span><span class="token property">"type"</span><span class="token operator">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"prometheus"</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">      </span><span class="token property">"url"</span><span class="token operator">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"https://prometheus.example.com:9090"</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">      </span><span class="token property">"authType"</span><span class="token operator">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"bearer"</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">      </span><span class="token property">"authConfig"</span><span class="token operator">:</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"> </span><span class="token property">"token"</span><span class="token operator">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"***"</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">      </span><span class="token property">"isDefault"</span><span class="token operator">:</span><span class="token plain"> </span><span class="token boolean">true</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">      </span><span class="token property">"id"</span><span class="token operator">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"ch-1"</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">      </span><span class="token property">"name"</span><span class="token operator">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"Analytics ClickHouse"</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">      </span><span class="token property">"type"</span><span class="token operator">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"clickhouse"</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">      </span><span class="token property">"url"</span><span class="token operator">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"https://clickhouse.example.com:8443"</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">      </span><span class="token property">"authType"</span><span class="token operator">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"basic"</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">      </span><span class="token property">"authConfig"</span><span class="token operator">:</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"> </span><span class="token property">"username"</span><span class="token operator">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"reader"</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"> </span><span class="token property">"password"</span><span class="token operator">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"***"</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token punctuation" style="color:rgb(248, 248, 242)">]</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><br></span></code></pre></div></div>
<div class="theme-admonition theme-admonition-info admonition_xJq3 alert alert--info"><div class="admonitionHeading_Gvgb"><span class="admonitionIcon_Rf37"><svg viewBox="0 0 14 16"><path fill-rule="evenodd" d="M7 2.3c3.14 0 5.7 2.56 5.7 5.7s-2.56 5.7-5.7 5.7A5.71 5.71 0 0 1 1.3 8c0-3.14 2.56-5.7 5.7-5.7zM7 1C3.14 1 0 4.14 0 8s3.14 7 7 7 7-3.14 7-7-3.14-7-7-7zm1 3H6v5h2V4zm0 6H6v2h2v-2z"></path></svg></span>データソース管理の原則</div><div class="admonitionContent_BuS1"><p>既存の <code>accounts[]</code> 配列と同じパターンです — <code>data/config.json</code> を編集するだけで、コード変更なしにデータソースを追加/削除できます。Admin 権限を持つユーザーのみ CRUD 操作が可能です。</p></div></div>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="セキュリティ-ssrf-防御">セキュリティ: SSRF 防御<a href="https://www.atomai.click/awsops/ja/whatsnew/2026/04/01/v1.7.2#%E3%82%BB%E3%82%AD%E3%83%A5%E3%83%AA%E3%83%86%E3%82%A3-ssrf-%E9%98%B2%E5%BE%A1" class="hash-link" aria-label="セキュリティ: SSRF 防御への直接リンク" title="セキュリティ: SSRF 防御への直接リンク" translate="no">​</a></h2>
<p>外部 URL へリクエストを送信する前に、**SSRF（Server-Side Request Forgery）**攻撃を防止する検証レイヤーを適用します。</p>
<div class="language-typescript codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-typescript codeBlock_bY9V thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#F8F8F2"><span class="token comment" style="color:rgb(98, 114, 164)">// src/lib/datasource-client.ts (簡略化)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">function</span><span class="token plain"> </span><span class="token function" style="color:rgb(80, 250, 123)">validateUrl</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token plain">url</span><span class="token operator">:</span><span class="token plain"> </span><span class="token builtin" style="color:rgb(189, 147, 249)">string</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token operator">:</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">void</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">const</span><span class="token plain"> parsed </span><span class="token operator">=</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">new</span><span class="token plain"> </span><span class="token class-name constant" style="color:rgb(189, 147, 249)">URL</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token plain">url</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">const</span><span class="token plain"> hostname </span><span class="token operator">=</span><span class="token plain"> parsed</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token property-access">hostname</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token comment" style="color:rgb(98, 114, 164)">// Private IP 帯域をブロック</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">const</span><span class="token plain"> privatePatterns </span><span class="token operator">=</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">[</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token regex regex-delimiter">/</span><span class="token regex regex-source language-regex anchor function" style="color:rgb(80, 250, 123)">^</span><span class="token regex regex-source language-regex">10</span><span class="token regex regex-source language-regex special-escape escape">\.</span><span class="token regex regex-delimiter">/</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain">                          </span><span class="token comment" style="color:rgb(98, 114, 164)">// 10.0.0.0/8</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token operator">/</span><span class="token operator">^</span><span class="token number">172</span><span class="token plain">\</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token number">1</span><span class="token punctuation" style="color:rgb(248, 248, 242)">[</span><span class="token number">6</span><span class="token operator">-</span><span class="token number">9</span><span class="token punctuation" style="color:rgb(248, 248, 242)">]</span><span class="token operator">|</span><span class="token number">2</span><span class="token plain">\d</span><span class="token operator">|</span><span class="token number">3</span><span class="token punctuation" style="color:rgb(248, 248, 242)">[</span><span class="token number">01</span><span class="token punctuation" style="color:rgb(248, 248, 242)">]</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token plain">\</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token operator">/</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain">    </span><span class="token comment" style="color:rgb(98, 114, 164)">// 172.16.0.0/12</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token operator">/</span><span class="token operator">^</span><span class="token number">192</span><span class="token plain">\</span><span class="token number">.168</span><span class="token plain">\</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token operator">/</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain">                     </span><span class="token comment" style="color:rgb(98, 114, 164)">// 192.168.0.0/16</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token operator">/</span><span class="token operator">^</span><span class="token number">127</span><span class="token plain">\</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token operator">/</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain">                          </span><span class="token comment" style="color:rgb(98, 114, 164)">// Loopback</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token operator">/</span><span class="token operator">^</span><span class="token number">169</span><span class="token plain">\</span><span class="token number">.254</span><span class="token plain">\</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token operator">/</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain">                     </span><span class="token comment" style="color:rgb(98, 114, 164)">// Link-local</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token operator">/</span><span class="token operator">^</span><span class="token number">0</span><span class="token plain">\</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token operator">/</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain">                            </span><span class="token comment" style="color:rgb(98, 114, 164)">// Current network</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token punctuation" style="color:rgb(248, 248, 242)">]</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token comment" style="color:rgb(98, 114, 164)">// Cloud metadata endpoint をブロック</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token keyword control-flow" style="color:rgb(189, 147, 249);font-style:italic">if</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token plain">hostname </span><span class="token operator">===</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">'169.254.169.254'</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token keyword control-flow" style="color:rgb(189, 147, 249);font-style:italic">throw</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">new</span><span class="token plain"> </span><span class="token class-name known-class-name class-name">Error</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token string" style="color:rgb(255, 121, 198)">'SSRF blocked: cloud metadata endpoint'</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token keyword control-flow" style="color:rgb(189, 147, 249);font-style:italic">for</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">const</span><span class="token plain"> pattern </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">of</span><span class="token plain"> privatePatterns</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token keyword control-flow" style="color:rgb(189, 147, 249);font-style:italic">if</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token plain">pattern</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token method function property-access" style="color:rgb(80, 250, 123)">test</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token plain">hostname</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">      </span><span class="token keyword control-flow" style="color:rgb(189, 147, 249);font-style:italic">throw</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">new</span><span class="token plain"> </span><span class="token class-name known-class-name class-name">Error</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token template-string template-punctuation string" style="color:rgb(255, 121, 198)">`</span><span class="token template-string string" style="color:rgb(255, 121, 198)">SSRF blocked: private IP range (</span><span class="token template-string interpolation interpolation-punctuation punctuation" style="color:rgb(248, 248, 242)">${</span><span class="token template-string interpolation">hostname</span><span class="token template-string interpolation interpolation-punctuation punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token template-string string" style="color:rgb(255, 121, 198)">)</span><span class="token template-string template-punctuation string" style="color:rgb(255, 121, 198)">`</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><br></span></code></pre></div></div>
<div class="theme-admonition theme-admonition-warning admonition_xJq3 alert alert--warning"><div class="admonitionHeading_Gvgb"><span class="admonitionIcon_Rf37"><svg viewBox="0 0 16 16"><path fill-rule="evenodd" d="M8.893 1.5c-.183-.31-.52-.5-.887-.5s-.703.19-.886.5L.138 13.499a.98.98 0 0 0 0 1.001c.193.31.53.501.886.501h13.964c.367 0 .704-.19.877-.5a1.03 1.03 0 0 0 .01-1.002L8.893 1.5zm.133 11.497H6.987v-2.003h2.039v2.003zm0-3.004H6.987V5.987h2.039v4.006z"></path></svg></span>SSRF が重要な理由</div><div class="admonitionContent_BuS1"><p>外部 URL をユーザーが入力するすべての機能で、SSRF 防御は必須です。防御がない場合、攻撃者が <code>http://169.254.169.254/latest/meta-data/</code> を通じて EC2 の IAM 認証情報を窃取したり、内部ネットワークのサービスにアクセスしたりできます。AWSops は Private IP レンジ、Cloud metadata endpoint、Link-local、Loopback アドレスをすべてブロックします。</p></div></div>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="セキュリティ-clickhouse-sql-injection-防止">セキュリティ: ClickHouse SQL Injection 防止<a href="https://www.atomai.click/awsops/ja/whatsnew/2026/04/01/v1.7.2#%E3%82%BB%E3%82%AD%E3%83%A5%E3%83%AA%E3%83%86%E3%82%A3-clickhouse-sql-injection-%E9%98%B2%E6%AD%A2" class="hash-link" aria-label="セキュリティ: ClickHouse SQL Injection 防止への直接リンク" title="セキュリティ: ClickHouse SQL Injection 防止への直接リンク" translate="no">​</a></h2>
<p>ClickHouse クエリでは、ユーザー入力を文字列に直接埋め込まず、<strong>パラメータ化されたクエリ</strong>を使用します:</p>
<div class="language-typescript codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-typescript codeBlock_bY9V thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#F8F8F2"><span class="token comment" style="color:rgb(98, 114, 164)">// src/lib/datasource-client.ts — ClickHouse クエリ実行</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token comment" style="color:rgb(98, 114, 164)">// 危険: 直接の文字列補間（使用しない）</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token comment" style="color:rgb(98, 114, 164)">// const query = `SELECT * FROM logs WHERE service = '${userInput}'`;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token comment" style="color:rgb(98, 114, 164)">// 安全: パラメータ化されたクエリ</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">const</span><span class="token plain"> response </span><span class="token operator">=</span><span class="token plain"> </span><span class="token keyword control-flow" style="color:rgb(189, 147, 249);font-style:italic">await</span><span class="token plain"> </span><span class="token function" style="color:rgb(80, 250, 123)">fetch</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token template-string template-punctuation string" style="color:rgb(255, 121, 198)">`</span><span class="token template-string interpolation interpolation-punctuation punctuation" style="color:rgb(248, 248, 242)">${</span><span class="token template-string interpolation">url</span><span class="token template-string interpolation interpolation-punctuation punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token template-string string" style="color:rgb(255, 121, 198)">/?param_service=</span><span class="token template-string interpolation interpolation-punctuation punctuation" style="color:rgb(248, 248, 242)">${</span><span class="token template-string interpolation function" style="color:rgb(80, 250, 123)">encodeURIComponent</span><span class="token template-string interpolation punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token template-string interpolation">service</span><span class="token template-string interpolation punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token template-string interpolation interpolation-punctuation punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token template-string template-punctuation string" style="color:rgb(255, 121, 198)">`</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  method</span><span class="token operator">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">'POST'</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  body</span><span class="token operator">:</span><span class="token plain"> </span><span class="token template-string template-punctuation string" style="color:rgb(255, 121, 198)">`</span><span class="token template-string string" style="color:rgb(255, 121, 198)">SELECT * FROM logs WHERE service = {service:String}</span><span class="token template-string template-punctuation string" style="color:rgb(255, 121, 198)">`</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  headers</span><span class="token operator">:</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"> </span><span class="token string-property property">'Content-Type'</span><span class="token operator">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">'text/plain'</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><br></span></code></pre></div></div>
<div class="theme-admonition theme-admonition-tip admonition_xJq3 alert alert--success"><div class="admonitionHeading_Gvgb"><span class="admonitionIcon_Rf37"><svg viewBox="0 0 12 16"><path fill-rule="evenodd" d="M6.5 0C3.48 0 1 2.19 1 5c0 .92.55 2.25 1 3 1.34 2.25 1.78 2.78 2 4v1h5v-1c.22-1.22.66-1.75 2-4 .45-.75 1-2.08 1-3 0-2.81-2.48-5-5.5-5zm3.64 7.48c-.25.44-.47.8-.67 1.11-.86 1.41-1.25 2.06-1.45 3.23-.02.05-.02.11-.02.17H5c0-.06 0-.13-.02-.17-.2-1.17-.59-1.83-1.45-3.23-.2-.31-.42-.67-.67-1.11C2.44 6.78 2 5.65 2 5c0-2.2 2.02-4 4.5-4 1.22 0 2.36.42 3.22 1.19C10.55 2.94 11 3.94 11 5c0 .66-.44 1.78-.86 2.48zM4 14h5c-.23 1.14-1.3 2-2.5 2s-2.27-.86-2.5-2z"></path></svg></span>ClickHouse パラメータ構文</div><div class="admonitionContent_BuS1"><p>ClickHouse は <code>{name:Type}</code> 形式のパラメータバインディングをサポートします。URL クエリパラメータとして <code>param_name=value</code> を渡すと、サーバーが安全にバインドします。この方式により SQL Injection を根本から防止できます。</p></div></div>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="promql-クエリの例">PromQL クエリの例<a href="https://www.atomai.click/awsops/ja/whatsnew/2026/04/01/v1.7.2#promql-%E3%82%AF%E3%82%A8%E3%83%AA%E3%81%AE%E4%BE%8B" class="hash-link" aria-label="PromQL クエリの例への直接リンク" title="PromQL クエリの例への直接リンク" translate="no">​</a></h2>
<p>Prometheus データソースで PromQL によりメトリクスを照会する例:</p>
<div class="language-promql codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-promql codeBlock_bY9V thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#F8F8F2"><span class="token plain"># 直近 5 分間の CPU 使用率 (Pod 別)</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">rate(container_cpu_usage_seconds_total{namespace="production"}[5m])</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"># メモリ使用量上位 10 個の Pod</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">topk(10, container_memory_working_set_bytes{namespace="production"})</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"># HTTP リクエストエラー率 (5xx)</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">sum(rate(http_requests_total{status=~"5.."}[5m]))</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  / sum(rate(http_requests_total[5m])) * 100</span><br></span></code></pre></div></div>
<div class="language-typescript codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-typescript codeBlock_bY9V thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#F8F8F2"><span class="token comment" style="color:rgb(98, 114, 164)">// API 経由で PromQL を実行</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">const</span><span class="token plain"> response </span><span class="token operator">=</span><span class="token plain"> </span><span class="token keyword control-flow" style="color:rgb(189, 147, 249);font-style:italic">await</span><span class="token plain"> </span><span class="token function" style="color:rgb(80, 250, 123)">fetch</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token string" style="color:rgb(255, 121, 198)">'/awsops/api/datasources'</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  method</span><span class="token operator">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">'POST'</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  body</span><span class="token operator">:</span><span class="token plain"> </span><span class="token known-class-name class-name">JSON</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token method function property-access" style="color:rgb(80, 250, 123)">stringify</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    action</span><span class="token operator">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">'query'</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    datasourceId</span><span class="token operator">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">'prom-1'</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    query</span><span class="token operator">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">'rate(container_cpu_usage_seconds_total{namespace="production"}[5m])'</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><br></span></code></pre></div></div>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="dynamic-vpc-cidr">Dynamic VPC CIDR<a href="https://www.atomai.click/awsops/ja/whatsnew/2026/04/01/v1.7.2#dynamic-vpc-cidr" class="hash-link" aria-label="Dynamic VPC CIDRへの直接リンク" title="Dynamic VPC CIDRへの直接リンク" translate="no">​</a></h2>
<p>CDK スタックで VPC CIDR を<strong>コンテキストパラメータ</strong>として設定できるように変更しました。</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="before--after">Before / After<a href="https://www.atomai.click/awsops/ja/whatsnew/2026/04/01/v1.7.2#before--after" class="hash-link" aria-label="Before / Afterへの直接リンク" title="Before / Afterへの直接リンク" translate="no">​</a></h3>
<table><thead><tr><th>項目</th><th>Before (v1.7.1)</th><th>After (v1.7.2)</th></tr></thead><tbody><tr><td>VPC CIDR</td><td>ハードコーディング</td><td><strong><code>newVpcCidr</code> コンテキストパラメータ</strong></td></tr><tr><td>デフォルト値</td><td>—</td><td><code>10.10.0.0/16</code></td></tr><tr><td>TGW Route CIDR</td><td><code>tgwRouteCidr</code>（単一）</td><td><strong><code>tgwRouteCidrs</code>（複数、カンマ区切り）</strong></td></tr><tr><td>後方互換性</td><td>—</td><td>既存の <code>tgwRouteCidr</code> パラメータを維持</td></tr></tbody></table>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#F8F8F2"><span class="token comment" style="color:rgb(98, 114, 164)"># デフォルト VPC CIDR (10.10.0.0/16)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">cdk deploy </span><span class="token parameter variable" style="color:rgb(189, 147, 249);font-style:italic">-c</span><span class="token plain"> </span><span class="token assign-left variable" style="color:rgb(189, 147, 249);font-style:italic">newVpcCidr</span><span class="token operator">=</span><span class="token number">10.10</span><span class="token plain">.0.0/16</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token comment" style="color:rgb(98, 114, 164)"># カスタム VPC CIDR + 複数 TGW ルート</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">cdk deploy </span><span class="token punctuation" style="color:rgb(248, 248, 242)">\</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token parameter variable" style="color:rgb(189, 147, 249);font-style:italic">-c</span><span class="token plain"> </span><span class="token assign-left variable" style="color:rgb(189, 147, 249);font-style:italic">newVpcCidr</span><span class="token operator">=</span><span class="token number">10.20</span><span class="token plain">.0.0/16 </span><span class="token punctuation" style="color:rgb(248, 248, 242)">\</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token parameter variable" style="color:rgb(189, 147, 249);font-style:italic">-c</span><span class="token plain"> </span><span class="token assign-left variable" style="color:rgb(189, 147, 249);font-style:italic">tgwRouteCidrs</span><span class="token operator">=</span><span class="token number">10.10</span><span class="token plain">.0.0/16,10.30.0.0/16,172.16.0.0/12</span><br></span></code></pre></div></div>
<div class="theme-admonition theme-admonition-info admonition_xJq3 alert alert--info"><div class="admonitionHeading_Gvgb"><span class="admonitionIcon_Rf37"><svg viewBox="0 0 14 16"><path fill-rule="evenodd" d="M7 2.3c3.14 0 5.7 2.56 5.7 5.7s-2.56 5.7-5.7 5.7A5.71 5.71 0 0 1 1.3 8c0-3.14 2.56-5.7 5.7-5.7zM7 1C3.14 1 0 4.14 0 8s3.14 7 7 7 7-3.14 7-7-3.14-7-7-7zm1 3H6v5h2V4zm0 6H6v2h2v-2z"></path></svg></span>後方互換性</div><div class="admonitionContent_BuS1"><p>既存の <code>tgwRouteCidr</code> パラメータはそのまま動作します。新しい <code>tgwRouteCidrs</code> はカンマ区切りの複数 CIDR をサポートし、両方のパラメータを同時に使用することも可能です。<code>tgwRouteCidrs</code> が優先的に適用されます。</p></div></div>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="データソース診断エージェント">データソース診断エージェント<a href="https://www.atomai.click/awsops/ja/whatsnew/2026/04/01/v1.7.2#%E3%83%87%E3%83%BC%E3%82%BF%E3%82%BD%E3%83%BC%E3%82%B9%E8%A8%BA%E6%96%AD%E3%82%A8%E3%83%BC%E3%82%B8%E3%82%A7%E3%83%B3%E3%83%88" class="hash-link" aria-label="データソース診断エージェントへの直接リンク" title="データソース診断エージェントへの直接リンク" translate="no">​</a></h2>
<p>外部データソースの接続問題を<strong>体系的に診断</strong>する専用エージェントが追加されました。AI ルーティングに <strong>priority 11</strong> の <code>datasource</code> ルートが新たに登録されます。</p>
<table><thead><tr><th>項目</th><th>Before (v1.7.1)</th><th>After (v1.7.2)</th></tr></thead><tbody><tr><td>AI ルート数</td><td>10</td><td><strong>11</strong></td></tr><tr><td>新規ルート</td><td>—</td><td><code>datasource</code>（priority 11）</td></tr><tr><td>診断対象</td><td>—</td><td>ネットワーク、認証、SSL/TLS、DNS</td></tr></tbody></table>
<p>診断エージェントが確認する項目:</p>
<ul>
<li class=""><strong>ネットワーク</strong>: 対象ホストへの到達可能性、ファイアウォール/セキュリティグループの設定</li>
<li class=""><strong>認証</strong>: 認証情報の有効性、トークンの期限切れ、権限不足</li>
<li class=""><strong>SSL/TLS</strong>: 証明書の有効性、期限切れ、チェーンの問題</li>
<li class=""><strong>DNS</strong>: ホスト名の解決失敗、DNS 伝播の遅延</li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="バージョン比較">バージョン比較<a href="https://www.atomai.click/awsops/ja/whatsnew/2026/04/01/v1.7.2#%E3%83%90%E3%83%BC%E3%82%B8%E3%83%A7%E3%83%B3%E6%AF%94%E8%BC%83" class="hash-link" aria-label="バージョン比較への直接リンク" title="バージョン比較への直接リンク" translate="no">​</a></h2>
<table><thead><tr><th>項目</th><th>v1.7.1</th><th>v1.7.2</th><th>変更</th></tr></thead><tbody><tr><td>ページ</td><td>36</td><td><strong>37</strong></td><td>+datasources</td></tr><tr><td>API ルート</td><td>13</td><td><strong>14</strong></td><td>+datasources API</td></tr><tr><td>AI ルート</td><td>10</td><td><strong>11</strong></td><td>+datasource 診断</td></tr><tr><td>データソースタイプ</td><td>0</td><td><strong>7</strong></td><td>新機能</td></tr><tr><td>認証方式</td><td>—</td><td><strong>4 種</strong></td><td>None/Basic/Bearer/Custom</td></tr></tbody></table>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="主なファイル変更">主なファイル変更<a href="https://www.atomai.click/awsops/ja/whatsnew/2026/04/01/v1.7.2#%E4%B8%BB%E3%81%AA%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E5%A4%89%E6%9B%B4" class="hash-link" aria-label="主なファイル変更への直接リンク" title="主なファイル変更への直接リンク" translate="no">​</a></h2>
<table><thead><tr><th>ファイル</th><th>変更内容</th></tr></thead><tbody><tr><td><code>src/app/datasources/page.tsx</code></td><td>データソース管理ページ（Registry + Explore）</td></tr><tr><td><code>src/app/api/datasources/route.ts</code></td><td>データソース CRUD + 接続テスト + クエリ実行 API</td></tr><tr><td><code>src/lib/datasource-client.ts</code></td><td>HTTP クライアント（SSRF 防御 + 認証 + クエリ）</td></tr><tr><td><code>src/lib/datasource-registry.ts</code></td><td>7 種データソースタイプのレジストリ</td></tr><tr><td><code>src/lib/app-config.ts</code></td><td><code>DatasourceConfig</code> タイプを追加</td></tr><tr><td><code>src/components/layout/Sidebar.tsx</code></td><td>Monitoring カテゴリに Datasources を追加</td></tr><tr><td><code>infra-cdk/lib/awsops-stack.ts</code></td><td><code>newVpcCidr</code> コンテキストパラメータ + <code>tgwRouteCidrs</code></td></tr><tr><td><code>src/app/api/ai/route.ts</code></td><td><code>datasource</code> ルート（priority 11）を追加</td></tr></tbody></table>
<div class="theme-admonition theme-admonition-tip admonition_xJq3 alert alert--success"><div class="admonitionHeading_Gvgb"><span class="admonitionIcon_Rf37"><svg viewBox="0 0 12 16"><path fill-rule="evenodd" d="M6.5 0C3.48 0 1 2.19 1 5c0 .92.55 2.25 1 3 1.34 2.25 1.78 2.78 2 4v1h5v-1c.22-1.22.66-1.75 2-4 .45-.75 1-2.08 1-3 0-2.81-2.48-5-5.5-5zm3.64 7.48c-.25.44-.47.8-.67 1.11-.86 1.41-1.25 2.06-1.45 3.23-.02.05-.02.11-.02.17H5c0-.06 0-.13-.02-.17-.2-1.17-.59-1.83-1.45-3.23-.2-.31-.42-.67-.67-1.11C2.44 6.78 2 5.65 2 5c0-2.2 2.02-4 4.5-4 1.22 0 2.36.42 3.22 1.19C10.55 2.94 11 3.94 11 5c0 .66-.44 1.78-.86 2.48zM4 14h5c-.23 1.14-1.3 2-2.5 2s-2.27-.86-2.5-2z"></path></svg></span>新規ページ追加パターン</div><div class="admonitionContent_BuS1"><p>今回のデータソースページは、既存の Steampipe クエリではなく<strong>外部 HTTP エンドポイント</strong>と通信する最初のページです。今後外部サービスを連携する際は、<code>datasource-client.ts</code> の SSRF 防御 + 認証レイヤーを参考にしてください。</p></div></div>]]></content:encoded>
            <category>Release</category>
            <category>Datasources</category>
            <category>Security</category>
            <category>Infrastructure</category>
        </item>
        <item>
            <title><![CDATA[v1.7.1 — Converse Stream API + ストリーミング UX 改善]]></title>
            <link>https://www.atomai.click/awsops/ja/whatsnew/2026/03/29/v1.7.1</link>
            <guid>https://www.atomai.click/awsops/ja/whatsnew/2026/03/29/v1.7.1</guid>
            <pubDate>Sun, 29 Mar 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[マルチルート合成に Bedrock Converse Stream API を導入、Gateway 応答のタイピング効果、モニタリングクエリの時間範囲フィルターを追加。]]></description>
            <content:encoded><![CDATA[<p>マルチルート合成に <strong>Bedrock Converse Stream API</strong> を導入し、AgentCore Gateway の応答に<strong>タイピング効果</strong>を適用したリリースです。モニタリングクエリに<strong>時間範囲フィルター</strong>を追加し、pg pool 枯渇の問題も解決しました。</p>
<div class="theme-admonition theme-admonition-tip admonition_xJq3 alert alert--success"><div class="admonitionHeading_Gvgb"><span class="admonitionIcon_Rf37"><svg viewBox="0 0 12 16"><path fill-rule="evenodd" d="M6.5 0C3.48 0 1 2.19 1 5c0 .92.55 2.25 1 3 1.34 2.25 1.78 2.78 2 4v1h5v-1c.22-1.22.66-1.75 2-4 .45-.75 1-2.08 1-3 0-2.81-2.48-5-5.5-5zm3.64 7.48c-.25.44-.47.8-.67 1.11-.86 1.41-1.25 2.06-1.45 3.23-.02.05-.02.11-.02.17H5c0-.06 0-.13-.02-.17-.2-1.17-.59-1.83-1.45-3.23-.2-.31-.42-.67-.67-1.11C2.44 6.78 2 5.65 2 5c0-2.2 2.02-4 4.5-4 1.22 0 2.36.42 3.22 1.19C10.55 2.94 11 3.94 11 5c0 .66-.44 1.78-.86 2.48zM4 14h5c-.23 1.14-1.3 2-2.5 2s-2.27-.86-2.5-2z"></path></svg></span>主な変更点</div><div class="admonitionContent_BuS1"><p><strong>Converse Stream API</strong> · <strong>タイピング効果 (50char/15ms)</strong> · <strong>チャットバブル幅の安定化</strong> · <strong>モニタリングクエリ時間フィルター 3 件</strong></p></div></div>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="converse-stream-api-によるリアルタイム合成">Converse Stream API によるリアルタイム合成<a href="https://www.atomai.click/awsops/ja/whatsnew/2026/03/29/v1.7.1#converse-stream-api-%E3%81%AB%E3%82%88%E3%82%8B%E3%83%AA%E3%82%A2%E3%83%AB%E3%82%BF%E3%82%A4%E3%83%A0%E5%90%88%E6%88%90" class="hash-link" aria-label="Converse Stream API によるリアルタイム合成への直接リンク" title="Converse Stream API によるリアルタイム合成への直接リンク" translate="no">​</a></h2>
<p>マルチルート応答の合成が、擬似チャンキングから<strong>本物のトークンストリーミング</strong>へ移行しました。</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="before--after">Before / After<a href="https://www.atomai.click/awsops/ja/whatsnew/2026/03/29/v1.7.1#before--after" class="hash-link" aria-label="Before / Afterへの直接リンク" title="Before / Afterへの直接リンク" translate="no">​</a></h3>
<table><thead><tr><th>項目</th><th>Before (v1.7.0)</th><th>After (v1.7.1)</th></tr></thead><tbody><tr><td>合成 API</td><td><code>InvokeModelCommand</code></td><td><strong><code>ConverseStreamCommand</code></strong></td></tr><tr><td>合成関数</td><td><code>synthesizeResponses()</code></td><td><strong><code>synthesizeResponsesStreaming()</code></strong></td></tr><tr><td>ストリーミング方式</td><td>応答全体を生成 → <code>simulateStreaming()</code></td><td>トークン生成と同時に <code>chunk</code> イベント送信</td></tr><tr><td>初回トークン遅延</td><td>応答全体の完了まで待機（5〜15 秒）</td><td><strong>~200ms</strong>（最初のトークンを即時送信）</td></tr><tr><td>ユーザー体感</td><td>長い待機の後に高速出力</td><td>即時開始、自然な流れ</td></tr></tbody></table>
<div style="border-radius:8px;overflow:hidden;box-shadow:0 4px 24px rgba(0,0,0,0.4);margin-bottom:1.5rem;position:relative"><canvas></canvas></div>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="コード変更">コード変更<a href="https://www.atomai.click/awsops/ja/whatsnew/2026/03/29/v1.7.1#%E3%82%B3%E3%83%BC%E3%83%89%E5%A4%89%E6%9B%B4" class="hash-link" aria-label="コード変更への直接リンク" title="コード変更への直接リンク" translate="no">​</a></h3>
<p><strong>Before</strong> — <code>synthesizeResponses()</code> + <code>simulateStreaming()</code>:</p>
<div class="language-typescript codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-typescript codeBlock_bY9V thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#F8F8F2"><span class="token comment" style="color:rgb(98, 114, 164)">// src/app/api/ai/route.ts (v1.7.0)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">const</span><span class="token plain"> synthesized </span><span class="token operator">=</span><span class="token plain"> </span><span class="token keyword control-flow" style="color:rgb(189, 147, 249);font-style:italic">await</span><span class="token plain"> </span><span class="token function" style="color:rgb(80, 250, 123)">synthesizeResponses</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  lastMsg</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"> successful</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"> modelKey</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"> clientLang</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token comment" style="color:rgb(98, 114, 164)">// 完成したテキストを 50 文字ずつ分割して擬似ストリーミング</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token keyword control-flow" style="color:rgb(189, 147, 249);font-style:italic">await</span><span class="token plain"> </span><span class="token function" style="color:rgb(80, 250, 123)">simulateStreaming</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token plain">synthesized</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"> send</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><br></span></code></pre></div></div>
<p><strong>After</strong> — <code>synthesizeResponsesStreaming()</code> + <code>ConverseStreamCommand</code>:</p>
<div class="language-typescript codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-typescript codeBlock_bY9V thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#F8F8F2"><span class="token comment" style="color:rgb(98, 114, 164)">// src/app/api/ai/route.ts (v1.7.1)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">const</span><span class="token plain"> synthesized </span><span class="token operator">=</span><span class="token plain"> </span><span class="token keyword control-flow" style="color:rgb(189, 147, 249);font-style:italic">await</span><span class="token plain"> </span><span class="token function" style="color:rgb(80, 250, 123)">synthesizeResponsesStreaming</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  lastMsg</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"> successful</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"> send</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"> modelKey</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"> clientLang</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token comment" style="color:rgb(98, 114, 164)">// send() コールバックが contentBlockDelta ごとに即時 chunk を送信</span><br></span></code></pre></div></div>
<p><strong><code>synthesizeResponsesStreaming()</code> の中核ロジック</strong>:</p>
<div class="language-typescript codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-typescript codeBlock_bY9V thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#F8F8F2"><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">const</span><span class="token plain"> response </span><span class="token operator">=</span><span class="token plain"> </span><span class="token keyword control-flow" style="color:rgb(189, 147, 249);font-style:italic">await</span><span class="token plain"> bedrockClient</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token method function property-access" style="color:rgb(80, 250, 123)">send</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">new</span><span class="token plain"> </span><span class="token class-name maybe-class-name">ConverseStreamCommand</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  modelId</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  system</span><span class="token operator">:</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">[</span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"> text</span><span class="token operator">:</span><span class="token plain"> systemPrompt </span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token punctuation" style="color:rgb(248, 248, 242)">]</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  messages</span><span class="token operator">:</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">[</span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"> role</span><span class="token operator">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">'user'</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"> content</span><span class="token operator">:</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">[</span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"> text</span><span class="token operator">:</span><span class="token plain"> synthesisPrompt </span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token punctuation" style="color:rgb(248, 248, 242)">]</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token punctuation" style="color:rgb(248, 248, 242)">]</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  inferenceConfig</span><span class="token operator">:</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"> maxTokens</span><span class="token operator">:</span><span class="token plain"> </span><span class="token number">4096</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token keyword control-flow" style="color:rgb(189, 147, 249);font-style:italic">for</span><span class="token plain"> </span><span class="token keyword control-flow" style="color:rgb(189, 147, 249);font-style:italic">await</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">const</span><span class="token plain"> event </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">of</span><span class="token plain"> response</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token property-access">stream</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token keyword control-flow" style="color:rgb(189, 147, 249);font-style:italic">if</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token plain">event</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token property-access">contentBlockDelta</span><span class="token operator">?.</span><span class="token plain">delta</span><span class="token operator">?.</span><span class="token plain">text</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">const</span><span class="token plain"> text </span><span class="token operator">=</span><span class="token plain"> event</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token property-access">contentBlockDelta</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token property-access">delta</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token property-access">text</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    fullContent </span><span class="token operator">+=</span><span class="token plain"> text</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token function" style="color:rgb(80, 250, 123)">send</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token string" style="color:rgb(255, 121, 198)">'chunk'</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"> delta</span><span class="token operator">:</span><span class="token plain"> text </span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain">  </span><span class="token comment" style="color:rgb(98, 114, 164)">// トークンを即時送信</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><br></span></code></pre></div></div>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="タイピング効果-simulatestreaming">タイピング効果 (<code>simulateStreaming</code>)<a href="https://www.atomai.click/awsops/ja/whatsnew/2026/03/29/v1.7.1#%E3%82%BF%E3%82%A4%E3%83%94%E3%83%B3%E3%82%B0%E5%8A%B9%E6%9E%9C-simulatestreaming" class="hash-link" aria-label="タイピング効果-simulatestreamingへの直接リンク" title="タイピング効果-simulatestreamingへの直接リンク" translate="no">​</a></h2>
<p>AgentCore Gateway は完成したテキストを一度に返すため、タイピング効果をシミュレートします。</p>
<div class="language-typescript codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-typescript codeBlock_bY9V thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#F8F8F2"><span class="token comment" style="color:rgb(98, 114, 164)">// src/app/api/ai/route.ts</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">const</span><span class="token plain"> </span><span class="token constant" style="color:rgb(189, 147, 249)">CHUNK_SIZE</span><span class="token plain"> </span><span class="token operator">=</span><span class="token plain"> </span><span class="token number">50</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain">     </span><span class="token comment" style="color:rgb(98, 114, 164)">// チャンクあたり 50 文字</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">const</span><span class="token plain"> </span><span class="token constant" style="color:rgb(189, 147, 249)">CHUNK_DELAY_MS</span><span class="token plain"> </span><span class="token operator">=</span><span class="token plain"> </span><span class="token number">15</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"> </span><span class="token comment" style="color:rgb(98, 114, 164)">// チャンク間 15ms のディレイ</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">async</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">function</span><span class="token plain"> </span><span class="token function" style="color:rgb(80, 250, 123)">simulateStreaming</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  text</span><span class="token operator">:</span><span class="token plain"> </span><span class="token builtin" style="color:rgb(189, 147, 249)">string</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token function-variable function" style="color:rgb(80, 250, 123)">send</span><span class="token operator">:</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token plain">event</span><span class="token operator">:</span><span class="token plain"> </span><span class="token builtin" style="color:rgb(189, 147, 249)">string</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"> data</span><span class="token operator">:</span><span class="token plain"> </span><span class="token builtin" style="color:rgb(189, 147, 249)">any</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token plain"> </span><span class="token arrow operator">=&gt;</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">void</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token operator">:</span><span class="token plain"> </span><span class="token known-class-name class-name">Promise</span><span class="token operator">&lt;</span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">void</span><span class="token operator">&gt;</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token keyword control-flow" style="color:rgb(189, 147, 249);font-style:italic">for</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">let</span><span class="token plain"> i </span><span class="token operator">=</span><span class="token plain"> </span><span class="token number">0</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"> i </span><span class="token operator">&lt;</span><span class="token plain"> text</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token property-access">length</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"> i </span><span class="token operator">+=</span><span class="token plain"> </span><span class="token constant" style="color:rgb(189, 147, 249)">CHUNK_SIZE</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">const</span><span class="token plain"> chunk </span><span class="token operator">=</span><span class="token plain"> text</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token method function property-access" style="color:rgb(80, 250, 123)">slice</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token plain">i</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"> i </span><span class="token operator">+</span><span class="token plain"> </span><span class="token constant" style="color:rgb(189, 147, 249)">CHUNK_SIZE</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token function" style="color:rgb(80, 250, 123)">send</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token string" style="color:rgb(255, 121, 198)">'chunk'</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"> delta</span><span class="token operator">:</span><span class="token plain"> chunk </span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token keyword control-flow" style="color:rgb(189, 147, 249);font-style:italic">if</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token plain">i </span><span class="token operator">+</span><span class="token plain"> </span><span class="token constant" style="color:rgb(189, 147, 249)">CHUNK_SIZE</span><span class="token plain"> </span><span class="token operator">&lt;</span><span class="token plain"> text</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token property-access">length</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">      </span><span class="token keyword control-flow" style="color:rgb(189, 147, 249);font-style:italic">await</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">new</span><span class="token plain"> </span><span class="token class-name known-class-name class-name">Promise</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token plain">r </span><span class="token arrow operator">=&gt;</span><span class="token plain"> </span><span class="token function" style="color:rgb(80, 250, 123)">setTimeout</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token plain">r</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"> </span><span class="token constant" style="color:rgb(189, 147, 249)">CHUNK_DELAY_MS</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><br></span></code></pre></div></div>
<p><strong>適用対象</strong>（3 箇所）:</p>
<ol>
<li class=""><strong>単一 AgentCore Gateway 応答</strong> — 完成したテキストにタイピング効果を適用</li>
<li class=""><strong>マルチルート合成 (v1.7.0)</strong> — <code>synthesizeResponses()</code> の結果に適用（v1.7.1 で Converse Stream に置き換え）</li>
<li class=""><strong>マルチルート単一成功</strong> — 1 つの Gateway のみ成功した場合</li>
</ol>
<div class="theme-admonition theme-admonition-info admonition_xJq3 alert alert--info"><div class="admonitionHeading_Gvgb"><span class="admonitionIcon_Rf37"><svg viewBox="0 0 14 16"><path fill-rule="evenodd" d="M7 2.3c3.14 0 5.7 2.56 5.7 5.7s-2.56 5.7-5.7 5.7A5.71 5.71 0 0 1 1.3 8c0-3.14 2.56-5.7 5.7-5.7zM7 1C3.14 1 0 4.14 0 8s3.14 7 7 7 7-3.14 7-7-3.14-7-7-7zm1 3H6v5h2V4zm0 6H6v2h2v-2z"></path></svg></span>なぜシミュレーションが必要なのか？</div><div class="admonitionContent_BuS1"><p>Bedrock の直接呼び出しは <code>InvokeModelWithResponseStreamCommand</code> で本物のストリーミングが可能ですが、AgentCore Gateway は内部でツールを複数回呼び出した後に<strong>最終テキストのみを返します</strong>。ユーザーに一貫したストリーミング体験を提供するため、50 文字/15ms のタイピング効果を適用しています。</p></div></div>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="チャットバブル幅の安定化-pr-8">チャットバブル幅の安定化 (PR #8)<a href="https://www.atomai.click/awsops/ja/whatsnew/2026/03/29/v1.7.1#%E3%83%81%E3%83%A3%E3%83%83%E3%83%88%E3%83%90%E3%83%96%E3%83%AB%E5%B9%85%E3%81%AE%E5%AE%89%E5%AE%9A%E5%8C%96-pr-8" class="hash-link" aria-label="チャットバブル幅の安定化 (PR #8)への直接リンク" title="チャットバブル幅の安定化 (PR #8)への直接リンク" translate="no">​</a></h2>
<p>SSE ストリーミング中にチャットバブルの幅が突然変わる問題を修正しました。</p>
<table><thead><tr><th>項目</th><th>Before</th><th>After</th></tr></thead><tbody><tr><td>CSS</td><td><code>max-w-5xl</code></td><td><strong><code>w-full max-w-5xl</code></strong></td></tr><tr><td>動作</td><td>コンテンツ増加時に幅がジャンプ</td><td>最初のチャンクから最大幅に固定</td></tr><tr><td>ファイル</td><td><code>src/app/ai/page.tsx</code></td><td>同一</td></tr></tbody></table>
<p><strong>Before</strong> — 幅がジャンプ:</p>
<div class="language-html codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-html codeBlock_bY9V thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#F8F8F2"><span class="token tag punctuation" style="color:rgb(248, 248, 242)">&lt;</span><span class="token tag" style="color:rgb(255, 121, 198)">div</span><span class="token tag" style="color:rgb(255, 121, 198)"> </span><span class="token tag attr-name" style="color:rgb(241, 250, 140)">class</span><span class="token tag attr-value punctuation attr-equals" style="color:rgb(248, 248, 242)">=</span><span class="token tag attr-value punctuation" style="color:rgb(248, 248, 242)">"</span><span class="token tag attr-value" style="color:rgb(255, 121, 198)">max-w-5xl rounded-lg px-4 py-3 ...</span><span class="token tag attr-value punctuation" style="color:rgb(248, 248, 242)">"</span><span class="token tag punctuation" style="color:rgb(248, 248, 242)">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token comment" style="color:rgb(98, 114, 164)">&lt;!-- コンテンツが短いときは狭く、長くなると突然広がる --&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token tag punctuation" style="color:rgb(248, 248, 242)">&lt;/</span><span class="token tag" style="color:rgb(255, 121, 198)">div</span><span class="token tag punctuation" style="color:rgb(248, 248, 242)">&gt;</span><br></span></code></pre></div></div>
<p><strong>After</strong> — 安定した幅:</p>
<div class="language-html codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-html codeBlock_bY9V thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#F8F8F2"><span class="token tag punctuation" style="color:rgb(248, 248, 242)">&lt;</span><span class="token tag" style="color:rgb(255, 121, 198)">div</span><span class="token tag" style="color:rgb(255, 121, 198)"> </span><span class="token tag attr-name" style="color:rgb(241, 250, 140)">class</span><span class="token tag attr-value punctuation attr-equals" style="color:rgb(248, 248, 242)">=</span><span class="token tag attr-value punctuation" style="color:rgb(248, 248, 242)">"</span><span class="token tag attr-value" style="color:rgb(255, 121, 198)">w-full max-w-5xl rounded-lg px-4 py-3 ...</span><span class="token tag attr-value punctuation" style="color:rgb(248, 248, 242)">"</span><span class="token tag punctuation" style="color:rgb(248, 248, 242)">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token comment" style="color:rgb(98, 114, 164)">&lt;!-- 最初から w-full で最大幅を確保し、max-w-5xl で上限を制限 --&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token tag punctuation" style="color:rgb(248, 248, 242)">&lt;/</span><span class="token tag" style="color:rgb(255, 121, 198)">div</span><span class="token tag punctuation" style="color:rgb(248, 248, 242)">&gt;</span><br></span></code></pre></div></div>
<div class="theme-admonition theme-admonition-tip admonition_xJq3 alert alert--success"><div class="admonitionHeading_Gvgb"><span class="admonitionIcon_Rf37"><svg viewBox="0 0 12 16"><path fill-rule="evenodd" d="M6.5 0C3.48 0 1 2.19 1 5c0 .92.55 2.25 1 3 1.34 2.25 1.78 2.78 2 4v1h5v-1c.22-1.22.66-1.75 2-4 .45-.75 1-2.08 1-3 0-2.81-2.48-5-5.5-5zm3.64 7.48c-.25.44-.47.8-.67 1.11-.86 1.41-1.25 2.06-1.45 3.23-.02.05-.02.11-.02.17H5c0-.06 0-.13-.02-.17-.2-1.17-.59-1.83-1.45-3.23-.2-.31-.42-.67-.67-1.11C2.44 6.78 2 5.65 2 5c0-2.2 2.02-4 4.5-4 1.22 0 2.36.42 3.22 1.19C10.55 2.94 11 3.94 11 5c0 .66-.44 1.78-.86 2.48zM4 14h5c-.23 1.14-1.3 2-2.5 2s-2.27-.86-2.5-2z"></path></svg></span>CSS パターン</div><div class="admonitionContent_BuS1"><p>SSE ストリーミングのようにコンテンツが段階的に追加されるコンテナには <strong><code>w-full max-w-{size}</code></strong> の組み合わせを使用してください。
<code>max-w-{size}</code> のみを使用すると、コンテンツ量に応じて幅が変わります。</p></div></div>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="モニタリングクエリの時間範囲フィルター">モニタリングクエリの時間範囲フィルター<a href="https://www.atomai.click/awsops/ja/whatsnew/2026/03/29/v1.7.1#%E3%83%A2%E3%83%8B%E3%82%BF%E3%83%AA%E3%83%B3%E3%82%B0%E3%82%AF%E3%82%A8%E3%83%AA%E3%81%AE%E6%99%82%E9%96%93%E7%AF%84%E5%9B%B2%E3%83%95%E3%82%A3%E3%83%AB%E3%82%BF%E3%83%BC" class="hash-link" aria-label="モニタリングクエリの時間範囲フィルターへの直接リンク" title="モニタリングクエリの時間範囲フィルターへの直接リンク" translate="no">​</a></h2>
<p>時間範囲の制限がないモニタリングクエリが Steampipe API を通じて<strong>全履歴データ</strong>を取得し、pg pool の 5 コネクションをすべて占有してしまう問題を修正しました。</p>
<div style="border-radius:8px;overflow:hidden;box-shadow:0 4px 24px rgba(0,0,0,0.4);margin-bottom:1.5rem;position:relative"><canvas></canvas></div>
<table><thead><tr><th>クエリ</th><th>ファイル</th><th>Before</th><th>After</th></tr></thead><tbody><tr><td><code>ec2CpuHourly</code></td><td><code>queries/metrics.ts</code></td><td>時間制限なし</td><td><code>WHERE timestamp &gt;= NOW() - INTERVAL '24 hours'</code></td></tr><tr><td><code>ebsIopsHourly</code></td><td><code>queries/metrics.ts</code></td><td><code>WHERE r.timestamp IS NOT NULL</code></td><td><code>AND r.timestamp &gt;= NOW() - INTERVAL '24 hours'</code></td></tr><tr><td><code>rdsCpuDaily</code></td><td><code>queries/metrics.ts</code></td><td>時間制限なし</td><td><code>WHERE timestamp &gt;= NOW() - INTERVAL '30 days'</code></td></tr></tbody></table>
<div class="theme-admonition theme-admonition-warning admonition_xJq3 alert alert--warning"><div class="admonitionHeading_Gvgb"><span class="admonitionIcon_Rf37"><svg viewBox="0 0 16 16"><path fill-rule="evenodd" d="M8.893 1.5c-.183-.31-.52-.5-.887-.5s-.703.19-.886.5L.138 13.499a.98.98 0 0 0 0 1.001c.193.31.53.501.886.501h13.964c.367 0 .704-.19.877-.5a1.03 1.03 0 0 0 .01-1.002L8.893 1.5zm.133 11.497H6.987v-2.003h2.039v2.003zm0-3.004H6.987V5.987h2.039v4.006z"></path></svg></span>pg Pool 枯渇の症状</div><div class="admonitionContent_BuS1"><p>46+ の EC2 インスタンス + 多数の EBS ボリュームがある環境では、時間制限のないクエリが<strong>数分間コネクションを占有</strong>します。
pg pool の <code>max: 5</code> がすべて使用されると、ダッシュボードとすべてのページが <code>statement_timeout: 120s</code> まで待機した後に失敗します。</p></div></div>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="3-つのストリーミングモードまとめ">3 つのストリーミングモードまとめ<a href="https://www.atomai.click/awsops/ja/whatsnew/2026/03/29/v1.7.1#3-%E3%81%A4%E3%81%AE%E3%82%B9%E3%83%88%E3%83%AA%E3%83%BC%E3%83%9F%E3%83%B3%E3%82%B0%E3%83%A2%E3%83%BC%E3%83%89%E3%81%BE%E3%81%A8%E3%82%81" class="hash-link" aria-label="3 つのストリーミングモードまとめへの直接リンク" title="3 つのストリーミングモードまとめへの直接リンク" translate="no">​</a></h2>
<p>v1.7.1 では、AWSops の AI 応答は状況に応じて 3 つのストリーミングモードを使用します。</p>
<table><thead><tr><th>モード</th><th>使用タイミング</th><th>実装</th><th>初回トークン遅延</th></tr></thead><tbody><tr><td><strong>Real Streaming</strong></td><td>Bedrock 直接呼び出し</td><td><code>InvokeModelWithResponseStreamCommand</code></td><td>~200ms</td></tr><tr><td><strong>Converse Stream</strong></td><td>マルチルート合成</td><td><code>ConverseStreamCommand</code> + <code>contentBlockDelta</code></td><td>~200ms</td></tr><tr><td><strong>Simulated Streaming</strong></td><td>AgentCore Gateway 応答</td><td><code>simulateStreaming()</code>（50 文字/15ms）</td><td>応答完了後すぐ</td></tr></tbody></table>
<div style="border-radius:8px;overflow:hidden;box-shadow:0 4px 24px rgba(0,0,0,0.4);margin-bottom:1.5rem;position:relative"><canvas></canvas></div>
<div class="theme-admonition theme-admonition-tip admonition_xJq3 alert alert--success"><div class="admonitionHeading_Gvgb"><span class="admonitionIcon_Rf37"><svg viewBox="0 0 12 16"><path fill-rule="evenodd" d="M6.5 0C3.48 0 1 2.19 1 5c0 .92.55 2.25 1 3 1.34 2.25 1.78 2.78 2 4v1h5v-1c.22-1.22.66-1.75 2-4 .45-.75 1-2.08 1-3 0-2.81-2.48-5-5.5-5zm3.64 7.48c-.25.44-.47.8-.67 1.11-.86 1.41-1.25 2.06-1.45 3.23-.02.05-.02.11-.02.17H5c0-.06 0-.13-.02-.17-.2-1.17-.59-1.83-1.45-3.23-.2-.31-.42-.67-.67-1.11C2.44 6.78 2 5.65 2 5c0-2.2 2.02-4 4.5-4 1.22 0 2.36.42 3.22 1.19C10.55 2.94 11 3.94 11 5c0 .66-.44 1.78-.86 2.48zM4 14h5c-.23 1.14-1.3 2-2.5 2s-2.27-.86-2.5-2z"></path></svg></span>統一されたクライアント体験</div><div class="admonitionContent_BuS1"><p>3 つのモードすべてが同じ SSE <code>chunk</code> イベントを使用するため、クライアント（<code>src/app/ai/page.tsx</code>）はモードを区別せずに <code>streamingContent</code> 状態へ delta を蓄積し、ReactMarkdown でリアルタイムにレンダリングします。</p></div></div>]]></content:encoded>
            <category>Release</category>
            <category>Streaming</category>
            <category>AI</category>
            <category>Monitoring</category>
        </item>
        <item>
            <title><![CDATA[v1.7.0 — マルチアカウント + リアルタイムストリーミング]]></title>
            <link>https://www.atomai.click/awsops/ja/whatsnew/2026/03/24/v1.7.0</link>
            <guid>https://www.atomai.click/awsops/ja/whatsnew/2026/03/24/v1.7.0</guid>
            <pubDate>Tue, 24 Mar 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[マルチアカウント対応(PR #6)、リアルタイム Bedrock ストリーミング、キャッシュプリウォーミング、セキュリティ修正 25 件、顧客ロゴのカスタマイズ。]]></description>
            <content:encoded><![CDATA[<p><strong>マルチアカウント対応</strong>(PR #6)と<strong>リアルタイム Bedrock ストリーミング</strong>を核心とする大規模リリースです。<strong>セキュリティ修正 25 件</strong>が反映されました。</p>
<div class="theme-admonition theme-admonition-tip admonition_xJq3 alert alert--success"><div class="admonitionHeading_Gvgb"><span class="admonitionIcon_Rf37"><svg viewBox="0 0 12 16"><path fill-rule="evenodd" d="M6.5 0C3.48 0 1 2.19 1 5c0 .92.55 2.25 1 3 1.34 2.25 1.78 2.78 2 4v1h5v-1c.22-1.22.66-1.75 2-4 .45-.75 1-2.08 1-3 0-2.81-2.48-5-5.5-5zm3.64 7.48c-.25.44-.47.8-.67 1.11-.86 1.41-1.25 2.06-1.45 3.23-.02.05-.02.11-.02.17H5c0-.06 0-.13-.02-.17-.2-1.17-.59-1.83-1.45-3.23-.2-.31-.42-.67-.67-1.11C2.44 6.78 2 5.65 2 5c0-2.2 2.02-4 4.5-4 1.22 0 2.36.42 3.22 1.19C10.55 2.94 11 3.94 11 5c0 .66-.44 1.78-.86 2.48zM4 14h5c-.23 1.14-1.3 2-2.5 2s-2.27-.86-2.5-2z"></path></svg></span>主要な変化</div><div class="admonitionContent_BuS1"><p><strong>マルチアカウント (PR #6)</strong> · <strong>リアルタイムストリーミング</strong> · <strong>キャッシュプリウォーミング</strong> · <strong>セキュリティ修正 25 件</strong> · <strong>顧客ロゴのカスタマイズ</strong></p></div></div>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="マルチアカウントアーキテクチャ-pr-6">マルチアカウントアーキテクチャ (PR #6)<a href="https://www.atomai.click/awsops/ja/whatsnew/2026/03/24/v1.7.0#%E3%83%9E%E3%83%AB%E3%83%81%E3%82%A2%E3%82%AB%E3%82%A6%E3%83%B3%E3%83%88%E3%82%A2%E3%83%BC%E3%82%AD%E3%83%86%E3%82%AF%E3%83%81%E3%83%A3-pr-6" class="hash-link" aria-label="マルチアカウントアーキテクチャ (PR #6)への直接リンク" title="マルチアカウントアーキテクチャ (PR #6)への直接リンク" translate="no">​</a></h2>
<p>Steampipe Aggregator パターンで複数の AWS アカウントを単一ダッシュボードから管理します。<code>data/config.json</code> の <code>accounts[]</code> 配列を変更するだけで、コード修正なしにアカウントを追加できます。</p>
<div style="border-radius:8px;overflow:hidden;box-shadow:0 4px 24px rgba(0,0,0,0.4);margin-bottom:1.5rem;position:relative"><canvas></canvas></div>
<table><thead><tr><th>コンポーネント</th><th>ファイル</th><th>役割</th></tr></thead><tbody><tr><td><code>AccountContext</code></td><td><code>src/components/</code></td><td>アカウント状態管理 + <code>useAccount()</code> フック</td></tr><tr><td><code>AccountSelector</code></td><td><code>src/components/</code></td><td>アカウント切り替えドロップダウン (ARIA、キーボード対応)</td></tr><tr><td><code>AccountBadge</code></td><td><code>src/components/</code></td><td>アカウント別カラードット + alias 表示</td></tr><tr><td><code>buildSearchPath()</code></td><td><code>src/lib/steampipe.ts</code></td><td><code>public, aws_{id}, kubernetes, trivy</code> を返す</td></tr><tr><td><code>runCostQueriesPerAccount()</code></td><td><code>src/lib/steampipe.ts</code></td><td>アカウント別 Cost クエリ実行後、<code>account_id</code> タグ付けでマージ</td></tr><tr><td><code>/accounts</code> ページ</td><td><code>src/app/accounts/</code></td><td>アカウント追加/削除/テスト UI</td></tr><tr><td><code>cross_account.py</code></td><td><code>agent/</code></td><td>STS AssumeRole (credential キャッシング、ExternalId、監査ロギング)</td></tr><tr><td>設定スクリプト</td><td><code>scripts/11-setup-multi-account.sh</code></td><td>Aggregator + クロスアカウント IAM ロールの自動化</td></tr></tbody></table>
<div class="theme-admonition theme-admonition-info admonition_xJq3 alert alert--info"><div class="admonitionHeading_Gvgb"><span class="admonitionIcon_Rf37"><svg viewBox="0 0 14 16"><path fill-rule="evenodd" d="M7 2.3c3.14 0 5.7 2.56 5.7 5.7s-2.56 5.7-5.7 5.7A5.71 5.71 0 0 1 1.3 8c0-3.14 2.56-5.7 5.7-5.7zM7 1C3.14 1 0 4.14 0 8s3.14 7 7 7 7-3.14 7-7-3.14-7-7-7zm1 3H6v5h2V4zm0 6H6v2h2v-2z"></path></svg></span>コード変更範囲</div><div class="admonitionContent_BuS1"><p>すべての <strong>25 個の SQL クエリ</strong>に <code>account_id</code> カラムを追加し、<strong>35 ページ</strong>に <code>useAccountContext()</code> を適用しました。DataTable は <code>isMultiAccount &amp;&amp; data[0].account_id</code> を検知すると Account カラムを自動追加します。</p></div></div>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="configjson-の構造">config.json の構造<a href="https://www.atomai.click/awsops/ja/whatsnew/2026/03/24/v1.7.0#configjson-%E3%81%AE%E6%A7%8B%E9%80%A0" class="hash-link" aria-label="config.json の構造への直接リンク" title="config.json の構造への直接リンク" translate="no">​</a></h3>
<div class="language-json codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-json codeBlock_bY9V thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#F8F8F2"><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token property">"accounts"</span><span class="token operator">:</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">[</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">      </span><span class="token property">"accountId"</span><span class="token operator">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"111111111111"</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">      </span><span class="token property">"alias"</span><span class="token operator">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"Host"</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">      </span><span class="token property">"connectionName"</span><span class="token operator">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"aws_111111111111"</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">      </span><span class="token property">"region"</span><span class="token operator">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"ap-northeast-2"</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">      </span><span class="token property">"isHost"</span><span class="token operator">:</span><span class="token plain"> </span><span class="token boolean">true</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">      </span><span class="token property">"features"</span><span class="token operator">:</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">        </span><span class="token property">"costEnabled"</span><span class="token operator">:</span><span class="token plain"> </span><span class="token boolean">true</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">        </span><span class="token property">"eksEnabled"</span><span class="token operator">:</span><span class="token plain"> </span><span class="token boolean">true</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">        </span><span class="token property">"k8sEnabled"</span><span class="token operator">:</span><span class="token plain"> </span><span class="token boolean">true</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">      </span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">      </span><span class="token property">"accountId"</span><span class="token operator">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"222222222222"</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">      </span><span class="token property">"alias"</span><span class="token operator">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"Staging"</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">      </span><span class="token property">"connectionName"</span><span class="token operator">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"aws_222222222222"</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">      </span><span class="token property">"region"</span><span class="token operator">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"ap-northeast-2"</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">      </span><span class="token property">"isHost"</span><span class="token operator">:</span><span class="token plain"> </span><span class="token boolean">false</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">      </span><span class="token property">"features"</span><span class="token operator">:</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">        </span><span class="token property">"costEnabled"</span><span class="token operator">:</span><span class="token plain"> </span><span class="token boolean">false</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">        </span><span class="token property">"eksEnabled"</span><span class="token operator">:</span><span class="token plain"> </span><span class="token boolean">false</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">        </span><span class="token property">"k8sEnabled"</span><span class="token operator">:</span><span class="token plain"> </span><span class="token boolean">false</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">      </span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token punctuation" style="color:rgb(248, 248, 242)">]</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><br></span></code></pre></div></div>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="セキュリティ修正-25-件">セキュリティ修正 (25 件)<a href="https://www.atomai.click/awsops/ja/whatsnew/2026/03/24/v1.7.0#%E3%82%BB%E3%82%AD%E3%83%A5%E3%83%AA%E3%83%86%E3%82%A3%E4%BF%AE%E6%AD%A3-25-%E4%BB%B6" class="hash-link" aria-label="セキュリティ修正 (25 件)への直接リンク" title="セキュリティ修正 (25 件)への直接リンク" translate="no">​</a></h2>
<p>3 段階の深刻度に分類し、25 件のセキュリティ課題を修正しました。</p>
<div class="theme-admonition theme-admonition-warning admonition_xJq3 alert alert--warning"><div class="admonitionHeading_Gvgb"><span class="admonitionIcon_Rf37"><svg viewBox="0 0 16 16"><path fill-rule="evenodd" d="M8.893 1.5c-.183-.31-.52-.5-.887-.5s-.703.19-.886.5L.138 13.499a.98.98 0 0 0 0 1.001c.193.31.53.501.886.501h13.964c.367 0 .704-.19.877-.5a1.03 1.03 0 0 0 .01-1.002L8.893 1.5zm.133 11.497H6.987v-2.003h2.039v2.003zm0-3.004H6.987V5.987h2.039v4.006z"></path></svg></span>CRITICAL 修正事項</div><div class="admonitionContent_BuS1"><p>クロスアカウント AssumeRole に<strong>監査ログ</strong>と <strong>ExternalId</strong> を必須化し、権限エスカレーションと Confused Deputy 攻撃を防止します。</p></div></div>
<table><thead><tr><th>深刻度</th><th>件数</th><th>主要項目</th></tr></thead><tbody><tr><td><strong>CRITICAL</strong></td><td>2</td><td>AssumeRole 監査ログ、ExternalId 必須化</td></tr><tr><td><strong>HIGH</strong></td><td>5</td><td>Rate Limiting (5 req/min)、入力検証の強化、<code>execFileSync</code> セキュリティ</td></tr><tr><td><strong>MEDIUM</strong></td><td>18</td><td>Pool exhaustion 防止、コネクション破棄、エラーメッセージのフィルタリング</td></tr></tbody></table>
<p><strong>CRITICAL 詳細</strong>:</p>
<table><thead><tr><th>課題</th><th>リスク</th><th>修正</th></tr></thead><tbody><tr><td>AssumeRole 監査の不在</td><td>クロスアカウントアクセスの追跡不可</td><td><code>cross_account.py</code> にすべての AssumeRole 呼び出しをロギング</td></tr><tr><td>ExternalId 未使用</td><td>Confused Deputy 攻撃が可能</td><td>AssumeRole に ExternalId 必須パラメータを追加</td></tr></tbody></table>
<p><strong>HIGH 詳細</strong>:</p>
<table><thead><tr><th>課題</th><th>リスク</th><th>修正</th></tr></thead><tbody><tr><td>Rate Limiting の不在</td><td>API 濫用、コスト急増</td><td>AI ルートに 5 req/min の制限を適用</td></tr><tr><td>入力検証の不足</td><td>SQL Injection が可能</td><td>クエリパラメータのホワイトリスト検証</td></tr><tr><td><code>execFileSync</code> の使用</td><td>Command Injection</td><td>引数配列方式へ変換</td></tr></tbody></table>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="リアルタイム-bedrock-ストリーミング">リアルタイム Bedrock ストリーミング<a href="https://www.atomai.click/awsops/ja/whatsnew/2026/03/24/v1.7.0#%E3%83%AA%E3%82%A2%E3%83%AB%E3%82%BF%E3%82%A4%E3%83%A0-bedrock-%E3%82%B9%E3%83%88%E3%83%AA%E3%83%BC%E3%83%9F%E3%83%B3%E3%82%B0" class="hash-link" aria-label="リアルタイム Bedrock ストリーミングへの直接リンク" title="リアルタイム Bedrock ストリーミングへの直接リンク" translate="no">​</a></h2>
<p>Bedrock 応答をチャンク単位でリアルタイム送信します。</p>
<div style="border-radius:8px;overflow:hidden;box-shadow:0 4px 24px rgba(0,0,0,0.4);margin-bottom:1.5rem;position:relative"><canvas></canvas></div>
<table><thead><tr><th>項目</th><th>Before (v1.6.0)</th><th>After (v1.7.0)</th></tr></thead><tbody><tr><td>Bedrock 応答</td><td>全テキストを一括</td><td><strong>チャンク単位でリアルタイム</strong></td></tr><tr><td>API</td><td><code>InvokeModelCommand</code></td><td><code>InvokeModelWithResponseStreamCommand</code></td></tr><tr><td>送信方式</td><td>完了後に <code>done</code> イベント</td><td><code>chunk</code> イベントを連続送信</td></tr><tr><td>クライアント</td><td>全テキストをレンダリング</td><td><code>streamingContent</code> 状態でリアルタイムレンダリング</td></tr></tbody></table>
<div class="theme-admonition theme-admonition-info admonition_xJq3 alert alert--info"><div class="admonitionHeading_Gvgb"><span class="admonitionIcon_Rf37"><svg viewBox="0 0 14 16"><path fill-rule="evenodd" d="M7 2.3c3.14 0 5.7 2.56 5.7 5.7s-2.56 5.7-5.7 5.7A5.71 5.71 0 0 1 1.3 8c0-3.14 2.56-5.7 5.7-5.7zM7 1C3.14 1 0 4.14 0 8s3.14 7 7 7 7-3.14 7-7-3.14-7-7-7zm1 3H6v5h2V4zm0 6H6v2h2v-2z"></path></svg></span>ストリーミングヘルパー</div><div class="admonitionContent_BuS1"><p><code>streamBedrockToSSE()</code> 関数(<code>src/app/api/ai/route.ts</code>)が Bedrock ストリームからチャンクを読み取り、SSE <code>chunk</code> イベントに変換します。</p></div></div>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="キャッシュプリウォーミング">キャッシュプリウォーミング<a href="https://www.atomai.click/awsops/ja/whatsnew/2026/03/24/v1.7.0#%E3%82%AD%E3%83%A3%E3%83%83%E3%82%B7%E3%83%A5%E3%83%97%E3%83%AA%E3%82%A6%E3%82%A9%E3%83%BC%E3%83%9F%E3%83%B3%E3%82%B0" class="hash-link" aria-label="キャッシュプリウォーミングへの直接リンク" title="キャッシュプリウォーミングへの直接リンク" translate="no">​</a></h2>
<p>ダッシュボードのロード速度を改善するため、バックグラウンドのキャッシュプリウォーミングを導入しました。</p>
<div style="border-radius:8px;overflow:hidden;box-shadow:0 4px 24px rgba(0,0,0,0.4);margin-bottom:1.5rem;position:relative"><canvas></canvas></div>
<table><thead><tr><th>項目</th><th>説明</th></tr></thead><tbody><tr><td>クエリ数</td><td>ダッシュボード 23 + モニタリング 10 = <strong>33 個</strong></td></tr><tr><td>更新周期</td><td><strong>4 分</strong> (キャッシュ TTL 5 分の満了前)</td></tr><tr><td>初期化</td><td><code>ensureCacheWarmerStarted()</code> — lazy-init パターン</td></tr><tr><td>効果</td><td>初回ページロード時にキャッシュヒットで<strong>即時応答</strong></td></tr></tbody></table>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="顧客ロゴのカスタマイズ">顧客ロゴのカスタマイズ<a href="https://www.atomai.click/awsops/ja/whatsnew/2026/03/24/v1.7.0#%E9%A1%A7%E5%AE%A2%E3%83%AD%E3%82%B4%E3%81%AE%E3%82%AB%E3%82%B9%E3%82%BF%E3%83%9E%E3%82%A4%E3%82%BA" class="hash-link" aria-label="顧客ロゴのカスタマイズへの直接リンク" title="顧客ロゴのカスタマイズへの直接リンク" translate="no">​</a></h2>
<p><code>data/config.json</code> で顧客ロゴを設定すると、サーバー再起動なしに 1 分以内に反映されます。</p>
<div class="language-json codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-json codeBlock_bY9V thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#F8F8F2"><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token property">"customerLogo"</span><span class="token operator">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"/logos/customer-logo.png"</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token property">"customerName"</span><span class="token operator">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"Customer Corp"</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token property">"customerLogoBg"</span><span class="token operator">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"#ffffff"</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><br></span></code></pre></div></div>
<ul>
<li class=""><code>public/logos/</code> ディレクトリにロゴファイルを配置</li>
<li class="">config の変更のみでブランディングを切り替え — コード修正は不要</li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="バージョン比較">バージョン比較<a href="https://www.atomai.click/awsops/ja/whatsnew/2026/03/24/v1.7.0#%E3%83%90%E3%83%BC%E3%82%B8%E3%83%A7%E3%83%B3%E6%AF%94%E8%BC%83" class="hash-link" aria-label="バージョン比較への直接リンク" title="バージョン比較への直接リンク" translate="no">​</a></h2>
<table><thead><tr><th>項目</th><th>v1.6.0</th><th>v1.7.0</th><th>変化</th></tr></thead><tbody><tr><td>Pages</td><td>35</td><td><strong>36</strong></td><td>+accounts</td></tr><tr><td>Components</td><td>15</td><td><strong>17</strong></td><td>+AccountBadge, AccountSelector</td></tr><tr><td>ADRs</td><td>7</td><td><strong>8</strong></td><td>+マルチアカウント</td></tr><tr><td>デプロイスクリプト</td><td>10</td><td><strong>11</strong></td><td>+Step 11</td></tr><tr><td>SQL クエリ</td><td>25</td><td>25</td><td>+account_id カラム追加</td></tr><tr><td>セキュリティ修正</td><td>-</td><td><strong>25 件</strong></td><td>CRITICAL 2, HIGH 5, MEDIUM 18</td></tr></tbody></table>]]></content:encoded>
            <category>Release</category>
            <category>Multi-Account</category>
            <category>Security</category>
            <category>Streaming</category>
            <category>Cost</category>
        </item>
        <item>
            <title><![CDATA[v1.6.0 — 多言語(i18n) + Bedrock モニタリング]]></title>
            <link>https://www.atomai.click/awsops/ja/whatsnew/2026/03/21/v1.6.0</link>
            <guid>https://www.atomai.click/awsops/ja/whatsnew/2026/03/21/v1.6.0</guid>
            <pubDate>Sat, 21 Mar 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[韓国語/英語の多言語対応、Bedrock モデル別使用量ダッシュボード、AI トークンコスト表示、Docusaurus ユーザーガイドサイト構築。]]></description>
            <content:encoded><![CDATA[<p><strong>多言語(韓/英)対応</strong>と <strong>Bedrock モニタリングダッシュボード</strong>を追加し、Docusaurus ベースのユーザーガイドサイトを構築したリリースです。</p>
<div class="theme-admonition theme-admonition-tip admonition_xJq3 alert alert--success"><div class="admonitionHeading_Gvgb"><span class="admonitionIcon_Rf37"><svg viewBox="0 0 12 16"><path fill-rule="evenodd" d="M6.5 0C3.48 0 1 2.19 1 5c0 .92.55 2.25 1 3 1.34 2.25 1.78 2.78 2 4v1h5v-1c.22-1.22.66-1.75 2-4 .45-.75 1-2.08 1-3 0-2.81-2.48-5-5.5-5zm3.64 7.48c-.25.44-.47.8-.67 1.11-.86 1.41-1.25 2.06-1.45 3.23-.02.05-.02.11-.02.17H5c0-.06 0-.13-.02-.17-.2-1.17-.59-1.83-1.45-3.23-.2-.31-.42-.67-.67-1.11C2.44 6.78 2 5.65 2 5c0-2.2 2.02-4 4.5-4 1.22 0 2.36.42 3.22 1.19C10.55 2.94 11 3.94 11 5c0 .66-.44 1.78-.86 2.48zM4 14h5c-.23 1.14-1.3 2-2.5 2s-2.27-.86-2.5-2z"></path></svg></span>主要追加</div><div class="admonitionContent_BuS1"><p><strong>韓/英 多言語</strong> · <strong>500+ 翻訳キー</strong> · <strong>Bedrock モニタリングダッシュボード</strong> · <strong>AI トークンコスト表示</strong> · <strong>Docusaurus ガイドサイト</strong></p></div></div>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="多言語対応-i18n">多言語対応 (i18n)<a href="https://www.atomai.click/awsops/ja/whatsnew/2026/03/21/v1.6.0#%E5%A4%9A%E8%A8%80%E8%AA%9E%E5%AF%BE%E5%BF%9C-i18n" class="hash-link" aria-label="多言語対応 (i18n)への直接リンク" title="多言語対応 (i18n)への直接リンク" translate="no">​</a></h2>
<p>React Context + localStorage ベースで、URL ルーティングなしに言語を切り替えます。Next.js の <code>basePath: '/awsops'</code> と衝突しない設計です。</p>
<div style="border-radius:8px;overflow:hidden;box-shadow:0 4px 24px rgba(0,0,0,0.4);margin-bottom:1.5rem;position:relative"><canvas></canvas></div>
<table><thead><tr><th>項目</th><th>Before (v1.5)</th><th>After (v1.6.0)</th></tr></thead><tbody><tr><td>言語</td><td>韓国語のみ</td><td>韓国語 + 英語</td></tr><tr><td>翻訳キー</td><td>0</td><td><strong>500+</strong> (各言語)</td></tr><tr><td>言語切り替え</td><td>なし</td><td>Sidebar の EN/한 トグルボタン</td></tr><tr><td>AI 応答言語</td><td>韓国語のみ</td><td>設定に応じて韓/英を自動切り替え</td></tr><tr><td>URL 変更</td><td>-</td><td>なし (basePath 衝突を防止)</td></tr></tbody></table>
<div class="theme-admonition theme-admonition-info admonition_xJq3 alert alert--info"><div class="admonitionHeading_Gvgb"><span class="admonitionIcon_Rf37"><svg viewBox="0 0 14 16"><path fill-rule="evenodd" d="M7 2.3c3.14 0 5.7 2.56 5.7 5.7s-2.56 5.7-5.7 5.7A5.71 5.71 0 0 1 1.3 8c0-3.14 2.56-5.7 5.7-5.7zM7 1C3.14 1 0 4.14 0 8s3.14 7 7 7 7-3.14 7-7-3.14-7-7-7zm1 3H6v5h2V4zm0 6H6v2h2v-2z"></path></svg></span>なぜ URL ベースの i18n を使用しないのか?</div><div class="admonitionContent_BuS1"><p>Next.js の <code>basePath: '/awsops'</code> が設定されているため、Next.js 組み込み i18n の locale prefix(<code>/ko/awsops</code>、<code>/en/awsops</code>)と衝突します。React Context + localStorage 方式は URL を変更しないため、この問題を回避します。</p></div></div>
<p><strong>翻訳範囲</strong>:</p>
<ul>
<li class="">全 35 ページのテキスト</li>
<li class="">Header、Sidebar メニューラベル</li>
<li class="">AI ステータスメッセージ (分析中、Gateway 接続中、完了 など)</li>
<li class="">DataTable カラムヘッダー</li>
<li class="">StatsCard ラベル</li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="bedrock-モニタリング-bedrock">Bedrock モニタリング (<code>/bedrock</code>)<a href="https://www.atomai.click/awsops/ja/whatsnew/2026/03/21/v1.6.0#bedrock-%E3%83%A2%E3%83%8B%E3%82%BF%E3%83%AA%E3%83%B3%E3%82%B0-bedrock" class="hash-link" aria-label="bedrock-モニタリング-bedrockへの直接リンク" title="bedrock-モニタリング-bedrockへの直接リンク" translate="no">​</a></h2>
<p>Bedrock モデル別使用量を CloudWatch メトリクスと AWSops アプリ自体のトークン追跡でモニタリングします。</p>
<div style="border-radius:8px;overflow:hidden;box-shadow:0 4px 24px rgba(0,0,0,0.4);margin-bottom:1.5rem;position:relative"><canvas></canvas></div>
<table><thead><tr><th>機能</th><th>説明</th></tr></thead><tbody><tr><td><strong>モデル別使用量</strong></td><td>Claude Sonnet、Opus などモデル別の呼び出し数/トークン</td></tr><tr><td><strong>Account vs AWSops</strong></td><td>AWS アカウント全体の Bedrock 使用量に対する AWSops アプリの比率</td></tr><tr><td><strong>AI トークンコスト</strong></td><td>チャット応答に入力/出力トークン数 + USD コストを表示</td></tr><tr><td><strong>プロンプトキャッシング</strong></td><td>キャッシュヒット率の表示、コスト削減効果の確認</td></tr><tr><td><strong>デフォルト範囲</strong></td><td>7 日 (変更可能)</td></tr><tr><td><strong>API ルート</strong></td><td><code>/api/bedrock-metrics</code> (<code>src/app/api/bedrock-metrics/route.ts</code>)</td></tr></tbody></table>
<div class="theme-admonition theme-admonition-tip admonition_xJq3 alert alert--success"><div class="admonitionHeading_Gvgb"><span class="admonitionIcon_Rf37"><svg viewBox="0 0 12 16"><path fill-rule="evenodd" d="M6.5 0C3.48 0 1 2.19 1 5c0 .92.55 2.25 1 3 1.34 2.25 1.78 2.78 2 4v1h5v-1c.22-1.22.66-1.75 2-4 .45-.75 1-2.08 1-3 0-2.81-2.48-5-5.5-5zm3.64 7.48c-.25.44-.47.8-.67 1.11-.86 1.41-1.25 2.06-1.45 3.23-.02.05-.02.11-.02.17H5c0-.06 0-.13-.02-.17-.2-1.17-.59-1.83-1.45-3.23-.2-.31-.42-.67-.67-1.11C2.44 6.78 2 5.65 2 5c0-2.2 2.02-4 4.5-4 1.22 0 2.36.42 3.22 1.19C10.55 2.94 11 3.94 11 5c0 .66-.44 1.78-.86 2.48zM4 14h5c-.23 1.14-1.3 2-2.5 2s-2.27-.86-2.5-2z"></path></svg></span>AI トークンコスト表示</div><div class="admonitionContent_BuS1"><p>チャット応答の下部に <code>入力: 2,450 トークン · 出力: 1,200 トークン · $0.0234</code> の形式でコストを表示します。
ユーザーが各質問のコストをリアルタイムで確認できるため、コスト意識が高まります。</p></div></div>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="docusaurus-ユーザーガイド">Docusaurus ユーザーガイド<a href="https://www.atomai.click/awsops/ja/whatsnew/2026/03/21/v1.6.0#docusaurus-%E3%83%A6%E3%83%BC%E3%82%B6%E3%83%BC%E3%82%AC%E3%82%A4%E3%83%89" class="hash-link" aria-label="Docusaurus ユーザーガイドへの直接リンク" title="Docusaurus ユーザーガイドへの直接リンク" translate="no">​</a></h2>
<p><code>web/</code> ディレクトリに Docusaurus ベースのユーザーガイドサイトを構築しました。</p>
<table><thead><tr><th>項目</th><th>説明</th></tr></thead><tbody><tr><td>ディレクトリ</td><td><code>web/</code></td></tr><tr><td>言語</td><td>韓国語 (デフォルト) + 英語</td></tr><tr><td>スクリーンショット</td><td>Playwright 自動生成 (Multi-DPR)</td></tr><tr><td>デプロイ</td><td>GitHub Pages (<code>gh-pages</code> ブランチ)</td></tr><tr><td>PR</td><td>#4 (Multi-DPR スクリーンショット)、#5 (Docusaurus ガイドサイト)</td></tr></tbody></table>
<div style="border-radius:8px;overflow:hidden;box-shadow:0 4px 24px rgba(0,0,0,0.4);margin-bottom:1.5rem;position:relative"><canvas></canvas></div>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="バージョン比較">バージョン比較<a href="https://www.atomai.click/awsops/ja/whatsnew/2026/03/21/v1.6.0#%E3%83%90%E3%83%BC%E3%82%B8%E3%83%A7%E3%83%B3%E6%AF%94%E8%BC%83" class="hash-link" aria-label="バージョン比較への直接リンク" title="バージョン比較への直接リンク" translate="no">​</a></h2>
<table><thead><tr><th>項目</th><th>v1.5</th><th>v1.6.0</th></tr></thead><tbody><tr><td>ページ</td><td>32</td><td><strong>35</strong></td></tr><tr><td>ルート</td><td>47</td><td><strong>50</strong></td></tr><tr><td>翻訳キー</td><td>0</td><td><strong>500+</strong></td></tr><tr><td>言語対応</td><td>韓国語</td><td><strong>韓/英</strong></td></tr><tr><td>Bedrock モニタリング</td><td>なし</td><td><strong>モデル別ダッシュボード</strong></td></tr><tr><td>ドキュメントサイト</td><td>なし</td><td><strong>Docusaurus</strong></td></tr></tbody></table>]]></content:encoded>
            <category>Release</category>
            <category>i18n</category>
            <category>Monitoring</category>
            <category>AI</category>
            <category>Docs</category>
        </item>
        <item>
            <title><![CDATA[v1.5 — Memory Store + 新規ページ + コンテナコスト]]></title>
            <link>https://www.atomai.click/awsops/ja/whatsnew/2026/03/16/v1.5</link>
            <guid>https://www.atomai.click/awsops/ja/whatsnew/2026/03/16/v1.5</guid>
            <pubDate>Mon, 16 Mar 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[AgentCore Memory(会話履歴 365 日)、EBS/MSK/OpenSearch ページ、ECS/EKS コンテナコスト分析、OpenCost 連携。]]></description>
            <content:encoded><![CDATA[<p><strong>AgentCore Memory Store</strong> の導入により、ユーザー別会話履歴を 365 日間保管。EBS、MSK、OpenSearch の新規ページと ECS/EKS コンテナコスト分析を追加したリリースです。</p>
<div class="theme-admonition theme-admonition-tip admonition_xJq3 alert alert--success"><div class="admonitionHeading_Gvgb"><span class="admonitionIcon_Rf37"><svg viewBox="0 0 12 16"><path fill-rule="evenodd" d="M6.5 0C3.48 0 1 2.19 1 5c0 .92.55 2.25 1 3 1.34 2.25 1.78 2.78 2 4v1h5v-1c.22-1.22.66-1.75 2-4 .45-.75 1-2.08 1-3 0-2.81-2.48-5-5.5-5zm3.64 7.48c-.25.44-.47.8-.67 1.11-.86 1.41-1.25 2.06-1.45 3.23-.02.05-.02.11-.02.17H5c0-.06 0-.13-.02-.17-.2-1.17-.59-1.83-1.45-3.23-.2-.31-.42-.67-.67-1.11C2.44 6.78 2 5.65 2 5c0-2.2 2.02-4 4.5-4 1.22 0 2.36.42 3.22 1.19C10.55 2.94 11 3.94 11 5c0 .66-.44 1.78-.86 2.48zM4 14h5c-.23 1.14-1.3 2-2.5 2s-2.27-.86-2.5-2z"></path></svg></span>主要追加</div><div class="admonitionContent_BuS1"><p><strong>Memory Store (365 日)</strong> · <strong>4 つの新規ページ</strong> · <strong>ECS/EKS コンテナコスト</strong> · <strong>OpenCost 連携</strong> · <strong>ハードコーディング値 3 つを除去</strong></p></div></div>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="agentcore-memory-store">AgentCore Memory Store<a href="https://www.atomai.click/awsops/ja/whatsnew/2026/03/16/v1.5#agentcore-memory-store" class="hash-link" aria-label="AgentCore Memory Storeへの直接リンク" title="AgentCore Memory Storeへの直接リンク" translate="no">​</a></h2>
<p>ユーザー別会話履歴を 365 日間保管する Memory Store を導入しました。<code>src/lib/agentcore-memory.ts</code> で保存/検索ロジックを管理します。</p>
<div style="border-radius:8px;overflow:hidden;box-shadow:0 4px 24px rgba(0,0,0,0.4);margin-bottom:1.5rem;position:relative"><canvas></canvas></div>
<table><thead><tr><th>項目</th><th>説明</th></tr></thead><tbody><tr><td>保管期間</td><td>365 日 (<code>eventExpiryDuration</code>)</td></tr><tr><td>ユーザー分離</td><td>Cognito JWT から email を抽出 (<code>src/lib/auth-utils.ts</code>)</td></tr><tr><td>保存データ</td><td>質問、要約、ルート、使用ツール、応答時間</td></tr><tr><td>設定スクリプト</td><td><code>06e-setup-agentcore-memory.sh</code></td></tr><tr><td>設定ファイル</td><td><code>data/config.json</code> の <code>memoryId</code>、<code>memoryName</code></td></tr></tbody></table>
<div class="theme-admonition theme-admonition-warning admonition_xJq3 alert alert--warning"><div class="admonitionHeading_Gvgb"><span class="admonitionIcon_Rf37"><svg viewBox="0 0 16 16"><path fill-rule="evenodd" d="M8.893 1.5c-.183-.31-.52-.5-.887-.5s-.703.19-.886.5L.138 13.499a.98.98 0 0 0 0 1.001c.193.31.53.501.886.501h13.964c.367 0 .704-.19.877-.5a1.03 1.03 0 0 0 .01-1.002L8.893 1.5zm.133 11.497H6.987v-2.003h2.039v2.003zm0-3.004H6.987V5.987h2.039v4.006z"></path></svg></span>Memory 名の規則</div><div class="admonitionContent_BuS1"><p>Memory 名に<strong>ハイフン(-)は使用できません</strong>。アンダースコア(_)のみ許可されます。
正しい例: <code>awsops_memory</code> / 誤った例: <code>awsops-memory</code></p></div></div>
<p><strong>AgentCore ページ統合</strong>:</p>
<ul>
<li class="">6 つの StatsCard: 総呼び出し数、平均応答時間、Gateway 別呼び出し比率、モデル別トークン使用量</li>
<li class="">会話履歴検索: キーワード、日付範囲、ルート別フィルター</li>
</ul>
<p><strong>AI ページ統合</strong>:</p>
<ul>
<li class="">下部のトグルパネルで会話履歴を照会</li>
<li class="">以前の質問/応答のコンテキスト参照が可能</li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="新規ページ-4-つ">新規ページ (4 つ)<a href="https://www.atomai.click/awsops/ja/whatsnew/2026/03/16/v1.5#%E6%96%B0%E8%A6%8F%E3%83%9A%E3%83%BC%E3%82%B8-4-%E3%81%A4" class="hash-link" aria-label="新規ページ (4 つ)への直接リンク" title="新規ページ (4 つ)への直接リンク" translate="no">​</a></h2>
<div style="border-radius:8px;overflow:hidden;box-shadow:0 4px 24px rgba(0,0,0,0.4);margin-bottom:1.5rem;position:relative"><canvas></canvas></div>
<table><thead><tr><th>ページ</th><th>パス</th><th>クエリファイル</th><th>主要機能</th></tr></thead><tbody><tr><td><strong>EBS</strong></td><td><code>/ebs</code></td><td><code>queries/ebs.ts</code></td><td>ボリューム/スナップショット、暗号化、EC2 アタッチメント、Idle ボリューム検出</td></tr><tr><td><strong>MSK</strong></td><td><code>/msk</code></td><td><code>queries/msk.ts</code></td><td>Kafka クラスター、ブローカーノードメトリクス (CPU/Memory/Network)、KRaft モード</td></tr><tr><td><strong>OpenSearch</strong></td><td><code>/opensearch</code></td><td><code>queries/opensearch.ts</code></td><td>ドメイン、N2N/At-Rest 暗号化、VPC 構成、クラスターステータス</td></tr><tr><td><strong>Resource Inventory</strong></td><td><code>/inventory</code></td><td><code>resource-inventory.ts</code></td><td>18 種のリソース数量推移 (スナップショットベース、追加クエリ 0 件)</td></tr></tbody></table>
<div class="theme-admonition theme-admonition-info admonition_xJq3 alert alert--info"><div class="admonitionHeading_Gvgb"><span class="admonitionIcon_Rf37"><svg viewBox="0 0 14 16"><path fill-rule="evenodd" d="M7 2.3c3.14 0 5.7 2.56 5.7 5.7s-2.56 5.7-5.7 5.7A5.71 5.71 0 0 1 1.3 8c0-3.14 2.56-5.7 5.7-5.7zM7 1C3.14 1 0 4.14 0 8s3.14 7 7 7 7-3.14 7-7-3.14-7-7-7zm1 3H6v5h2V4zm0 6H6v2h2v-2z"></path></svg></span>Steampipe JSONB の注意事項</div><div class="admonitionContent_BuS1"><ul>
<li class=""><strong>MSK</strong>: <code>provisioned</code> カラムが JSONB でブローカー数、ストレージサイズなどを含む</li>
<li class=""><strong>OpenSearch</strong>: <code>encryption_at_rest_options</code> JSONB 内の <code>enabled</code> フィールドの確認が必要</li>
<li class="">カラム名は必ず <code>information_schema.columns</code> で確認してからクエリを作成</li>
</ul></div></div>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="コンテナコスト分析">コンテナコスト分析<a href="https://www.atomai.click/awsops/ja/whatsnew/2026/03/16/v1.5#%E3%82%B3%E3%83%B3%E3%83%86%E3%83%8A%E3%82%B3%E3%82%B9%E3%83%88%E5%88%86%E6%9E%90" class="hash-link" aria-label="コンテナコスト分析への直接リンク" title="コンテナコスト分析への直接リンク" translate="no">​</a></h2>
<p>ECS と EKS のコンテナコストを分析する 2 つのページと API を追加しました。</p>
<table><thead><tr><th>項目</th><th>ECS (<code>/container-cost</code>)</th><th>EKS (<code>/eks-container-cost</code>)</th></tr></thead><tbody><tr><td><strong>データソース</strong></td><td>CloudWatch Container Insights</td><td>OpenCost API</td></tr><tr><td><strong>フォールバック</strong></td><td>なし</td><td>Request ベースの計算</td></tr><tr><td><strong>コスト計算</strong></td><td>Fargate vCPU/GB 価格を適用</td><td>Pod CPU/Memory 割り当てコスト</td></tr><tr><td><strong>API ルート</strong></td><td><code>/api/container-cost</code></td><td><code>/api/eks-container-cost</code></td></tr><tr><td><strong>設定</strong></td><td>-</td><td><code>06f-setup-opencost.sh</code> (Prometheus + OpenCost)</td></tr></tbody></table>
<div style="border-radius:8px;overflow:hidden;box-shadow:0 4px 24px rgba(0,0,0,0.4);margin-bottom:1.5rem;position:relative"><canvas></canvas></div>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="ai-ルーティング改善">AI ルーティング改善<a href="https://www.atomai.click/awsops/ja/whatsnew/2026/03/16/v1.5#ai-%E3%83%AB%E3%83%BC%E3%83%86%E3%82%A3%E3%83%B3%E3%82%B0%E6%94%B9%E5%96%84" class="hash-link" aria-label="AI ルーティング改善への直接リンク" title="AI ルーティング改善への直接リンク" translate="no">​</a></h2>
<table><thead><tr><th>項目</th><th>Before</th><th>After</th></tr></thead><tbody><tr><td>AgentCore 設定</td><td>コード内ハードコーディング</td><td><code>data/config.json</code> から ARN を読み取り</td></tr><tr><td>ツール使用表示</td><td>なし</td><td>キーワードマッチングで MCP ツールを推論 → UI バッジ</td></tr><tr><td>マルチルート失敗</td><td>全体失敗</td><td>Bedrock Direct フォールバック</td></tr><tr><td>タイムアウト</td><td>60 秒</td><td><strong>90 秒</strong></td></tr></tbody></table>
<div class="theme-admonition theme-admonition-info admonition_xJq3 alert alert--info"><div class="admonitionHeading_Gvgb"><span class="admonitionIcon_Rf37"><svg viewBox="0 0 14 16"><path fill-rule="evenodd" d="M7 2.3c3.14 0 5.7 2.56 5.7 5.7s-2.56 5.7-5.7 5.7A5.71 5.71 0 0 1 1.3 8c0-3.14 2.56-5.7 5.7-5.7zM7 1C3.14 1 0 4.14 0 8s3.14 7 7 7 7-3.14 7-7-3.14-7-7-7zm1 3H6v5h2V4zm0 6H6v2h2v-2z"></path></svg></span>ツール使用の推論</div><div class="admonitionContent_BuS1"><p>AgentCore は最終テキストのみを返します (<code>tool_call</code> タグなし)。<code>extractUsedTools()</code> 関数が応答内容からキーワードをマッチングして使用された MCP ツールを推論し、UI にバッジとして表示します。</p></div></div>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="セキュリティ強化">セキュリティ強化<a href="https://www.atomai.click/awsops/ja/whatsnew/2026/03/16/v1.5#%E3%82%BB%E3%82%AD%E3%83%A5%E3%83%AA%E3%83%86%E3%82%A3%E5%BC%B7%E5%8C%96" class="hash-link" aria-label="セキュリティ強化への直接リンク" title="セキュリティ強化への直接リンク" translate="no">​</a></h2>
<table><thead><tr><th>課題</th><th>修正内容</th></tr></thead><tbody><tr><td>Sign Out</td><td>HttpOnly クッキーのサーバーサイド API 削除 (<code>POST /api/auth</code>)</td></tr><tr><td>ハードコーディング #1</td><td>Steampipe パスワード → 動的取得</td></tr><tr><td>ハードコーディング #2</td><td>Code Interpreter ID → <code>data/config.json</code></td></tr><tr><td>ハードコーディング #3</td><td>Gateway URL → <code>data/config.json</code></td></tr></tbody></table>]]></content:encoded>
            <category>Release</category>
            <category>AI</category>
            <category>Database</category>
            <category>Cost</category>
            <category>Container</category>
            <category>Security</category>
        </item>
        <item>
            <title><![CDATA[v1.4.0 — AgentCore ダッシュボード + CloudWatch メトリクス統合]]></title>
            <link>https://www.atomai.click/awsops/ja/whatsnew/2026/03/14/v1.4.0</link>
            <guid>https://www.atomai.click/awsops/ja/whatsnew/2026/03/14/v1.4.0</guid>
            <pubDate>Sat, 14 Mar 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[AgentCore ダッシュボード新規追加、Sign Out、RDS/ElastiCache/OpenSearch CloudWatch メトリクステーブル、Resource Inventory(PR#1)、S3 Bucket Map。]]></description>
            <content:encoded><![CDATA[<p><strong>AgentCore ダッシュボード</strong>ページの新規追加、<strong>4 サービスの CloudWatch メトリクス</strong>テーブル、<strong>Resource Inventory</strong>(PR #1)を含むリリースです。</p>
<div class="theme-admonition theme-admonition-tip admonition_xJq3 alert alert--success"><div class="admonitionHeading_Gvgb"><span class="admonitionIcon_Rf37"><svg viewBox="0 0 12 16"><path fill-rule="evenodd" d="M6.5 0C3.48 0 1 2.19 1 5c0 .92.55 2.25 1 3 1.34 2.25 1.78 2.78 2 4v1h5v-1c.22-1.22.66-1.75 2-4 .45-.75 1-2.08 1-3 0-2.81-2.48-5-5.5-5zm3.64 7.48c-.25.44-.47.8-.67 1.11-.86 1.41-1.25 2.06-1.45 3.23-.02.05-.02.11-.02.17H5c0-.06 0-.13-.02-.17-.2-1.17-.59-1.83-1.45-3.23-.2-.31-.42-.67-.67-1.11C2.44 6.78 2 5.65 2 5c0-2.2 2.02-4 4.5-4 1.22 0 2.36.42 3.22 1.19C10.55 2.94 11 3.94 11 5c0 .66-.44 1.78-.86 2.48zM4 14h5c-.23 1.14-1.3 2-2.5 2s-2.27-.86-2.5-2z"></path></svg></span>主要追加</div><div class="admonitionContent_BuS1"><p><strong>AgentCore ダッシュボード</strong> · <strong>Sign Out</strong> · <strong>4 つの CloudWatch メトリクス API</strong> · <strong>Resource Inventory</strong> · <strong>S3 Bucket Map</strong></p></div></div>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="agentcore-ダッシュボード-agentcore">AgentCore ダッシュボード (<code>/agentcore</code>)<a href="https://www.atomai.click/awsops/ja/whatsnew/2026/03/14/v1.4.0#agentcore-%E3%83%80%E3%83%83%E3%82%B7%E3%83%A5%E3%83%9C%E3%83%BC%E3%83%89-agentcore" class="hash-link" aria-label="agentcore-ダッシュボード-agentcoreへの直接リンク" title="agentcore-ダッシュボード-agentcoreへの直接リンク" translate="no">​</a></h2>
<p>Bedrock AgentCore Runtime と 8 つの Gateway のステータスを一目で把握できる専用ダッシュボードです。</p>
<div style="border-radius:8px;overflow:hidden;box-shadow:0 4px 24px rgba(0,0,0,0.4);margin-bottom:1.5rem;position:relative"><canvas></canvas></div>
<ul>
<li class=""><strong>Runtime ステータス</strong>: <code>data/config.json</code> の <code>agentRuntimeArn</code> でステータスを照会</li>
<li class=""><strong>8 Gateway カード</strong>: 各 Gateway のステータス、ツール数、主要機能を表示</li>
<li class=""><strong>125 ツールの全一覧</strong>: 検索、Gateway 別フィルターに対応</li>
<li class=""><strong>アーキテクチャ図</strong>: Runtime → Gateway → Lambda の関係を可視化</li>
</ul>
<div class="theme-admonition theme-admonition-info admonition_xJq3 alert alert--info"><div class="admonitionHeading_Gvgb"><span class="admonitionIcon_Rf37"><svg viewBox="0 0 14 16"><path fill-rule="evenodd" d="M7 2.3c3.14 0 5.7 2.56 5.7 5.7s-2.56 5.7-5.7 5.7A5.71 5.71 0 0 1 1.3 8c0-3.14 2.56-5.7 5.7-5.7zM7 1C3.14 1 0 4.14 0 8s3.14 7 7 7 7-3.14 7-7-3.14-7-7-7zm1 3H6v5h2V4zm0 6H6v2h2v-2z"></path></svg></span>API エンドポイント</div><div class="admonitionContent_BuS1"><p><code>/api/agentcore</code> (<code>src/app/api/agentcore/route.ts</code>) は <code>data/config.json</code> から ARN を読み取り、AWS API でステータスを照会します。ハードコーディングされたアカウント情報がないため、config を変更するだけでどの環境でも動作します。</p></div></div>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="sign-out-機能">Sign Out 機能<a href="https://www.atomai.click/awsops/ja/whatsnew/2026/03/14/v1.4.0#sign-out-%E6%A9%9F%E8%83%BD" class="hash-link" aria-label="Sign Out 機能への直接リンク" title="Sign Out 機能への直接リンク" translate="no">​</a></h2>
<p>Header にログアウトボタンを追加し、Cognito セッションを安全に終了します。</p>
<table><thead><tr><th>項目</th><th>Before</th><th>After</th></tr></thead><tbody><tr><td>ログアウト</td><td>不可能 (ブラウザを閉じるのみ)</td><td>Header のログアウトボタン</td></tr><tr><td>クッキー削除</td><td><code>document.cookie</code> (HttpOnly にアクセス不可)</td><td><code>POST /api/auth</code> サーバーサイド削除</td></tr><tr><td>認証状態</td><td>ブラウザキャッシュに依存</td><td>Cognito 再認証を強制</td></tr></tbody></table>
<div class="theme-admonition theme-admonition-warning admonition_xJq3 alert alert--warning"><div class="admonitionHeading_Gvgb"><span class="admonitionIcon_Rf37"><svg viewBox="0 0 16 16"><path fill-rule="evenodd" d="M8.893 1.5c-.183-.31-.52-.5-.887-.5s-.703.19-.886.5L.138 13.499a.98.98 0 0 0 0 1.001c.193.31.53.501.886.501h13.964c.367 0 .704-.19.877-.5a1.03 1.03 0 0 0 .01-1.002L8.893 1.5zm.133 11.497H6.987v-2.003h2.039v2.003zm0-3.004H6.987V5.987h2.039v4.006z"></path></svg></span>HttpOnly クッキーの削除</div><div class="admonitionContent_BuS1"><p><code>document.cookie</code> では HttpOnly クッキーを削除できません。
必ず<strong>サーバーサイド API</strong> (<code>src/app/api/auth/route.ts</code>) を通じて <code>Set-Cookie: token=; Max-Age=0</code> を返す必要があります。</p></div></div>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="cloudwatch-メトリクステーブル-4-サービス">CloudWatch メトリクステーブル (4 サービス)<a href="https://www.atomai.click/awsops/ja/whatsnew/2026/03/14/v1.4.0#cloudwatch-%E3%83%A1%E3%83%88%E3%83%AA%E3%82%AF%E3%82%B9%E3%83%86%E3%83%BC%E3%83%96%E3%83%AB-4-%E3%82%B5%E3%83%BC%E3%83%93%E3%82%B9" class="hash-link" aria-label="CloudWatch メトリクステーブル (4 サービス)への直接リンク" title="CloudWatch メトリクステーブル (4 サービス)への直接リンク" translate="no">​</a></h2>
<p>4 つのサービスに対して専用 API ルートと CloudWatch メトリクステーブルを追加しました。すべて同一パターン(<code>cloudwatch get-metric-data</code> → プログレスバー + 数値)を使用します。</p>
<div style="border-radius:8px;overflow:hidden;box-shadow:0 4px 24px rgba(0,0,0,0.4);margin-bottom:1.5rem;position:relative"><canvas></canvas></div>
<table><thead><tr><th>サービス</th><th>API ルート</th><th>メトリクス</th></tr></thead><tbody><tr><td><strong>MSK</strong></td><td><code>/api/msk</code></td><td>ブローカー別 CPU、Memory、BytesIn、BytesOut</td></tr><tr><td><strong>RDS</strong></td><td><code>/api/rds</code></td><td>インスタンス別 CPU、Memory、Connections、IOPS</td></tr><tr><td><strong>ElastiCache</strong></td><td><code>/api/elasticache</code></td><td>ノード別 CPU、Memory、Network、Connections + Valkey エンジンカード</td></tr><tr><td><strong>OpenSearch</strong></td><td><code>/api/opensearch</code></td><td>ドメイン別 CPU、JVM Memory、Cluster Status、Search Rate</td></tr></tbody></table>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="resource-inventory-pr-1">Resource Inventory (PR #1)<a href="https://www.atomai.click/awsops/ja/whatsnew/2026/03/14/v1.4.0#resource-inventory-pr-1" class="hash-link" aria-label="Resource Inventory (PR #1)への直接リンク" title="Resource Inventory (PR #1)への直接リンク" translate="no">​</a></h2>
<p><code>/inventory</code> ページで 18 種のリソース数量推移をモニタリングします。</p>
<ul>
<li class=""><strong>マルチラインチャート</strong>: リソース別数量変化の時系列</li>
<li class=""><strong>コスト影響の推定</strong>: リソース変化に応じた予想コストを表示</li>
<li class=""><strong><code>src/lib/resource-inventory.ts</code></strong>: スナップショットベース (<code>data/inventory/</code>)、追加クエリ 0 件</li>
<li class=""><strong>Cost Explorer 可用性</strong>: <code>checkCostAvailability()</code> で MSP Payer を自動判別</li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="s3--rds--elasticache-の強化">S3 / RDS / ElastiCache の強化<a href="https://www.atomai.click/awsops/ja/whatsnew/2026/03/14/v1.4.0#s3--rds--elasticache-%E3%81%AE%E5%BC%B7%E5%8C%96" class="hash-link" aria-label="S3 / RDS / ElastiCache の強化への直接リンク" title="S3 / RDS / ElastiCache の強化への直接リンク" translate="no">​</a></h2>
<table><thead><tr><th>サービス</th><th>追加機能</th></tr></thead><tbody><tr><td><strong>S3</strong></td><td>Bucket Map (TreeMap 可視化)、検索/フィルター、IAM Roles 表示</td></tr><tr><td><strong>RDS</strong></td><td>Security Groups タブ、CloudWatch ミニチャート、Features 詳細</td></tr><tr><td><strong>ElastiCache</strong></td><td>Security Groups タブ、CloudWatch メトリクス、Valkey エンジン対応</td></tr></tbody></table>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="monitoring-の強化">Monitoring の強化<a href="https://www.atomai.click/awsops/ja/whatsnew/2026/03/14/v1.4.0#monitoring-%E3%81%AE%E5%BC%B7%E5%8C%96" class="hash-link" aria-label="Monitoring の強化への直接リンク" title="Monitoring の強化への直接リンク" translate="no">​</a></h2>
<ul>
<li class=""><strong>インスタンス詳細メトリクスビュー</strong>: Date Range 選択 (1h ~ 30d)</li>
<li class=""><strong>Resource Topology</strong>: Graph/Map View 切り替え (React Flow)</li>
</ul>]]></content:encoded>
            <category>Release</category>
            <category>AI</category>
            <category>Monitoring</category>
            <category>Database</category>
        </item>
        <item>
            <title><![CDATA[v1.3.0 — マルチルート並列呼び出し + ダッシュボード全面再設計]]></title>
            <link>https://www.atomai.click/awsops/ja/whatsnew/2026/03/12/v1.3.0</link>
            <guid>https://www.atomai.click/awsops/ja/whatsnew/2026/03/12/v1.3.0</guid>
            <pubDate>Thu, 12 Mar 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[85 コミットの大規模アップグレード。複合質問時に 1~3 個の Gateway を並列呼び出し。18 カードのダッシュボード、SSE ストリーミング、VPC Resource Map。]]></description>
            <content:encoded><![CDATA[<p>85 コミットにわたる全面的な UX/機能アップグレードです。複合質問時の <strong>1~3 個の Gateway 並列呼び出し</strong> + Bedrock 応答合成が核心です。</p>
<div class="theme-admonition theme-admonition-tip admonition_xJq3 alert alert--success"><div class="admonitionHeading_Gvgb"><span class="admonitionIcon_Rf37"><svg viewBox="0 0 12 16"><path fill-rule="evenodd" d="M6.5 0C3.48 0 1 2.19 1 5c0 .92.55 2.25 1 3 1.34 2.25 1.78 2.78 2 4v1h5v-1c.22-1.22.66-1.75 2-4 .45-.75 1-2.08 1-3 0-2.81-2.48-5-5.5-5zm3.64 7.48c-.25.44-.47.8-.67 1.11-.86 1.41-1.25 2.06-1.45 3.23-.02.05-.02.11-.02.17H5c0-.06 0-.13-.02-.17-.2-1.17-.59-1.83-1.45-3.23-.2-.31-.42-.67-.67-1.11C2.44 6.78 2 5.65 2 5c0-2.2 2.02-4 4.5-4 1.22 0 2.36.42 3.22 1.19C10.55 2.94 11 3.94 11 5c0 .66-.44 1.78-.86 2.48zM4 14h5c-.23 1.14-1.3 2-2.5 2s-2.27-.86-2.5-2z"></path></svg></span>主要数値</div><div class="admonitionContent_BuS1"><p><strong>85 コミット</strong> · <strong>18 のダッシュボードカード</strong> · <strong>マルチルート (1~3 Gateway 並列)</strong> · <strong>SSE リアルタイムストリーミング</strong> · <strong>3 つの新規ページ</strong></p></div></div>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="マルチルート-ai-アーキテクチャ">マルチルート AI アーキテクチャ<a href="https://www.atomai.click/awsops/ja/whatsnew/2026/03/12/v1.3.0#%E3%83%9E%E3%83%AB%E3%83%81%E3%83%AB%E3%83%BC%E3%83%88-ai-%E3%82%A2%E3%83%BC%E3%82%AD%E3%83%86%E3%82%AF%E3%83%81%E3%83%A3" class="hash-link" aria-label="マルチルート AI アーキテクチャへの直接リンク" title="マルチルート AI アーキテクチャへの直接リンク" translate="no">​</a></h2>
<p>複合質問を分析して最大 3 個の Gateway を<strong>同時に</strong>呼び出し、Bedrock が応答を合成します。</p>
<div style="border-radius:8px;overflow:hidden;box-shadow:0 4px 24px rgba(0,0,0,0.4);margin-bottom:1.5rem;position:relative"><canvas></canvas></div>
<table><thead><tr><th>項目</th><th>Before (v1.2.0)</th><th>After (v1.3.0)</th></tr></thead><tbody><tr><td>質問処理</td><td>単一 Gateway のみ呼び出し</td><td>1~3 個の Gateway を並列呼び出し</td></tr><tr><td>複合質問</td><td>最初にマッチしたルートのみ使用</td><td>すべての関連ルートを並列処理</td></tr><tr><td>応答合成</td><td>なし</td><td>Bedrock <code>synthesizeResponses()</code></td></tr><tr><td>ストリーミング</td><td>なし</td><td>SSE <code>chunk</code> イベントのリアルタイム送信</td></tr></tbody></table>
<div class="theme-admonition theme-admonition-info admonition_xJq3 alert alert--info"><div class="admonitionHeading_Gvgb"><span class="admonitionIcon_Rf37"><svg viewBox="0 0 14 16"><path fill-rule="evenodd" d="M7 2.3c3.14 0 5.7 2.56 5.7 5.7s-2.56 5.7-5.7 5.7A5.71 5.71 0 0 1 1.3 8c0-3.14 2.56-5.7 5.7-5.7zM7 1C3.14 1 0 4.14 0 8s3.14 7 7 7 7-3.14 7-7-3.14-7-7-7zm1 3H6v5h2V4zm0 6H6v2h2v-2z"></path></svg></span>マルチルートの動作原理</div><div class="admonitionContent_BuS1"><p><code>src/app/api/ai/route.ts</code> のインテント分類器が質問を分析して <code>routes: string[]</code> 配列を返します。
配列の長さが 2 以上の場合は <code>Promise.allSettled()</code> で並列呼び出しし、成功した応答を <code>synthesizeResponses()</code> で合成します。</p></div></div>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="ダッシュボード全面再設計">ダッシュボード全面再設計<a href="https://www.atomai.click/awsops/ja/whatsnew/2026/03/12/v1.3.0#%E3%83%80%E3%83%83%E3%82%B7%E3%83%A5%E3%83%9C%E3%83%BC%E3%83%89%E5%85%A8%E9%9D%A2%E5%86%8D%E8%A8%AD%E8%A8%88" class="hash-link" aria-label="ダッシュボード全面再設計への直接リンク" title="ダッシュボード全面再設計への直接リンク" translate="no">​</a></h2>
<p>18 のカードを 6x3 レイアウトで配置し、サイドバーメニューと 1:1 でマッピングしました。</p>
<div style="border-radius:8px;overflow:hidden;box-shadow:0 4px 24px rgba(0,0,0,0.4);margin-bottom:1.5rem;position:relative"><canvas></canvas></div>
<ul>
<li class=""><strong>カード下部の sub-metrics</strong>: <code>18 running · 4 stopped</code> の形式で主要数値を表示</li>
<li class=""><strong>CIS Compliance Pass Rate</strong>: 全ベンチマーク通過率のゲージ</li>
<li class=""><strong>Monthly Cost</strong>: 今月のコスト + MoM 変化率</li>
<li class=""><strong>Resource Distribution + K8s Pod Status</strong>: Recharts チャートで可視化</li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="sse-ストリーミング-ai-応答">SSE ストリーミング AI 応答<a href="https://www.atomai.click/awsops/ja/whatsnew/2026/03/12/v1.3.0#sse-%E3%82%B9%E3%83%88%E3%83%AA%E3%83%BC%E3%83%9F%E3%83%B3%E3%82%B0-ai-%E5%BF%9C%E7%AD%94" class="hash-link" aria-label="SSE ストリーミング AI 応答への直接リンク" title="SSE ストリーミング AI 応答への直接リンク" translate="no">​</a></h2>
<p>AI 応答をリアルタイムでストリーミングして UX を改善しました。</p>
<div style="border-radius:8px;overflow:hidden;box-shadow:0 4px 24px rgba(0,0,0,0.4);margin-bottom:1.5rem;position:relative"><canvas></canvas></div>
<ul>
<li class=""><strong><code>status</code> イベント</strong>: 分析中 → Gateway 接続 → ツール呼び出しの段階を表示</li>
<li class=""><strong><code>chunk</code> イベント</strong>: 応答テキストをリアルタイム送信</li>
<li class=""><strong><code>done</code> イベント</strong>: 最終結果 + 使用ツール + 応答時間 + トークン数</li>
<li class="">応答時間表示、クリップボードコピー、関連推奨質問機能を追加</li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="新規ページ-3-つ">新規ページ (3 つ)<a href="https://www.atomai.click/awsops/ja/whatsnew/2026/03/12/v1.3.0#%E6%96%B0%E8%A6%8F%E3%83%9A%E3%83%BC%E3%82%B8-3-%E3%81%A4" class="hash-link" aria-label="新規ページ (3 つ)への直接リンク" title="新規ページ (3 つ)への直接リンク" translate="no">​</a></h2>
<table><thead><tr><th>ページ</th><th>パス</th><th>主要機能</th></tr></thead><tbody><tr><td>CloudFront</td><td><code>/cloudfront-cdn</code></td><td>Distribution 一覧、Origin、Behavior、キャッシュポリシー</td></tr><tr><td>WAF</td><td><code>/waf</code></td><td>WebACL ルール、IP Set、ブロックログ</td></tr><tr><td>ECR</td><td><code>/ecr</code></td><td>リポジトリ、イメージタグ、脆弱性スキャン結果</td></tr></tbody></table>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="vpc--network-の強化">VPC &amp; Network の強化<a href="https://www.atomai.click/awsops/ja/whatsnew/2026/03/12/v1.3.0#vpc--network-%E3%81%AE%E5%BC%B7%E5%8C%96" class="hash-link" aria-label="VPC &amp; Network の強化への直接リンク" title="VPC &amp; Network の強化への直接リンク" translate="no">​</a></h2>
<ul>
<li class=""><strong>VPC Resource Map</strong>: AWS コンソールスタイルの 4 カラムレイアウト<!-- -->
<div class="language-text codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#F8F8F2"><span class="token plain">VPC → Subnets → Route Tables → Connections (IGW/NAT/TGW/VPN)</span><br></span></code></pre></div></div>
</li>
<li class=""><strong>Route Table タブ</strong>: サブネット関連付け、ルーティングルールテーブル</li>
<li class=""><strong>TGW Route Tables</strong>: Transit Gateway ルートテーブルの詳細</li>
<li class=""><strong>Resource Topology</strong>: React Flow ベースの Graph View / Map View 切り替え</li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="eks--cost-の強化">EKS &amp; Cost の強化<a href="https://www.atomai.click/awsops/ja/whatsnew/2026/03/12/v1.3.0#eks--cost-%E3%81%AE%E5%BC%B7%E5%8C%96" class="hash-link" aria-label="EKS &amp; Cost の強化への直接リンク" title="EKS &amp; Cost の強化への直接リンク" translate="no">​</a></h2>
<p><strong>EKS 改善</strong>:</p>
<ul>
<li class="">K8s Overview ノードカード: CPU/Memory プログレスバー</li>
<li class="">ノード詳細: ENI カード + per-ENI トラフィック + Pods テーブル</li>
<li class="">EKS Explorer: Status/Node フィルター、ページネーション</li>
</ul>
<p><strong>Cost Explorer 改善</strong>:</p>
<ul>
<li class="">期間/サービスフィルター、Projected 月末コスト、MoM Change</li>
<li class="">Monthly Trend ライン、Cost by Service パイチャート</li>
</ul>
<div class="theme-admonition theme-admonition-warning admonition_xJq3 alert alert--warning"><div class="admonitionHeading_Gvgb"><span class="admonitionIcon_Rf37"><svg viewBox="0 0 16 16"><path fill-rule="evenodd" d="M8.893 1.5c-.183-.31-.52-.5-.887-.5s-.703.19-.886.5L.138 13.499a.98.98 0 0 0 0 1.001c.193.31.53.501.886.501h13.964c.367 0 .704-.19.877-.5a1.03 1.03 0 0 0 .01-1.002L8.893 1.5zm.133 11.497H6.987v-2.003h2.039v2.003zm0-3.004H6.987V5.987h2.039v4.006z"></path></svg></span>Steampipe Cost クエリの注意</div><div class="admonitionContent_BuS1"><p>Cost Explorer データは <strong>MSP(Managed Service Provider) Payer アカウント</strong>でのみ使用可能です。
<code>checkCostAvailability()</code> で事前確認し、利用できない場合は <code>cost-snapshot.ts</code> のフォールバックデータを使用します。</p></div></div>]]></content:encoded>
            <category>Release</category>
            <category>AI</category>
            <category>Network</category>
            <category>Monitoring</category>
            <category>Streaming</category>
        </item>
        <item>
            <title><![CDATA[v1.2.0 — Gateway 分離 + デプロイ安定性 + 性能最適化]]></title>
            <link>https://www.atomai.click/awsops/ja/whatsnew/2026/03/11/v1.2.0</link>
            <guid>https://www.atomai.click/awsops/ja/whatsnew/2026/03/11/v1.2.0</guid>
            <pubDate>Wed, 11 Mar 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[Infra Gateway を Network(17) + Container(24) に分離。104 問テストで 93% の精度。Bedrock リージョン最適化で 20% のレイテンシ削減。]]></description>
            <content:encoded><![CDATA[<p>7 つから <strong>8 つの Gateway</strong> へ分離し、デプロイ安定性を大幅に改善したリリースです。Container 応答が <strong>54% 高速化</strong>(50s → 23s)し、全体テスト <strong>104/104 通過</strong>を達成しました。</p>
<div class="theme-admonition theme-admonition-tip admonition_xJq3 alert alert--success"><div class="admonitionHeading_Gvgb"><span class="admonitionIcon_Rf37"><svg viewBox="0 0 12 16"><path fill-rule="evenodd" d="M6.5 0C3.48 0 1 2.19 1 5c0 .92.55 2.25 1 3 1.34 2.25 1.78 2.78 2 4v1h5v-1c.22-1.22.66-1.75 2-4 .45-.75 1-2.08 1-3 0-2.81-2.48-5-5.5-5zm3.64 7.48c-.25.44-.47.8-.67 1.11-.86 1.41-1.25 2.06-1.45 3.23-.02.05-.02.11-.02.17H5c0-.06 0-.13-.02-.17-.2-1.17-.59-1.83-1.45-3.23-.2-.31-.42-.67-.67-1.11C2.44 6.78 2 5.65 2 5c0-2.2 2.02-4 4.5-4 1.22 0 2.36.42 3.22 1.19C10.55 2.94 11 3.94 11 5c0 .66-.44 1.78-.86 2.48zM4 14h5c-.23 1.14-1.3 2-2.5 2s-2.27-.86-2.5-2z"></path></svg></span>主要成果</div><div class="admonitionContent_BuS1"><p><strong>8 Gateway</strong> · <strong>10 Routes</strong> · <strong>104/104 テスト通過</strong> · <strong>93% 分類精度</strong> · <strong>Container 54% 速度改善</strong></p></div></div>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="gateway-分離-infra--network--container">Gateway 分離: Infra → Network + Container<a href="https://www.atomai.click/awsops/ja/whatsnew/2026/03/11/v1.2.0#gateway-%E5%88%86%E9%9B%A2-infra--network--container" class="hash-link" aria-label="Gateway 分離: Infra → Network + Containerへの直接リンク" title="Gateway 分離: Infra → Network + Containerへの直接リンク" translate="no">​</a></h2>
<p>v1.1.0 の Infra Gateway(41 ツール)はツールが多すぎたため、ネットワークとコンテナのドメインに分離しました。</p>
<div style="border-radius:8px;overflow:hidden;box-shadow:0 4px 24px rgba(0,0,0,0.4);margin-bottom:1.5rem;position:relative"><canvas></canvas></div>
<table><thead><tr><th>項目</th><th>Before (Infra 単一)</th><th>After (分離)</th></tr></thead><tbody><tr><td>Gateway</td><td>1 (Infra, 41 ツール)</td><td>2 (Network 17 + Container 24)</td></tr><tr><td>Container 応答時間</td><td>~50 秒</td><td>~23 秒 (<strong>54% 改善</strong>)</td></tr><tr><td>ツール選択精度</td><td>LLM が 41 個から選択</td><td>24 個から選択</td></tr><tr><td>ルート体系</td><td>7 Gateway, 9 Routes</td><td><strong>8 Gateway, 10 Routes</strong></td></tr></tbody></table>
<div class="theme-admonition theme-admonition-info admonition_xJq3 alert alert--info"><div class="admonitionHeading_Gvgb"><span class="admonitionIcon_Rf37"><svg viewBox="0 0 14 16"><path fill-rule="evenodd" d="M7 2.3c3.14 0 5.7 2.56 5.7 5.7s-2.56 5.7-5.7 5.7A5.71 5.71 0 0 1 1.3 8c0-3.14 2.56-5.7 5.7-5.7zM7 1C3.14 1 0 4.14 0 8s3.14 7 7 7 7-3.14 7-7-3.14-7-7-7zm1 3H6v5h2V4zm0 6H6v2h2v-2z"></path></svg></span>なぜ分離が効果的なのか?</div><div class="admonitionContent_BuS1"><p>LLM が 41 個のツール説明をすべて読んで選択するよりも、17 個(Network)または 24 個(Container)の中から選択する方が<strong>より速く、より正確</strong>です。特に Container の質問でネットワークツールを誤って選択するエラーがなくなりました。</p></div></div>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="デプロイ安定性の改善">デプロイ安定性の改善<a href="https://www.atomai.click/awsops/ja/whatsnew/2026/03/11/v1.2.0#%E3%83%87%E3%83%97%E3%83%AD%E3%82%A4%E5%AE%89%E5%AE%9A%E6%80%A7%E3%81%AE%E6%94%B9%E5%96%84" class="hash-link" aria-label="デプロイ安定性の改善への直接リンク" title="デプロイ安定性の改善への直接リンク" translate="no">​</a></h2>
<p>デプロイスクリプトにエラーハンドリングと自動検出ロジックを追加しました。</p>
<table><thead><tr><th>スクリプト</th><th>改善内容</th></tr></thead><tbody><tr><td><code>06a-setup-agentcore-runtime.sh</code></td><td><code>run_or_fail</code> ヘルパー + AWS 認証情報のプリフライトチェック</td></tr><tr><td><code>06b-setup-agentcore-gateway.sh</code></td><td>8 Gateway の一括作成 (Network/Container 分離を反映)</td></tr><tr><td><code>07-setup-cloudfront-auth.sh</code></td><td>CloudFront 自動検出 — CDK スタック優先、ALB origin フォールバック</td></tr><tr><td>Steampipe 接続</td><td>パスワードのハードコーディング → <code>steampipe service status</code> から動的取得</td></tr></tbody></table>
<div style="border-radius:8px;overflow:hidden;box-shadow:0 4px 24px rgba(0,0,0,0.4);margin-bottom:1.5rem;position:relative"><canvas></canvas></div>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="テスト結果-104104-通過">テスト結果: 104/104 通過<a href="https://www.atomai.click/awsops/ja/whatsnew/2026/03/11/v1.2.0#%E3%83%86%E3%82%B9%E3%83%88%E7%B5%90%E6%9E%9C-104104-%E9%80%9A%E9%81%8E" class="hash-link" aria-label="テスト結果: 104/104 通過への直接リンク" title="テスト結果: 104/104 通過への直接リンク" translate="no">​</a></h2>
<div class="theme-admonition theme-admonition-tip admonition_xJq3 alert alert--success"><div class="admonitionHeading_Gvgb"><span class="admonitionIcon_Rf37"><svg viewBox="0 0 12 16"><path fill-rule="evenodd" d="M6.5 0C3.48 0 1 2.19 1 5c0 .92.55 2.25 1 3 1.34 2.25 1.78 2.78 2 4v1h5v-1c.22-1.22.66-1.75 2-4 .45-.75 1-2.08 1-3 0-2.81-2.48-5-5.5-5zm3.64 7.48c-.25.44-.47.8-.67 1.11-.86 1.41-1.25 2.06-1.45 3.23-.02.05-.02.11-.02.17H5c0-.06 0-.13-.02-.17-.2-1.17-.59-1.83-1.45-3.23-.2-.31-.42-.67-.67-1.11C2.44 6.78 2 5.65 2 5c0-2.2 2.02-4 4.5-4 1.22 0 2.36.42 3.22 1.19C10.55 2.94 11 3.94 11 5c0 .66-.44 1.78-.86 2.48zM4 14h5c-.23 1.14-1.3 2-2.5 2s-2.27-.86-2.5-2z"></path></svg></span>完璧なテスト結果</div><div class="admonitionContent_BuS1"><p>104 問中 <strong>104 問すべて通過</strong>、ルート分類 <strong>93% の精度</strong>、内容検証 <strong>99% の精度</strong>を達成しました。</p></div></div>
<table><thead><tr><th>項目</th><th>結果</th></tr></thead><tbody><tr><td>質問通過</td><td><strong>104/104</strong> (100%)</td></tr><tr><td>ルート分類精度</td><td><strong>93%</strong> (97/104)</td></tr><tr><td>内容検証精度</td><td><strong>99%</strong> (103/104)</td></tr><tr><td>平均応答時間</td><td><strong>27 秒</strong></td></tr></tbody></table>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="主要なバグ修正">主要なバグ修正<a href="https://www.atomai.click/awsops/ja/whatsnew/2026/03/11/v1.2.0#%E4%B8%BB%E8%A6%81%E3%81%AA%E3%83%90%E3%82%B0%E4%BF%AE%E6%AD%A3" class="hash-link" aria-label="主要なバグ修正への直接リンク" title="主要なバグ修正への直接リンク" translate="no">​</a></h2>
<table><thead><tr><th>課題</th><th>原因</th><th>修正</th></tr></thead><tbody><tr><td>EKS access entry 失敗</td><td><code>arn:aws:sts::</code> 形式を使用</td><td><code>arn:aws:iam::</code> 形式へ変換</td></tr><tr><td>Cognito custom domain エラー</td><td><code>SupportedIdentityProviders</code> の欠落</td><td>パラメータを追加</td></tr><tr><td>AgentCore 権限エラー</td><td>権限不足</td><td><code>bedrock-agentcore:*</code> 権限を追加</td></tr><tr><td>K8s PVC 照会失敗</td><td>JSONB シリアライズエラー</td><td><code>k8s.ts</code> で <code>::text</code> キャストを適用</td></tr></tbody></table>
<div class="theme-admonition theme-admonition-warning admonition_xJq3 alert alert--warning"><div class="admonitionHeading_Gvgb"><span class="admonitionIcon_Rf37"><svg viewBox="0 0 16 16"><path fill-rule="evenodd" d="M8.893 1.5c-.183-.31-.52-.5-.887-.5s-.703.19-.886.5L.138 13.499a.98.98 0 0 0 0 1.001c.193.31.53.501.886.501h13.964c.367 0 .704-.19.877-.5a1.03 1.03 0 0 0 .01-1.002L8.893 1.5zm.133 11.497H6.987v-2.003h2.039v2.003zm0-3.004H6.987V5.987h2.039v4.006z"></path></svg></span>Steampipe JSONB の注意</div><div class="admonitionContent_BuS1"><p>Kubernetes テーブルの JSONB カラム(<code>spec</code>、<code>status</code>)を直接返すとシリアライズエラーが発生します。
<code>SELECT spec::text</code> または <code>spec-&gt;&gt;'key'</code> に変換する必要があります。</p></div></div>]]></content:encoded>
            <category>Release</category>
            <category>AI</category>
            <category>Network</category>
            <category>Container</category>
            <category>Deployment</category>
        </item>
        <item>
            <title><![CDATA[v1.1.0 — 7 Gateway x 125 MCP ツールアーキテクチャ]]></title>
            <link>https://www.atomai.click/awsops/ja/whatsnew/2026/03/10/v1.1.0</link>
            <guid>https://www.atomai.click/awsops/ja/whatsnew/2026/03/10/v1.1.0</guid>
            <pubDate>Tue, 10 Mar 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[単一 Gateway から 7 つのロールベース Gateway へ全面再設計。19 の Lambda、125 の MCP ツール、Sonnet インテント分類。]]></description>
            <content:encoded><![CDATA[<p>単一 Gateway(29 ツール)から <strong>7 つの専門 Gateway x 125 MCP ツール</strong>へ全面再設計したマイルストーンリリースです。</p>
<div class="theme-admonition theme-admonition-tip admonition_xJq3 alert alert--success"><div class="admonitionHeading_Gvgb"><span class="admonitionIcon_Rf37"><svg viewBox="0 0 12 16"><path fill-rule="evenodd" d="M6.5 0C3.48 0 1 2.19 1 5c0 .92.55 2.25 1 3 1.34 2.25 1.78 2.78 2 4v1h5v-1c.22-1.22.66-1.75 2-4 .45-.75 1-2.08 1-3 0-2.81-2.48-5-5.5-5zm3.64 7.48c-.25.44-.47.8-.67 1.11-.86 1.41-1.25 2.06-1.45 3.23-.02.05-.02.11-.02.17H5c0-.06 0-.13-.02-.17-.2-1.17-.59-1.83-1.45-3.23-.2-.31-.42-.67-.67-1.11C2.44 6.78 2 5.65 2 5c0-2.2 2.02-4 4.5-4 1.22 0 2.36.42 3.22 1.19C10.55 2.94 11 3.94 11 5c0 .66-.44 1.78-.86 2.48zM4 14h5c-.23 1.14-1.3 2-2.5 2s-2.27-.86-2.5-2z"></path></svg></span>主要な変化</div><div class="admonitionContent_BuS1"><p><strong>1 Gateway → 7 Gateway</strong> · <strong>29 ツール → 125 ツール</strong> · <strong>19 Lambda 関数</strong> · <strong>Sonnet インテント分類器の導入</strong></p></div></div>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="before--after-gateway-アーキテクチャ">Before / After: Gateway アーキテクチャ<a href="https://www.atomai.click/awsops/ja/whatsnew/2026/03/10/v1.1.0#before--after-gateway-%E3%82%A2%E3%83%BC%E3%82%AD%E3%83%86%E3%82%AF%E3%83%81%E3%83%A3" class="hash-link" aria-label="Before / After: Gateway アーキテクチャへの直接リンク" title="Before / After: Gateway アーキテクチャへの直接リンク" translate="no">​</a></h2>
<table><thead><tr><th>項目</th><th>Before (v1.0)</th><th>After (v1.1.0)</th></tr></thead><tbody><tr><td>Gateway 数</td><td>1 (Ops)</td><td>7 (ロールベース)</td></tr><tr><td>MCP ツール数</td><td>29</td><td>125</td></tr><tr><td>Lambda 関数</td><td>5</td><td>19</td></tr><tr><td>ルーティング</td><td>単一経路</td><td>9 段階優先順位</td></tr><tr><td>インテント分類</td><td>キーワードマッチング</td><td>Sonnet 自然言語分類</td></tr><tr><td>Container 応答時間</td><td>~50 秒</td><td>~23 秒</td></tr></tbody></table>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="7-つのロールベース-gateway">7 つのロールベース Gateway<a href="https://www.atomai.click/awsops/ja/whatsnew/2026/03/10/v1.1.0#7-%E3%81%A4%E3%81%AE%E3%83%AD%E3%83%BC%E3%83%AB%E3%83%99%E3%83%BC%E3%82%B9-gateway" class="hash-link" aria-label="7 つのロールベース Gatewayへの直接リンク" title="7 つのロールベース Gatewayへの直接リンク" translate="no">​</a></h2>
<p>各 Gateway が特定のドメインに最適化されたツールセットを提供します。<code>agent.py</code> の <code>GATEWAYS</code> ディクショナリで URL を管理します。</p>
<div style="border-radius:8px;overflow:hidden;box-shadow:0 4px 24px rgba(0,0,0,0.4);margin-bottom:1.5rem;position:relative"><canvas></canvas></div>
<table><thead><tr><th>Gateway</th><th>ツール数</th><th>主要機能</th><th>Lambda 関数</th></tr></thead><tbody><tr><td><strong>Network</strong></td><td>17</td><td>VPC Flow Logs、SG ルール、Reachability</td><td><code>network_analyzer</code>, <code>reachability_analyzer</code>, <code>tgw_analyzer</code>, <code>vpn_analyzer</code>, <code>firewall_analyzer</code></td></tr><tr><td><strong>Container</strong></td><td>24</td><td>EKS、ECS、Istio トラブルシューティング</td><td><code>eks_analyzer</code>, <code>ecs_analyzer</code>, <code>istio_analyzer</code></td></tr><tr><td><strong>IaC</strong></td><td>12</td><td>CloudFormation、CDK、Terraform</td><td><code>cfn_analyzer</code></td></tr><tr><td><strong>Data</strong></td><td>24</td><td>DynamoDB、RDS、ElastiCache、MSK</td><td><code>dynamodb_analyzer</code>, <code>rds_analyzer</code>, <code>elasticache_analyzer</code>, <code>msk_analyzer</code></td></tr><tr><td><strong>Security</strong></td><td>14</td><td>IAM ポリシーシミュレーション、権限分析</td><td><code>iam_analyzer</code></td></tr><tr><td><strong>Monitoring</strong></td><td>16</td><td>CloudWatch メトリクス/アラーム、CloudTrail イベント</td><td><code>cloudwatch_analyzer</code>, <code>cloudtrail_analyzer</code></td></tr><tr><td><strong>Cost</strong></td><td>9</td><td>Cost Explorer、Budgets 予算</td><td><code>cost_analyzer</code>, <code>budget_analyzer</code></td></tr></tbody></table>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="19-の-lambda-関数">19 の Lambda 関数<a href="https://www.atomai.click/awsops/ja/whatsnew/2026/03/10/v1.1.0#19-%E3%81%AE-lambda-%E9%96%A2%E6%95%B0" class="hash-link" aria-label="19 の Lambda 関数への直接リンク" title="19 の Lambda 関数への直接リンク" translate="no">​</a></h2>
<p><code>agent/lambda/</code> ディレクトリで管理され、<code>create_targets.py</code> で Gateway Target を一括作成します。</p>
<div class="theme-admonition theme-admonition-info admonition_xJq3 alert alert--info"><div class="admonitionHeading_Gvgb"><span class="admonitionIcon_Rf37"><svg viewBox="0 0 14 16"><path fill-rule="evenodd" d="M7 2.3c3.14 0 5.7 2.56 5.7 5.7s-2.56 5.7-5.7 5.7A5.71 5.71 0 0 1 1.3 8c0-3.14 2.56-5.7 5.7-5.7zM7 1C3.14 1 0 4.14 0 8s3.14 7 7 7 7-3.14 7-7-3.14-7-7-7zm1 3H6v5h2V4zm0 6H6v2h2v-2z"></path></svg></span>Gateway Target 作成</div><div class="admonitionContent_BuS1"><p>CLI の代わりに <strong>Python/boto3</strong> を使用します (<code>mcp.lambda</code> + <code>credentialProviderConfigurations</code>)。
CLI の <code>inlinePayload</code> 問題により、プログラマティックな方式が必須です。</p></div></div>
<table><thead><tr><th>#</th><th>Lambda</th><th>ドメイン</th><th>主要機能</th></tr></thead><tbody><tr><td>1</td><td><code>network_analyzer</code></td><td>Network</td><td>VPC Flow Logs 分析、SG ルール検証</td></tr><tr><td>2</td><td><code>reachability_analyzer</code></td><td>Network</td><td>VPC Reachability Analyzer 経路分析</td></tr><tr><td>3</td><td><code>tgw_analyzer</code></td><td>Network</td><td>Transit Gateway ルーティング</td></tr><tr><td>4</td><td><code>vpn_analyzer</code></td><td>Network</td><td>Site-to-Site VPN ステータス/トンネル</td></tr><tr><td>5</td><td><code>firewall_analyzer</code></td><td>Network</td><td>Network Firewall ルール</td></tr><tr><td>6</td><td><code>eks_analyzer</code></td><td>Container</td><td>EKS クラスター、ノードグループ、アドオン</td></tr><tr><td>7</td><td><code>ecs_analyzer</code></td><td>Container</td><td>ECS サービス、タスク、インサイト</td></tr><tr><td>8</td><td><code>istio_analyzer</code></td><td>Container</td><td>Istio サービスメッシュ構成</td></tr><tr><td>9</td><td><code>dynamodb_analyzer</code></td><td>Data</td><td>テーブル容量、GSI/LSI</td></tr><tr><td>10</td><td><code>rds_analyzer</code></td><td>Data</td><td>インスタンス性能、パラメータグループ</td></tr><tr><td>11</td><td><code>elasticache_analyzer</code></td><td>Data</td><td>クラスターステータス、Valkey 対応</td></tr><tr><td>12</td><td><code>msk_analyzer</code></td><td>Data</td><td>ブローカーステータス、トピック分析</td></tr><tr><td>13</td><td><code>iam_analyzer</code></td><td>Security</td><td>ポリシーシミュレーション、権限分析</td></tr><tr><td>14</td><td><code>cloudwatch_analyzer</code></td><td>Monitoring</td><td>メトリクス/アラーム分析</td></tr><tr><td>15</td><td><code>cloudtrail_analyzer</code></td><td>Monitoring</td><td>イベント検索</td></tr><tr><td>16</td><td><code>cost_analyzer</code></td><td>Cost</td><td>Cost Explorer コスト/予測</td></tr><tr><td>17</td><td><code>budget_analyzer</code></td><td>Cost</td><td>Budgets 予算モニタリング</td></tr><tr><td>18</td><td><code>cfn_analyzer</code></td><td>IaC</td><td>CloudFormation スタック/ドリフト</td></tr><tr><td>19</td><td><code>steampipe_query</code></td><td>Ops</td><td>Steampipe SQL クエリ実行</td></tr></tbody></table>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="動的ルーティングシステム">動的ルーティングシステム<a href="https://www.atomai.click/awsops/ja/whatsnew/2026/03/10/v1.1.0#%E5%8B%95%E7%9A%84%E3%83%AB%E3%83%BC%E3%83%86%E3%82%A3%E3%83%B3%E3%82%B0%E3%82%B7%E3%82%B9%E3%83%86%E3%83%A0" class="hash-link" aria-label="動的ルーティングシステムへの直接リンク" title="動的ルーティングシステムへの直接リンク" translate="no">​</a></h2>
<p><code>src/app/api/ai/route.ts</code> で 9 段階優先順位のキーワードベースルーティングを実行します。</p>
<div style="border-radius:8px;overflow:hidden;box-shadow:0 4px 24px rgba(0,0,0,0.4);margin-bottom:1.5rem;position:relative"><canvas></canvas></div>
<ul>
<li class=""><strong><code>agent.py</code></strong>: <code>payload.gateway</code> パラメータでゲートウェイを選択</li>
<li class=""><strong><code>route.ts</code></strong>: 9 段階優先順位のキーワードベースルーティング</li>
<li class=""><strong>Sonnet インテント分類器</strong>の導入 (<code>c56f557</code>) — キーワード未マッチ時に自然言語分析で最適な Gateway を選択</li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="ai-テスト結果">AI テスト結果<a href="https://www.atomai.click/awsops/ja/whatsnew/2026/03/10/v1.1.0#ai-%E3%83%86%E3%82%B9%E3%83%88%E7%B5%90%E6%9E%9C" class="hash-link" aria-label="AI テスト結果への直接リンク" title="AI テスト結果への直接リンク" translate="no">​</a></h2>
<p>Gateway 分離の効果を検証するため、104 問のテストを実施しました。</p>
<table><thead><tr><th>項目</th><th>結果</th></tr></thead><tbody><tr><td>テスト質問数</td><td>104 問</td></tr><tr><td>ルーティング精度</td><td>93% (97/104)</td></tr><tr><td>Container 応答速度の改善</td><td><strong>54%</strong> (50s → 23s)</td></tr><tr><td>Gateway 分離の効果</td><td>ドメイン別専門ツールにより応答品質が向上</td></tr></tbody></table>
<div class="theme-admonition theme-admonition-tip admonition_xJq3 alert alert--success"><div class="admonitionHeading_Gvgb"><span class="admonitionIcon_Rf37"><svg viewBox="0 0 12 16"><path fill-rule="evenodd" d="M6.5 0C3.48 0 1 2.19 1 5c0 .92.55 2.25 1 3 1.34 2.25 1.78 2.78 2 4v1h5v-1c.22-1.22.66-1.75 2-4 .45-.75 1-2.08 1-3 0-2.81-2.48-5-5.5-5zm3.64 7.48c-.25.44-.47.8-.67 1.11-.86 1.41-1.25 2.06-1.45 3.23-.02.05-.02.11-.02.17H5c0-.06 0-.13-.02-.17-.2-1.17-.59-1.83-1.45-3.23-.2-.31-.42-.67-.67-1.11C2.44 6.78 2 5.65 2 5c0-2.2 2.02-4 4.5-4 1.22 0 2.36.42 3.22 1.19C10.55 2.94 11 3.94 11 5c0 .66-.44 1.78-.86 2.48zM4 14h5c-.23 1.14-1.3 2-2.5 2s-2.27-.86-2.5-2z"></path></svg></span>性能改善のポイント</div><div class="admonitionContent_BuS1"><p>Gateway を分離すると、エージェントが参照するツール数が減り、<strong>ツール選択の精度</strong>と<strong>応答速度</strong>の両方が向上します。
単一 Gateway(125 ツール)では LLM が適切なツールを見つけるのに時間がかかりますが、Container Gateway(24 ツール)では即座に関連ツールを選択します。</p></div></div>]]></content:encoded>
            <category>Release</category>
            <category>AI</category>
            <category>Network</category>
            <category>Container</category>
            <category>Database</category>
            <category>Security</category>
            <category>Monitoring</category>
            <category>Cost</category>
            <category>IaC</category>
        </item>
        <item>
            <title><![CDATA[v1.0 — AWSops ダッシュボード初回リリース]]></title>
            <link>https://www.atomai.click/awsops/ja/whatsnew/2026/03/08/v1.0</link>
            <guid>https://www.atomai.click/awsops/ja/whatsnew/2026/03/08/v1.0</guid>
            <pubDate>Sun, 08 Mar 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[Next.js 14 + Steampipe + Bedrock AgentCore ベースの AWS 運用ダッシュボード初リリース。CDK インフラ、Cognito 認証、7 Gateway 125 MCP ツール。]]></description>
            <content:encoded><![CDATA[<p>AWSops ダッシュボードの初リリースです。Next.js 14 + Steampipe + Amazon Bedrock AgentCore で構築された <strong>AWS/Kubernetes 統合運用ダッシュボード</strong>が誕生しました。</p>
<div class="theme-admonition theme-admonition-tip admonition_xJq3 alert alert--success"><div class="admonitionHeading_Gvgb"><span class="admonitionIcon_Rf37"><svg viewBox="0 0 12 16"><path fill-rule="evenodd" d="M6.5 0C3.48 0 1 2.19 1 5c0 .92.55 2.25 1 3 1.34 2.25 1.78 2.78 2 4v1h5v-1c.22-1.22.66-1.75 2-4 .45-.75 1-2.08 1-3 0-2.81-2.48-5-5.5-5zm3.64 7.48c-.25.44-.47.8-.67 1.11-.86 1.41-1.25 2.06-1.45 3.23-.02.05-.02.11-.02.17H5c0-.06 0-.13-.02-.17-.2-1.17-.59-1.83-1.45-3.23-.2-.31-.42-.67-.67-1.11C2.44 6.78 2 5.65 2 5c0-2.2 2.02-4 4.5-4 1.22 0 2.36.42 3.22 1.19C10.55 2.94 11 3.94 11 5c0 .66-.44 1.78-.86 2.48zM4 14h5c-.23 1.14-1.3 2-2.5 2s-2.27-.86-2.5-2z"></path></svg></span>主要数値</div><div class="admonitionContent_BuS1"><p><strong>21 ページ</strong> · <strong>5 API ルート</strong> · <strong>380+ AWS テーブル</strong> · <strong>60+ K8s テーブル</strong> · <strong>125 MCP ツール</strong></p></div></div>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="アーキテクチャ概要">アーキテクチャ概要<a href="https://www.atomai.click/awsops/ja/whatsnew/2026/03/08/v1.0#%E3%82%A2%E3%83%BC%E3%82%AD%E3%83%86%E3%82%AF%E3%83%81%E3%83%A3%E6%A6%82%E8%A6%81" class="hash-link" aria-label="アーキテクチャ概要への直接リンク" title="アーキテクチャ概要への直接リンク" translate="no">​</a></h2>
<p>CloudFront でユーザーリクエストを受け取り、ALB を経由して EC2 上で Next.js アプリが実行され、Steampipe を通じてリアルタイムに AWS API を SQL で照会します。</p>
<div style="border-radius:8px;overflow:hidden;box-shadow:0 4px 24px rgba(0,0,0,0.4);margin-bottom:1.5rem;position:relative"><canvas></canvas></div>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="cdk-インフラへの移行">CDK インフラへの移行<a href="https://www.atomai.click/awsops/ja/whatsnew/2026/03/08/v1.0#cdk-%E3%82%A4%E3%83%B3%E3%83%95%E3%83%A9%E3%81%B8%E3%81%AE%E7%A7%BB%E8%A1%8C" class="hash-link" aria-label="CDK インフラへの移行への直接リンク" title="CDK インフラへの移行への直接リンク" translate="no">​</a></h2>
<p>CloudFormation YAML テンプレートから AWS CDK TypeScript へ移行し、インフラをコードとして管理します。</p>
<table><thead><tr><th>項目</th><th>Before (CloudFormation)</th><th>After (CDK)</th></tr></thead><tbody><tr><td>言語</td><td>YAML 2000+ 行</td><td>TypeScript 型安全</td></tr><tr><td>デプロイ</td><td><code>aws cloudformation deploy</code></td><td><code>cdk deploy</code></td></tr><tr><td>VPC</td><td>手動サブネット CIDR 計算</td><td><code>ec2.Vpc()</code> 自動</td></tr><tr><td>ALB</td><td>リスナー/ターゲット手動</td><td><code>elbv2.ApplicationLoadBalancer()</code></td></tr><tr><td>再利用</td><td>コピー&amp;ペースト</td><td>Stack 継承 + Construct</td></tr></tbody></table>
<div class="theme-admonition theme-admonition-info admonition_xJq3 alert alert--info"><div class="admonitionHeading_Gvgb"><span class="admonitionIcon_Rf37"><svg viewBox="0 0 14 16"><path fill-rule="evenodd" d="M7 2.3c3.14 0 5.7 2.56 5.7 5.7s-2.56 5.7-5.7 5.7A5.71 5.71 0 0 1 1.3 8c0-3.14 2.56-5.7 5.7-5.7zM7 1C3.14 1 0 4.14 0 8s3.14 7 7 7 7-3.14 7-7-3.14-7-7-7zm1 3H6v5h2V4zm0 6H6v2h2v-2z"></path></svg></span>主要ファイル</div><div class="admonitionContent_BuS1"><ul>
<li class=""><code>infra-cdk/lib/awsops-stack.ts</code> — VPC、EC2(t4g.2xlarge ARM64)、ALB、CloudFront 構成</li>
<li class=""><code>00-deploy-infra.sh</code> — CDK bootstrap (<code>ap-northeast-2</code> + <code>us-east-1</code>) およびデプロイスクリプト</li>
</ul></div></div>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="cognito-認証">Cognito 認証<a href="https://www.atomai.click/awsops/ja/whatsnew/2026/03/08/v1.0#cognito-%E8%AA%8D%E8%A8%BC" class="hash-link" aria-label="Cognito 認証への直接リンク" title="Cognito 認証への直接リンク" translate="no">​</a></h2>
<p>AWS Cognito を活用したユーザー認証システムを構築しました。</p>
<div style="border-radius:8px;overflow:hidden;box-shadow:0 4px 24px rgba(0,0,0,0.4);margin-bottom:1.5rem;position:relative"><canvas></canvas></div>
<ul>
<li class=""><strong>Lambda@Edge</strong> (Python 3.12, us-east-1) — CloudFront viewer-request で JWT を検証</li>
<li class=""><strong>OAuth2 Authorization Code</strong> flow による安全な認証</li>
<li class=""><code>07-setup-cloudfront-auth.sh</code> スクリプトで自動設定</li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="agentcore-runtime--gateway">AgentCore Runtime + Gateway<a href="https://www.atomai.click/awsops/ja/whatsnew/2026/03/08/v1.0#agentcore-runtime--gateway" class="hash-link" aria-label="AgentCore Runtime + Gatewayへの直接リンク" title="AgentCore Runtime + Gatewayへの直接リンク" translate="no">​</a></h2>
<p>Amazon Bedrock AgentCore を活用した AI エージェントシステムです。</p>
<div style="border-radius:8px;overflow:hidden;box-shadow:0 4px 24px rgba(0,0,0,0.4);margin-bottom:1.5rem;position:relative"><canvas></canvas></div>
<table><thead><tr><th>構成要素</th><th>説明</th></tr></thead><tbody><tr><td>Strands Agent</td><td>arm64 Docker イメージ、ECR で管理</td></tr><tr><td>MCP プロトコル</td><td>Gateway → Lambda 間の標準通信</td></tr><tr><td>Code Interpreter</td><td><code>awsops_code_interpreter</code> (Python sandbox)</td></tr><tr><td>デプロイスクリプト</td><td><code>06a</code> Runtime、<code>06b</code> Gateway、<code>06c</code> Tools、<code>06d</code> Interpreter</td></tr></tbody></table>
<div class="theme-admonition theme-admonition-warning admonition_xJq3 alert alert--warning"><div class="admonitionHeading_Gvgb"><span class="admonitionIcon_Rf37"><svg viewBox="0 0 16 16"><path fill-rule="evenodd" d="M8.893 1.5c-.183-.31-.52-.5-.887-.5s-.703.19-.886.5L.138 13.499a.98.98 0 0 0 0 1.001c.193.31.53.501.886.501h13.964c.367 0 .704-.19.877-.5a1.03 1.03 0 0 0 .01-1.002L8.893 1.5zm.133 11.497H6.987v-2.003h2.039v2.003zm0-3.004H6.987V5.987h2.039v4.006z"></path></svg></span>Docker ビルドの注意事項</div><div class="admonitionContent_BuS1"><p>EC2 では Docker イメージの<strong>ビルドのみ</strong>を実行します。実行は AgentCore マネージドサービス上でコンテナとして行われます。
arm64 必須: <code>docker buildx --platform linux/arm64 --load</code></p></div></div>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="初期ダッシュボード">初期ダッシュボード<a href="https://www.atomai.click/awsops/ja/whatsnew/2026/03/08/v1.0#%E5%88%9D%E6%9C%9F%E3%83%80%E3%83%83%E3%82%B7%E3%83%A5%E3%83%9C%E3%83%BC%E3%83%89" class="hash-link" aria-label="初期ダッシュボードへの直接リンク" title="初期ダッシュボードへの直接リンク" translate="no">​</a></h2>
<table><thead><tr><th>項目</th><th>数値</th></tr></thead><tbody><tr><td>ページ</td><td>21</td></tr><tr><td>API ルート</td><td>5</td></tr><tr><td>Steampipe AWS テーブル</td><td>380+</td></tr><tr><td>Steampipe K8s テーブル</td><td>60+</td></tr><tr><td>CIS ベンチマーク</td><td>v1.5 ~ v4.0</td></tr></tbody></table>
<ul>
<li class=""><strong>Recharts</strong> メトリクス可視化 — CPU、Memory、Network トレンド</li>
<li class=""><strong>React Flow</strong> ネットワークトポロジー — VPC、Subnet、Route Table の関係を表現</li>
<li class=""><strong>CIS コンプライアンス</strong> — v1.5 ~ v4.0 ベンチマーク自動検査 (Steampipe <code>aws_compliance</code> テーブル)</li>
<li class=""><strong>AI ルーティング</strong> — Code Interpreter → AgentCore → Steampipe+Bedrock → Bedrock Direct</li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="claude-code-スキャフォールディング">Claude Code スキャフォールディング<a href="https://www.atomai.click/awsops/ja/whatsnew/2026/03/08/v1.0#claude-code-%E3%82%B9%E3%82%AD%E3%83%A3%E3%83%95%E3%82%A9%E3%83%BC%E3%83%AB%E3%83%87%E3%82%A3%E3%83%B3%E3%82%B0" class="hash-link" aria-label="Claude Code スキャフォールディングへの直接リンク" title="Claude Code スキャフォールディングへの直接リンク" translate="no">​</a></h2>
<p>開発生産性向上のための Claude Code 統合環境を構成しました。</p>
<ul>
<li class=""><strong>Module CLAUDE.md</strong> — 各ディレクトリごとのコンテキストドキュメント (<code>src/lib/CLAUDE.md</code>、<code>src/app/CLAUDE.md</code> など)</li>
<li class=""><strong>Auto-Sync Rules</strong> — コード変更時のドキュメント自動同期ルール</li>
<li class=""><code>.claude/hooks/check-doc-sync.sh</code> — ドキュメント同期検証フック</li>
</ul>]]></content:encoded>
            <category>Release</category>
            <category>Deployment</category>
            <category>AI</category>
            <category>IaC</category>
        </item>
    </channel>
</rss>