Как добавить фильтр подписки с помощью CloudFormation? - PullRequest
1 голос
/ 06 октября 2019

Я создаю шаблон CloudFormation с несколькими функциями AWS Lambda. В рамках шаблона CloudFormation я также хочу добавить фильтр подписки, чтобы журналы CloudWatch были отправлены в другую учетную запись. Однако, поскольку я заранее не знаю названия групп журналов и не смог найти ссылку на них, я не смог ее решить.

Есть ли способ сделать это?

Ответы [ 3 ]

1 голос
/ 06 октября 2019

Вы можете использовать функцию для получения имени группы журналов. Например:

"LogGroupName": {
    "Fn::Join": [
        "",
        [
            "/aws/lambda/",
            {
                "Ref": "MyLambdaFunction"
            }
        ]
    ]
}

Обратите внимание, что MyLambdaFunction - это имя вашего функционального блока Lambda в шаблоне CloudFormation.

0 голосов
/ 06 октября 2019

Способ Без сервера должен работать на вас. Он создает ресурс группы журналов с именем, совпадающим с тем, которое будет использовать ваша функция 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"
      }
    }
  }
}
0 голосов
/ 06 октября 2019

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

...