Amazon cloudformation Cloudformation无法为新创建的日志组创建日志流

Amazon cloudformation Cloudformation无法为新创建的日志组创建日志流,amazon-cloudformation,Amazon Cloudformation,我有一个非常简单的Cloudformation脚本,它只是尝试创建一个CloudWatch日志组和相关的日志流- AWSTemplateFormatVersion: '2010-09-09' Description: Hello World Parameters: AppName: Type: String EnvName: Type: String Resources: AppLogGroup: Properties: LogGroupName

我有一个非常简单的Cloudformation脚本,它只是尝试创建一个CloudWatch日志组和相关的日志流-

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%,虽然日志组创建得很好,但日志流的创建失败,因为指定的日志组不存在;总的来说,堆栈会回滚

我认为这是因为AWS内部的“最终一致性”出现了某种故障,但令我有点吃惊的是,日志流的创建不能等到日志组完成

我做错什么了吗?我应该在我的应用程序中而不是在堆栈中创建日志流吗?当您发送第一条消息时,是否会自动创建日志流?这里有解决办法吗


TIA。

尝试向AppLogStream资源添加DependsOn:AppLogGroup属性。它将等待从属资源完成


您可以使用
,而不是手动将字符串连接在一起以引用日志流中的日志组!请参阅
。这样,您还可以获得日志流对日志组的隐式依赖关系,从而确保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

尝试向AppLogStream资源添加DependsOn:AppLogGroup声明。它将等待从属资源完成。谢谢!这听起来很奇怪,我以前从来没有用过这个。创建CodeDeploy部署组时不必等待CodeDeploy应用程序。创建EC2实例时,无需等待vpc/安全组等。为什么CloudWatch如此挑剔?我得到了消息“指定的日志组不存在”,这也与dependsOn无关。在我将LogStreamName的完全相同的属性移动到引用之后,它工作正常。Tnx