[アップデート] Amazon Bedrock AgentCore Managed HarnessのSkillsがS3からの読み込みに対応しました

[アップデート] Amazon Bedrock AgentCore Managed HarnessのSkillsがS3からの読み込みに対応しました

AgentCore Managed Harnessでスキルを外部ソースから読み込めるようになりました。今回はS3からの読み取りを試してみました!
2026.06.06

はじめに

こんにちは、ドライブが好きになったコンサル部の神野(じんの)です。
皆さん、AgentCore Managed Harnessを使っていますか??簡単にAI エージェントが作れて面白いですよね。

今日Harnessのコンソールを見ていたら、SkillsがS3/Gitからの読み込みに対応していました!

CleanShot 2026-06-06 at 08.13.31@2x

今までファイルパス指定しかSkillsが対応しておらず、ちょっと扱いづらいなと思っていたのですが、S3ならすぐに使えそうですね。APIリファレンスにも HarnessSkillS3SourceHarnessSkillGitSource が追加されています。

https://docs.aws.amazon.com/bedrock-agentcore/latest/APIReference/API_HarnessSkillS3Source.html

今回はコンソールをベースに、マークダウンのみのスキルとスクリプト付きスキルの2パターンを試してみます!

Agent Skills のおさらい

Agent Skills は、Strands Agents(Harness の内部で使われているオープンソースフレームワーク)でも対応しているプラグインの仕組みです。マークダウンやスクリプトをバンドルしてエージェントにドメイン知識を与えるもので、「社内用語の定義」や「特定APIの使い方」といった知識をスキルとして定義し、エージェントに渡せます。

https://strandsagents.com/docs/user-guide/concepts/plugins/skills/

準備

Harnessの作成

まずコンソールから Harness を作成します。AgentCore のコンソールを開いて Quick create harness から作成しました。

CleanShot 2026-06-06 at 08.16.59@2x-0704689

今回は作ったこの Harness を編集していきます。

S3バケットの作成

スキルファイルを配置する S3 バケットを作成します。S3 コンソールから通常通りバケットを作成します。今回はバケット名を s3-harness-skill-yjinno としました。

CleanShot 2026-06-06 at 08.25.26@2x

スキル1: 社内用語辞書(マークダウンのみ)

まずはマークダウンのみのシンプルなスキルを試します。架空の社内用語辞書スキルを作成して、スキルの有無で回答がどう変わるかを確認してみます。

SKILL.md の作成

Strands Agents のスキル形式に合わせて YAML フロントマターを付けた SKILL.md を用意します。

SKILL.md
---
name: 社内用語辞書
description: 社内プロジェクトの略称・コードネーム・独自用語を正確に展開して回答する
---

# 社内用語辞書

ユーザーが社内用語を使った場合、以下の辞書に基づいて正確に回答してください。
辞書にない用語は「社内辞書に該当する用語がありません」と伝えてください。

## プロジェクトコードネーム

| コードネーム | 正式名称 | 概要 |
|------------|---------|------|
| Phoenix | 次世代基幹システム刷新プロジェクト | 2026年度中にオンプレミスの基幹システムをAWSへ移行 |
| Tanuki | 社内ナレッジ検索基盤 | Amazon Bedrockを活用したRAGベースの社内文書検索 |
| Sunrise | 顧客向けポータルリニューアル | フロントエンドをNext.jsで刷新、2026Q3リリース予定 |

## 社内略称

| 略称 | 正式名称 |
|-----|---------|
| CTO室 | 技術戦略推進室 |
| PdM | プロダクトマネージャー(社内ではプロジェクトマネージャーと区別して使用) |
| MR | マージリクエスト(社内GitLabの用語、GitHubのPRに相当) |
| デイリー | 毎朝10:00の15分間スタンドアップミーティング |

Strands Agents のドキュメントでは name は lowercase alphanumeric + hyphen とされていますが、今回の Harness 環境では日本語でも動作しました。

S3にアップロード

S3 コンソールからフォルダを作成して SKILL.md をアップロードします。

CleanShot 2026-06-06 at 08.29.46@2x

CleanShot 2026-06-06 at 08.30.11@2x

Harnessにスキルを追加

Harness の編集画面から Skills セクションを開き、Add skill で S3 ソースを指定します。S3 URL に s3://s3-harness-skill-yjinno/company-glossary/ を指定しました。

CleanShot 2026-06-06 at 08.31.39@2x

よし、さっそくSkills試すぞ!!と Harness playground で試してみたところ、AccessDenied エラーになりました・・

CleanShot 2026-06-06 at 08.32.20@2x

Harness の実行ロールに S3 バケットへの読み取り権限がないためです。
Harnessの詳細画面から IAM role のリンクをたどって権限を追加します。

CleanShot 2026-06-06 at 08.34.28@2x

IAM コンソールで Execution Role の Permissions policies を開き、Add permissions > Attach policies から AmazonS3ReadOnlyAccess を追加しました。

CleanShot 2026-06-06 at 08.34.41@2x

CleanShot 2026-06-06 at 08.34.53@2x

動作確認

権限を付与した状態で再度 Harness playground から「Phoenixプロジェクトの概要を教えて」と聞いてみます。

CleanShot 2026-06-06 at 08.35.20@2x

