I'm using an AWS_PROFILE environment variable where ~/.aws/config specifies region = "us-west-2".
Using boto3.client("bedrock-runtime") to make requests of cross-region endpoints, it properly attempts to communicate with https://bedrock-runtime.us-west-2.amazonaws.com.
By contrast, using anthropic.AnthropicBedrock() is defaulting to us-east-1, and when attempting to use a system-defined cross-region inference profile (as required for Sonnet 3.7) with credentials generated for us-west-2, https://bedrock-runtime.us-east-1.amazonaws.com is throwing a HTTP 403 (without enough supporting detail to make the cause of this failure readily apparent).
Insofar as the dependency set of anthropic-sdk-python includes both boto3 and botocore, consider using Amazon's libraries to more accurately populate the region, rather than falling back to hardcoded us-east-1 whenever AWS_REGION is unset.
Code to do this might look like:
try:
default_bedrock_region = typing.cast(str, boto3.client("bedrock").meta.region_name)
except botocore.exceptions.NoRegionError:
default_bedrock_region = 'us-east-1' # fall back to legacy behavior; maybe log?
...whereafter default_bedrock_region can be used as the fallback when no region is explicitly set, rather than the hardcoded us-east-1 literal.
I'm using an
AWS_PROFILEenvironment variable where~/.aws/configspecifiesregion = "us-west-2".Using
boto3.client("bedrock-runtime")to make requests of cross-region endpoints, it properly attempts to communicate withhttps://bedrock-runtime.us-west-2.amazonaws.com.By contrast, using
anthropic.AnthropicBedrock()is defaulting tous-east-1, and when attempting to use a system-defined cross-region inference profile (as required for Sonnet 3.7) with credentials generated for us-west-2, https://bedrock-runtime.us-east-1.amazonaws.com is throwing a HTTP 403 (without enough supporting detail to make the cause of this failure readily apparent).Insofar as the dependency set of anthropic-sdk-python includes both
boto3andbotocore, consider using Amazon's libraries to more accurately populate the region, rather than falling back to hardcodedus-east-1wheneverAWS_REGIONis unset.Code to do this might look like:
...whereafter
default_bedrock_regioncan be used as the fallback when no region is explicitly set, rather than the hardcodedus-east-1literal.