我在~/.aws/config
中具有以下个人资料:
[profile foo]
role_arn = arn:aws:iam::##########:role/SomeRole
source_profile = other_profile
region = us-west-2
出于不相关的原因,我想创建一个新的配置文件-名称不同-但与foo
共享相同的配置。
由于我不喜欢复制内容,所以我想知道两个配置文件是否可以使用相同的配置?
我尝试了以下方法:
[profile bar]
[profile foo]
role_arn = arn:aws:iam::##########:role/SomeRole
source_profile = other_profile
region = us-west-2
它没有用。 CLI认为bar
是一个空配置文件。
我也尝试过:
[profile foo bar]
role_arn = arn:aws:iam::##########:role/SomeRole
source_profile = other_profile
region = us-west-2
也没有用。 CLI无法找到bar
配置文件。
有没有办法做到这一点?
答案 0 :(得分:0)
这无关紧要,因此无法在同一配置文件中实现。没有理由要使用“完全相同”的配置创建两个配置文件。您宁愿使用相同的配置文件。如果您遇到环境问题,并且想要创建其他配置文件,请复制配置。显然,即使在这种情况下,至少角色也会有所不同。
答案 1 :(得分:0)
我认为不可能实现这一目标。
让我解释一下为什么我认为这是不可能的:
所有正式的AWS开发工具包都必须支持您建议的语法,因为它们都解析了其他凭证提供程序中的aws凭证文件。有关现有凭据提供程序的概述,请参见[1]。解析~/.aws/config
文件的凭据提供程序称为 ini提供程序。
让我们看一下node.js的 ini提供程序实现(因为它是我过去通常使用的实现):
parse: function string(ini) {
var currentSection, map = {};
util.arrayEach(ini.split(/\r?\n/), function(line) {
line = line.split(/(^|\s)[;#]/)[0]; // remove comments
var section = line.match(/^\s*\[([^\[\]]+)\]\s*$/);
if (section) {
currentSection = section[1];
} else if (currentSection) {
var item = line.match(/^\s*(.+?)\s*=\s*(.+?)\s*$/);
if (item) {
map[currentSection] = map[currentSection] || {};
map[currentSection][item[1]] = item[2];
}
}
});
return map;
}
如您所见,解析器逐行扫描文件的内容,并在一行中出现/^\s*\[([^\[\]]+)\]\s*$/
序列后开始新的部分。
没有其他逻辑可将多条线映射到两个(或更多)不同的部分。如果要使多个部分具有相同的内容,则必须为每个配置文件名称重复配置。
我希望我的分析令人信服,通过语法手段,此功能实际上是不可能的。如果您问我,也无法将其作为功能请求提出,因为AWS必须调整所有现有的SDK,这将需要大量的精力。
[1] https://docs.aws.amazon.com/sdk-for-php/v3/developer-guide/guide_credentials_provider.html
[2] https://github.com/aws/aws-sdk-js/blob/d78f62f9d86066e67d3cb7302fe2656210732f07/lib/credentials/shared_ini_file_credentials.js
[3] https://github.com/aws/aws-sdk-js/blob/cb1604ca89a077ffdb86127884292d3b18c8b4df/lib/shared-ini/ini-loader.js#L5
[4] https://github.com/aws/aws-sdk-js/blob/cb1604ca89a077ffdb86127884292d3b18c8b4df/lib/util.js#L192
答案 2 :(得分:-1)
我检查了多个排列,似乎AWS CLI无法处理该用例。 AWS documentation中对此也非常含糊 每个命名的配置文件使用不同的凭据。
您目前最好的选择似乎是通过程序进行处理。