Cloudformation参数作为逻辑Id

时间:2015-12-29 01:05:32

标签: amazon-web-services amazon-cloudformation

我正在尝试使用cloudFormation创建IAM角色。我想在角色名称中包含一个参数。我的cloudformation脚本具有以下内容:

"Resources" : { 
    "TestRole" : {
        "Type" : "AWS::IAM::Role",
        "Properties" : {
            "AssumeRolePolicyDocument": {
                "Version" : "2012-10-17",
                "Statement": [ {
                    "Effect": "Allow",
                    "Principal": {
                        "Service": [ "ec2.amazonaws.com" ]
                    },
                    "Action": [ "sts:AssumeRole" ]
                }]
            }
        }
    }
}

我的cloudformation堆栈被命名为role-test。这将创建名为role-test-TestRole- RandomString 的IAM角色。有没有办法让rolename完全符合我在参数中指定的内容?

2 个答案:

答案 0 :(得分:0)

由于每个资源都需要具有唯一ID并且此ID由AWS :: CF生成,因此它看起来并不实际有效。

http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-iam-role.html

根据我在过去与AWS人员交谈时的理解,这样做是因为每个资源都需要一个唯一可识别的ID。

在调用以下内容时使用此ID:

{“Fn :: GetAtt”:[“TestRole”,“Arn”]}

希望有所帮助。

答案 1 :(得分:0)

已经可以在CF中为IAM角色指定自定义名称:https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-iam-role.html#cfn-iam-role-rolename

  

IAM角色的名称。有关有效值,请参阅 IAM API参考CreateRole操作的RoleName参数。如果您未指定名称,AWS CloudFormation将生成唯一的物理ID,并将该ID用于组名。

     

重要

     

如果指定名称,则无法执行需要替换此资源的更新。您仍然可以执行不需要或有任何中断的更新。如果必须替换资源,请指定新名称。

     

如果您指定了名称,则必须指定CAPABILITY_NAMED_IAM值才能确认模板的功能。有关详细信息,请参阅Acknowledging IAM Resources in AWS CloudFormation Templates

     

警告

     

如果在多个区域中重复使用相同的模板,则命名IAM资源可能会导致无法恢复的错误。为防止出现这种情况,建议您使用Fn::JoinAWS::Region创建特定于地区的名称,如下例所示:{"Fn::Join": ["", [{"Ref": "AWS::Region"}, {"Ref": "MyResourceName"}]]}

但是,它需要额外的功能,如文档中所述。