Вложенный стек не обнаруживает изменения в шаблоне с RequestMappingTemplateS3Location - PullRequest
0 голосов
/ 04 мая 2019

У меня есть безсерверная спецификация с вложенным стеком, я хочу определить Type: AWS :: AppSync :: Resolver, используя RequestMappingTemplateS3Location и ResponseMappingTemplateS3Location, и шаблоны находятся в s3.Когда я обновляю шаблон, стек не обновляет облачную информацию.

 Resource:
    AppSyncResolverTestStack:
      Type: AWS::CloudFormation::Stack
      DependsOn:
        - GraphQlApi
        - GraphQlSchema
      Properties:
        Parameters:
          MappingTemplatesURL:
            Fn::Join:
              - "/"
              - - "s3:/"
                - ${self:provider.deploymentBucket}
                - 'etc'
                - ${opt:stage}
                - 'mapping_templates_extra'
          GraphQlApiId:
            Fn::GetAtt:
              - GraphQlApi
              - ApiId
        TemplateURL:
          Fn::Join:
            - "/"
            - - "https://s3.amazonaws.com"
              - ${self:provider.deploymentBucket}
              - 'etc'
              - ${opt:stage}
              - 'cf-resolvers-2.yml'

Вложенный

Parameters:
  MappingTemplatesURL:
    Type: String
  GraphQlApiId:
    Type: String
Resources:
  FCSYSAPIGraphQlResolverFinancialRequest:
    Type: AWS::AppSync::Resolver
    Properties:
      ApiId:
        Ref: GraphQlApiId
      TypeName: Mutation
      FieldName: FinanceDocumentsApi
      DataSourceName: "FCFinanceApi"
      RequestMappingTemplateS3Location:
        Fn::Join:
          - "/"
          - - Ref: MappingTemplatesURL
            - "fc-finance"
            - "FinanceDocuments.request.vm"
      ResponseMappingTemplateS3Location:
        Fn::Join:
          - "/"
          - - Ref: MappingTemplatesURL
            - "fc-finance"
            - "FinanceDocuments.response.vm"

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

1 Ответ

1 голос
/ 04 мая 2019

Это нормальное поведение CloudFormation.CloudFormation обновляет ресурс только при изменении его свойств .

Поскольку свойства RequestMappingTemplateS3Location и ResponseMappingTemplateS3Location не изменяются, CloudFormation не обновляет ваш AppSync Resolver (даже если эти местоположения S3указывает на «новый» контент).

Одним из способов решения вашей проблемы является использование команды aws cloudformation package интерфейса командной строки AWS.Он позволяет вам определять ваш шаблон с локальными файлами:

Type: 'AWS::AppSync::Resolver'
Properties:
  ...
  RequestMappingTemplateS3Location: './path/to/local/template/file'
  ...

Запуск

aws cloudformation package --template-file mytemplate.yml --s3-bucket mybucket --output-template-file packaged.template

возвращает копию вашего шаблона (packaged.template), заменяя ссылки на локальные артефакты на S3место, куда команда загрузила артефакты.Имя местоположения S3 (ключ) зависит от содержимого (используется MD5).Следовательно, с помощью этой стратегии свойство RequestMappingTemplateS3Location изменяется, если изменяется содержимое, на которое ссылается местоположение S3.

После этого вы можете развернуть свой шаблон с помощью aws cloudformation deploy.

Примечание. Это то же самое, что и AWS SAM CLI , sam package - псевдоним aws cloudformation package

. При работе с серверной платформой другое решение заключается в использовании serverless-appsync-plugin , который позволяет указывать шаблоны отображения встроенными или в файле.

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