継続は力なり

タイトル通り定期的な更新を心掛けるブログです。

2026年に注力することを決める(た)

タダです.

あけましておめでとうございます.前回の2025年の振り返りの続きで2026年の目標を書いていきます.

2026年の注力したいこと

基本的には2025年からの持ち越しですが,具体の数値を見直しました.ペースを見つつ具体の数値は上方修正したり,下方修正したりします.

No. 目標概要 アクション 結果
1 自分でWebサービスにAIを組み込んで開発・運用する 去年作ったサービスにAIを組み込んで改善した状態で運用できるようにする -
2 読み手を意識するアウトプット 月間のPV数を平均4000超えを目指す -
3 本を年間12冊以上読む 月当たり1冊読んでインプット/アウトプットする -
4 外部登壇を3回以上行う 既に1つ決まっているため後2つやりたい -
5 海外のカンファレンスのCfPを出す 外部登壇の目標とリンクするけど海外のカンファレンスで登壇してみたい -

それ以外の目標

引き続き技術的なトピック以外の個人的な目標だったりやるべきことは my-release-note のリポジトリで進捗管理していきます.業務経験の棚卸しも3ヶ月に一回はして,更新していくように今年こそやっていきます.既にやりたいことは2つあります.

  • 体力の低下が激しいためランニングの習慣を作ってハーフマラソンに出場したい
  • 2/1に穴を掘る大会に出場する

まとめ

2026年もよろしくお願いします!

関連記事

sadayoshi-tada.hatenablog.com

sadayoshi-tada.hatenablog.com

sadayoshi-tada.hatenablog.com

sadayoshi-tada.hatenablog.com

sadayoshi-tada.hatenablog.com

2025年の振り返り

タダです.

2025年も終わりなので,今年の振り返りを行ってきます.

目標の振り返り

今年の目標は4つ中2つ達成しました.自分の趣味の筋トレをもとにしたWebサービスを作って公開しました.ベンチプレスのマックス重量を計算してくれるだけですが,公開できたのは自分の経験上良かったのかなと思います.他の重量計算とかしていきたい.

No. 目標概要 アクション 結果
1 自分でWebサービスを開発・運用する Webサービスの開発して運用を1つ行う 達成
2 読み手を意識するアウトプット 月間のPV数を平均6500超えを目指す 未達
3 本を年間30冊以上読む 月当たり2冊以上読まないと達成できないが年間で30冊を読んでインプット/何等かアウトプットする 未達
4 外部登壇を1回以上行う 昨年2回やったけどコンスタントに1回は発表したい 達成

sadayoshi-tada.hatenablog.com

アウトプットの振り返り

ブログ

今年も PV 数は6500以上を目標にして続けてきていたのですが未達でした.推移的には月平均4000 PV以上を目標にしていきます.ただ,今年は55記事を書き去年よりは多く書くことができました.

月 PV 数
1 4120 pv
2 3866 pv
3 4027 pv
4 8901 pv
5 4216 pv
6 12418 pv
7 4824 pv
8 3505 pv
9 3066 pv
10 3977 pv
11 3252 pv
12 2155 pv(12/29時点)

読者数と Twitter のフォロワー数

読者数と Twitter のフォロワー数も増えました.来年も自分を知ってもらって興味持ってもらえる方を増やすようにアウトプットをやっていきます.

読者数 Twitter フォロワー 数
125(6人増) 1058(169人増)

登壇

1回登壇できました.

来年は1月に2つ自分が関わっているイベントがあるので頑張ります.

まとめ

2025年の一年の振り返りました.今年関わってくれた皆さん本当にありがとうございました!来年もよろしくお願いします!!

過去の振り返り

sadayoshi-tada.hatenablog.com

sadayoshi-tada.hatenablog.com

sadayoshi-tada.hatenablog.com

sadayoshi-tada.hatenablog.com

sadayoshi-tada.hatenablog.com

sadayoshi-tada.hatenablog.com

Strands Agent で MCP 接続を試したメモ✍

タダです.

Strands Agent で MCP に接続して試してみました.そのメモをまとめます.

試したコード

Strand Agent を使って AWS Documentation MCP Server と AWS Cost Explorer MCP Serverに接続してみます.

import boto3
from mcp import StdioServerParameters, stdio_client
from strands import Agent
from strands.models import BedrockModel
from strands.tools.mcp import MCPClient

