2016-03-09 13 views
15

Tôi muốn chạy hàm lambda AWS cứ 5 phút một lần. Trong Bảng điều khiển quản lý AWS, điều này rất dễ thiết lập, trong tab "Nguồn sự kiện" của hàm lambda, nhưng làm cách nào để thiết lập nó với Terraform?Sử dụng terraform để thiết lập hàm lambda được kích hoạt bởi nguồn sự kiện được lập lịch

Tôi đã cố gắng sử dụng an aws_lambda_event_source_mapping resource, nhưng hóa ra là the API it uses chỉ hỗ trợ các sự kiện từ Kinesis và DynamoDB. Khi tôi cố gắng sử dụng nó với nguồn sự kiện được lên lịch, hãy tạo thời gian.

Trả lời

28

Bạn có thể sử dụng tài nguyên aws_cloudwatch_event_target để buộc nguồn sự kiện theo lịch (quy tắc sự kiện) vào hàm lambda của bạn. Bạn cần phải cho phép nó để gọi hàm lambda của bạn; bạn có thể sử dụng tài nguyên aws_lambda_permission cho việc này.

Ví dụ:

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

Mọi mẹo khắc phục sự cố này? Tôi có thể thấy trong giao diện điều khiển quy tắc sự kiện trên đám mây trông chính xác và trong bảng điều khiển lambda được liệt kê là trình kích hoạt. Có vẻ như bộ đếm thời gian đang kích hoạt nhưng lời gọi không thành công và tôi không thấy bằng chứng nào về lambda được gọi trong nhật ký trên máy tính bảng. Có bất kỳ nhật ký nào dành cho hẹn giờ sự kiện trên đồng hồ điện toán đám mây không? –

1

Trong giao diện điều khiển, tôi có thể thấy như sau:

enter image description here

Mặc dù nó nói tình trạng quy tắc được "kích hoạt", tôi vẫn phải kích hoạt kích hoạt chính nó. Không chắc tại sao Terraform lại không làm điều này.

Các vấn đề liên quan