如何使用CloudFormation添加订阅过滤器?

时间:2019-10-06 06:13:44

标签: aws-lambda amazon-cloudformation amazon-cloudwatch

我正在生成带有几个AWS Lambda函数的CloudFormation模板。作为CloudFormation模板的一部分,我还想添加一个订阅过滤器,以便将CloudWatch日志发送到另一个帐户。 但是,由于我事先不知道日志组的名称,并且找不到任何引用它们的方法,因此无法解决。

有办法吗?

3 个答案:

答案 0 :(得分:1)

您可以使用函数来获取日志组名称。例如:

MyLambdaFunction

请注意, interface IMessageHandler<T> { void Handle(T message); } class MessageBus { private readonly Dictionary<Type, Action<object>> _handlers = new Dictionary<Type, Action<object>>(); void AddHandler<T>(IMessageHandler<T> handler) { _messageHandlers[typeof(T)] = message => messageHandler.Handle((T)message); } public void Handle(object message) { _handlers[message.GetType()](message); } } 是CloudFormation模板中Lambda功能块的名称。

答案 1 :(得分:0)

您可以尝试使用custom function来调用lambda,而后者又可以使用测试有效负载或类似的东西运行lambda,这最终会创建日志流,然后您可以引用该日志组进行订阅如praveen先前所述。

答案 2 :(得分:-1)

Serverless的工作方式应该对您有用。它创建一个名称与您的Lambda函数将使用的名称匹配的日志组资源。然后,您可以在任何需要的地方引用该日志组。您将必须给Lambda函数命名,而不要使用默认的命名行为。您可以使用堆栈名称使其唯一。

类似的东西:

{
  "AWSTemplateFormatVersion": "2010-09-09",
  "Resources": {
    "FunctionLogGroup": {
      "Type": "AWS::Logs::LogGroup",
      "Properties": {
        "LogGroupName": {
          "Fn::Sub": "/aws/lambda/MyFunction-${AWS::StackName}"
        }
      }
    },
    "MyFunctionNameRole": {
      "Type": "AWS::IAM::Role",
      "Properties": {
        "ManagedPolicyArns": ["arn:aws:iam::aws:policy/service-role/AWSLambdaBasicExecutionRole"],
        "AssumeRolePolicyDocument": {
          "Version": "2012-10-17",
          "Statement": [{
            "Action": ["sts:AssumeRole"],
            "Effect": "Allow",
            "Principal": {
              "Service": ["lambda.amazonaws.com"]
            }
          }]
        }
      }
    },
    "MyFunction": {
      "Type": "AWS::Lambda::Function",
      "Properties": {
        "Code": {
          "ZipFile": "def index():\n  return 'hello world'\n"
        },
        "FunctionName": {
          "Fn::Sub": "MyFunction-${AWS::StackName}"
        },
        "Handler": "handler.index",
        "MemorySize": 128,
        "Role": {
          "Fn::GetAtt": [
            "MyFunctionNameRole",
            "Arn"
          ]
        },
        "Runtime": "python3.6"
      },
      "DependsOn": [
        "FunctionLogGroup"
      ]
    },
    "MySubscriptionFilter": {
      "Type" : "AWS::Logs::SubscriptionFilter",
      "Properties" : {
        "DestinationArn": "TODO TODO",
        "FilterPattern": "",
        "LogGroupName": {"Ref": "FunctionLogGroup"},
        "RoleArn": "TODO TODO"
      }
    }
  }
}