main.tf 2.5 KB

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