2017-02-06 16 views
6

Wiem, że powinien istnieć sposób utworzenia wyzwalacza dla AWS Lambda za pomocą aws ruby ​​sdk (tak jak można to zrobić za pomocą AWS Management Console).Jak utworzyć wyzwalacz dzienników CloudWatch dla AWS Lambda za pomocą pakietu SDK aws ruby?

* Aktualizacja, udało mi się znaleźć sposób na stworzenie wyzwalacza. Używam następujący kod, aby to zrobić:

@cloudwatchlogs = Aws::CloudWatchLogs::Client.new(region: region, credentials: Aws::Credentials.new(aws_access_key_id, aws_secret_access_key)) 
@cloudwatchlogs.put_subscription_filter({ 
    log_group_name: "RDSOSMetrics", 
    filter_name: "RDS metrics filter", 
    filter_pattern: "RDS metrics filter pattern", 
    destination_arn: function_arn 
}) 

Dostaję następujący błąd podczas próby zrobić:

*** Aws::CloudWatchLogs::Errors::InvalidParameterException Exception: Could not execute the lambda function. Make sure you have given CloudWatch Logs permission to execute your function 

Właśnie przez wzgląd na testowanie go, mam do naśladowania X która jest dołączony do funkcji Lambda i do tej roli dodano zasady AWSLambdaFullAccess, ale nadal otrzymuję ten błąd.

coś jeszcze mi brakuje

Dzięki Bakir

+0

Czy możesz wyjaśnić, jaki rodzaj "wyzwalacza CloudWatch" chcesz dodać? To trochę niejednoznaczne; można dodać wyzwalacz zdarzenia w chmurze (harmonogram), wyzwalacz dziennika w chmurze lub wyzwalacz SNS na podstawie opublikowanej wiadomości za pośrednictwem alarmów w chmurze. Ten szczegół zmieni zakres odpowiedzi. –

+0

Zaktualizowałem moją odpowiedź. Ogólnie rzecz biorąc, w moim przypadku potrzebuję wyzwalacza dziennika Cloudwatch dla funkcji lambda –

Odpowiedz

1

uprawnienia CloudWatch kłody mogą być dodane z:

client.add_permission({ 
    action: "lambda:InvokeFunction", 
    function_name: function_arn, 
    principal: "logs." + region + ".amazonaws.com", 
    source_account: account_id, 
    source_arn: "arn:aws:logs:" + region + ":" + account_id + ":log-group:" + log_group_name + ":*", 
    statement_id: unique_identifier, 
}) 

Gdzie:

  • function_arn jest Twój identyfikator funkcji podobny do arn:aws:lambda:eu-west-1:111111111111:function:yourFunctionName
  • regionu jest nazwa regionu serwis podobny do eu-west-1
  • ACCOUNT_ID jest identyfikator konta podobny do 111111111111
  • log_group_name jest nazwa dzienników będzie strumieniowych od podobna do /aws/lambda/logGroupName
  • unique_identifier losowy ciąg znaków do użycia w polisie. Na przykład.ID-1

powinno być wykonywane w następującej kolejności:

  • Tworzenie funkcji Lambda i grupę Log
  • dodać uprawnienia
  • filtr subskrypcji Put

Więcej informacji:


Uwaga symbol gwiazdka na końcu source_arn:

arn:aws:logs:eu-west-1:111111111111:log-group:logGroup:* 
arn:aws:logs:eu-west-1:111111111111:log-group:logGroup 

Jest to arn strumieni dziennika, a nie arn grupy dziennika. Zajęło mi trochę czasu debugowanie tego (aż znalazłem błąd z aws lambda get-policy)

+0

Uwaga: klient jest klientem CloudWatch - a nie klientem Lambda. –

Powiązane problemy