2016-03-09 14 views
15
Bir AWS lambda fonksiyonu her beş dakikada bir çalışacak istiyorum

tarafından tetiklenen bir lambda fonksiyonu kurmak. AWS Yönetim Konsolu'nda, lambda işlevinin "Olay Kaynakları" sekmesi altında kurulumu kolaydır, ancak Terraform ile nasıl ayarlayabilirim?kullanın Terraform planlanmış bir olay kaynağı

an aws_lambda_event_source_mapping resource'u kullanmayı denedim, ancak the API it uses'un yalnızca Kinesis ve DynamoDB'den gelen olayları desteklediği ortaya çıkıyor. Zamanlanmış bir etkinlik kaynağıyla kullanmaya çalıştığımda, oluşturma zaman aşımına uğrar.

cevap

28

Zamanlanmış olay kaynağını (olay kuralı) lambda işlevinize bağlamak için aws_cloudwatch_event_target kaynağını kullanabilirsiniz. Lambda işlevini çağırmak için izin vermeniz gerekir; Bunun için bir aws_lambda_permission kaynağını kullanabilirsiniz.

Örnek: hala etkinleştirmek zorunda

enter image description here

olsa da kural durumu "ETKİN" diyor:

konsolunda
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

Herhangi bir ipucu? Konsolda bulut izleme olayları kuralının doğru olduğunu ve lambda konsolunda bir tetikleyici olarak listelendiğini görebiliyorum. Zamanlayıcı ateş ediyor gibi görünüyor, ancak çağrılar başarılı değil ve lambda'nın cloudwatch günlüklerinde çağrıldığına dair bir kanıt göremiyorum. Cloudwatch olay zamanlayıcısının kendisi için herhangi bir günlük var mı? –

1

, aşağıdaki görebilirsiniz kendini tetikler. Terraform'un bunu neden yapmadığından emin değil. Bu sorun giderme ile ilgili

İlgili konular