我们已经使用AWS Orgnaizations将开发/测试/生产等工作负载划分到不同的账户中。 https://aws.amazon.com/organizations/
S3要求存储桶名称必须在全局范围内唯一。因此,我们无法在每个帐户中都拥有一个S3存储桶,例如“ OurS3Data”。我们可以在帐户之间共享一个存储桶,但是我们不想在帐户之间混合数据。
有什么策略可以克服这个问题?
我考虑过使用Route53 / DNS指向不同的存储桶,因此“ OurS3Data.CompanyInternal.Com”始终指向账户中特定于账户的存储桶-但我们使用多个版本的AWS开发工具包从代码中引用了该存储桶,并且我很确定这是不受支持的。
我们还考虑过将参数存储在AWS Systems Manager的参数存储中,但这似乎有点https://docs.aws.amazon.com/systems-manager/latest/userguide/systems-manager-paramstore.html
答案 0 :(得分:1)
通常,您应该从配置中读取 all 个外部标识符(存储桶名称,数据库名称等)。如果您对标识符进行硬编码,则意味着您必须重建软件才能进行任何更改。
有许多不同的方法来存储此配置。参数存储是一个很好的选择,因为它与帐户绑定,还支持加密的机密存储。
其他一些方法包括部署机器上已知位置的外部配置文件,环境变量(这是12 factor app的首选方法)或不同的配置服务,例如Consul。 / p>
更新
我个人认为这是一个hack,但是如果您真的没有其他方法可以管理配置...
以您的帐户ID命名您的存储桶,并使用AWSSecurityTokenService.getCallerIdentity()
检索该ID。如果您不想使用实际ID作为存储桶名称,则可以应用哈希函数(但请注意,存储桶名称限制为63个字符)。