获取cloudformation错误:模板的Resources块中未解决的资源依赖性[XXXX]

时间:2018-02-15 20:46:32

标签: amazon-web-services nested stack amazon-cloudformation

我已将原始的云形式堆栈模板转换为多个子模板,然后我从主模板调用。其中一个子模板拥有以下代码段,我收到了错误消息:

An error occurred (ValidationError) when calling the ValidateTemplate operation: Template format error: Unresolved resource dependencies [GeneralPurposeContainerRole] in the Resources block of the template

BatchResourcesStack (子堆栈):

---
AWSTemplateFormatVersion: '2010-09-09'
Description: batch resources stack.
Parameters:
  GPCEName:
    Type: String
  GPCEMaxVcpus:
    Type: Number
    Description: Max number of VCPUs for entire cluster, there are caveats to this
  GPCEMinVcpus:
    Type: Number
    Description: Min number of VCPUs for entire cluster, there are caveats to this
  GPCEDesiredVcpus:
    Type: Number
    Description: Desired number of VCPUs for entire cluster, there are caveats to this
  GPCEVpcId:
    Type: String
  GPCESubnetAZ1:
    Type: String
  GPCEAmi:
    Type: String
  GPCEInstanceTypes:
    Type: CommaDelimitedList
  GPCESSHKeyPair:
    Type: String
  StackUID:
    Type: String
  SecurityGroup:
    Type: AWS::EC2::SecurityGroup
  Subnet:
    Type: AWS::EC2::Subnet

