2
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?

AWS Loginでローカル認証してBedrock APIを呼び出してみた

Last updated at Posted at 2026-01-02

はじめに

aws loginコマンドを使って、ローカル環境から Amazon Bedrockを呼び出してみました。

この記事では、

  • 従来のIAMユーザーの認証情報を使わず、aws loginによる認証の実施方法
  • Bedrock APIの使い方

などを学ぶことが出来ます。

aws loginとは

aws loginは、AWS CLI v2.32.0で導入された新しい認証コマンドです。

従来のようにIAMユーザーのアクセスキーとシークレットキーを使用しなくてよいので、より簡易でセキュアなAWSリソースへのアクセスを実現できます。

従来の認証方法との違い

  • 従来: aws configureでアクセスキーとシークレットキーを設定
    • アクセスキーとシークレットキーが流出する危険性あり
    • アクセスキーとシークレットキーを発行するのが地味に面倒
  • 新方式: aws loginでブラウザベースの認証フローを実行
    • アクセスキーとシークレットキーの発行が不要なので、従来方式でのリスクが軽減される

環境

  • OS: Windows
  • aws cli: 2.32.26
  • uv: 0.8.18

AWS CLIでのログイン手順

1. ログイン

aws login

実行すると、リージョンの入力を求められます。

AWS Region [us-east-1]: us-east-1

リージョンを入力すると、ブラウザが起動してAWSの認証画面が表示されます。ブラウザで認証を完了すると、ターミナルに戻って認証が完了します。

2. 認証確認

認証が正しく行われたかを確認します。

aws sts get-caller-identity

成功すると、以下のような情報が表示されます。

{
   "UserId": "IAMエンティティの一意のID",
   "Account": "AWSアカウントID(12桁)",
   "Arn": "IAMエンティティのARN(Amazon Resource Name)"
}

Bedrockを呼び出すPythonコードの実装

プロジェクトのセットアップ

まず、プロジェクトの依存関係を定義します。

pyproject.toml:

[project]
name = "aws-bedrock-example"
version = "0.1.0"
description = "AWS Bedrock example using aws login"
readme = "README.md"
requires-python = ">=3.13"
dependencies = [
    "boto3==1.42.19",
    "botocore[crt]==1.42.19",
]

重要: botocore[crt]の必要性

aws loginで取得した認証情報を使用する場合、botocore[crt]が必須です。これがないと以下のエラーが発生します。

botocore.exceptions.MissingDependencyException: Missing Dependency: Using the login credential provider requires an additional dependency. You will need to pip install "botocore[crt]" before proceeding.

botocore[crt]は、botocoreに AWS Common Runtime (CRT) の機能を追加するための拡張パッケージです。 こちらを導入することで aws loginで取得した認証情報によるboto3操作が可能となります。

Bedrockを呼び出すコード

下記のコードとなります。

import boto3
from botocore.exceptions import ClientError


client = boto3.client("bedrock-runtime", region_name="us-east-1")

# モデルIDの指定
model_id = "us.anthropic.claude-haiku-4-5-20251001-v1:0"

# システムプロンプト定義
system_prompt = "あなたは、芸人のように面白おかしく関西弁で話すAIアシスタントです。"


# メッセージの定義
user_message = "AWS Bedrockについて教えてください。"
conversation = [
    {
        "role": "user",
        "content": [{"text": user_message}],
    }
]

try:
    # 推論の実行
    response = client.converse(
        modelId=model_id,
        messages=conversation,
        system=[{'text': system_prompt}],
        inferenceConfig={"maxTokens": 1024, "temperature": 0.0},
    )

    # 回答の表示
    response_text = response["output"]["message"]["content"][0]["text"]
    print(response_text)

except (ClientError, Exception) as e:
    print(f"ERROR: Can't invoke '{model_id}'. Reason: {e}")
    exit(1)

コードのポイント

基本は、こちら のコード例を参考に作成しました。

変更点としては、

  • Claude Haiku 4.5 を使用するように修正
  • こちら を参考にシステムプロンプトを追加
  • 元コードでは、temperature, topPの両方を指定しており、エラーが発生する。これを防ぐために、temperatureを0にしてtopPを除去

実行結果

実際に実行すると、以下のような関西弁での回答が得られました。

# AWS Bedrockについて、ざっくり説明したるわ!

## 🎭 Bedrockってなんやねん?

AWS Bedrockは、**生成AIモデルを簡単に使えるサービス**やで。難しい設定なしに、すぐにAIの力を借りられるっちゅうわけや。

## 🎪 主な特徴

- **複数のAIモデルが使える**
  - Claude(Anthropic)
  - Llama(Meta)
  - Titan(AWS自製)
  - などなど...

- **APIで簡単アクセス**
  - コード書いたら、すぐAIが動く
  - サーバー管理?そんなん要らんで!

- **セキュリティがしっかり**
  - データはAWSの中で完結
  - 外部に漏れへんから安心や

## 💼 使える場面

- チャットボット作成
- テキスト生成
- 画像生成
- データ分析
- コード生成

## 🎯 ええとこ

✅ インフラ管理が不要
✅ スケーリングが自動
✅ 複数モデルを比較できる
✅ 従量課金で経済的

ほんで、これ使ったら、あんたも今日からAI使いの仲間入りや!質問あったら、また聞いてや〜!

システムプロンプトで指定した通り、関西弁で面白おかしく?説明してくれました。

まとめ

この記事では、AWS CLI v2のaws loginコマンドを使った新しい認証方法と、ローカル環境からAmazon Bedrockを呼び出す方法を紹介しました。

ポイント

  • aws loginを使えば、アクセスキーの管理が不要
  • botocore[crt]のインストールが必須
  • Bedrock Converse APIで簡単にAIモデルを呼び出せる
  • システムプロンプトでAIの振る舞いをカスタマイズ可能

参考リンク

aws loginの導入により、ローカル開発環境でのAWS認証がより簡単になりました。ぜひ試してみてください!

2
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
2
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?