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

Amazon cloudformation 由于未定义的资源策略,IAM嵌套堆栈无法完成,amazon-cloudformation,Amazon Cloudformation,我创建了一个嵌套的IAM堆栈,它包含3个模板: -iam政策 -iam角色 -iam用户/组 masterstack模板如下所示: Resources: Policies: Type: AWS::CloudFormation::Stack Properties: TemplateURL: https://s3.amazonaws.com/xxx/iam/iam_policies.yaml UserGroups: Type: AWS::CloudForm

我创建了一个嵌套的IAM堆栈,它包含3个模板: -iam政策 -iam角色 -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

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

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

然后,在依赖堆栈中使用函数Fn::ImportValue来使用所需的数据。参考-相同的

希望这有帮助

你的问题

我怎样才能强制创建第一个、第二个和第三个策略 第三个模板可以使用策略创建角色和用户/组吗? 还是问题在别处

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

在您的情况下,第二个和第三个模板依赖于策略


更多细节:

merci,但我认为没有必要使用导出/导入值,因为它是一个嵌套堆栈。当然,如果我使用导出/导入交叉引用这些值,它就会起作用。但我希望它们在一个嵌套的堆栈中。