はじめに
最近AWSリソースのデプロイはもっぱらKiroでCDK作ってやってたけど、
再現性とか気にせずちょっとした環境作りたい!であればBedrock AgentCoreでエージェントにやってもらうのもいいかもと思ったので試し。
今回はマネージドのagent harness(※)を使ってさくっと作る。
※agent harnessは、LLMがエージェントとして動作するためのコンピューティング環境や認証を裏でよしなに(=マネージドで)やってくれる機能で、チャットベースでエージェントを定義、実行することができる。
エージェントのイメージ
とりあえずサービスを試しに触る(Dev) → IAMポリシー等過不足なく制約をかけた上で動くようにする(Prod)、の二段階の対応ができるようにする。
プロンプト冒頭の[Dev]/[Prod]で挙動を切り替える。
プロンプトに[Dev] をつけて呼び出したとき
- フランク・親しみやすい
- スピード・利便性・前向きな提案重視
プロンプトに[Prod] をつけて呼び出したとき
- 厳格・簡潔・フォーマル
- セキュリティ・冗長性・ガバナンス重視
エージェントを作る
Bedrock AgentsCoreのハーネスを開く。
チャット画面が開くので、プロンプトで動きを定義する。
チャットベース(ユーザプロンプト)または設定ペインのシステムプロンプトで定義できるけど、チャットが続くと忘れるのでシステムプロンプトのほうがよい。
エージェントの挙動を定義するプロンプト (長いので折り畳み)
あなたはインフラ構築およびデプロイ支援を行う、文脈と環境の空気が読める有能なAIエージェントです。
ユーザーからの入力に含まれる文脈や、指示の先頭にある「[Dev]」または「[Prod]」という環境識別子を厳格に認識し、以下のように応答のトーンと挙動を動的に切り替えてください。
■ [Dev] 開発環境モードの場合
・トーン:親しみやすく、フランク(適度な絵文字の使用も許可)。
・挙動:スピードと利便性重視。多少の構成の不整合やコストがかかる提案でも、開発・検証を止めないための前向きなアドバイスや、追加の便利なTips(「こんなオプションもありますよ」など)を積極的に提案してください。
■ [Prod] 本番環境モードの場合
・トーン:極めて厳格、簡潔、フォーマル(絵文字は一切禁止)。
・挙動:防御・セキュリティ・ガバナンス重視。破壊的変更や不要なリソース作成のリスクに対して強烈にアラートを出してください。セキュリティグループの最小特権、冗長化、承認フローのリマインドを徹底し、無駄な提案や私語は一切省いてください。
準備完了(キャプチャはユーザプロンプトで指示してしまったので、後でシステムプロンプトでも定義)

エージェントを動かしてみる
エージェントの挙動を定義したチャットに続けて以下を指示。
[Dev] EC2インスタンスをサクッと立ててテスト環境作りたい
プロンプトで「親しみやすく、フランク」って指定したからなんだけど、思ったよりフランク!権限なしで実行できない状況だよ!って言われちゃったのでIAMポリシーを手動で追加。

権限をつけて再度実施。権限をつけたって言ったら喜んでくれた。

Prodモードにで作ったEC2の設定をしたい、と言うと…
[Prod] 新しく作ったEC2の初期セキュリティ設定をしたい。
いくつかエージェントとやり取りは発生したけど、セキュリティ関連の設定が少し厳しめになった。

Dev環境といえどもパブリックIPは振らないようにする、とか挙動をもっと細かくチューニングしたいのでスキルも定義する。
スキルを定義する
S3に制約事項を書いたスキル定義(markdownファイル)を配置。
[Dev]でもパブリックIP振らないでね、という内容を記載。
S3のスキル定義を読ませるときの注意点
スキル定義のファイル名はSKILL.mdとし、AgentCore側の設定ではSKILL.mdを格納したディレクトリを指定する。(AgentCore側では以下のキャプチャのようにS3のURIを入力するが、ファイル名まで指定したらエラーになった)

スキルを有効にして再度エージェントを動かしてみる
[Dev] EC2インスタンスをサクッと立ててテスト環境作りたい
おわりに
とりあえずエージェント作って動かす!はコンソール開いてプロンプト考えて打ち込む10分15分あればできそうな感じなのと、スキルの内容を変えるときはSKILL.mdを編集しさえすればいいので、とりあえず作って動き見ながらどんどんチューニングしていくのが良さそう。
今回作ったエージェントだと特にProdの冗長性・ガバナンスの考慮をもっと色々やってほしいので、SKILL.mdの作りこみとか、今回は扱わなかったけどToolsを取り入れたりしたい。
参考
harnessについて
AWS Developer Guide
以下ハーネスとはいったいなんぞや、が分かりやすかった(特に"Agent = Model + Harness"という表現)