Resources:
  BatchServiceRole:
    Type: AWS::IAM::Role
    Properties:
      AssumeRolePolicyDocument:
        Version: '2012-10-17'
        Statement:
        - Effect: Allow
          Principal:
            Service: batch.amazonaws.com
          Action: sts:AssumeRole
      ManagedPolicyArns:
      - arn:aws:iam::aws:policy/service-role/AWSBatchServiceRole

  IamInstanceProfile:
    Type: AWS::IAM::InstanceProfile
    Properties:
      Roles:
      - !Ref 'EcsInstanceRole'

  EcsInstanceRole:
    Type: AWS::IAM::Role
    Properties:
      AssumeRolePolicyDocument:
        Version: '2008-10-17'
        Statement:
        - Sid: ''
          Effect: Allow
          Principal:
            Service: ec2.amazonaws.com
          Action: sts:AssumeRole
      ManagedPolicyArns:
      - arn:aws:iam::aws:policy/service-role/AmazonEC2ContainerServiceforEC2Role

  GeneralPurposeContainerRole:
    Type: "AWS::IAM::Role"
    Properties:
      AssumeRolePolicyDocument:
        Version: '2012-10-17'
        Statement:
          - Effect: Allow
            Principal:
              Service:
                - ecs-tasks.amazonaws.com
            Action:
            - sts:AssumeRole
      Path: '/'
      Policies:
        - PolicyName: ContainerS3Access
          PolicyDocument:
            Statement:
            - Effect: Allow
              Action:
              - s3:PutObject
              - s3:GetObject
              - s3:DeleteObject
              - s3:List*
              Resource:
                # TODO: Make these non psychcore-specific
              - arn:aws:s3:::pipeline-validation/*
              - arn:aws:s3:::wgs-pipeline-vqsr-test/*
              - arn:aws:s3:::test-references/*
              - arn:aws:s3:::psychcore-pipelines/output/*
              - arn:aws:s3:::psychcore-pipelines/validation/samples/*
              - arn:aws:s3:::psychcore-data/reference_indexs/*
              - arn:aws:s3:::psychcore-pipelines
              - arn:aws:s3:::psychcore-pipelines
              - arn:aws:s3:::psychcore-data
              - arn:aws:s3:::*
            - Effect: Allow
              Action:
              - s3:List*
              - s3:ListMultipartUploadParts
              - s3:AbortMultipartUpload
              - s3:ListBucketMultipartUploads
              Resource:
              - arn:aws:s3:::pipeline-validation
              - arn:aws:s3:::wgs-pipeline-vqsr-test
              - arn:aws:s3:::test-references
              - arn:aws:s3:::psychcore-pipelines/output/
              - arn:aws:s3:::psychcore-pipelines/validation/samples/
              - arn:aws:s3:::psychcore-data/reference_indexs/
              - arn:aws:s3:::psychcore-pipelines
              - arn:aws:s3:::psychcore-pipelines
              - arn:aws:s3:::psychcore-data
              - arn:aws:s3:::*

  GeneralPurposeComputeEnvironment:
    Type: "AWS::Batch::ComputeEnvironment"
    Properties:
      Type: MANAGED
      ComputeEnvironmentName: !Join
          - '-'
          - - !Ref GPCEName
            - !Ref StackUID
      ComputeResources:
        MinvCpus:
          Ref: GPCEMinVcpus
        MaxvCpus:
          Ref: GPCEMaxVcpus
        DesiredvCpus:
          Ref: GPCEDesiredVcpus
        SecurityGroupIds:
          - Ref: SecurityGroup
        Subnets:
          - Ref: Subnet
        Type: 'EC2'
        ImageId:
          Ref: GPCEAmi
        InstanceRole:
          Ref: IamInstanceProfile
        InstanceTypes:
          Ref: GPCEInstanceTypes
        Ec2KeyPair:
          Ref: GPCESSHKeyPair
        Tags:
          Key: Name
          Value: "VariantCallingBatchComputeEnvironment"
      ServiceRole:
        Ref: BatchServiceRole
      State: ENABLED
    DependsOn:
      - SecurityGroup
      - Subnet
      - IamInstanceProfile
      - BatchServiceRole

  GeneralPurposeQueue:
    Type: "AWS::Batch::JobQueue"
    Properties:
      ComputeEnvironmentOrder:
        - Order: 1
          ComputeEnvironment: !Ref GeneralPurposeComputeEnvironment
      Priority: 1
      State: ENABLED
      JobQueueName: !Join
          - '-'
          - - "GeneralPurposeQueue"
            - !Ref StackUID
    DependsOn:
      - GeneralPurposeComputeEnvironment
      - BatchServiceRole

Parent.yaml (包含与上述子堆栈相关的部分):

---
AWSTemplateFormatVersion: "2010-09-09"
Description: "Master template for wgs-pipeline. Calls to other stack templates."
Parameters:  
  GPCEName:
    Default: 'GeneralPurposeVariantCallingCE'
    Type: String
  GPCEMaxVcpus:
    Default: 128
    Type: Number
    Description: Max number of VCPUs for entire cluster, there are caveats to this
  GPCEMinVcpus:
    Default: 0
    Type: Number
    Description: Min number of VCPUs for entire cluster, there are caveats to this
  GPCEDesiredVcpus:
    Default: 0
    Type: Number
    Description: Desired number of VCPUs for entire cluster, there are caveats to this
  GPCEVpcId:
    Type: String
  GPCESubnetAZ1:
    Default: 'us-east-1a'
    Type: String
  GPCEAmi:
    Default: "ami-ce6cdfb4"
    Type: String
  GPCEInstanceTypes:
    Default: "i3.xlarge, i3.2xlarge, i3.4xlarge, i3.8xlarge, i3.16xlarge"
    Type: CommaDelimitedList
  GPCESSHKeyPair:
    Type: String
  StackUID:
    Default: "1234"
    Type: String

Resources:
  Subnet:
    Type: AWS::EC2::Subnet
    Properties:
      CidrBlock: 10.0.0.0/24
      VpcId: !Ref 'VPC'
      AvailabilityZone: !Ref GPCESubnetAZ1
      MapPublicIpOnLaunch: 'True'
  SecurityGroup:
    Type: AWS::EC2::SecurityGroup
    Properties:
      GroupDescription: EC2 Security Group for instances launched in the VPC by Batch
      VpcId: !Ref 'VPC'
  BatchResourcesStack:
    Type: AWS::CloudFormation::Stack
    Properties:
      Parameters:
        GPCEName:
          Ref: GPCEName
        GPCEMaxVcpus:
          Ref: GPCEMaxVcpus
        GPCEMinVcpus:
          Ref: GPCEMinVcpus
        GPCEDesiredVcpus:
          Ref: GPCEDesiredVcpus
        GPCEVpcId:
          Ref: GPCEVpcId
        GPCESubnetAZ1:
          Ref: GPCESubnetAZ1 
        GPCEAmi:
          Ref: GPCEAmi
        GPCEInstanceTypes:
          Ref: GPCEInstanceTypes
        GPCESSHKeyPair:
          Ref: GPCESSHKeyPair
        StackUID:
          Ref: StackUID
        SecurityGroup:
          Ref: SecurityGroup
        Subnet:
          Ref: Subnet
      TemplateURL: https://s3.amazonaws.com/CFNTemplate/batch_resources.stack.yaml
      Timeout: "100"

我不明白错误指向的是什么。我将整个 Batch-child.yaml 文件放在YAML验证程序中并且它已通过,因此它不应该来自格式化/缩进错误本身。此外,GeneralPurposeContainerRole资源不会被引用到模板中的任何其他位置,甚至也不会引用父堆栈模板。

0 个答案:

没有答案
相关问题