session = boto3.Session(
    region_name="ap-northeast-1",
)

aws_documentation_mcp_client = MCPClient(
    lambda: stdio_client(
        StdioServerParameters(
            command="uvx",
            args=["awslabs.aws-documentation-mcp-server@latest"]
        )
    )
)
aws_cost_explorer_mcp_client = MCPClient(
    lambda: stdio_client(
        StdioServerParameters(
            command="uvx",
            args=["awslabs.cost-explorer-mcp-server@latest"]
        )
    )
)

def run_agent_with_mcp_tools():
    with aws_documentation_mcp_client, aws_cost_explorer_mcp_client:
        tools = aws_documentation_mcp_client.list_tools_sync() + aws_cost_explorer_mcp_client.list_tools_sync()

        agent = Agent(
            model=BedrockModel(
                model_id="jp.anthropic.claude-haiku-4-5-20251001-v1:0",
                boto_session=session
            ),
            tools=tools
        )

        response = agent("Amazon Bedrockでサポートされてるモデルを簡潔に日本語で教えて。それと合わせてAmazon Bedrockの料金モデルをモデル別に日本語で教えて。")
        print(response)


if __name__ == "__main__":
    run_agent_with_mcp_tools()

このコードをローカルで実行してみます.実行してみた結果 Amazon Bedrock のモデルとその料金モデルを表示できました.

❯ uv run mcp_client.py
[12/28/25 11:46:49] INFO     Processing request of type ListToolsRequest                                                  server.py:713
[12/28/25 11:46:49] INFO     Processing request of type ListToolsRequest                                                  server.py:713
Amazon Bedrock のサポートモデルと料金について調べます。
Tool #1: search_documentation

Tool #2: search_documentation
[12/28/25 11:46:51] INFO     Processing request of type CallToolRequest                                                   server.py:713
                    INFO     Processing request of type CallToolRequest                                                   server.py:713
[12/28/25 11:46:54] INFO     HTTP Request: POST                                                                         _client.py:1740
                             https://proxy.search.docs.aws.amazon.com/search?session=70fca177-3b99-40a5-b549-8a553b8e4f                
                             32&search_intent=Find+pricing+information+for+Amazon+Bedrock+models "HTTP/1.1 200 OK"                     
                    INFO     HTTP Request: POST                                                                         _client.py:1740
                             https://proxy.search.docs.aws.amazon.com/search?session=70fca177-3b99-40a5-b549-8a553b8e4f                
                             32&search_intent=Find+information+about+supported+foundation+models+in+Amazon+Bedrock                     
                             "HTTP/1.1 200 OK"                                                                                         
では、詳細なドキュメントを確認します。
Tool #3: read_documentation

Tool #4: read_documentation

Tool #5: read_documentation
[12/28/25 11:46:56] INFO     Processing request of type CallToolRequest                                                   server.py:713
                    INFO     Processing request of type CallToolRequest                                                   server.py:713
                    INFO     Processing request of type CallToolRequest                                                   server.py:713
                    INFO     HTTP Request: GET                                                                          _client.py:1740
                             https://docs.aws.amazon.com/bedrock/latest/userguide/claude-messages-supported-models.html                
                             ?session=70fca177-3b99-40a5-b549-8a553b8e4f32&query_id=faf2a461-5140-4e42-abb9-550520ca841                
                             2 "HTTP/1.1 200 OK"                                                                                       
                    INFO     HTTP Request: GET                                                                          _client.py:1740
                             https://docs.aws.amazon.com/bedrock/latest/userguide/models-features.html?session=70fca177                
                             -3b99-40a5-b549-8a553b8e4f32&query_id=faf2a461-5140-4e42-abb9-550520ca8412 "HTTP/1.1 200                  
                             OK"                                                                                                       
[12/28/25 11:46:57] INFO     HTTP Request: GET                                                                          _client.py:1740
                             https://docs.aws.amazon.com/bedrock/latest/userguide/bedrock-pricing.html?session=70fca177                
                             -3b99-40a5-b549-8a553b8e4f32&query_id=e6c6ee2f-08b8-48f6-af64-1baaba92ed78 "HTTP/1.1 200                  
                             OK"                                                                                                       
