[アップデート] Amazon Bedrock のモデル有効化が API 形式で操作できるようになりました
こんにちは!クラウド事業本部コンサルティング部のたかくに(@takakuni_)です。
いつもの日課で AWS CLI の変更履歴を追っていると、Amazon Bedrock のモデル有効化が API 形式で操作できるようになっていました。
アップデート内容
Amazon Bedrock のモデル有効化/無効化は、 Anthropic Claude など、 Amazon Bedrock で提供されるモデルを利用するために必要な操作の1つです。ユーザーはモデルを利用する前に End User License Agreement (EULA) に合意する必要があります。(モデルによっては、モデルのユースケースを入力する必要があったりします。)
従来、マネジメントコンソールのみで操作可能でしたが、今回のアップデートで API が提供され、AWS SDK や AWS CLI 経由で操作できるようになりました。
今回増えた API は以下のとおりです。
- PutUseCaseForModelAccess
- モデルのユースケースを送信
- GetUseCaseForModelAccess
- モデルのユースケースを取得
- CreateFoundationModelAgreement
- モデルの有効化
- DeleteFoundationModelAgreement
- モデルの無効化
- ListFoundationModelAgreementOffers
- モデルのオファータイプをリスト化
- GetFoundationModelAvailability
- モデルの利用可否を取得
やってみた
実際にモデルの有効化/無効化を試してみます。ユースケースは送信済みのアカウントを利用するため、PutUseCaseForModelAccess と GetUseCaseForModelAccess の操作は省きます。
モデル利用可否の取得
GetFoundationModelAvailability API では、モデル ID を引数に対象のモデルがアカウント/リージョン内で利用可能かどうかを取得できます。
試しに anthropic.claude-sonnet-4-20250514-v1:0
を引数に実行してみました。
import json
import boto3
client = boto3.client('bedrock', region_name='us-east-1')
# 基盤モデルの利用可否を取得
get_foundation_model_availability_response = client.get_foundation_model_availability(
modelId='anthropic.claude-sonnet-4-20250514-v1:0'
)
print(json.dumps(get_foundation_model_availability_response, indent=2))
agreementAvailability
, authorizationStatus
, entitlementAvailability
, regionAvailability
の通り、契約周り含めて利用可否が取得できていますね。
{
"ResponseMetadata": {
"RequestId": "8068fe92-b98e-48f9-b376-f6b12a1e94c7",
"HTTPStatusCode": 200,
"HTTPHeaders": {
"date": "Thu, 26 Jun 2025 13:47:43 GMT",
"content-type": "application/json",
"content-length": "224",
"connection": "keep-alive",
"x-amzn-requestid": "8068fe92-b98e-48f9-b376-f6b12a1e94c7"
},
"RetryAttempts": 0
},
"modelId": "anthropic.claude-sonnet-4-20250514-v1",
"agreementAvailability": {
"status": "AVAILABLE"
},
"authorizationStatus": "AUTHORIZED",
"entitlementAvailability": "AVAILABLE",
"regionAvailability": "AVAILABLE"
}
要約すると以下になります。
- モデル: anthropic.claude-sonnet-4-20250514-v1
- 認証状態: AUTHORIZED (利用許可済み)
- 利用規約: AVAILABLE (同意済み)
- 利用権限: AVAILABLE (有効)
- リージョン: AVAILABLE (利用可能)
- HTTPステータス: 200 (成功)
オファーの取得
続いてオファーの取得です。
モデルの有効化(CreateFoundationModelAgreement)を行うには、リクエストボディに offerToken
を含める必要があります。
client.create_foundation_model_agreement(
offerToken='string',
modelId='string'
)
offerToken は、モデルをどの価格で利用するのかが定められたオファーに紐づいているため、ListFoundationModelAgreementOffers API で offerToken を取得する必要があります。
import json
import boto3
client = boto3.client('bedrock', region_name='us-east-1')
# 基盤モデルの利用可能なオファーをリスト
list_foundation_model_agreement_offers_response = client.list_foundation_model_agreement_offers(
modelId='anthropic.claude-sonnet-4-20250514-v1:0',
offerType='ALL'
)
print(json.dumps(list_foundation_model_agreement_offers_response, indent=2))
実行結果から、offers の offerToken を取得できます。(一部割愛や改変をしています。)
この offerToken を利用して、モデルの有効化(CreateFoundationModelAgreement)を行っていきます。(利用する際は必要に応じて offers の legalTerm も読んでおきましょう。)
{
"ResponseMetadata": {
"RequestId": "d9635847-4e30-4b67-b7bd-07ad8588ae3b",
"HTTPStatusCode": 200,
"HTTPHeaders": {
"date": "Thu, 26 Jun 2025 13:47:43 GMT",
"content-type": "application/json",
"content-length": "13503",
"connection": "keep-alive",
"x-amzn-requestid": "d9635847-4e30-4b67-b7bd-07ad8588ae3b"
},
"RetryAttempts": 0
},
"modelId": "anthropic.claude-sonnet-4-20250514-v1:0",
"offers": [
{
"offerId": "offer-af7b7btarao36",
"offerToken": "Offer Token が記載されている",
"termDetails": {
"usageBasedPricingTerm": {
"rateCard": [
{
"dimension": "USE1_InputTokenCount",
"price": "3",
"description": "Million Input Tokens",
"unit": "Units"
},
{
"dimension": "USE1_OutputTokenCount",
"price": "15",
"description": "Million Response Tokens",
"unit": "Units"
}
]
},
"legalTerm": {
"url": "Legal Term を取得可能な URL が記載されいてる"
},
"supportTerm": {
"refundPolicyDescription": "No refunds"
}
}
}
]
}
モデルの有効化
CreateFoundationModelAgreement でモデルの有効化を行います。ListFoundationModelAgreementOffers で取得した offertoken を利用します。
import json
import boto3
client = boto3.client('bedrock', region_name='us-east-1')
# 基盤モデルの利用可能なオファーをリスト
list_foundation_model_agreement_offers_response = client.list_foundation_model_agreement_offers(
modelId='anthropic.claude-sonnet-4-20250514-v1:0',
offerType='ALL'
)
offer_token = list_foundation_model_agreement_offers_response.get('offers', [])[0].get('offerToken', '')
model_id = list_foundation_model_agreement_offers_response.get('modelId', '')
create_foundation_model_agreement_response = client.create_foundation_model_agreement(
offerToken=offer_token,
modelId=model_id
)
print(json.dumps(create_foundation_model_agreement_response, indent=2, default=str))
実行結果
{
"ResponseMetadata": {
"RequestId": "422b729d-6a42-4ba8-9efb-9439d27748d6",
"HTTPStatusCode": 202,
"HTTPHeaders": {
"date": "Thu, 26 Jun 2025 14:59:15 GMT",
"content-type": "application/json",
"content-length": "51",
"connection": "keep-alive",
"x-amzn-requestid": "422b729d-6a42-4ba8-9efb-9439d27748d6"
},
"RetryAttempts": 0
},
"modelId": "anthropic.claude-sonnet-4-20250514-v1"
}
モデルの無効化
必要に応じてモデルの無効化もできるように、DeleteFoundationModelAgreement が増えているものの、実行結果から、現時点では利用できなさそうでした。
import json
import boto3
client = boto3.client('bedrock', region_name='us-east-1')
delete_foundation_model_agreement_response = client.delete_foundation_model_agreement(
modelId='anthropic.claude-sonnet-4-20250514-v1:0'
)
print(json.dumps(delete_foundation_model_agreement_response, indent=2, default=str))
実行結果
Traceback (most recent call last):
File "delete_agreement.py", line 6, in <module>
delete_foundation_model_agreement_response = client.delete_foundation_model_agreement(
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/.venv/lib/python3.12/site-packages/botocore/client.py", line 595, in _api_call
return self._make_api_call(operation_name, kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/.venv/lib/python3.12/site-packages/botocore/context.py", line 123, in wrapper
return func(*args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^
File "/.venv/lib/python3.12/site-packages/botocore/client.py", line 1058, in _make_api_call
raise error_class(parsed_response, operation_name)
botocore.errorfactory.ConflictException: An error occurred (ConflictException) when calling the DeleteFoundationModelAgreement operation: Agreement can not be cancelled at this time.
まとめ
以上、「Amazon Bedrock のモデル有効化が API 形式で操作できるようになりました」でした。
アカウント発行する際にまとめて有効化したいケースなど、非常に便利なのではないかと思います。
このブログがどなたかの参考になれば幸いです。クラウド事業本部コンサルティング部のたかくに(@takakuni_)でした!