S3 Event Notifications

S3 이벀트 μ•Œλ¦Όμ— λŒ€ν•΄ μ•Œμ•„λ³΄μž

  • S3 μ—μ„œλŠ” μ—¬λŸ¬κ°€μ§€ μ΄λ²€νŠΈκ°€ λ°œμƒν•œλ‹€.
    1. 객체 생성
    2. 객체 μ‚­μ œ
    3. 객체 볡원
    4. 객체 볡제
  • μ΄λŸ¬ν•œ μ΄λ²€νŠΈλ“€μ„ 필터링 ν•  μˆ˜λ„ μžˆλ‹€.
    • *.jpg 둜 λλ‚˜λŠ” 객체λ₯Ό 필터링 ν•  μˆ˜λ„ μžˆλ‹€.
  • μ‚¬μš© 사둀
    • S3 μ—μ„œ λ°œμƒν•˜λŠ” νŠΉμ • μ΄λ²€νŠΈμ— μžλ™μœΌλ‘œ λ°˜μ‘ν•˜κ²Œ ν•  수 μžˆλ‹€.
    • S3 에 μ—…λ‘œλ“œλ˜λŠ” μ‚¬μ§„μ˜ 섬넀일을 μƒμ„±ν•˜λ €κ³  ν•œλ‹€λ©΄ 이에 λŒ€ν•œ 이벀트 μ•Œλ¦Όμ„ λ§Œλ“€μ–΄μ„œ
      λͺ‡κ°€μ§€ μ„œλΉ„μŠ€μ— 보낼 수 μžˆλ‹€.
      1. SNS ν† ν”½
      2. SQS
      3. Lambda
  • μ›ν•˜λŠ” 만큼 S3 이벀트λ₯Ό μƒμ„±ν•˜κ³  μ›ν•˜λŠ” λŒ€μƒ(sns, sqs, lambda)둜 보낼 수 μžˆλ‹€.
    • μ΄λ²€νŠΈκ°€ μ „λ‹¬λ˜λŠ” μ‹œκ°„μ€ 일반적으둜 μ΄ˆλ‹¨μœ„ μ§€λ§Œ 가끔 1뢄이상 걸릴 μˆ˜λ„ μžˆλ‹€.
  • 이벀트λ₯Ό λ³΄λ‚΄λŠ” 4번째 λͺ©μ μ§€(μ„œλΉ„μŠ€) κ°€ μΆ”κ°€λ˜μ—ˆλ‹€.
    • Amazon EventBridge

1. Event Notifications with Amazon EventBridge

이벀트 μ•Œλ¦Όμ˜ μƒˆλ‘œμš΄ κΈ°λŠ₯으둜 Amazon EventBridge와 ν†΅ν•©λ˜μ—ˆλ‹€.

μ΄λ²€νŠΈκ°€ S3 λ²„ν‚·μœΌλ‘œ μ΄λ™ν•˜λ©΄ 이벀트 μ’…λ₯˜μ™€ 상관없이 λͺ¨λ“  μ΄λ²€νŠΈλŠ” EventBridge둜 λͺ¨μΈλ‹€.

image-20220813025526685

EventBridge μ—μ„œλŠ” κ·œμΉ™μ„ μ„€μ •ν•  수 있고, μ„€μ •ν•œ κ·œμΉ™μ„ 톡해 18κ°œκ°€ λ„˜λŠ” AWS μ„œλΉ„μŠ€μ— 이벀트 μ•Œλ¦Όμ„ 보낼 수 μžˆλ‹€. S3 이벀트 μ•Œλ¦Ό κΈ°λŠ₯을 크게 ν–₯μƒμ‹œμΌœ μ€€λ‹€.

  • EventBridge κ°€ 있으면 κ³ κΈ‰ 필터링 μ˜΅μ…˜μ„ 이전보닀 훨씬 더 많이 μ‚¬μš©ν•  수 μžˆλ‹€.
  • 메타데이터, 객체 크기, 이름 λ“±μœΌλ‘œ ν•„ν„°ν•  수 있고 λ™μ‹œμ— μ—¬λŸ¬ μˆ˜μ‹ μ§€μ— 보낼 μˆ˜λ„ μžˆλ‹€.
    • Step Functions (단계 ν•¨μˆ˜)
    • Kinesis Streams / Firehose
  • 이벀트λ₯Ό λ³΄κ΄€ν•˜κ±°λ‚˜ μž¬μƒν•  수 있고 보닀 μ•ˆμ •μ μœΌλ‘œ 전솑할 수 μžˆλ‹€.

