Хобрук: Ваш путь к мастерству в программировании

Подключите эфемерное хранилище к сервису Fargate с помощью CloudFormation - ожидаемый тип: JSONArray, найдено: JSONObject

Я пытаюсь прикрепить временный том к сервису, который мы запускаем на Fargate, чтобы он мог сгенерировать некоторые файлы перед их копированием в S3. Когда я запускаю службу без информации о томе, шаблон CloudFormation создается успешно, и служба запускается.

Однако при установке параметров громкости происходит сбой с этой ошибкой:

Ошибка проверки модели (# / Volumes: ожидаемый тип: JSONArray, найдено: JSONObject # / ContainerDefinitions / 0 / MountPoints: ожидаемый тип: JSONArray, найдено: JSONObject # / ContainerDefinitions / 0 / PortMappings / 0 / ContainerPort: ожидаемый тип: Number, найдено : Нить)

А это шаблон:

  Cluster:
    Type: AWS::ECS::Cluster
    Properties:
      ClusterName: !Join ['-', [!Ref Env, !Ref ShortServiceName, cluster]]
  TaskDefinition:
    Type: AWS::ECS::TaskDefinition
    DependsOn: LogGroup
    Properties:
      Family: !Join ['-', [!Ref Env, !Ref ShortServiceName, 'taskdefinition']]
      NetworkMode: awsvpc
      RequiresCompatibilities:
        - FARGATE
      Cpu: !Ref Cpu
      Memory: !Ref Memory
      Volumes:
        Name: !Ref VolumeName
        DockerVolumeConfiguration:
          Autoprovision: True
          Scope: Task
      ExecutionRoleArn: !Ref ExecutionRole
      TaskRoleArn: !Ref TaskRole
      ContainerDefinitions:
        - Name: !Join ['-', [!Ref Env, !Ref ShortServiceName]]
          Image: !Ref Image
          RepositoryCredentials:
            CredentialsParameter: !Ref RepositoryCredentials
          PortMappings:
            - ContainerPort: !Ref ContainerPort
          MountPoints:
            ContainerPath: "/app"
            SourceVolume: !Ref VolumeName
          LogConfiguration:
            LogDriver: awslogs
            Options:
              awslogs-region: !Ref AWS::Region
              awslogs-group: !Ref LogGroup
              awslogs-stream-prefix: ecs

  ContainerSecurityGroup:
    Type: AWS::EC2::SecurityGroup
    Properties:
      Tags:
        -
          Key: Name
          Value: !Join ['-', [!Ref ShortServiceName, 'app-sg']]
      GroupDescription: !Join ['-', [!Ref ShortServiceName, ContainerSecurityGroup]]
      VpcId: !Ref VPC
      SecurityGroupIngress:
        - IpProtocol: tcp
          FromPort: !Ref ContainerPort
          ToPort: !Ref ContainerPort
          SourceSecurityGroupId: !Ref ManagementSecurityGroup

  Service:
    Type: AWS::ECS::Service
    Properties:
      ServiceName: !Ref ServiceName
      Cluster: !Ref Cluster
      TaskDefinition: !Ref TaskDefinition
      DeploymentConfiguration:
        MinimumHealthyPercent: 50
        MaximumPercent: 200
      DesiredCount: !Ref DesiredCount
      LaunchType: FARGATE
      NetworkConfiguration:
        AwsvpcConfiguration:
          AssignPublicIp: DISABLED
          Subnets:
            - !Ref AppSubnetA
            - !Ref AppSubnetB
          SecurityGroups:
            - !Ref ManagementSecurityGroup
            - !Ref ContainerSecurityGroup

  LogGroup:
    Type: AWS::Logs::LogGroup
    Properties:
      LogGroupName: !Join ['/', [/ecs, !Ref Env, !Ref ServiceName]]

Outputs:
  ContainerSecurityGroup:
    Description: ContainerSecurityGroup
    Value: !Ref ContainerSecurityGroup

Я тщательно искал проблему, но не нашел ничего, связанного с проблемой. Кроме того, параметр ContainerPort отлично работает как строка, если том не подключен. Я также попытался изменить тип с String на Number, но продолжаю получать тот же найденный JsonObject, пока он ожидал JsonArray.

Может ли кто-нибудь направить меня в правильном направлении, пожалуйста?

Ваше здоровье!


Ответы:


1

MountPoints должен быть списком MountPoint. Таким образом, в вашем случае это должно быть (примечание -):

          MountPoints:
            - ContainerPath: "/app"
              SourceVolume: !Ref VolumeName
30.09.2020
  • Спасибо! Но я продолжаю получать: Ошибка проверки модели (# / Volumes: ожидаемый тип: JSONArray, найдено: JSONObject # / ContainerDefinitions / 0 / PortMappings / 0 / ContainerPort: ожидаемый тип: Number, найдено: String) 30.09.2020
  • В вашем вопросе у вас нет определения !Ref ContainerPort, поэтому я не могу его комментировать. Возможно, вы используете строку вместо числа. 30.09.2020
  • У меня была строка, затем она изменилась на число, а затем снова на строку. Не удалось с той же ошибкой :( Я уделял больше внимания черточкам благодаря вашему совету, а теперь все нашел в шаблоне, и ошибки исчезли. Дам ваш ответ как действительный, большое спасибо !! 30.09.2020
  • @ Карасу-О-Матич Спасибо. Рад, что все получилось. Если ответ окажется полезным, мы будем благодарны за его принятие. Необходимо поставить галочку под кнопками "за" / "против". 30.09.2020

  • 2

    поместите его как целый объект JSON, без кавычек !. Пример

    MyRepo:
      Type: AWS::ECR::Repository
      Properties:
        RepositoryName: my/repo
        EncryptionConfiguration: {"encryptionType": "AES256"}
      DeletionPolicy: Retain
    
    21.05.2021
    Новые материалы

    Учебные заметки JavaScript Object Oriented Labs
    Вот моя седьмая неделя обучения программированию. После ruby ​​и его фреймворка rails я начал изучать самый популярный язык интерфейса — javascript. В отличие от ruby, javascript — это более..

    Разбор строк запроса в vue.js
    Иногда вам нужно получить данные из строк запроса, в этой статье показано, как это сделать. В жизни каждого дизайнера/разработчика наступает момент, когда им необходимо беспрепятственно..

    Предсказание моей следующей любимой книги 📚 Благодаря данным Goodreads и машинному обучению 👨‍💻
    «Если вы не любите читать, значит, вы не нашли нужную книгу». - J.K. Роулинг Эта статья сильно отличается от тех, к которым вы, возможно, привыкли . Мне очень понравилось поработать над..

    Основы принципов S.O.L.I.D, Javascript, Git и NoSQL
    каковы принципы S.O.L.I.D? Принципы SOLID призваны помочь разработчикам создавать надежные, удобные в сопровождении приложения. мы видим пять ключевых принципов. Принципы SOLID были разработаны..

    Как настроить Selenium в проекте Angular
    Угловой | Селен Как настроить Selenium в проекте Angular Держите свое приложение Angular и тесты Selenium в одной рабочей области и запускайте их с помощью Mocha. В этой статье мы..

    Аргументы прогрессивного улучшения почти всегда упускают суть
    В наши дни в кругах веб-разработчиков много болтают о Progressive Enhancement — PE, но на самом деле почти все аргументы с обеих сторон упускают самую фундаментальную причину, по которой PE..

    Введение в Джанго Фреймворк
    Схема «работать умно, а не усердно» В этой и последующих статьях я познакомлю вас с тем, что такое фреймворк Django и как создать свое первое приложение с помощью простых и понятных шагов, а..