usar servidor qué que porque informatica expresiones aws amazon-web-services terraform

amazon web services - servidor - Use terraform para configurar una función lambda activada por un origen de evento programado



qué es aws lambda (2)

Me gustaría ejecutar una función lambda de AWS cada cinco minutos. En la consola de administración de AWS, esto es fácil de configurar, en la pestaña "Orígenes de eventos" de la función lambda, pero ¿cómo lo configuro con Terraform ?

Intenté usar un recurso aws_lambda_event_source_mapping , pero resulta que la API que usa solo admite eventos de Kinesis y DynamoDB. Cuando trato de usarlo con un origen de evento programado, la creación se agota.


La respuesta de Verbjorns Ljosa solo incluye permisos para que Cloudwatch invoque a la lambda. ¿Ha especificado la política adecuada y el rol de iam que le permita a la lambda realizar sus acciones?

resource "aws_iam_role" "check_foo_role" { name="check-foo-assume-role" assume_role_policy="assume_role_policy.json" }

con assume_role_policy.json

{ "Version": "2012-10-17", "Statement": [ { "Action": "sts:AssumeRole", "Principal": { "Service": "lambda.amazonaws.com" }, "Effect": "Allow", "Sid": "" } ] }

y una política que hace referencia al rol de iam del recurso anterior, es decir, algo así como

resource "iam_role_policy" "check-foo-policy" { name="check-foo-lambda-policy" # referencing the iam role above role="${aws_iam_role.check_foo_role.id}" policy="check-foo-policy.json" }

y finalmente el json especificando la política, check-foo-policy.json.

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "logs:CreateLogGroup", "logs:CreateLogStream", "logs:PutLogEvents" ], "Resource": ["*"] }, { "Effect": "Allow", "Action": [ "abc:SomeAction", "abc:AnotherAction", ], "Resource": "some-arn-matching-the-actions" }

Tenga en cuenta que no puede especificar una restricción de recursos para las acciones relacionadas con los registros. abc: SomeAction podría ser ssm: GetParameter con un recurso que lo acompaña, como "arn:aws:ssm:us-east-1:${your-aws-account-id}:parameter/some/parameter/path/*


Puede usar un recurso aws_cloudwatch_event_target para vincular el origen de evento programado (regla de evento) a su función lambda. Debe otorgarle permiso para invocar su función lambda; puede utilizar un recurso aws_lambda_permission para esto.

Ejemplo:

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}" }