main.tf 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101
  1. ######################################
  2. # The fair queueing module example
  3. module "sqs_fair_queue" {
  4. source = "./module_sqs_fair_queueing"
  5. source_sqs_arn = aws_sqs_queue.queue.arn
  6. source_sqs_url = aws_sqs_queue.queue.url
  7. lambda_timeout = aws_sqs_queue.queue.visibility_timeout_seconds - 5
  8. sqs_prefix = "mbox-fair-queueing-test-fq"
  9. num_queues = 4
  10. hash_jsonpath = "$" # This will evenly distribute all messages
  11. tags = local.tags
  12. }
  13. ######################################
  14. # Example Resources for testing
  15. # tfsec:ignore:aws-s3-enable-bucket-logging Logging is a good idea, but we don't here.
  16. # tfsec:ignore:aws-s3-enable-versioning Versioning is a good idea, but we don't here.
  17. resource "aws_s3_bucket" "bucket" {
  18. bucket = "mbox-fair-queueing-test"
  19. force_destroy = true
  20. tags = merge(local.tags, {
  21. Name = "mbox-fair-queueing-test"
  22. Environment = "Dev"
  23. Purpose = "POC bucket for S3 fair queueing"
  24. })
  25. }
  26. resource "aws_s3_bucket_acl" "bucket" {
  27. bucket = aws_s3_bucket.bucket.id
  28. acl = "private"
  29. }
  30. resource "aws_s3_bucket_public_access_block" "bucket" {
  31. bucket = aws_s3_bucket.bucket.id
  32. block_public_acls = true
  33. block_public_policy = true
  34. ignore_public_acls = true
  35. restrict_public_buckets = true
  36. }
  37. # tfsec:ignore:aws-s3-encryption-customer-key AWS managed key is sufficient
  38. resource "aws_s3_bucket_server_side_encryption_configuration" "bucket" {
  39. bucket = aws_s3_bucket.bucket.bucket
  40. rule {
  41. apply_server_side_encryption_by_default {
  42. sse_algorithm = "AES256"
  43. }
  44. }
  45. }
  46. # SNS and SQS configuration for the root bucket
  47. #
  48. # NOTE! Only this first sns/sqs needs to be set up.
  49. # The module will set up the sqs queues for FIFO.
  50. #
  51. # Remember that the consumer service needs access to the FIFO queues,
  52. # not these.
  53. resource "aws_sqs_queue" "queue" {
  54. name = "mbox-bucket-notification"
  55. sqs_managed_sse_enabled = true
  56. policy = <<POLICY
  57. {
  58. "Version": "2012-10-17",
  59. "Statement": [
  60. {
  61. "Effect": "Allow",
  62. "Principal": "*",
  63. "Action": "sqs:SendMessage",
  64. "Resource": "arn:aws:sqs:*:*:mbox-bucket-notification",
  65. "Condition": {
  66. "ArnEquals": { "aws:SourceArn": "${aws_s3_bucket.bucket.arn}" }
  67. }
  68. }
  69. ]
  70. }
  71. POLICY
  72. depends_on = [aws_s3_bucket.bucket]
  73. tags = local.tags
  74. }
  75. resource "aws_s3_bucket_notification" "bucket_notification" {
  76. bucket = aws_s3_bucket.bucket.id
  77. queue {
  78. queue_arn = aws_sqs_queue.queue.arn
  79. events = ["s3:ObjectCreated:*"]
  80. filter_prefix = "incoming/"
  81. }
  82. depends_on = [aws_sqs_queue.queue, aws_s3_bucket.bucket]
  83. }