2016-03-09 33 views
15

Vorrei eseguire una funzione lambda AWS ogni cinque minuti. Nella Console di gestione AWS è facile configurarlo, sotto la scheda "Sorgenti dell'evento" della funzione lambda, ma come faccio a configurarlo con Terraform?Utilizzare terraform per impostare una funzione lambda attivata da una fonte evento programmata

Ho provato a utilizzare an aws_lambda_event_source_mapping resource, ma risulta che the API it uses supporta solo eventi da Kinesis e DynamoDB. Quando provo a usarlo con una fonte di eventi programmata, la creazione scade.

risposta

28

È possibile utilizzare una risorsa aws_cloudwatch_event_target per collegare l'origine evento pianificata (regola evento) alla funzione lambda. È necessario concedere il permesso per invocare la funzione lambda; è possibile utilizzare una risorsa aws_lambda_permission per questo.

Esempio:

resource "aws_lambda_function" "check_foo" { 
    filename = "check_foo.zip" 
    function_name = "checkFoo" 
    role = "arn:aws:iam::424242:role/something" 
    handler = "index.handler" 
} 

resource "aws_cloudwatch_event_rule" "every_five_minutes" { 
    name = "every-five-minutes" 
    description = "Fires every five minutes" 
    schedule_expression = "rate(5 minutes)" 
} 

resource "aws_cloudwatch_event_target" "check_foo_every_five_minutes" { 
    rule = "${aws_cloudwatch_event_rule.every_five_minutes.name}" 
    target_id = "check_foo" 
    arn = "${aws_lambda_function.check_foo.arn}" 
} 

resource "aws_lambda_permission" "allow_cloudwatch_to_call_check_foo" { 
    statement_id = "AllowExecutionFromCloudWatch" 
    action = "lambda:InvokeFunction" 
    function_name = "${aws_lambda_function.check_foo.function_name}" 
    principal = "events.amazonaws.com" 
    source_arn = "${aws_cloudwatch_event_rule.every_five_minutes.arn}" 
} 
+0

Qualche consiglio su come risolvere il problema? Riesco a vedere nella console che la regola degli eventi di cloudwatch sembra corretta e nella console lambda è elencata come trigger. Sembra che il timer stia sparando ma le invocazioni non riescono e non vedo alcuna prova che il lambda venga invocato nei registri di cloudwatch. Ci sono dei log per il timer degli eventi di cloudwatch stesso? –

1

Nella console, posso vedere il seguente:

enter image description here

Anche se si dice lo Stato regola è "enabled", ho ancora per consentire la si innesca. Non sono sicuro del motivo per cui Terraform non lo sta facendo da solo.