EventBridge λŠ” 비ꡐ적 μ΅œκ·Όμ— μΆœμ‹œλ˜μ–΄ 아직 잘 λͺ¨λ₯΄λŠ” λ‚΄μš©μ΄ λ§ŽμœΌλ―€λ‘œ,
μ§€κΈˆμ€ S3 Event Notification μ—λ§Œ μ§‘μ€‘ν•˜λ„λ‘ ν•˜μž, μš”μ μ€ S3 μ—μ„œ λ°œμƒν•˜λŠ” μ΄λ²€νŠΈμ— λ°˜μ‘ν•  수 μžˆλ‹€λŠ” 것이닀.

SQS, SNS, Lambda, EventBridge λ“±μœΌλ‘œ μ•Œλ¦Όμ„ λ³΄λ‚΄λŠ” 것이닀.

2. μ‹€μŠ΅

image-20220813030222581

  • Bucket 의 Property (속성) 탭에 λ“€μ–΄κ°„λ‹€.
  • μ•„λž˜μ˜ μ΄λ²€νŠΈμ•Œλ¦Ό (Event Notifications) κ°€ μžˆλ‹€.
  • 2 가지 μ˜΅μ…˜μ΄ μžˆλ‹€.
    1. Event Notification을 μƒμ„±ν•˜λŠ” 것
    2. Amazon EventBridge 톡합을 ν™œμ„±ν™” ν•˜λŠ” 것
      • 이 λ²„ν‚·μ—μ„œ λ°œμƒν•˜λŠ” λͺ¨λ“  이벀트λ₯Ό EventBridge 둜 λ³΄λ‚΄λŠ” 것

image-20220813030557791

  • 이벀트 이름을 μ •ν•œλ‹€.
  • 필터링
    • prefix (접두사) λ₯Ό μ„ νƒμ μœΌλ‘œ μž…λ ₯ν•  수 μžˆλ‹€.
    • suffix (접미사) λ₯Ό μ„ νƒμ μœΌλ‘œ μž…λ ₯ν•  수 μžˆλ‹€.

image-20220813030744524

  • λ°œμƒμ‹œν‚¬ 이벀트의 μœ ν˜•μ„ μ„ νƒν•œλ‹€
  • 생성/ μ‚­μ œ/ 볡원/ λ“±λ“±μ˜ μ—¬λŸ¬κ°€μ§€ 이벀트 μœ ν˜•μ„ μ„€μ •ν•  수 μžˆλ‹€.
  • λ””ν…ŒμΌν•˜κ²Œ μ„€μ •ν•  μˆ˜λ„ μžˆμ§€λ§Œ, 일단 μ—¬κΈ°μ„œλŠ” 객체가 생성될 λ•Œ 이벀트λ₯Ό λ³΄λ‚΄λŠ”κ²ƒμœΌλ‘œ μ„€μ •ν•˜μ˜€λ‹€.

image-20220813031047184

  • 이벀트 μ•Œλ¦Όμ„ 보낼 λŒ€μƒμ„ μ„ νƒν•œλ‹€
    • Lambda
    • SNS Topic
    • SQS Queue
  • 그전에 Topic μ΄λ‚˜ Queue κ°€ λ§Œλ“€μ–΄μ Έ μžˆμ–΄μ•Ό 선택이 κ°€λŠ₯ν•˜λ‹€
  • SQS 의 Queueλ₯Ό λ§Œλ“€μ–΄μ„œ 선택을 해도 였λ₯˜κ°€ λ°œμƒν•˜λŠ” κ²½μš°κ°€ μžˆλ‹€.
    • Unknown Error : An unexpected error occurred.
      • API Response: Unable to validate the following destination configurations
    • μœ„μ™€ 같은 μ—λŸ¬μ˜ 원인은 λ§Œλ“€μ–΄μ§„ SQS Queueκ°€ S3 Bucket의 λ©”μ‹œμ§€λ₯Ό μˆ˜λ½ν•˜μ§€ μ•ŠκΈ° λ•Œλ¬Έμ΄λ‹€.

λˆ„κ΅¬λ‚˜ SQS Queue에 μž‘μ„±ν•  수 μžˆλŠ” 정책을 μ„€μ •ν•΄μ€˜μ•Ό ν•œλ‹€.

{
  "id": "Policy23151212312",
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "Stmt16234141242",
      "Action": [
        "sqs:SendMessage"
      ],
      "Effect": "Allow",
      "Resource": "arn:aws:sqs:ap-northest-2:123123123:{QueueName}",
      "Principal": "*"
    }
  ]
}

λŒ“κΈ€λ‚¨κΈ°κΈ°