AWS 开发工具包 v3 无法从配置文件获取区域



我正在用来自共享ini文件中的配置文件的凭据初始化s3客户机。我想设置默认区域使用相同的。

~.awscredentials

[myprofile]
aws_access_key_id = ...
aws_secret_access_key = ...

~.awsconfig

[profile myprofile]
region = eu-west-1

我的代码
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({});

我得到的错误是Error: Region is missing,调用fromIni的输出是

{
accessKeyId: '...',
secretAccessKey: '...',
sessionToken: undefined
}

为什么区域不从共享配置文件中加载?


更新

fromInidocs注意到

出现在两个文件中的配置文件将不会被合并,并且出现在凭据文件中的版本将优先于配置文件中的配置文件。

除了明显违反通常的配置标准外,将regionconfig移动到credentials也会产生相同的错误。

~.awscredentials

[myprofile]
aws_access_key_id = ...
aws_secret_access_key = ...
region = eu-west-1

loadSharedConfigFiles助手可以从本地配置文件中读取配置文件的默认区域,然后您可以将其传递给客户端构造函数:

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,
});

configFile属性加载~/aws/config,credentialsFile加载~/.aws/credentials

S3构造函数在配置对象的级别上使用区域属性作为credentials,因此您应该使用如下内容:

const s3Client = new S3({
credentials: fromIni({
profile: 'myprofile',
}),
region: 'eu-west-1'
});

fromIni文档没有提到区域,我猜它不是用来做这个的

关于加载配置文件,我认为你正在寻找环境变量AWS_SHARED_CREDENTIALS_FILE,见这里(虽然没有测试它)。但是,正如@CherryDT所评论的那样,您可能希望显式声明它,它可能会根据情况而更改。

最新更新