webhook.tf 3.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091
  1. resource "aws_lambda_function" "webhook" {
  2. s3_bucket = var.lambda_s3_bucket != null ? var.lambda_s3_bucket : null
  3. s3_key = var.webhook_lambda_s3_key != null ? var.webhook_lambda_s3_key : null
  4. s3_object_version = var.webhook_lambda_s3_object_version != null ? var.webhook_lambda_s3_object_version : null
  5. filename = var.lambda_s3_bucket == null ? local.lambda_zip : null
  6. source_code_hash = var.lambda_s3_bucket == null ? filebase64sha256(local.lambda_zip) : null
  7. function_name = "${var.prefix}-webhook"
  8. role = aws_iam_role.webhook_lambda.arn
  9. handler = "index.githubWebhook"
  10. runtime = var.lambda_runtime
  11. timeout = var.lambda_timeout
  12. #architectures = [var.lambda_architecture]
  13. architectures = var.lambda_architecture == "x86_64" ? [] : [var.lambda_architecture]
  14. environment {
  15. variables = {
  16. ENABLE_WORKFLOW_JOB_LABELS_CHECK = var.enable_workflow_job_labels_check
  17. WORKFLOW_JOB_LABELS_CHECK_ALL = var.workflow_job_labels_check_all
  18. ENVIRONMENT = var.prefix
  19. LOG_LEVEL = var.log_level
  20. LOG_TYPE = var.log_type
  21. REPOSITORY_WHITE_LIST = jsonencode(var.repository_white_list)
  22. RUNNER_LABELS = jsonencode(split(",", var.runner_labels))
  23. SQS_URL_WEBHOOK = var.sqs_build_queue.id
  24. SQS_IS_FIFO = var.sqs_build_queue_fifo
  25. }
  26. }
  27. tags = var.tags
  28. }
  29. resource "aws_cloudwatch_log_group" "webhook" {
  30. name = "/aws/lambda/${aws_lambda_function.webhook.function_name}"
  31. retention_in_days = var.logging_retention_in_days
  32. kms_key_id = var.logging_kms_key_id
  33. tags = var.tags
  34. }
  35. resource "aws_lambda_permission" "webhook" {
  36. statement_id = "AllowExecutionFromAPIGateway"
  37. action = "lambda:InvokeFunction"
  38. function_name = aws_lambda_function.webhook.function_name
  39. principal = "apigateway.amazonaws.com"
  40. source_arn = "${aws_apigatewayv2_api.webhook.execution_arn}/*/*/${local.webhook_endpoint}"
  41. }
  42. data "aws_iam_policy_document" "lambda_assume_role_policy" {
  43. statement {
  44. actions = ["sts:AssumeRole"]
  45. principals {
  46. type = "Service"
  47. identifiers = ["lambda.amazonaws.com"]
  48. }
  49. }
  50. }
  51. resource "aws_iam_role" "webhook_lambda" {
  52. name = "${var.prefix}-action-webhook-lambda-role"
  53. assume_role_policy = data.aws_iam_policy_document.lambda_assume_role_policy.json
  54. path = local.role_path
  55. permissions_boundary = var.role_permissions_boundary
  56. tags = var.tags
  57. }
  58. resource "aws_iam_role_policy" "webhook_logging" {
  59. name = "${var.prefix}-lambda-logging-policy"
  60. role = aws_iam_role.webhook_lambda.name
  61. policy = templatefile("${path.module}/policies/lambda-cloudwatch.json", {
  62. log_group_arn = aws_cloudwatch_log_group.webhook.arn
  63. })
  64. }
  65. resource "aws_iam_role_policy" "webhook_sqs" {
  66. name = "${var.prefix}-lambda-webhook-publish-sqs-policy"
  67. role = aws_iam_role.webhook_lambda.name
  68. policy = templatefile("${path.module}/policies/lambda-publish-sqs-policy.json", {
  69. sqs_resource_arn = var.sqs_build_queue.arn
  70. })
  71. }
  72. resource "aws_iam_role_policy" "webhook_ssm" {
  73. name = "${var.prefix}-lambda-webhook-publish-ssm-policy"
  74. role = aws_iam_role.webhook_lambda.name
  75. policy = templatefile("${path.module}/policies/lambda-ssm.json", {
  76. github_app_webhook_secret_arn = var.github_app_webhook_secret_arn,
  77. kms_key_arn = var.kms_key_arn != null ? var.kms_key_arn : ""
  78. })
  79. }