AWS の公式ページで詳細な料金情報を確認します。
Tool #6: search_documentation
[12/28/25 11:46:58] INFO     Processing request of type CallToolRequest                                                   server.py:713
[12/28/25 11:47:00] INFO     HTTP Request: POST                                                                         _client.py:1740
                             https://proxy.search.docs.aws.amazon.com/search?session=70fca177-3b99-40a5-b549-8a553b8e4f                
                             32&search_intent=Find+detailed+pricing+per+token+for+each+Bedrock+model "HTTP/1.1 200 OK"                 
料金情報については、AWS 公式ウェブサイトの方が最新なので、ここまでの情報でお答えします。

## Amazon Bedrock でサポートされているモデル(簡潔版)

### **Anthropic Claude シリーズ**
- **Claude Opus 4.5** / 4.1 / 4(最高性能)
- **Claude Sonnet 4.5** / 4 / 3.5 Sonnet v2 / 3.5 Sonnet(バランス型)
- **Claude Haiku 4.5** / 3(軽量・高速)
- Claude 2 系、Instant 系(レガシー)

### **Amazon Nova シリーズ** 
- **Nova Lite**(バランス)
- **Nova Micro**(軽量)
- **Nova 2 Lite**(新型軽量)

### **その他のプロバイダー**
- **Cohere Command** シリーズ
- **Meta Llama** シリーズ
- **Mistral** モデル群
など

---

## 料金モデル(モデル別)

Amazon Bedrock は**トークンベースの従量課金制**です。

### **基本的な料金体系**
| 項目 | 説明 |
|------|------|
| **入力トークン** | プロンプトのトークン数に基づいて課金 |
| **出力トークン** | 生成されたレスポンスのトークン数に基づいて課金 |
| **料金モデル** | 2 種類あり(下記参照) |

### **2 つの料金オプション**

#### 1. **オンデマンド価格(On-Demand)**
- 使用量に応じた従量課金
- モデルごとに異なる価格設定
- 例:Claude Opus は最も高価、Claude Haiku は最安価

#### 2. **プロビジョニングスループット(Provisioned Throughput)**
- 事前にキャパシティを購入
- 月単位の契約
- 大量利用で**割引率が大きい**(通常20~50%以上削減)

### **一般的な価格傾向(相対的)**
- **Claude Opus** → 最も高い(最高性能)
- **Claude Sonnet** → 中程度
- **Claude Haiku** → 低い(軽量)
- **Nova シリーズ** → 最も安価(AWS 提供)

---

**詳細な最新価格は AWS 公式ページで確認してください:**
https://aws.amazon.com/bedrock/pricing/料金情報については、AWS 公式ウェブサイトの方が最新なので、ここまでの情報でお答えします。

## Amazon Bedrock でサポートされているモデル(簡潔版)

### **Anthropic Claude シリーズ**
- **Claude Opus 4.5** / 4.1 / 4(最高性能)
- **Claude Sonnet 4.5** / 4 / 3.5 Sonnet v2 / 3.5 Sonnet(バランス型)
- **Claude Haiku 4.5** / 3(軽量・高速)
- Claude 2 系、Instant 系(レガシー)

### **Amazon Nova シリーズ** 
- **Nova Lite**(バランス)
- **Nova Micro**(軽量)
- **Nova 2 Lite**(新型軽量)

### **その他のプロバイダー**
- **Cohere Command** シリーズ
- **Meta Llama** シリーズ
- **Mistral** モデル群
など

---

## 料金モデル(モデル別)

Amazon Bedrock は**トークンベースの従量課金制**です。

### **基本的な料金体系**
| 項目 | 説明 |
|------|------|
| **入力トークン** | プロンプトのトークン数に基づいて課金 |
| **出力トークン** | 生成されたレスポンスのトークン数に基づいて課金 |
| **料金モデル** | 2 種類あり(下記参照) |

### **2 つの料金オプション**

#### 1. **オンデマンド価格(On-Demand)**
- 使用量に応じた従量課金
- モデルごとに異なる価格設定
- 例:Claude Opus は最も高価、Claude Haiku は最安価

#### 2. **プロビジョニングスループット(Provisioned Throughput)**
- 事前にキャパシティを購入
- 月単位の契約
- 大量利用で**割引率が大きい**(通常20~50%以上削減)

