×
採用サイトはこちら

【後編】挫折しない!Kiroと作る生成AIチャットボット開発

挫折しない!Kiroと作る生成AIチャットボット開発

はじめに

後編では、Kiroが作成した手順書を元に生成AIチャットボットを作成していきます。

Amplifyによるチャット画面の作成、LambdaによるBedrockの呼び出し、WAFによるセキュリティ設定を行っていきます。

Kiroの特徴、使い方、作成したドキュメントについては前編をご覧ください。

前編はこちら:【前編】挫折しない!Kiroと作る生成AIチャットボット開発

目次

記事の概要

本記事は、前編と後編の2部構成となっています。

前編の内容:

  • Kiroの概要
  • KiroのSpec機能の実行
  • 手順書の作成

後編の内容:

Kiroの作成した手順に沿って、生成AIチャットボットを作成していきます。

  • AWS Amplifyでアプリのベースを公開する
  • Bedrockのモデルカタログ有効化
  • Lambdaの実装
  • チャット画面本体の実装
  • WAFの設定
  • テストとエラーの解消

構成図

今回、構築する生成AIチャットボットの構成図は以下になります。

構築

AWS Amplify でアプリのベースを公開する

Kiroが作成してくれたコードをGitHubリポジトリにプッシュします。

そのGitHubリポジトリからAWS Amplifyにアプリのべースを公開します。

無事にデプロイできました

デプロイされたURLにアクセスをクリックしてみると、「社内向け生成AIチャットボット」と出力されたHTMLページが表示されています。

Bedrockのモデルカタログ有効化

Kiroではモデルアクセスを有効化する手順を出力しましたが、この方法は廃止されデフォルトでモデルのアクセスが可能になっています。

しかし、Anthropic社モデルを使用する前に、アカウントまたは組織単位で一度利用許可申請が必要になっています。

そのため、Bedrockのページから モデルカタログを選択し、検索したところClaude 3 Haikuがありませんでした。

代わりにClaude 4.5 Haikuを選択して利用許可申請を実施しました。

Lambdaの実装

IAMロールの作成

Lambda用のIAMロールを作成します。

CloudWatch Logs へログの書き込みを行うために、AWSLambdaBasicExecutionRoleポリシーの付与、Bedrockを呼び出すために以下のインラインポリシーを付与しました。

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": "bedrock:InvokeModel",
            "Resource": [
                "arn:aws:bedrock:ap-northeast-1:{AccountId}:inference-profile/jp.anthropic.claude-haiku-4-5-20251001-v1:0",
                "arn:aws:bedrock:ap-northeast-1::foundation-model/anthropic.claude-haiku-4-5-20251001-v1:0",
                "arn:aws:bedrock:ap-northeast-3::foundation-model/anthropic.claude-haiku-4-5-20251001-v1:0"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "aws-marketplace:ViewSubscriptions",
                "aws-marketplace:Subscribe"
            ],
            "Resource": "*"
        }
    ]
}

ポイント

1. bedrock:InvokeModel で3つのARNを許可している理由
Claude Haiku 4.5 は東京リージョン単独では使えないため、ルーティングの入り口としてJP クロスリージョン推論プロファイル(jp.anthropic…)を使う必要があります。

また、クロスリージョン推論は「東京(ap-northeast-1)と大阪(ap-northeast-3)のどちらかにルーティングする」という仕組みです。

IAM は呼び出しの経路全体を評価するため、3つすべてを許可しないと AccessDeniedException になります。

2. なぜMarketplaceの権限が必要なのか
Claude Haiku 4.5 は AWS Marketplace 経由で課金される有料モデルです。

Bedrock がモデルを呼び出す際、Lambda の実行ロールが「このアカウントは Marketplace でサブスクライブ済みか」を確認する処理を行うため、Marketplaceへの参照権が必要になります。

コンソールからAnthropic社モデルの利用許可申請を実施した後でも、Lambdaの実行ロール側に権限が必要になります。

Lambda関数の作成

Kiroが作成したコードでLambda関数を作成します。

作成後、Lambda Function URL を有効にして CORS を設定します。

許可オリジンには、作成したAmplifyのURLを設定しています。

Lambda Function URL をAmplifyの環境変数に設定します。

チャット画面本体の実装

