Creating and Subscribing to SNS Topics, Adding SNS event for S3 bucket

Creating and Subscribing to SNS Topics, Adding SNS event for S3 bucket

avatar

Phong Nguyen

2023.12.21

Bài viết hướng dẫn cách tạo SQS Subscribing đến SNS Topics. Tạp S3 Event Notification trigger SNS Topic.

Chúng ta sẽ đi xây dựng kiến trúc gồm nhừng thành phần sau:

  • Create an SNS Topic
  • Create 2 SQS Queue
  • Subscribe to an SNS Topic (2 SQS Queue và Email)
  • Create an S3 bucket
  • Update an SNS Topic Access Policy
  • Create an S3 Event
  • Testing the SNS Notification

Lưu ý

  • AWS Region: US East (N. Virginia) us-east-1

Create SNS Topic

Vào Console của SNS -> Click Topic -> Create topic

  • Type: Standard
  • Name: d-sns-SAA-demo-topic
  • Display name - optional: AWS Notification
  • Tags - optional:
    • Key: Name
    • Value: d-sns-SAA-demo-topic
  • Các thuộc tính khác để như default

Images Images Images

Sau khi tạo xong thì chúng ta sẽ copy giá trị ARN của SNS để lát nữa Setting policy sẽ dùng giá trị này. Images

Create 2 SQS Queue

Vào Console của SQS -> CLick Create queue Images

Create SQS Queue 1

  • Type: Standard
  • Name: d-sqs-saa-demo-sqs-1
  • Access policy: Advanced -> Edit policy chổ Principal cho phép user / service nào cũng có thể gửi message đến SQS
          "Principal": {
            "AWS": "*"
          },
    
  • Tags - optional:
    • Key: Name
    • Value: d-sqs-saa-demo-sqs-1
  • Các thuộc tính khác để như default

Images Images Images

Create SQS Queue 2

Thực hiện tương tự như trên:

  • Type: Standard
  • Name: d-sqs-saa-demo-sqs-2
  • Access policy: Advanced -> Edit policy chổ Principal cho phép user / service nào cũng có thể gửi message đến SQS
          "Principal": {
            "AWS": "*"
          },
    
  • Tags - optional:
    • Key: Name
    • Value: d-sqs-saa-demo-sqs-2
  • Các thuộc tính khác để như default

Kết quả chúng ta đã tạo xong 2 SQS queue Images

Subscribe to an SNS Topic (2 SQS Queue và Email)

Vào Console SNS -> Topic -> Click vào topic vừa tạo (d-sns-SAA-demo-topic) -> Create subscription: Images

  1. Subscribe SQS 1 to SNS topic Images

  2. Subscribe SQS 2 to SNS topic (Tương tự như trên) Images

  3. Subscribe Email to SNS topic Images

  4. Sau khi hoàn thành thì trạng thái của subscription như bên dưới. Endpoint email đang Pending confirmation. Images

  5. Bạn sẽ nhận 1 email confirming your subscription to your email. Trường hợp không có trong Inbox, bạn kiểm tra trong mục Spam. Images Images Hoàn tất Images

Create an S3 bucket

  • AWS Region: US East (N. Virginia) us-east-1
  • Bucket name: d-s3-{your-name}-event-notification
    • Ex: d-s3-cloudmentor-event-notification

      (Note: The Bucket Name must be unique across all existing bucket names in Amazon S3)

  • Các thuộc tính khác để như default

Images

Sau khi tạo xong chúng ta sẽ copy ARN của Bucket để lát nữa dùng cho Setting SNS Policy Images

Update an SNS Topic Access Policy

Tại bước này chúng ta sẽ update Access Policy của SNS topic cho phép Bucket có thể send event đến SNS topic.

  1. Quay lại SNS Console.

  2. Click on Topics.

  3. Click on d-sns-SAA-demo-topic.

  4. Click on Edit Images

  5. Expand Access Policy. Images

  6. Update the SNS policy:

  • Copy Policy bên dưới vào phần Access Policy của SNS Topic
  • Sau đó bạn sẽ cần update 2 chổ:
    • Thay <Your_SNS_Topic_ARN> bằng Topic ARN của bạn trong Resources section
    • Thay <Your_Bucket_ARN> bằng Bucket ARN của bạn trong Condition section
{
  "Version": "2008-10-17",
  "Id": "__default_policy_ID",
  "Statement": [
    {
      "Sid": "__default_statement_ID",
      "Effect": "Allow",
      "Principal": {
        "AWS": "*"
      },
      "Action": [
        "SNS:GetTopicAttributes",
        "SNS:SetTopicAttributes",
        "SNS:AddPermission",
        "SNS:RemovePermission",
        "SNS:DeleteTopic",
        "SNS:Subscribe",
        "SNS:ListSubscriptionsByTopic",
        "SNS:Publish",
        "SNS:Receive"
      ],
      "Resource": "<Your_SNS_Topic_ARN>",
      "Condition": {
        "ArnLike": {
          "aws:SourceArn": "<Your_Bucket_ARN>"
        }
      }
    }
  ]
}

Images

  • Save changes

Create an S3 Event

Ở bước này chúng ta sẽ enable event notifications trên S3 Bucket đã tạo trước đó:

  1. Vào S3 Console.
  2. Click vào S3 bucket mà bạn đã tạo ở step trước.
  3. Go to the Properties tab and scroll down to Event notifications.
  4. Click on Create event notification button. Images Images
  • Event name: Notify-To-SNS
  • Event types -> Check PUT
  • Destination: select SNS Topic
  • SNS topic: Select d-sns-SAA-demo-topic

Images Images

  • Save changes

Bây giờ, S3 bucket đã được enabled event notifications cho việc putting new objects thông qua SNS topic. Images

Testing the SNS Notification

Bước này chúng ta sẽ test set up event notifications và verify notification có được gửi đến 2 SQS queue và Email thành công không.

  • Vào S3 Console
  • Click vào s3 bucket đã tạo
  • Tại tab Object -> Click Upload
  • Chọn 1 file bất kỳ và Upload

Images Upload thành công Images

Verify email

Bạn sẽ nhận 1 email từ event PUT object. Check email Images

Nếu bạn để ý thì bạn cũng nhận dc 1 email trước đó, đó là email Test dc gửi từ S3 event notification lúc mới setp xong. Images

Verify SQS

Tương tự như email, thì mỗi SQS queue cũng nhận dc 2 message.

  • 1 message test
  • 1 message khi PUT Object

Images Muốn xem nội dung message:

  • Click vào d-sqs-saa-demo-sqs-1 -> Click Send and receive message Images
  • Click poll for message sẽ nhận dc 2 message Images
  • Click vào từng message để xem nội dung Images Images

Clean up

  1. Delete SNS Topic: d-sns-SAA-demo-topic
  2. Delete 3 subscription của d-sns-SAA-demo-topic Images
  3. Delete SQS queue: d-sqs-saa-demo-sqs-1d-sqs-saa-demo-sqs-2
  4. Empty s3 bucket Images
  5. Delete s3 bucket Images