### **一般的な価格傾向(相対的)**
- **Claude Opus** → 最も高い(最高性能)
- **Claude Sonnet** → 中程度
- **Claude Haiku** → 低い(軽量)
- **Nova シリーズ** → 最も安価(AWS 提供)

---

**詳細な最新価格は AWS 公式ページで確認してください:**
https://aws.amazon.com/bedrock/pricing/

まとめ

Strands Agent の MCP 接続を試したメモです.

AWS DevOps Agent に Webhook で調査依頼をしてみたメモ✍

タダです.

以前 AWS DevOps Agent が re:Invent 2025 で発表された記事を書きました.AWS DevOps Agent はウェブアプリからの操作が可能ですが,Webhook からのリクエストも可能です.この記事では Webhook での調査依頼をしてみたメモをまとめます.

sadayoshi-tada.hatenablog.com

AWS DevOps Agent に Webhook をリクエストする準備

AWS DevOps Agent に Webhook をする方法はドキュメントに載っています.ボタン数クリックで設定可能で,専用のエンドポイントとトークンが払い出されるためコピーしておきましょう.

Webhook の設定完了後の Agent Spacesの画面スクリーンショット

実際に Webhook リクエストしてみる

Webhook を実行する準備が整ったのでリクエストしてみましょう.リクエストのフォーマットは以下の2つがあります.

  • HMAC 認証でのリクエストヘッダー要件
    • Content-Type: application/json
    • x-amzn-event-signature:
    • x-amzn-event-timestamp: <+%Y-%m-%dT%H:%M:%S.000Z>
  • Bearer Token 認証
    • Content-Type: application/json
    • Authorization: Bearer <your-token>

AWS DevOps Agent にリクエストする時のリクエストボディにはは調査に関わる情報を送ります.

{
  "title": "Incident title",
  "severity": "high",
  "affectedResources": ["resource-id-1", "resource-id-2"],
  "timestamp": "2025-11-23T18:00:00Z",
  "description": "Detailed incident description",
  "data": {
    "metadata": {
        "region": "us-east-1",
        "environment": "production"
    }
  }
}

試しに以下のようなフォーマットでリクエストを送ってみます.自分が意図的に東京リージョンで EC2 を停止している個人アカウントにあり,本番想定で意図せず止まっていないかを確認する目的で調査したような想定で調査依頼してみました.

{
  "eventType": "incident",
  "incidentId": "incident-001",
  "action": "created",
  "priority": "HIGH",
  "title": "Investigate stopped EC2 instances",
  "description": "Please check if there are any stopped EC2 instances in ap-northeast-1.",
  "timestamp": "2025-12-21T05:24:53.125Z",
  "service": "TestService",
  "data": {
    "metadata": {
      "region": "ap-northeast-1"
    }
  }
}

AWS DevOps Agent 調査した結果,意図した通り自分が停止した東京リージョンの EC2 を見つけてくれユーザーによって停止しているとレポートしてくれました.

意図的に停止した EC2 を抽出した結果のスクリーンショット

まとめ

AWS DevOps Agent に Webhook 経由で調査依頼をしてみたメモをまとめました.

GA された S3 Vectors を Terraform でもサポートされたため試してみたメモ✍

タダです.

re:Invent 中に S3 Vectors が GA されました.東京リージョンにもきており,Terraform aws provider v6.24.0 で S3 Vectors のサポートが入っているため試してみます.

aws.amazon.com

リリース概要

v6.24.0 では次の S3 Vectors のリソースがサポートされました.

  • aws_s3vectors_vector_bucket: ベクトルデータを格納するバケット
  • aws_s3vectors_vector_bucket_policy: 上記ベクトルバケットに対するアクセスポリシー管理
  • aws_s3vectors_index: ベクトル検索用のインデックスリソース

これらのリソースを東京リージョンで定義して使ってみましょう.

Terraform で S3 Vectors を定義する

以前書いた記事をベースにリソースを作ります.

resource "aws_s3vectors_vector_bucket" "blog" {
  vector_bucket_name = "blog-s3-vectors"
}

resource "aws_s3vectors_index" "blog" {
  index_name         = "blog-s3-vectors-index"
  vector_bucket_name = aws_s3vectors_vector_bucket.blog.vector_bucket_name
  data_type          = "float32"
  dimension          = 1024
  distance_metric    = "cosine"
}

