2017-02-06 18 views
6

Ich weiß, es sollte ein Weg sein, Auslöser zu schaffen für AWS Lambda mit aws sdk Rubin (wie es möglich ist, es zu tun mit AWS Management Console).So erstellen Cloudwatch-Protokolle auslösen für AWS Lambda aws Rubin SDK?

* Update, ich war in der Lage, einen Weg, um herauszufinden, Trigger zu erstellen. Ich bin folgenden Code zu tun, dass:

@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 
}) 

ich folgende Fehler bekommen bei dem Versuch, das zu tun:

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

Nur um es zu testen aus, ich habe Rolle X die angebracht Funktion Lambda und diese Rolle hat AWSLambdaFullAccess Politik hinzugefügt, aber ich bin immer noch diesen Fehler.

Alles andere fehlt mir

Danke, Bakir

+0

Können Sie klären, welche Art von 'CloudWatch Trigger' Sie hinzufügen möchten? Das ist ein bisschen mehrdeutig; Sie können einen Cloudwatch-Ereignis- (Zeitplan-) Trigger, einen Cloudwatch-Protokolltrigger oder einen SNS-Auslöser basierend auf einer veröffentlichten Nachricht über Cloudwatch-Alarme hinzufügen. Dieses Detail wird den Umfang der Antwort verändern. –

+0

Meine Antwort wurde aktualisiert. Im Allgemeinen, in meinem Fall brauche ich Cloudwatch-Log-Trigger für Lambda-Funktion –

Antwort

1

Cloudwatch Logs Erlaubnisse hinzugefügt werden können:

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, 
}) 

Wo:

  • function_arn ist Ihre Funktionskennung ähnlich wie arn:aws:lambda:eu-west-1:111111111111:function:yourFunctionName
  • Region ist der Name Ihres Servicebereiches ähnlich wie eu-west-1
  • ACCOUNT_ID ist id Ihr Konto ähnlich wie 111111111111
  • log_group_name ist der Name von Protokollen Sie /aws/lambda/logGroupName
  • aus ähnlichem Streaming werden
  • unique_identifier einige zufällige Zeichenfolge in Grundsatzerklärung verwendet werden. Z.B.ID-1

Es sollte in folgender Reihenfolge ausgeführt werden:

  • erstellen Lambda-Funktion und Log-Gruppe
  • Berechtigungen hinzufügen
  • Put Abonnement Filter

Weitere Informationen:


Hinweis das Sternchen-Symbol am Ende source_arn:

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

Es ist arn Protokollströme, nicht arn der Protokollgruppe. Es hat einige Zeit gedauert diesen Fehler zu debuggen (bis ich einen Fehler gefunden habe mit aws lambda get-policy)

+0

ein Hinweis: Der Client ist ein CloudWatch-Client - kein Lambda-Client. –