![[アップデート] Amazon Bedrock AgentCore Managed HarnessのSkillsがS3からの読み込みに対応しました](https://images.ctfassets.net/ct0aopd36mqt/7M0d5bjsd0K4Et30cVFvB6/5b2095750cc8bf73f04f63ed0d4b3546/AgentCore2.png?w=3840&fm=webp)
[アップデート] Amazon Bedrock AgentCore Managed HarnessのSkillsがS3からの読み込みに対応しました
はじめに
こんにちは、ドライブが好きになったコンサル部の神野(じんの)です。
皆さん、AgentCore Managed Harnessを使っていますか??簡単にAI エージェントが作れて面白いですよね。
今日Harnessのコンソールを見ていたら、SkillsがS3/Gitからの読み込みに対応していました!

今までファイルパス指定しかSkillsが対応しておらず、ちょっと扱いづらいなと思っていたのですが、S3ならすぐに使えそうですね。APIリファレンスにも HarnessSkillS3Source と HarnessSkillGitSource が追加されています。
今回はコンソールをベースに、マークダウンのみのスキルとスクリプト付きスキルの2パターンを試してみます!
Agent Skills のおさらい
Agent Skills は、Strands Agents(Harness の内部で使われているオープンソースフレームワーク)でも対応しているプラグインの仕組みです。マークダウンやスクリプトをバンドルしてエージェントにドメイン知識を与えるもので、「社内用語の定義」や「特定APIの使い方」といった知識をスキルとして定義し、エージェントに渡せます。
準備
Harnessの作成
まずコンソールから Harness を作成します。AgentCore のコンソールを開いて Quick create harness から作成しました。

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

スキル1: 社内用語辞書(マークダウンのみ)
まずはマークダウンのみのシンプルなスキルを試します。架空の社内用語辞書スキルを作成して、スキルの有無で回答がどう変わるかを確認してみます。
SKILL.md の作成
Strands Agents のスキル形式に合わせて YAML フロントマターを付けた 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 をアップロードします。


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

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

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

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


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

おおお、スキルの内容を踏まえて正確に回答してくれていますね!!
Playground のトレースを展開すると、内部で Skills ツールが呼び出されてスキルの内容が読み込まれているのが確認できます。
スキル2: 営業日計算(スクリプト付き)
次はスクリプト付きのスキルを試します。営業日数の計算をPythonスクリプトに任せるスキルを作って実行させてみます。
スキルファイルの作成
SKILL.md で allowed-tools: shell を指定して、shell ツール経由でスクリプトを実行させます。
---
name: 営業日計算
description: 開始日・終了日を指定すると、土日祝を除いた営業日数を正確に計算する
allowed-tools: shell
---
# 営業日計算スキル
ユーザーが営業日数や稼働日数について質問した場合、`shell` ツールで `scripts/business_days.py` を実行して正確に計算してください。
自分で日数を数えず、必ずスクリプトを実行してください。
## 使い方
python scripts/business_days.py <開始日> <終了日>
日付は YYYY-MM-DD 形式で指定します。
"""営業日計算 - 土日祝を除いた営業日数を返す"""
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



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

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

おや、S3 からスキルをダウンロードする際にサブフォルダの展開がうまくいかないようです。SKILL.md とスクリプトを同じ階層にフラットに配置し直します。
s3://s3-harness-skill-yjinno/business-day-calculator/
├── SKILL.md
└── business_days.py
SKILL.md 内のスクリプトパスも合わせて修正します。
- ユーザーが営業日数や稼働日数について質問した場合、`shell` ツールで `scripts/business_days.py` を実行して正確に計算してください。
+ ユーザーが営業日数や稼働日数について質問した場合、`shell` ツールで `business_days.py` を実行して正確に計算してください。
動作確認
再度「2026年7月の営業日は何日ある?」と聞いてみます。

2026年7月の営業日は 22日 と正確に返ってきました!内訳として祝日(7月20日・海の日)が除外されていることも示されています。
Playground のトレースを展開すると、内部の処理フローが見えます。

ざっと下記のような流れです。
- エージェントが Skills ツールで「営業日計算」スキルを読み込む
- スキルの指示に従い、Shell ツールで
python business_days.py 2026-07-01 2026-07-31を実行 - スクリプトの結果(JSON)を踏まえて、ユーザーにわかりやすく回答を生成
Skills 経由でスクリプト実行もできますね!なお、Strands Agents のドキュメントでは scripts/ はスキルの標準的なリソースディレクトリとして紹介されているので、S3 ソース経由でのダウンロード処理側の制約かもしれません。
おわりに
スキルのソースに S3 を直接指定できるようになったのは、嬉しいアップデートですね。S3 に置いたスキルファイルを差し替えることで簡単にアップデートできます。
IAMの権限が自動で反映されなかったり、私が実行した際だけかもしれませんがサブフォルダ構成でエラーになる点は注意です。
Git ソースも対応しているのでこちらもどういった使い勝手か試してみたいですね。
本記事が少しでも参考になりましたら幸いです。最後までご覧いただきありがとうございました!