Kiroが考えたTypeScriptのコードを、ローカルでテストしGitHubリポジトリへプッシュしてデプロイする作業を繰り返しました。

エラーになったときはKiroにチャットして修正を実施しました。

最終的に以下のチャット画面が完成しました。

WAFの設定

Amplifyのアプリの画面からWAFを新規作成します。

今回は以下の設定を有効にしました。

  • Amplify が推奨するファイアウォール保護を有効化
  • IPアドレスの保護を有効にする
    • 会社のIPアドレス範囲のみ許可

※「amplifyapp.com へのアクセスを制限」はカスタムドメインを設定していないので、無効にします
※「国の保護を有効にする」はIPアドレスの設定をすると、有効にできないため無効になっています

テストとエラーの解消

作成した生成AIチャットボットで入力しましたが、いくつかエラーが発生したのでKiroに質問しながら解消しました。

The ‘Access-Control-Allow-Origin’ header contains multiple values ‘*, https://…amplifyapp.com’, but only one is allowed.

  • 原因:handler.py と Lambda Function URL の CORS 設定が競合
  • 対処:handler.py 側の CORS ヘッダーをすべて削除し、Lambda Function URL の CORS 設定に一本化

ValidationException: Invocation of model ID anthropic.claude-haiku-4-5-20251001-v1:0 with on-demand throughput isn’t supported.

  • 原因:Claude Haiku 4.5 は東京リージョンでオンデマンド呼び出し不可
  • 対処:クロスリージョン推論プロファイル jp.anthropic.claude-haiku-4-5-20251001-v1:0 に変更

AccessDeniedException: Model access is denied due to IAM user or service role is not authorized to perform the required AWS Marketplace actions

  • 原因:Claude Haiku 4.5 は Marketplace モデルのため Marketplace 権限が必要
  • 対処:IAMロールのインラインポリシーに 以下を追加
    • aws-marketplace:ViewSubscriptions
    • aws-marketplace:Subscribe

全てのエラーを解消し、生成AIチャットボットが完成しました

構築中に発生したエラーの解消などKiroとやり取りして、約40クレジット使用しました

まとめ

今回、Kiroを使って簡単な生成AIチャットボットを作成してみました。

「本当に生成AIチャットボットが作成できるのか?」と疑心暗鬼でしたが、作成することができて感動しました。

Kiroを使うことで以下のメリットを感じました。

  • 簡単な要件を元に要件定義書、設計書、手順書などのドキュメントを簡単に作成できる
  • プログラミング言語などの知識がなくてもアプリケーションを簡単に作成できる
  • エラーメッセージを入力すると、自動でコードを修正してくれる

Kiroも完璧ではないので、構築中に何回もエラーが発生し修正が必要なため、想定よりクレジット消費が多くなりました。

また、Bedrockのモデルアクセス有効化の手順を出力するなど、AWSの最新情報を参照していませんでした。

この欠点はMCPサーバ設定をし、AWS公式ドキュメントを参照させれば解消できそうです。

今回、Kiroを通じてAI駆動開発がもたらす圧倒的なスピードと可能性を肌で感じることができました。

今後は単なる検証に留めず、実務の現場で活用できるよう、さらに知見を深めていきたいと考えています。

この記事が、少しでも参考になれば嬉しいです。

We Are Hiring!

エンジニアの皆さん、今の環境で「これ以上の成長イメージが湧かない」「新しい技術領域に挑戦できていない」とモヤモヤしていませんか?

FindConsultingでは、最大6か月間、要件定義や基本設計といった最上流から学べる超実践的研修を導入しています。

高い技術力を持つトップエンジニアが直接レクチャーし、メンター制度もあるため安心して成長できる環境が整っています。

現在、FindConsultingでは一緒に働く仲間を大募集中です。

少しでも興味を持っていただけたら、まずはカジュアル面談でざっくばらんにお話ししましょう!

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

弊社FindConsulting在籍のエンジニアです。
数百アカウント規模のOrganizations案件にて設計から運用まで担当しました。
CloudFormationやSSM Automationによる自動化をはじめ、AWS環境の運用改善、構成最適化を推進してきました。
これらの実務経験と、AWS認定資格全冠による知見を活かし、本ブログでは、AWSの実践的な知見やノウハウを発信します。

目次