1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

re:Invent 2026 のセッション情報を AWS Events API で取ってみた

1
Posted at

re:Invent 2026 の計画を Claude Code と相談しながら作ろうとしていたら、セッションカタログを取れる AWS Events API というものを見つけたので調べてみた。

概要

AWS Events API は REST API と MCP サーバーの 2 つの形で提供されている。

形態 エンドポイント
REST API https://api.awsevents.com/v1/...
MCP サーバー https://api.awsevents.com/mcp

公式ドキュメントはこちら。

機能一覧

用意されている操作はこの 12 個。REST API と MCP のどちらでも同じ操作ができる。

操作 メソッドとパス できること
ListEvents GET /v1/events 開催中・開催予定のイベント一覧
GetEvent GET /v1/events/{eventId} イベント 1 件の情報
ListSessions GET /v1/events/{eventId}/sessions セッション一覧(ページ単位)
GetSession GET /v1/events/{eventId}/sessions/{sessionId} セッション 1 件の詳細
GetSchedule GET /v1/events/{eventId}/schedule 自分のスケジュール(予約・お気に入り・個人予定)
ReserveSessions POST /v1/events/{eventId}/reservations セッションを予約(1 回で最大 10 件)
CancelReservation DELETE /v1/events/{eventId}/reservations/{sessionId} 予約をキャンセル
AssociateFavorites POST /v1/events/{eventId}/favorites お気に入りに追加
DisassociateFavorite DELETE /v1/events/{eventId}/favorites/{sessionId} お気に入りから外す
CreatePersonalTime POST /v1/events/{eventId}/personal-time 個人予定を追加
UpdatePersonalTime PUT /v1/events/{eventId}/personal-time/{personalTimeId} 個人予定を変更
DeletePersonalTime DELETE /v1/events/{eventId}/personal-time/{personalTimeId} 個人予定を削除

イベント情報の取得にサインインは要らない。セッションの取得は、re:Invent のように参加登録が必要なイベントだとサインインが要る。スケジュールまわりは全部サインインが必須で、MCP の場合はどの操作でもサインインが必要になる。


使い方:REST API

イベント一覧の取得

どんなイベントが API の対象になっているかを見てみる。/v1/events を呼ぶと、開催中と開催予定のイベントが返ってくる。この呼び出しにはサインインが要らないので、curl だけで試せる。

レスポンスは項目が多いので、jq でイベント ID、イベント名、サインインが必要かどうかの 3 つに絞っている。

イベント一覧を取得
curl -s https://api.awsevents.com/v1/events | jq '.items[] | {eventId, name, authenticationRequired}'

実行すると、イベントごとに次のような結果が出る。ほかのイベントも返ってくるが、ここには re:Invent 2026 の分だけ載せた。

結果(re:Invent 2026 の分)
{
  "eventId": "reinvent2026",
  "name": "re:Invent 2026",
  "authenticationRequired": true
}

見るところは 2 つ。eventId は、セッション一覧やスケジュールを取るときの URL に入れる値で、re:Invent 2026 なら reinvent2026 になる。authenticationRequired が true のイベントは、セッションを取るのにサインインが要る。

アクセストークンの取得

re:Invent 2026 は authenticationRequired: true なので、セッション一覧を匿名で取りにいくと 401 が返ってくる。イベントに登録済みの AWS Builder ID でサインインして、アクセストークンを取る必要がある。

ここでは転送先の URL から認可コードを手でコピーする方法で、ターミナルとブラウザだけで取ってみる。

1. PKCE の値を作る

サインインのたびに使い捨てるランダム文字列(verifier)と、それを SHA-256 にかけた値(challenge)を用意する。変数を引き継ぐので、3 までは同じターミナルで続けて実行する。

PKCE の値を作る
CODE_VERIFIER=$(openssl rand -base64 96 | tr -d '\n=+/' | cut -c1-64)
CODE_CHALLENGE=$(printf '%s' "$CODE_VERIFIER" | openssl dgst -sha256 -binary | openssl base64 -A | tr '+/' '-_' | tr -d '=')
STATE=$(openssl rand -hex 16)

2. ブラウザでサインインする

