fix: correct region parameter in bedrock-agentcore-control client initialization
Issue #, if available:
Description of changes:
Problem
The application fails to start with botocore.exceptions.NoRegionError: You must specify a region when initializing the bedrock-agentcore-control client in agent_core.py.
Root Cause: Line 9 passes the string "region" instead of the region variable to the boto3 client constructor, causing the client to be created without a valid AWS region.
Solution Options
Option 1: Use the region variable
agentcore_control = boto3.client('bedrock-agentcore-control', region_name=region)
Option 2: Let boto3 auto-detect region
agentcore_control = boto3.client('bedrock-agentcore-control')
Note: This requires AWS credentials/config to be properly set up with region information.
This PR implements Option 1 as it maintains consistency with the existing code pattern and ensures the region is properly configured from environment variables with a sensible default.
- Replace hardcoded "region" string with region variable in boto3.client call
- Ensures proper AWS region configuration for AgentCore control client
** Error**
Traceback (most recent call last):
File "/home/dev/code/nova-samples/speech-to-speech/workshops/python-server/server.py", line 6, in <module>
from s2s_session_manager import S2sSessionManager
File "/home/dev/code/nova-samples/speech-to-speech/workshops/python-server/s2s_session_manager.py", line 12, in <module>
from integration import inline_agent, bedrock_knowledge_bases as kb, agent_core
File "/home/dev/code/nova-samples/speech-to-speech/workshops/python-server/integration/agent_core.py", line 8, in <module>
agentcore_control = boto3.client('bedrock-agentcore-control')
File "/home/dev/code/nova-samples/speech-to-speech/workshops/python-server/.venv/lib/python3.13/site-packages/boto3/__init__.py", line 93, in client
return _get_default_session().client(*args, **kwargs)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
File "/home/dev/code/nova-samples/speech-to-speech/workshops/python-server/.venv/lib/python3.13/site-packages/boto3/session.py", line 337, in client
return self._session.create_client(
~~~~~~~~~~~~~~~~~~~~~~~~~~~^
service_name, **create_client_kwargs
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
)
^
File "/home/dev/code/nova-samples/speech-to-speech/workshops/python-server/.venv/lib/python3.13/site-packages/botocore/context.py", line 123, in wrapper
return func(*args, **kwargs)
File "/home/dev/code/nova-samples/speech-to-speech/workshops/python-server/.venv/lib/python3.13/site-packages/botocore/session.py", line 1029, in create_client
client = client_creator.create_client(
service_name=service_name,
...<8 lines>...
auth_token=auth_token,
)
File "/home/dev/code/nova-samples/speech-to-speech/workshops/python-server/.venv/lib/python3.13/site-packages/botocore/client.py", line 157, in create_client
client_args = self._get_client_args(
service_model,
...<10 lines>...
partition_data,
)
File "/home/dev/code/nova-samples/speech-to-speech/workshops/python-server/.venv/lib/python3.13/site-packages/botocore/client.py", line 557, in _get_client_args
return args_creator.get_client_args(
~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
service_model,
^^^^^^^^^^^^^^
...<10 lines>...
partition_data,
^^^^^^^^^^^^^^^
)
^
File "/home/dev/code/nova-samples/speech-to-speech/workshops/python-server/.venv/lib/python3.13/site-packages/botocore/args.py", line 121, in get_client_args
final_args = self.compute_client_args(
service_model,
...<5 lines>...
scoped_config,
)
File "/home/dev/code/nova-samples/speech-to-speech/workshops/python-server/.venv/lib/python3.13/site-packages/botocore/args.py", line 245, in compute_client_args
endpoint_config = self._compute_endpoint_config(
service_name=service_name,
...<4 lines>...
s3_config=s3_config,
)
File "/home/dev/code/nova-samples/speech-to-speech/workshops/python-server/.venv/lib/python3.13/site-packages/botocore/args.py", line 433, in _compute_endpoint_config
return self._resolve_endpoint(**resolve_endpoint_kwargs)
~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/dev/code/nova-samples/speech-to-speech/workshops/python-server/.venv/lib/python3.13/site-packages/botocore/args.py", line 538, in _resolve_endpoint
return endpoint_bridge.resolve(
~~~~~~~~~~~~~~~~~~~~~~~^
service_name, region_name, endpoint_url, is_secure
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
)
^
File "/home/dev/code/nova-samples/speech-to-speech/workshops/python-server/.venv/lib/python3.13/site-packages/botocore/client.py", line 671, in resolve
resolved = self.endpoint_resolver.construct_endpoint(
service_name,
...<2 lines>...
use_fips_endpoint=use_fips_endpoint,
)
File "/home/dev/code/nova-samples/speech-to-speech/workshops/python-server/.venv/lib/python3.13/site-packages/botocore/regions.py", line 233, in construct_endpoint
result = self._endpoint_for_partition(
partition,
...<3 lines>...
use_fips_endpoint,
)
File "/home/dev/code/nova-samples/speech-to-speech/workshops/python-server/.venv/lib/python3.13/site-packages/botocore/regions.py", line 281, in _endpoint_for_partition
raise NoRegionError()
botocore.exceptions.NoRegionError: You must specify a region.
By submitting this pull request, I confirm that you can use, modify, copy, and redistribute this contribution, under the terms of your choice.