Computer >> 컴퓨터 >  >> 프로그래밍 >> Python

Python Boto3로 S3 버킷 알림 구성 정보 조회하는 방법 완벽 가이드

문제 상황

Python의 boto3 라이브러리를 사용하여 S3 버킷에 설정된 알림(Notification) 구성 정보를 조회해야 합니다. 예를 들어, S3에 있는 Bucket_1 버킷의 알림 구성 세부 정보를 확인하고 싶은 경우입니다.

해결 접근 방식 및 알고리즘

1단계 – boto3와 botocore 예외 처리 모듈을 임포트하여 예외 상황에 대비합니다.

2단계 – 함수의 매개변수로 bucket_name(버킷 이름)을 사용합니다.

3단계 – boto3 라이브러리를 이용해 AWS 세션(Session)을 생성합니다.

4단계 – S3 서비스를 위한 AWS 클라이언트(Client) 객체를 생성합니다.

5단계get_bucket_notification_configuration 함수를 호출하고 버킷 이름을 인자로 전달합니다.

6단계 – 함수는 S3 버킷의 알림 구성 세부 정보가 담긴 딕셔너리(Dictionary)를 반환합니다. 만약 알림이 설정되어 있지 않다면 빈 결과를 반환합니다.

7단계 – 작업 중 오류가 발생할 경우를 대비해 일반 예외(generic exception)도 함께 처리합니다.

코드 예제

아래 코드를 사용하면 S3 버킷의 알림 구성 세부 정보를 조회할 수 있습니다.

import boto3
from botocore.exceptions import ClientError

def get_bucket_notificationconfiguration_of_s3(bucket_name):
    session = boto3.session.Session()
    s3_client = session.client('s3')
    try:
        result = s3_client.get_bucket_notification_configuration(Bucket=bucket_name,)
    except ClientError as e:
        raise Exception( "boto3 client error in get_bucket_notificationconfiguration_of_s3: " + e.__str__())
    except Exception as e:
        raise Exception( "Unexpected error in get_bucket_notificationconfiguration_of_s3 function: " + e.__str__())
    return result

print(get_bucket_notificationconfiguration_of_s3("Bucket_1"))

출력 결과

위 코드를 실행하면 다음과 같은 형태의 결과를 얻을 수 있습니다. 출력에는 SNS 토픽(TopicConfigurations), SQS 대기열(QueueConfigurations), Lambda 함수(LambdaFunctionConfigurations) 각각에 대한 알림 설정 정보가 포함됩니다.

{
    'TopicConfigurations': [
        {
            'Id': 'string',
            'TopicArn': 'string',
            'Events': [
                's3:ReducedRedundancyLostObject'|'s3:ObjectCreated:*'|'s3:ObjectCreated:Put'|
                's3:ObjectCreated:Post'|'s3:ObjectCreated:Copy'|'s3:ObjectCreated:CompleteMultipartUpload'|
                's3:ObjectRemoved:*'|'s3:ObjectRemoved:Delete'|'s3:ObjectRemoved:DeleteMarkerCreated'|
                's3:ObjectRestore:*'|'s3:ObjectRestore:Post'|'s3:ObjectRestore:Completed'|
                's3:Replication:*'|'s3:Replication:OperationFailedReplication'|
                's3:Replication:OperationNotTracked'|'s3:Replication:OperationMissedThreshold'|
                's3:Replication:OperationReplicatedAfterThreshold',
            ],
            'Filter': {
                'Key': {
                    'FilterRules': [
                        {
                            'Name': 'prefix'|'suffix',
                            'Value': 'string'
                        },
                    ]
                }
            }
        },
    ],
    'QueueConfigurations': [
        {
            'Id': 'string',
            'QueueArn': 'string',
            'Events': [
                's3:ReducedRedundancyLostObject'|'s3:ObjectCreated:*'|'s3:ObjectCreated:Put'|
                's3:ObjectCreated:Post'|'s3:ObjectCreated:Copy'|'s3:ObjectCreated:CompleteMultipartUpload'|
                's3:ObjectRemoved:*'|'s3:ObjectRemoved:Delete'|'s3:ObjectRemoved:DeleteMarkerCreated'|
                's3:ObjectRestore:*'|'s3:ObjectRestore:Post'|'s3:ObjectRestore:Completed'|
                's3:Replication:*'|'s3:Replication:OperationFailedReplication'|
                's3:Replication:OperationNotTracked'|'s3:Replication:OperationMissedThreshold'|
                's3:Replication:OperationReplicatedAfterThreshold',
            ],
            'Filter': {
                'Key': {
                    'FilterRules': [
                        {
                            'Name': 'prefix'|'suffix',
                            'Value': 'string'
                        },
                    ]
                }
            }
        },
    ],
    'LambdaFunctionConfigurations': [
        {
            'Id': 'string',
            'LambdaFunctionArn': 'string',
            'Events': [
                's3:ReducedRedundancyLostObject'|'s3:ObjectCreated:*'|'s3:ObjectCreated:Put'|
                's3:ObjectCreated:Post'|'s3:ObjectCreated:Copy'|'s3:ObjectCreated:CompleteMultipartUpload'|
                's3:ObjectRemoved:*'|'s3:ObjectRemoved:Delete'|'s3:ObjectRemoved:DeleteMarkerCreated'|
                's3:ObjectRestore:*'|'s3:ObjectRestore:Post'|'s3:ObjectRestore:Completed'|
                's3:Replication:*'|'s3:Replication:OperationFailedReplication'|
                's3:Replication:OperationNotTracked'|'s3:Replication:OperationMissedThreshold'|
                's3:Replication:OperationReplicatedAfterThreshold',
            ],
            'Filter': {
                'Key': {
                    'FilterRules': [
                        {
                            'Name': 'prefix'|'suffix',
                            'Value': 'string'
                        },
                    ]
                }
            }
        },
    ]
}

참고 사항

실제 출력 결과는 해당 버킷의 설정 및 권한 상태에 따라 달라집니다. 기본값으로 설정되어 있거나 별도로 지정되지 않은 항목은 결과에서 생략될 수 있습니다. 마찬가지로, 버킷에 알림이 전혀 설정되어 있지 않은 경우에는 아무런 구성 정보 없이 빈 응답을 반환합니다.