由于未定义的资源策略,IAM嵌套堆栈无法完成

时间:2018-09-09 20:57:03

标签: amazon-cloudformation

我创建了一个嵌套的IAM堆栈,该堆栈由3个模板组成: -IAM政策 -iam-roles -iam用户/组

masterstack模板如下:

Resources:

Policies:
    Type: AWS::CloudFormation::Stack
    Properties:
        TemplateURL: https://s3.amazonaws.com/xxx/iam/iam_policies.yaml

UserGroups:
    Type: AWS::CloudFormation::Stack
    Properties:
        TemplateURL: https://s3.amazonaws.com/xxx/iam/iam_user_groups.yaml


Roles:
    Type: AWS::CloudFormation::Stack
    Properties:
        TemplateURL: https://s3.amazonaws.com/xxx/iam/iam_roles.yaml

策略ARN通过“输出”部分导出,例如:

Outputs:
  StackName:
   Description: Name of the Stack
   Value: !Ref AWS::StackName

  CodeBuildServiceRolePolicy:
    Description: ARN of the managed policy
    Value: !Ref CodeBuildServiceRolePolicy

在角色模板中,策略ARN的导入方式类似

CodeBuildRole:
Type: AWS::IAM::Role
Properties:
  RoleName: !Sub ${EnvironmentName}-CodeBuildRole
  AssumeRolePolicyDocument:
    Version: '2012-10-17'
    Statement:
      - Action: 
        - 'sts:AssumeRole'
        Effect: Allow
        Principal:
          Service: 
          - codebuild.amazonaws.com
  Path: / 
  ManagedPolicyArns:
  - !GetAtt 
    - Policies
    - Outputs.CodeBuildServiceRolePolicy

但是当我尝试创建堆栈时,它无法说明无法创建角色堆栈,因为

Template error: instance of Fn::GetAtt references undefined resource Policies

如何首先强制创建策略,以便第二个模板和第三个模板可以使用策略创建角色和用户/组?还是其他地方?

merci A

2 个答案:

答案 0 :(得分:2)

您的问题

  

我该如何先强制创建策略,然后再强制   第三个模板可以使用策略来创建角色和用户/组吗?   还是其他地方?

您可以使用“ DependsOn”属性。它会自动确定模板中的哪些资源可以并行化,哪些资源具有依赖关系,需要先完成其他操作。您可以使用DependsOn显式指定依赖关系,该依赖关系将覆盖默认的并行性,并指示CloudFormation以指定的顺序对这些资源进行操作。

您的第二个和第三个模板DependsOn策略

更多详细信息:DependsOn

答案 1 :(得分:-1)

之所以无法访问输出,是因为您没有公开其他堆栈的输出。

使用要导出的数据更新输出。引用-相同。

然后,在从属堆栈中使用函数Fn :: ImportValue消耗所需的数据。引用-Outputs相同。

希望这会有所帮助。