如何将CloudWatch组和流同时包含在AWS SAM模板中?

时间:2018-10-19 11:34:25

标签: amazon-web-services amazon-cloudformation amazon-cloudwatch

作为SAM模板的一部分,我想创建一个日志组和两个日志流。 最初的想法是:

myLogGroup:
    Type: 'AWS::Logs::LogGroup'
    Properties:
        LogGroupName: 'myLogGroup'
        RetentionInDays: 180

myLogStream:
    Type: 'AWS::Logs::LogStream'
    Properties:
        LogGroupName: 'myLogGroup'
        LogStreamName: 'myLogStream'

不幸的是,当尝试部署应用程序时,事件日志中出现错误:

12:24:32 UTC+0200   CREATE_COMPLETE     AWS::Logs::LogGroup    myLogGroup   
12:24:31 UTC+0200   CREATE_IN_PROGRESS  AWS::Logs::LogGroup    myLogGroup   Resource creation Initiated
12:24:31 UTC+0200   CREATE_FAILED       AWS::Logs::LogStream   myLogStream    The specified log group does not exist
12:24:31 UTC+0200   CREATE_IN_PROGRESS  AWS::Logs::LogGroup    myLogGroup
12:24:31 UTC+0200   CREATE_IN_PROGRESS  AWS::Logs::LogStream   myLogStream

是否可以让AWS等待创建组?

2 个答案:

答案 0 :(得分:0)

您需要使用Fn::Ref函数,以便CloudFormation理解资源在同一模板上。否则,在创建myLogStream时,CloudFormation认为它应该引用另一个{已经存在的)myLogGroup

myLogGroup:
    Type: 'AWS::Logs::LogGroup'
    Properties:
        LogGroupName: 'myLogGroup'
        RetentionInDays: 180

myLogStream:
    Type: 'AWS::Logs::LogStream'
    Properties:
        LogGroupName: !Ref myLogGroup
        LogStreamName: 'myLogStream'

答案 1 :(得分:0)

找到了解决此问题的另一种方法。每个资源可以具有指向另一个资源的DependsOn属性。例如:

myLogGroup:
    Type: 'AWS::Logs::LogGroup'
    Properties:
        LogGroupName: 'myLogGroup'
        RetentionInDays: 180

myLogStream:
    DependsOn: 'myLogGroup'
    Type: 'AWS::Logs::LogStream'
    Properties:
        LogGroupName: 'myLogGroup'
        LogStreamName: 'myLogStream'

通过这种方式,CloudFormation将等待创建流,直到创建日志组。