两个配置文件共享相同的配置

时间:2019-06-24 11:09:34

标签: amazon-web-services aws-sdk aws-cli

我在~/.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配置文件。


有没有办法做到这一点?

3 个答案:

答案 0 :(得分:0)

这无关紧要,因此无法在同一配置文件中实现。没有理由要使用“完全相同”的配置创建两个配置文件。您宁愿使用相同的配置文件。如果您遇到环境问题,并且想要创建其他配置文件,请复制配置。显然,即使在这种情况下,至少角色也会有所不同。

答案 1 :(得分:0)

我认为不可能实现这一目标。

让我解释一下为什么我认为这是不可能的:

  • 所有正式的AWS开发工具包都必须支持您建议的语法,因为它们都解析了其他凭证提供程序中的aws凭证文件。有关现有凭据提供程序的概述,请参见[1]。解析~/.aws/config文件的凭据提供程序称为 ini提供程序

  • 让我们看一下node.js的 ini提供程序实现(因为它是我过去通常使用的实现):

    • 它将解析为名为 SharedIniFileCredentials 的数据结构中的信息。 [2]
    • 它使用 parseFile 方法执行此操作。 [3]
    • 将解析委托给实用程序“类” AWS.util.ini ,该实用程序类似于以下[4]:
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中对此也非常含糊  每个命名的配置文件使用不同的凭据。

您目前最好的选择似乎是通过程序进行处理。

相关问题