この定義ですと次のような実行計画ができるので作成します.

Terraform will perform the following actions:

  # aws_s3vectors_index.blog will be created
  + resource "aws_s3vectors_index" "blog" {
      + creation_time            = (known after apply)
      + data_type                = "float32"
      + dimension                = 1024
      + distance_metric          = "cosine"
      + encryption_configuration = (known after apply)
      + index_arn                = (known after apply)
      + index_name               = "blog-s3-vectors-index"
      + region                   = "ap-northeast-1"
      + tags_all                 = {}
      + vector_bucket_name       = "blog-s3-vectors"
    }

  # aws_s3vectors_vector_bucket.blog will be created
  + resource "aws_s3vectors_vector_bucket" "blog" {
      + creation_time            = (known after apply)
      + encryption_configuration = (known after apply)
      + force_destroy            = false
      + region                   = "ap-northeast-1"
      + tags_all                 = {}
      + vector_bucket_arn        = (known after apply)
      + vector_bucket_name       = "blog-s3-vectors"
    }

Plan: 2 to add, 0 to change, 0 to destroy.

Do you want to perform these actions?
  Terraform will perform the actions described above.
  Only 'yes' will be accepted to approve.

  Enter a value: yes

aws_s3vectors_vector_bucket.blog: Creating...
aws_s3vectors_vector_bucket.blog: Creation complete after 0s
aws_s3vectors_index.blog: Creating...
aws_s3vectors_index.blog: Creation complete after 0s

Apply complete! Resources: 2 added, 0 changed, 0 destroyed.

作成されたリソースが作成できたかを AWS CLI を使って確認したところ意図通り東京リージョンにリソースが存在してました.

# バケットの確認
❯ aws s3vectors list-vector-buckets --region ap-northeast-1
{
    "vectorBuckets": [
        {
            "vectorBucketName": "blog-s3-vectors",
            "vectorBucketArn": "arn:aws:s3vectors:ap-northeast-1:1234567891011:bucket/blog-s3-vectors",
            "creationTime": "2025-12-14T12:34:42+09:00"
        }
    ]
}
# インデックスの確認
❯ aws s3vectors get-index --vector-bucket-name blog-s3-vectors --index-name blog-s3-vectors-index --region ap-northeast-1
{
    "index": {
        "vectorBucketName": "blog-s3-vectors",
        "indexName": "blog-s3-vectors-index",
        "indexArn": "arn:aws:s3vectors:ap-northeast-1:1234567891011:bucket/blog-s3-vectors/index/blog-s3-vectors-index",
        "creationTime": "2025-12-14T12:34:43+09:00",
        "dataType": "float32",
        "dimension": 1024,
        "distanceMetric": "cosine"
    }
}

S3 Vectors にテストデータを投入する

テストデータを投入し,検索してみます.テストデータは以下のように生成して S3 Vectors にアップロードします.

❯ cat input.json
{
 "inputText": "This is test vector data."
}
❯ aws bedrock-runtime invoke-model --model-id "amazon.titan-embed-text-v2:0" --body fileb://input.json --content-type application/json --accept application/json --region ap-northeast-1 output.json
{
    "contentType": "application/json"
}
❯ jq -c '.embedding' output.json > vector_data.json
❯ cat <<EOF > vector_upload.json
∙ [
  {
    "key": "doc1",
    "data": {
      "float32": $(cat vector_data.json)
    },
    "metadata": {
      "source_text": "This is test vector data.",
      "category": "test"
    }
  }
]
∙ EOF
❯ aws s3vectors put-vectors --vector-bucket-name blog-s3-vectors --index-name blog-s3-vectors-index --vectors file://vector_upload.json --region ap-northeast-1

投入したデータを検索します.意図通りに検索できました.

❯ jq '{float32: .embedding}' output.json > embedding.json
❯ aws s3vectors query-vectors --vector-bucket-name blog-s3-vectors --index-name blog-s3-vectors-index --top-k 3 --query-vector file://embedding.json --return-metadata --region ap-northeast-1
{
    "vectors": [
        {
            "key": "doc1",
            "metadata": {
                "category": "test",
                "source_text": "This is test vector data."
            }
        }
    ],
    "distanceMetric": "cosine"
}

まとめ

GA された S3 Vectors を Terraform でリソース管理を試してメモをまとめました.