Параметры AWS Cloudformation/Codepipeline: [ProjectId] должен иметь значения

Я пытаюсь создать простую (на данный момент) интеграцию облачного формирования/конвейера кода, но получаю сообщение об ошибке при создании набора изменений для облачного формирования.

У меня есть конвейер кода, создающий выходной YML (шаблон ниже) с использованием кода: - aws cloudformation package --template template.json --s3-bucket $S3_BUCKET --output-template template-export.yml, который затем экспортируется в облако для создания набора изменений.

Когда он пытается создать набор изменений, я получаю эту ошибку Parameters: [ProjectId] must have values (Service: AmazonCloudFormation; Status Code: 400; Error Code: ValidationError; Request ID: 4d20b24f-fd8b-11e8-9014-599dd1a18437)

Что происходит не так?

Введите шаблон.json

{
  "AWSTemplateFormatVersion": "2010-09-09",
  "Parameters": {
    "ProjectId": {
      "Type": "String",
      "Description": "Codepipeline cloudformation test"
    },
    "Stage": {
      "Default": "",
      "Type": "String",
      "Description": "I am guessing some thing goes here"
    }
  },
  "Resources": {
    "LambdaExecutionRole": {
      "Type": "AWS::IAM::Role",
      "Description": "Creating service role in IAM for AWS Lambda",
      "Properties": {
        "RoleName": {
          "Fn::Sub": "CodeStar-${ProjectId}-Execution${Stage}"
        },
        "AssumeRolePolicyDocument": {
          "Statement": [{
            "Action": "sts:AssumeRole",
            "Effect": "Allow",
            "Principal": {
              "Service": [
                "lambda.amazonaws.com"
              ]
            }
          }]
        },
        "ManagedPolicyArns": [
          "arn:aws:iam::aws:policy/service-role/AWSLambdaBasicExecutionRole"
        ],
        "Path": "/"
      }
    },
    "CreateUser": {
      "Type": "AWS::Lambda::Function",
      "Properties": {
        "Handler": "API/CreateUser.handler",
        "Code": "API/CreateUser.py",
        "Role": {
          "Fn::GetAtt": [
            "LambdaExecutionRole",
            "Arn"
          ]
        },
        "Runtime": "python2.7",
      }
    }
  }

}

Вывод из codebuild template-export.yml

AWSTemplateFormatVersion: '2010-09-09'
Parameters:
  ProjectId:
    Description: Codepipeline cloudformation test
    Type: String
  Stage:
    Default: ''
    Description: I am guessing some thing goes here
    Type: String
Resources:
  CreateUser:
    Properties:
      Code:
        S3Bucket: xxxx
        S3Key: xxxx
      Handler: API/CreateUser.handler
      Role:
        Fn::GetAtt:
        - LambdaExecutionRole
        - Arn
      Runtime: python2.7
    Type: AWS::Lambda::Function
  LambdaExecutionRole:
    Description: Creating service role in IAM for AWS Lambda
    Properties:
      AssumeRolePolicyDocument:
        Statement:
        - Action: sts:AssumeRole
          Effect: Allow
          Principal:
            Service:
            - lambda.amazonaws.com
      ManagedPolicyArns:
      - arn:aws:iam::aws:policy/service-role/AWSLambdaBasicExecutionRole
      Path: /
      RoleName:
        Fn::Sub: CodeStar-${ProjectId}-Execution${Stage}
    Type: AWS::IAM::Role

Другая информация:

Cloudformation использует IAM с полными правами администратора. allow *

Создать настройки набора изменений:

  • Режим действия: создание или замена набора изменений
  • Шаблон: BuildArtifact::template-export.yml
  • Возможности: CAPABILITY_NAMED_IAM
  • Имя роли: cloudformation-admin
  • Входные артефакты: BuildArtifact

comment
Похоже, ошибка связана именно с вашей проблемой: вы не предоставили ProjectId команде для запуска вашего шаблона CloudFormation... Вы упомянули, что пытаетесь создать набор изменений; Можете ли вы предоставить дополнительную информацию о том, как вы отправляете эту команду в AWS?   -  person tyron    schedule 12.12.2018


Ответы (1)


Ваша проблема здесь в том, что вы не передали значение параметра ProjectId внутри вашего шаблона cloudformation, если вы посмотрите на фрагмент вашего шаблона здесь:

{
  "AWSTemplateFormatVersion": "2010-09-09",
  "Parameters": {
    "ProjectId": {
      "Type": "String",
      "Description": "Codepipeline cloudformation test"
    },
    "Stage": {
      "Default": "",
      "Type": "String",
      "Description": "I am guessing some thing goes here"
    }
  },

Вы присвоили параметру Stage значение по умолчанию, тогда как ProjectId не имеет значения по умолчанию, а это означает, что если вы не укажете в своей команде CLI, каким должно быть значение ProjectId, тогда это будет ничего, что приведет к проверке сбой, так как ожидается, что для этого параметра будет строка, хотя на самом деле значение равно None.

Если вы сделаете это вместо этого:

{
  "AWSTemplateFormatVersion": "2010-09-09",
  "Parameters": {
    "ProjectId": {
      "Default": "",
      "Type": "String",
      "Description": "Codepipeline cloudformation test"
    },
    "Stage": {
      "Default": "",
      "Type": "String",
      "Description": "I am guessing some thing goes here"
    }
  },

Это означает, что запись будет пустой строкой, но шаблон cloudformation больше не должен проходить проверку.

person Liam    schedule 12.12.2018