I'm initializing an s3 client with credentials coming from a profile in the shared ini file. I'd like to setup the default region using the same.
~\.aws\credentials
[myprofile]
aws_access_key_id = ...
aws_secret_access_key = ...
~\.aws\config
[profile myprofile]
region = eu-west-1
My code
import {S3} from '@aws-sdk/client-s3';
import {fromIni} from '@aws-sdk/credential-providers';
const s3Client = new S3({
credentials: fromIni({
profile: 'myprofile',
}),
});
await s3Client.listBuckets({});
The error I'm getting is Error: Region is missing and the output of calling fromIni is
{
accessKeyId: '...',
secretAccessKey: '...',
sessionToken: undefined
}
Why region isn't loaded from the shared config file?
UPDATE
fromIni docs notes that
Profiles that appear in both files will not be merged, and the version that appears in the credentials file will be given precedence over the profile found in the config file.
Apart from the obvious break from the usual configuration standards, moving region from config to credentials generates the same error.
~\.aws\credentials
[myprofile]
aws_access_key_id = ...
aws_secret_access_key = ...
region = eu-west-1
The loadSharedConfigFiles helper can read a profile's default region from the local config files, which you can then pass to the client constructor:
import { fromIni } from '@aws-sdk/credential-providers';
import { loadSharedConfigFiles } from '@aws-sdk/shared-ini-file-loader';
const profile = 'myprofile';
const s3Client = new S3Client({
credentials: fromIni({ profile }),
region: (await loadSharedConfigFiles()).configFile?.[profile]?.region,
});
The configFile property loads ~/aws/config and credentialsFile loads ~/.aws/credentials.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With