おおお、スキルの内容を踏まえて正確に回答してくれていますね!!

Playground のトレースを展開すると、内部で Skills ツールが呼び出されてスキルの内容が読み込まれているのが確認できます。

スキル2: 営業日計算(スクリプト付き)

次はスクリプト付きのスキルを試します。営業日数の計算をPythonスクリプトに任せるスキルを作って実行させてみます。

スキルファイルの作成

SKILL.md で allowed-tools: shell を指定して、shell ツール経由でスクリプトを実行させます。

SKILL.md
---
name: 営業日計算
description: 開始日・終了日を指定すると、土日祝を除いた営業日数を正確に計算する
allowed-tools: shell
---

# 営業日計算スキル

ユーザーが営業日数や稼働日数について質問した場合、`shell` ツールで `scripts/business_days.py` を実行して正確に計算してください。
自分で日数を数えず、必ずスクリプトを実行してください。

## 使い方

python scripts/business_days.py <開始日> <終了日>

日付は YYYY-MM-DD 形式で指定します。
business_days.py
"""営業日計算 - 土日祝を除いた営業日数を返す"""

import json
import sys
from datetime import date, timedelta

HOLIDAYS_2026 = {
    date(2026, 1, 1),
    date(2026, 1, 12),
    date(2026, 2, 11),
    date(2026, 2, 23),
    date(2026, 3, 20),
    date(2026, 4, 29),
    date(2026, 5, 3),
    date(2026, 5, 4),
    date(2026, 5, 5),
    date(2026, 5, 6),
    date(2026, 7, 20),
    date(2026, 8, 11),
    date(2026, 9, 21),
    date(2026, 9, 22),
    date(2026, 9, 23),
    date(2026, 10, 12),
    date(2026, 11, 3),
    date(2026, 11, 23),
}

start = date.fromisoformat(sys.argv[1])
end = date.fromisoformat(sys.argv[2])

count = 0
holidays = []
current = start
while current <= end:
    if current.weekday() >= 5:
        pass
    elif current in HOLIDAYS_2026:
        holidays.append(current.isoformat())
    else:
        count += 1
    current += timedelta(days=1)

print(json.dumps({
    "start_date": sys.argv[1],
    "end_date": sys.argv[2],
    "business_days": count,
    "holidays_in_range": holidays,
}, ensure_ascii=False))

エージェントはスキルの指示に従って shell ツールでスクリプトを実行し、その結果を踏まえて回答を生成するイメージです。

S3にアップロード

先ほどと同様に S3 コンソールからフォルダを作成してファイルをアップロードします。最初は以下のようなサブフォルダ構成にしました。

s3://s3-harness-skill-yjinno/business-day-calculator/
├── SKILL.md
└── scripts/
    └── business_days.py

CleanShot 2026-06-06 at 08.40.18@2x

CleanShot 2026-06-06 at 08.40.58@2x

CleanShot 2026-06-06 at 08.41.55@2x

Harness の Skills に s3://s3-harness-skill-yjinno/business-day-calculator/ を指定して試してみます。

CleanShot 2026-06-06 at 08.42.39@2x

すると、以下のエラーが出ました。

CleanShot 2026-06-06 at 08.43.58@2x

おや、S3 からスキルをダウンロードする際にサブフォルダの展開がうまくいかないようです。SKILL.md とスクリプトを同じ階層にフラットに配置し直します。

s3://s3-harness-skill-yjinno/business-day-calculator/
├── SKILL.md
└── business_days.py

SKILL.md 内のスクリプトパスも合わせて修正します。

SKILL.md
- ユーザーが営業日数や稼働日数について質問した場合、`shell` ツールで `scripts/business_days.py` を実行して正確に計算してください。
+ ユーザーが営業日数や稼働日数について質問した場合、`shell` ツールで `business_days.py` を実行して正確に計算してください。

動作確認

再度「2026年7月の営業日は何日ある?」と聞いてみます。

CleanShot 2026-06-06 at 08.46.06@2x

2026年7月の営業日は 22日 と正確に返ってきました!内訳として祝日(7月20日・海の日)が除外されていることも示されています。

Playground のトレースを展開すると、内部の処理フローが見えます。

CleanShot 2026-06-06 at 08.46.10@2x

ざっと下記のような流れです。

  1. エージェントが Skills ツールで「営業日計算」スキルを読み込む
  2. スキルの指示に従い、Shell ツールで python business_days.py 2026-07-01 2026-07-31 を実行
  3. スクリプトの結果(JSON)を踏まえて、ユーザーにわかりやすく回答を生成

Skills 経由でスクリプト実行もできますね!なお、Strands Agents のドキュメントでは scripts/ はスキルの標準的なリソースディレクトリとして紹介されているので、S3 ソース経由でのダウンロード処理側の制約かもしれません。

おわりに

スキルのソースに S3 を直接指定できるようになったのは、嬉しいアップデートですね。S3 に置いたスキルファイルを差し替えることで簡単にアップデートできます。

IAMの権限が自動で反映されなかったり、私が実行した際だけかもしれませんがサブフォルダ構成でエラーになる点は注意です。

Git ソースも対応しているのでこちらもどういった使い勝手か試してみたいですね。

本記事が少しでも参考になりましたら幸いです。最後までご覧いただきありがとうございました!

この記事をシェアする

関連記事