1 で作った値を付けた URL をブラウザで開く。open は macOS のコマンドなので、ほかの OS では URL をブラウザに貼り付ける。

サインイン用の URL を開く
open "https://oauth.awsevents.com/oauth2/authorize?response_type=code&client_id=7vmom55m1qstvq8i71ph127bfq&redirect_uri=http://localhost:8484/callback&scope=openid+email+events/access&identity_provider=AWSBuilderID&code_challenge=$CODE_CHALLENGE&code_challenge_method=S256&state=$STATE"

Builder ID でサインインすると、ブラウザが http://localhost:8484/callback?code=...&state=... に移動する。手元で何も待ち受けていないのでページは開けないが、問題ない。アドレスバーに出ている code= の値が認可コードなので、コピーしておく。

redirect_uri に使えるのは localhost のポート 8484〜8489 の /callback だけ。ほかの値にするとサインインに失敗する。

3. 認可コードをトークンに交換する

2 でコピーした認可コードを CODE に入れて、トークンエンドポイントに送る。

アクセストークンを取得
CODE=コピーした値
TOKENS=$(curl -s -X POST https://oauth.awsevents.com/oauth2/token \
  -d "grant_type=authorization_code" \
  -d "client_id=7vmom55m1qstvq8i71ph127bfq" \
  -d "redirect_uri=http://localhost:8484/callback" \
  -d "code=$CODE" \
  -d "code_verifier=$CODE_VERIFIER")
ACCESS_TOKEN=$(echo "$TOKENS" | jq -r .access_token)

レスポンスにはアクセストークン、ID トークン、リフレッシュトークンの 3 つが入っている。このうち API に送るのはアクセストークンだけでいい。

アクセストークンは 60 分で切れる。一緒に返ってくるリフレッシュトークン(30 日有効)を使えば、サインインし直さずに取り直せる。やり方は公式の Keeping the attendee signed in に載っている。

セッション一覧の取得

トークンが取れたら、Authorization ヘッダーに付けて呼ぶ。

セッション一覧を取得
curl -s -H "Authorization: Bearer $ACCESS_TOKEN" \
  "https://api.awsevents.com/v1/events/reinvent2026/sessions?includeAbstracts=false" \
  | jq '{totalCount, nextToken, first: .items[0].title}'

レスポンスは { items, nextToken, totalCount } の形で返ってくる。続きは nextToken を付けて取りにいく。

次のページを取得
curl -s -H "Authorization: Bearer $ACCESS_TOKEN" \
  "https://api.awsevents.com/v1/events/reinvent2026/sessions?nextToken=$NEXT_TOKEN"

1 ページの件数はサーバー側が決めていて、途中で少ないページが返ることもあるらしい。件数で判断せず、nextToken がなくなるまで回すのが正解。

自分のスケジュールは /schedule で取れる。

自分のスケジュールを取得
curl -s -H "Authorization: Bearer $ACCESS_TOKEN" \
  https://api.awsevents.com/v1/events/reinvent2026/schedule

トークンは有効でもイベントに登録していないと 403 になる。サインインし直しても直らないので注意。


使い方:MCP

次のコマンドで、Claude Code に AWS Events の MCP サーバーを追加する。

MCP サーバーを追加
claude mcp add --transport http --scope user awsevents \
  https://api.awsevents.com/mcp \
  --callback-port 8484 --client-id 7vmom55m1qstvq8i71ph127bfq

--callback-port 8484 は、サインイン後のコールバックを待ち受けるポートの指定。省略するとサインインに失敗するので必ず付ける。

追加したら Claude Code で /mcp を開いて awsevents を認証する。ブラウザが開くので Builder ID でサインインすれば終わり。以降は、Claude Code から MCP 経由で各種操作ができるようになる。

頼み方の例
re:Invent 2026 で AgentCore 関連のセッションを探して

Claude Code が ListSessions や GetSession を呼んで答えてくれる。予約やお気に入り登録のツールもあるので、Claude Code が勝手に実行しないよう、許可設定は気にしておいたほうがいいかも。

まとめ

情報が多くて錯綜しがちなので、これらを使ってAIと相談しながら進めていくのもありだと思いました。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?