Cloudformation не может создать LogStream для вновь созданной LogGroup - PullRequest
1 голос
/ 20 апреля 2019

У меня есть очень простой скрипт Cloudformation, который просто пытается создать CloudWatch LogGroup и связанный LogStream -

AWSTemplateFormatVersion: '2010-09-09'
Description: Hello World
Parameters:
  AppName:
    Type: String
  EnvName:
    Type: String
Resources:
  AppLogGroup:
    Properties: 
      LogGroupName:
        Fn::Join:
        - '-'
        - - Ref: AppName
          - Ref: EnvName
      RetentionInDays: 7
    Type: AWS::Logs::LogGroup
  AppLogStream: 
    Properties: 
      LogGroupName:
        Fn::Join:
        - '-'
        - - Ref: AppName
          - Ref: EnvName
      LogStreamName:
        Fn::Join:
        - '-'
        - - Ref: AppName
          - Ref: EnvName
          - info
    Type: AWS::Logs::LogStream

Теперь это успешно развертывается примерно в 50% случаев, но для остальных 50%, хотя LogGroup создает нормально, создание LogStream завершается неудачно с The specified log group does not exist; и в целом стек откатывается.

Я предполагаю, что это из-за какого-то сбоя в "возможной согласованности" в AWS, но я немного удивлен, что создание LogStream не может ждать, пока LogGroup завершит работу.

Я что-то не так делаю? Должен ли я создавать LogStreams в своем приложении, а не в стеке? LogStream создается автоматически, когда вы отправляете первое сообщение (сомневаетесь)? Есть ли обходной путь здесь?

ТИА.

Ответы [ 2 ]

1 голос
/ 20 апреля 2019

Вместо того, чтобы вручную соединять строки для ссылки на группу журналов в потоке журналов, вы можете использовать !Ref для нее.При этом вы также получаете неявную зависимость потока журналов от группы журналов, что гарантирует, что CloudFormation создаст поток журналов после того, как создаст группу журналов.В то время как вы можете вручную указать DependsOn, чтобы добиться того же, использование !Ref - это то, что AWS предлагает в качестве наилучшей практики.Это будет выглядеть так:

AWSTemplateFormatVersion: '2010-09-09'
Description: Hello World
Parameters:
  AppName:
    Type: String
  EnvName:
    Type: String
Resources:
  AppLogGroup:
    Properties: 
      LogGroupName:
        Fn::Join:
        - '-'
        - - Ref: AppName
          - Ref: EnvName
      RetentionInDays: 7
    Type: AWS::Logs::LogGroup
  AppLogStream: 
    Properties: 
      LogGroupName: !Ref AppLogGroup
      LogStreamName:
        Fn::Join:
        - '-'
        - - Ref: AppName
          - Ref: EnvName
          - info
    Type: AWS::Logs::LogStream
0 голосов
/ 20 апреля 2019

Попробуйте добавить атрибут DependsOn: AppLogGroup в ресурс AppLogStream. Он будет ждать завершения зависимого ресурса.

См https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-attribute-dependson.html

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