Describe the bug
When trying to deploy a serverless application to a non-default region (i.e. ap-southeast-4) using a profile that uses a session token from sts, the cli is unable to upload the packaged lambda code to the S3 bucket.
Expected Behavior
The lambda code in the zip file should upload and the serverless template should be deployed.
This works perfectly fine if the region is a default region like ap-southeast-2.
Current Behavior
The output of dotnet lambda deploy-serveress first hints an an issue by saying
Warning: Unable to determine region for bucket sbaldwin-dev-mel, assuming bucket is in correct region: The provided token is malformed or otherwise invalid.
and then after compiling and zipping the code, when it attempts to upload the zip file, it errors out with
Uploading to S3. (Bucket: Key: )
Error uploading to in bucket : The provided token is malformed or otherwise invalid.
And exits the deployment.
Reproduction Steps
- Ensure you have set up an Assume Role profile as described in https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-role.html
- Ensure you have a bucket in the region for the deployment code
- Create a new serverless project using dotnet new
serverless.AspNetCoreWebAPI --name mel-test --output .\mel-test --region ap-southeast-4 (or equivalent non-default region)
- Attmept to deploy this from the source folder using `dotnet lambda deploy-serverless --profile --region ap-southeast-4 --s3-bucket
Possible Solution
Looking through the source code for the aws extensions for dotnet, I couldn't see anything obvious. I did see that you use the C# sdk, so the issue may be with it's handling of profiles, but because I found the issue in this lbrary, I decided to raise the bug here.
I did check the results of aws s3api get-bucket-location --bucket <mel-bucket> --profile <assumerole-profile> and recieved the expected results:
{
"LocationConstraint": "ap-southeast-4"
}
Which says to me that the profile and the bucket are set up fine, and given this is the same call that GetBucketRegionAsycn makes, I can only assume that it's some difference between the way the cli handles the profile vs how the C# sdk handles the profile.
Additional Information/Context
I am using MFA for my roles, and I'm using this powershell module AWSCredentialsManager to assist with the AssumeRole and MFA details.
There was an issue with this library using non-default regions initially, but this issue was addressed in version 0.1.6 which is the version of the library I am currently using.
Targeted .NET platform
7.0.201
CLI extension version
Package Id Version Commands
---------------------------------------------------------------------------------------
amazon.lambda.testtool-3.1 0.12.7 dotnet-lambda-test-tool-3.1
amazon.lambda.tools 5.6.3 dotnet-lambda
aws.codeartifact.nuget.credentialprovider 1.0.1 dotnet-codeartifact-creds
microsoft.dotnet-httprepl 6.0.0 httprepl
Environment details (OS name and version, etc.)
Windows 10
Describe the bug
When trying to deploy a serverless application to a non-default region (i.e.
ap-southeast-4) using a profile that uses a session token fromsts, the cli is unable to upload the packaged lambda code to the S3 bucket.Expected Behavior
The lambda code in the zip file should upload and the serverless template should be deployed.
This works perfectly fine if the region is a default region like
ap-southeast-2.Current Behavior
The output of
dotnet lambda deploy-serveressfirst hints an an issue by sayingand then after compiling and zipping the code, when it attempts to upload the zip file, it errors out with
And exits the deployment.
Reproduction Steps
serverless.AspNetCoreWebAPI --name mel-test --output .\mel-test --region ap-southeast-4(or equivalent non-default region)Possible Solution
Looking through the source code for the aws extensions for dotnet, I couldn't see anything obvious. I did see that you use the C# sdk, so the issue may be with it's handling of profiles, but because I found the issue in this lbrary, I decided to raise the bug here.
I did check the results of
aws s3api get-bucket-location --bucket <mel-bucket> --profile <assumerole-profile>and recieved the expected results:{ "LocationConstraint": "ap-southeast-4" }Which says to me that the profile and the bucket are set up fine, and given this is the same call that GetBucketRegionAsycn makes, I can only assume that it's some difference between the way the cli handles the profile vs how the C# sdk handles the profile.
Additional Information/Context
I am using MFA for my roles, and I'm using this powershell module AWSCredentialsManager to assist with the AssumeRole and MFA details.
There was an issue with this library using non-default regions initially, but this issue was addressed in version 0.1.6 which is the version of the library I am currently using.
Targeted .NET platform
7.0.201
CLI extension version
Environment details (OS name and version, etc.)
Windows 10