Aws-sam-cli: sam deploy --guided disregards region input

Created on 2 Dec 2020  路  6Comments  路  Source: aws/aws-sam-cli

Description:

after execution of sam deploy --guided it asked me about the region to deploy lambda function to. I entered "us-east-2". A few steps later it printed out a huge python stack trace with message "You must specify region".

It affects customer experience as the tool disregards information entered by a user - which does not look holistic.

Steps to reproduce:

  • Run aws configure. Enter credentials. Do not put region information.
  • Create a sample python lambda function from "Hello word" template using sam init
  • Try to deploy it with sam deploy --guided. It will ask for a region. Enter "us-east-2"
  • Follow further on-screen instructions

Observed result:

% sam deploy --guided

Configuring SAM deploy
======================

    Looking for config file [samconfig.toml] :  Not found

    Setting default arguments for 'sam deploy'
    =========================================
    Stack Name [sam-app]: 
    AWS Region [us-east-1]: us-east-2
    #Shows you resources changes to be deployed and require a 'Y' to initiate deploy
    Confirm changes before deploy [y/N]: y
    #SAM needs permission to be able to create roles to connect to the resources in your template
    Allow SAM CLI IAM role creation [Y/n]: y
    HelloWorldFunction may not have authorization defined, Is this okay? [y/N]: y
    Save arguments to configuration file [Y/n]: y
    SAM configuration file [samconfig.toml]: 
    SAM configuration environment [default]: 

    Looking for resources needed for deployment: Not found.
    Creating the required resources...
    Successfully created!

        Managed S3 bucket: aws-sam-cli-managed-default-samclisourcebucket-1lljvk7s3ie0m
        A different default S3 bucket can be set in samconfig.toml

    Saved arguments to config file
    Running 'sam deploy' for future deployments will use the parameters saved above.
    The above parameters can be changed by modifying samconfig.toml
    Learn more about samconfig.toml syntax at 
    https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/serverless-sam-cli-config.html
