>我创建了一个嵌套的 IAM 堆栈,其中包含 3 个模板: - IAM政策 - IAM角色 -IAM 用户/组
主堆栈模板如下所示:
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
如何先强制创建策略,以便第二个和第三个模板可以使用策略创建角色和用户/组?还是问题在别处?
怜悯 A
你的问题,
如何首先强制创建策略,以便第二个和 第三个模板可以使用策略来创建角色和用户/组吗? 还是问题在别处?
您可以使用"依赖"属性。它会自动确定模板中的哪些资源可以并行化,哪些资源具有需要其他操作才能首先完成的依赖项。您可以使用 DependsOn 显式指定依赖关系,这将覆盖默认并行性,并指示 CloudFormation 按指定顺序对这些资源进行操作。
在您的情况下,第二个和第三个模板依赖于策略
更多详情 : 依赖
无法访问输出的原因是,您没有公开其他堆栈的输出。
使用要导出的数据更新输出。参考 - 相同的输出。
然后,使用依赖堆栈中的函数 Fn::ImportValue 来使用所需的数据。参考 - 相同的导入值。
希望这有帮助。