Тип параметра вложенного стека AWS Cloudformation для имени параметра не существует - PullRequest
0 голосов
/ 27 сентября 2018

Я пытаюсь развернуть родительский и вложенный стеки в AWS с облачной информацией.Родительский стек выглядит так

AWSTemplateFormatVersion: '2010-09-09'

Parameters:
  VPC:
    Description: Choose which VPC the Lambda-functions should be deployed to
    Type: AWS::EC2::VPC::Id
    Default: vpc-sdjkfnsdjklfn

  Subnets:
    Description: Choose which subnets Lambda-functions should be deployed to
    Type: CommaDelimitedList
    Default: "subnet-sdoifno, subnet-sdofjnsdo"

  SecurityGroup:
    Description: Select the Security Group to use for the Lambda-functions
    Type: AWS::EC2::SecurityGroup::Id
    Default: sg-sdklfnsdkl

  Role:
    Description: Role for Lambda functions
    Type: String
    Default: arn:aws:iam::dlfksd:role/ssdfnsdo

Resources:
  RestApi:
      Type: AWS::ApiGateway::RestApi
      Properties:
        Name: "my-api"
        Description: "SPP Lambda API"

  Stack1:
    Type: AWS::CloudFormation::Stack
    Properties:
      TemplateURL: 'https://s3.amazonaws.com/bucket/template1.yml'
      Parameters:
        VPC: !Ref VPC
        Subnets: !Join
                   - ','
                   - !Ref Subnets
        SecurityGroup: !Ref SecurityGroup
        Role: !Ref Role
        RestApi: !Ref RestApi
        ApiResourceParent: !GetAtt "RestApi.RootResourceId"

Дочерний стек выглядит следующим образом

AWSTemplateFormatVersion: '2010-09-09'

Parameters:
  VPC:
    Type: AWS::EC2::VPC::Id

  Subnets:
    Type: CommaDelimitedList

  SecurityGroup:
    Type: AWS::EC2::SecurityGroup::Id

  Role:
    Type: String

  RestApi:
    Type: AWS::ApiGateway::RestApi

  ApiResourceParent:
     Type: AWS::ApiGateway::Resource

Resources:

    Fucntion:
        Type: AWS::Lambda::Function
        Properties:
          Code:
            S3Bucket: bucket
            S3Key: node_lambdas.zip
          Handler: Function.handler
          Role: !Ref Role
          Runtime: nodejs6.10
          Timeout: 300
          VpcConfig:
            SecurityGroupIds:
              - !Ref SecurityGroup
            SubnetIds: !Ref Subnets
          #Policies: AWSLambdaDynamoDBExecutionRole

    Permission:
        Type: AWS::Lambda::Permission
        Properties:
          Action: lambda:InvokeFunction
          FunctionName: !GetAtt "Function.Arn"
          Principal: "apigateway.amazonaws.com"
          SourceArn: !Sub "arn:aws:execute-api:${AWS::Region}:${AWS::AccountId}:${RestApi}/*/*/*"
    Resource:
         Type: AWS::ApiGateway::Resource
         Properties:
           RestApiId: !Ref RestApi
           ParentId: !Ref ApiResourceParent
           PathPart: addadjustments

Когда я запускаю aws cloudformation deploy --template-file parent-stack.yml --stack-name spp-lambda --region us-east-1 --capabilities CAPABILITY_IAM, я получаю следующую ошибку

Встроенный стек arn: aws: cloudformation: us-east-1: 771653148224: стек / spp-lambda-Stack1-97M9BLBUM3A5 / 4a454a50-c274-11e8-b49c-500c28903236 не был успешно создан: проверка параметров не выполнена: тип параметра AWS :: ApiGateway:: RestApi для имени параметра RestApi не существует, тип параметра AWS :: ApiGateway :: Ресурс для имени параметра ApiResourceParent не существует

Он не жалуется на параметры, которые явно определены вродительский шаблон.Я хочу, чтобы параметры, на которые он жалуется, создавались и передавались динамически, так как я не буду знать значения заранее.Что я делаю не так?

1 Ответ

0 голосов
/ 27 сентября 2018

Хотя некоторые типы ресурсов AWS поддерживаются в качестве типа параметра облачной информации, это не означает, что поддерживаются все типы ресурсов.

Вы пытаетесь ссылаться на значение шлюза API как тип параметра, специфичный для AWS, но оно не поддерживается: https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/parameters-section-structure.html#aws-specific-parameter-types

Я считаю, что использование типа String в качестве типа является достаточным.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...