Traceback (most recent call last):
  File "/usr/local/bin/sam", line 33, in <module>
    sys.exit(load_entry_point('aws-sam-cli==1.12.0', 'console_scripts', 'sam')())
  File "/usr/local/Cellar/aws-sam-cli/1.12.0/libexec/lib/python3.8/site-packages/click/core.py", line 829, in __call__
    return self.main(*args, **kwargs)
  File "/usr/local/Cellar/aws-sam-cli/1.12.0/libexec/lib/python3.8/site-packages/click/core.py", line 782, in main
    rv = self.invoke(ctx)
  File "/usr/local/Cellar/aws-sam-cli/1.12.0/libexec/lib/python3.8/site-packages/click/core.py", line 1259, in invoke
    return _process_result(sub_ctx.command.invoke(sub_ctx))
  File "/usr/local/Cellar/aws-sam-cli/1.12.0/libexec/lib/python3.8/site-packages/click/core.py", line 1066, in invoke
    return ctx.invoke(self.callback, **ctx.params)
  File "/usr/local/Cellar/aws-sam-cli/1.12.0/libexec/lib/python3.8/site-packages/click/core.py", line 610, in invoke
    return callback(*args, **kwargs)
  File "/usr/local/Cellar/aws-sam-cli/1.12.0/libexec/lib/python3.8/site-packages/click/decorators.py", line 73, in new_func
    return ctx.invoke(f, obj, *args, **kwargs)
  File "/usr/local/Cellar/aws-sam-cli/1.12.0/libexec/lib/python3.8/site-packages/click/core.py", line 610, in invoke
    return callback(*args, **kwargs)
  File "/usr/local/Cellar/aws-sam-cli/1.12.0/libexec/lib/python3.8/site-packages/samcli/lib/telemetry/metrics.py", line 148, in wrapped
    raise exception  # pylint: disable=raising-bad-type
  File "/usr/local/Cellar/aws-sam-cli/1.12.0/libexec/lib/python3.8/site-packages/samcli/lib/telemetry/metrics.py", line 114, in wrapped
    return_value = func(*args, **kwargs)
  File "/usr/local/Cellar/aws-sam-cli/1.12.0/libexec/lib/python3.8/site-packages/samcli/commands/deploy/command.py", line 178, in cli
    do_cli(
  File "/usr/local/Cellar/aws-sam-cli/1.12.0/libexec/lib/python3.8/site-packages/samcli/commands/deploy/command.py", line 280, in do_cli
    package_context.run()
  File "/usr/local/Cellar/aws-sam-cli/1.12.0/libexec/lib/python3.8/site-packages/samcli/commands/package/package_context.py", line 102, in run
    code_signer_client = boto3.client("signer")
  File "/usr/local/Cellar/aws-sam-cli/1.12.0/libexec/lib/python3.8/site-packages/boto3/__init__.py", line 91, in client
    return _get_default_session().client(*args, **kwargs)
  File "/usr/local/Cellar/aws-sam-cli/1.12.0/libexec/lib/python3.8/site-packages/boto3/session.py", line 258, in client
    return self._session.create_client(
  File "/usr/local/Cellar/aws-sam-cli/1.12.0/libexec/lib/python3.8/site-packages/botocore/session.py", line 834, in create_client
    client = client_creator.create_client(
  File "/usr/local/Cellar/aws-sam-cli/1.12.0/libexec/lib/python3.8/site-packages/botocore/client.py", line 83, in create_client
    client_args = self._get_client_args(
  File "/usr/local/Cellar/aws-sam-cli/1.12.0/libexec/lib/python3.8/site-packages/botocore/client.py", line 306, in _get_client_args
    return args_creator.get_client_args(
  File "/usr/local/Cellar/aws-sam-cli/1.12.0/libexec/lib/python3.8/site-packages/botocore/args.py", line 71, in get_client_args
    final_args = self.compute_client_args(
  File "/usr/local/Cellar/aws-sam-cli/1.12.0/libexec/lib/python3.8/site-packages/botocore/args.py", line 147, in compute_client_args
    endpoint_config = self._compute_endpoint_config(
  File "/usr/local/Cellar/aws-sam-cli/1.12.0/libexec/lib/python3.8/site-packages/botocore/args.py", line 218, in _compute_endpoint_config
    return self._resolve_endpoint(**resolve_endpoint_kwargs)
  File "/usr/local/Cellar/aws-sam-cli/1.12.0/libexec/lib/python3.8/site-packages/botocore/args.py", line 300, in _resolve_endpoint
    return endpoint_bridge.resolve(
  File "/usr/local/Cellar/aws-sam-cli/1.12.0/libexec/lib/python3.8/site-packages/botocore/client.py", line 381, in resolve
    resolved = self.endpoint_resolver.construct_endpoint(
  File "/usr/local/Cellar/aws-sam-cli/1.12.0/libexec/lib/python3.8/site-packages/botocore/regions.py", line 133, in construct_endpoint
    result = self._endpoint_for_partition(
  File "/usr/local/Cellar/aws-sam-cli/1.12.0/libexec/lib/python3.8/site-packages/botocore/regions.py", line 148, in _endpoint_for_partition
    raise NoRegionError()
botocore.exceptions.NoRegionError: You must specify a region.

Deployment fails

Expected result:

Application deployed successfully

Additional environment details (Ex: Windows, Mac, Amazon Linux etc)

  1. OS: macOS
  2. sam --version: SAM CLI, version 1.12.0

Add --debug flag to command you are running

% sam deploy --guided --debug
2020-12-02 11:48:34,813 | Telemetry endpoint configured to be https://aws-serverless-tools-telemetry.us-west-2.amazonaws.com/metrics

Configuring SAM deploy
======================

    Looking for config file [samconfig.toml] :  Not found

    Setting default arguments for 'sam deploy'
    =========================================
    Stack Name [sam-app]: sam-app-2
    AWS Region [us-east-1]: us-east-2
    #Shows you resources changes to be deployed and require a 'Y' to initiate deploy
    Confirm changes before deploy [y/N]: y
    #SAM needs permission to be able to create roles to connect to the resources in your template
    Allow SAM CLI IAM role creation [Y/n]: y
2020-12-02 11:48:57,575 | No Parameters detected in the template
2020-12-02 11:48:57,602 | 2 resources found in the template
2020-12-02 11:48:57,602 | Found Serverless function with name='HelloWorldFunction' and CodeUri='hello_world/'
2020-12-02 11:48:57,602 | Detected Inline Swagger definition
2020-12-02 11:48:57,602 | Auth checks done on swagger are not exhaustive!
    HelloWorldFunction may not have authorization defined, Is this okay? [y/N]: y
2020-12-02 11:49:04,147 | No Parameters detected in the template
2020-12-02 11:49:04,171 | 2 resources found in the template
2020-12-02 11:49:04,171 | Found Serverless function with name='HelloWorldFunction' and CodeUri='hello_world/'
2020-12-02 11:49:04,171 | No function or layer definition found with code sign config, skipping
    Save arguments to configuration file [Y/n]: y
    SAM configuration file [samconfig.toml]:  
    SAM configuration environment [default]: 

    Looking for resources needed for deployment: Found!

        Managed S3 bucket: aws-sam-cli-managed-default-samclisourcebucket-1lljvk7s3ie0m
        A different default S3 bucket can be set in samconfig.toml

    Saved arguments to config file
    Running 'sam deploy' for future deployments will use the parameters saved above.
    The above parameters can be changed by modifying samconfig.toml
    Learn more about samconfig.toml syntax at 
    https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/serverless-sam-cli-config.html
2020-12-02 11:49:19,046 | Sending Telemetry: {'metrics': [{'commandRun': {'awsProfileProvided': False, 'debugFlagProvided': True, 'region': '', 'commandName': 'sam deploy', 'duration': 44232, 'exitReason': 'NoRegionError', 'exitCode': 255, 'requestId': '0a3089b2-9e7f-44f2-85f0-f7046662b230', 'installationId': '1ee15a53-c3bf-4c2c-a7b8-38d00e17c1e5', 'sessionId': '38bcc37a-3c75-4c70-8adf-1425c48a3d00', 'executionEnvironment': 'CLI', 'pyversion': '3.8.6', 'samcliVersion': '1.12.0'}}]}
2020-12-02 11:49:19,583 | HTTPSConnectionPool(host='aws-serverless-tools-telemetry.us-west-2.amazonaws.com', port=443): Read timed out. (read timeout=0.1)
Traceback (most recent call last):
  File "/usr/local/bin/sam", line 33, in <module>
    sys.exit(load_entry_point('aws-sam-cli==1.12.0', 'console_scripts', 'sam')())
  File "/usr/local/Cellar/aws-sam-cli/1.12.0/libexec/lib/python3.8/site-packages/click/core.py", line 829, in __call__
    return self.main(*args, **kwargs)
  File "/usr/local/Cellar/aws-sam-cli/1.12.0/libexec/lib/python3.8/site-packages/click/core.py", line 782, in main
    rv = self.invoke(ctx)
  File "/usr/local/Cellar/aws-sam-cli/1.12.0/libexec/lib/python3.8/site-packages/click/core.py", line 1259, in invoke
    return _process_result(sub_ctx.command.invoke(sub_ctx))
  File "/usr/local/Cellar/aws-sam-cli/1.12.0/libexec/lib/python3.8/site-packages/click/core.py", line 1066, in invoke
    return ctx.invoke(self.callback, **ctx.params)
  File "/usr/local/Cellar/aws-sam-cli/1.12.0/libexec/lib/python3.8/site-packages/click/core.py", line 610, in invoke
    return callback(*args, **kwargs)
  File "/usr/local/Cellar/aws-sam-cli/1.12.0/libexec/lib/python3.8/site-packages/click/decorators.py", line 73, in new_func
    return ctx.invoke(f, obj, *args, **kwargs)
  File "/usr/local/Cellar/aws-sam-cli/1.12.0/libexec/lib/python3.8/site-packages/click/core.py", line 610, in invoke
    return callback(*args, **kwargs)
  File "/usr/local/Cellar/aws-sam-cli/1.12.0/libexec/lib/python3.8/site-packages/samcli/lib/telemetry/metrics.py", line 148, in wrapped
    raise exception  # pylint: disable=raising-bad-type
  File "/usr/local/Cellar/aws-sam-cli/1.12.0/libexec/lib/python3.8/site-packages/samcli/lib/telemetry/metrics.py", line 114, in wrapped
    return_value = func(*args, **kwargs)
  File "/usr/local/Cellar/aws-sam-cli/1.12.0/libexec/lib/python3.8/site-packages/samcli/commands/deploy/command.py", line 178, in cli
    do_cli(
  File "/usr/local/Cellar/aws-sam-cli/1.12.0/libexec/lib/python3.8/site-packages/samcli/commands/deploy/command.py", line 280, in do_cli
    package_context.run()
  File "/usr/local/Cellar/aws-sam-cli/1.12.0/libexec/lib/python3.8/site-packages/samcli/commands/package/package_context.py", line 102, in run
    code_signer_client = boto3.client("signer")
  File "/usr/local/Cellar/aws-sam-cli/1.12.0/libexec/lib/python3.8/site-packages/boto3/__init__.py", line 91, in client
    return _get_default_session().client(*args, **kwargs)
  File "/usr/local/Cellar/aws-sam-cli/1.12.0/libexec/lib/python3.8/site-packages/boto3/session.py", line 258, in client
    return self._session.create_client(
  File "/usr/local/Cellar/aws-sam-cli/1.12.0/libexec/lib/python3.8/site-packages/botocore/session.py", line 834, in create_client
    client = client_creator.create_client(
  File "/usr/local/Cellar/aws-sam-cli/1.12.0/libexec/lib/python3.8/site-packages/botocore/client.py", line 83, in create_client
    client_args = self._get_client_args(
  File "/usr/local/Cellar/aws-sam-cli/1.12.0/libexec/lib/python3.8/site-packages/botocore/client.py", line 306, in _get_client_args
    return args_creator.get_client_args(
  File "/usr/local/Cellar/aws-sam-cli/1.12.0/libexec/lib/python3.8/site-packages/botocore/args.py", line 71, in get_client_args
    final_args = self.compute_client_args(
  File "/usr/local/Cellar/aws-sam-cli/1.12.0/libexec/lib/python3.8/site-packages/botocore/args.py", line 147, in compute_client_args
    endpoint_config = self._compute_endpoint_config(
  File "/usr/local/Cellar/aws-sam-cli/1.12.0/libexec/lib/python3.8/site-packages/botocore/args.py", line 218, in _compute_endpoint_config
    return self._resolve_endpoint(**resolve_endpoint_kwargs)
  File "/usr/local/Cellar/aws-sam-cli/1.12.0/libexec/lib/python3.8/site-packages/botocore/args.py", line 300, in _resolve_endpoint
    return endpoint_bridge.resolve(
  File "/usr/local/Cellar/aws-sam-cli/1.12.0/libexec/lib/python3.8/site-packages/botocore/client.py", line 381, in resolve
    resolved = self.endpoint_resolver.construct_endpoint(
  File "/usr/local/Cellar/aws-sam-cli/1.12.0/libexec/lib/python3.8/site-packages/botocore/regions.py", line 133, in construct_endpoint
    result = self._endpoint_for_partition(
  File "/usr/local/Cellar/aws-sam-cli/1.12.0/libexec/lib/python3.8/site-packages/botocore/regions.py", line 148, in _endpoint_for_partition
    raise NoRegionError()
botocore.exceptions.NoRegionError: You must specify a region.
stagwaiting-for-release

Most helpful comment

We have found the root cause for this issue and are working on fixing it. Meanwhile, try setting the environment variable AWS_DEFAULT_REGION and see if that fixes it.

All 6 comments

I was unable to reproduce this. When you do aws configure, does it not default to some region even if left blank?

I have just tried and it is reproduced easily. Try removing your ~/.aws folder beforehand
aws configure has not any default value for a region

% aws configure
AWS Access Key ID [None]: key_id
AWS Secret Access Key [None]: secret_key_id
Default region name [None]: 
Default output format [None]: 

So I deleted the ~/.aws dir, and followed the steps but it deployed successfully. I tried this in 1.12.0 and 1.13.1 both. Also default region name was none in aws configure.

let me know if you want me to collect any logs to facilitate investigation

We have found the root cause for this issue and are working on fixing it. Meanwhile, try setting the environment variable AWS_DEFAULT_REGION and see if that fixes it.

This has been released with v1.14

Was this page helpful?
0 / 5 - 0 ratings