Amazon Web Services 한국 블로그
Amazon S3 멀티 리전 액세스 포인트 – 다중 리전 애플리케이션의 성능 및 가용성을 가속화하는 방법
다중 리전 애플리케이션을 구축하면 최종 사용자의 대기 시간을 개선하고, 예상치 못한 재해가 발생할 경우 가용성과 복원력을 향상할 수 있으며, 데이터 내구성 및 데이터 보존 관련 비즈니스 요구 사항을 준수할 수 있습니다. 예를 들어 사용자의 백엔드 서비스에 대한 동적 API 호출의 전반적인 대기 시간을 줄일 수 있습니다. 또는 단일 리전 배포를 확장하여 인터넷 라우팅 문제, 해저 케이블 장애 또는 지역 연결 문제를 해결하고자 할 수 있습니다. 이를 통해 처리 비용이 많이 드는 고장 시간을 방지할 수 있습니다.
현재, Amazon DynamoDB 전역 테이블, Amazon Aurora 전역 데이터베이스, Amazon ElastiCache 전역 데이터 스토어 및 Amazon Simple Storage Service(Amazon S3) 교차 리전 복제 등의 다중 리전 데이터 복제 기능 덕분에, 사용자는 다중 리전 애플리케이션을 세계 전역에 위치한 25곳의 AWS 리전에 구축할 수 있습니다.
그러나, 다중 리전 애플리케이션을 구현할 때는 코드 리전 인식을 만들고, 가장 가까운 리소스 혹은 가장 많이 사용할 수 있는 리소스 여부에 관계없이 올바른 리전 리소스와의 상호작용에 대한 무거운 부담을 해결해야 합니다. 예를 들어, 3개의 AWS 리전 전반에 객체 복제가 포함된 S3 버킷이 세 개 있을 수 있습니다. 사용자의 애플리케이션 코드는 버킷의 복사본 수와 위치, 발신자와 가장 가까운 버킷, 그리고 문제가 발생할 경우 다른 버킷으로 대비하는 방법을 알고 있어야 합니다. 다중 리전 아키텍처에 새 리전을 추가하고, 전역 구성이 변경될 때마다 각 리전에 스택을 재배포하면 복잡성이 커집니다.
오늘 Amazon S3 다중 리전 액세스 포인트 기능을 정식 출시합니다. 이 기능은 여러 AWS 리전의 버킷에 퍼져있는 글로벌 엔드포인트를 정의할 수 있는 새로운 S3 기능입니다. S3 다중 리전 액세스 포인트를 사용하면 단일 리전에서 사용하는 것과 동일한 단순 아키텍처를 사용해 다중 리전 애플리케이션을 구축할 수 있습니다.
S3 다중 리전 액세스 포인트는 AWS 글로벌 네트워크를 통해 S3 요청을 라우팅하기 위해 상위AWS Global Accelerator를 기반으로 기본 제공되는 네트워크 복원력을 제공합니다. 이는 단순한 애플리케이션 아키텍처를 유지하면서 네트워크 혼잡과 전반적인 대기 시간을 최소화하기 위해 특히 중요합니다. AWS Global Accelerator는 리전 가용성을 지속적으로 모니터링하고 몇 초 내에 요청을 다른 리전으로 옮길 수 있습니다. S3 다중 리전 액세스 포인트는 대기 시간이 가장 낮은 데이터 복사본으로 요청을 동적 라우팅하여 업로드 및 다운로드 성능을 최대 60%까지 향상시킵니다. 구성 파일 또는 애플리케이션 데이터를 읽을 때 S3에 의존하는 서버 측 애플리케이션뿐만 아니라, IoT 디바이스 또는 자율 주행 차량과 같이 성능과 안정적인 쓰기 전용 엔드포인트가 필요한 엣지 애플리케이션에도 적합합니다.
Amazon S3 다중 리전 액세스 포인트 사용하기
바로 시작하려면 S3 콘솔 내, API를 통해, 또는 AWS CloudFormation으로 S3 다중 리전 액세스 포인트를 생성합니다.
S3 콘솔을 사용하여 생성하는 방법을 보여 드리겠습니다. 각 액세스 포인트에는 계정 수준에서 고유한 이름이 필요합니다.
생성된 후에는 자동으로 생성되며 전역적으로 고유한 별칭을 통해 액세스할 수 있습니다. 별칭은 .mrap
으로 끝나는 임의의 문자열처럼 보입니다(예: mmqdt41e4bf6x.mrap
). 또한https://mmqdt41e4bf6x.mrap.s3-global.amazonaws.com
, VPC, 또는AWS PrivateLink를 사용하는 온프레미스를 통하여 인터넷으로 액세스할 수도 있습니다.
그런 다음 여러 버킷(신규 또는 기존 버킷)을 리전당 하나씩 액세스 포인트에 연결합니다. 데이터 복제가 필요한 경우 버킷 버전 관리도 활성화해야 합니다.
마지막으로 액세스 포인트에 대한 퍼블릭 액세스 블록 설정을 구성합니다. 기본적으로 대부분의 경우에 정상적으로 작동하는 모든 퍼블릭 액세스가 블록됩니다.
생성 프로세스는 비동기식이므로 콘솔에서 생성 상태를 확인하거나, CLI에서 S3 다중 리전 액세스 포인트를 나열하여 생성할 수 있습니다. 준비가 되면 액세스 포인트 정책 및 객체 복제에 대한 선택적 설정을 구성할 수 있습니다.
일반 액세스 포인트와 마찬가지로 액세스 제어 정책을 사용자 지정하여 버킷의 권한과 관련된 액세스 포인트 사용을 제한할 수 있습니다. 액세스 포인트와 기본 버킷은 모두 요청을 허용해야 합니다. S3 다중 리전 액세스 포인트는 권한을 확장할 수 없으며, 이를 제한(또는 동일하게)합니다. 또한 IAM Access Analyzer를 사용하여 S3 다중 리전 액세스 포인트를 사용하는 버킷에 대한 퍼블릭 및 교차 계정 액세스를 확인하고, 권한 변경을 배포하기 전 버킷에 대한 액세스를 미리 볼 수 있습니다.
S3 다중 리전 액세스 포인트 액세스 정책은 다음과 같습니다.
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "Default",
"Effect": "Allow",
"Principal": {
"AWS": "YOUR_ACCOUNT_ID"
},
"Action": ["s3:GetObject", "s3:PutObject"],
"Resource": "arn:aws:s3::YOUR_ACCOUNT_ID:accesspoint/YOUR_ALIAS/object/*"
}
]
}
S3 다중 리전 액세스 포인트와 함께 사용되는 버킷 간에 데이터를 복제하려면 S3 복제를 구성합니다. 경우에 따라 사용자는 각 버킷에 서로 다른 콘텐츠를 저장하거나, 또는 리전 액세스 포인트 또는 직접 버킷 액세스에만 복제 또는 사용되지 않는 전역 엔드포인트와 기타 부분에 사용할 리전 버킷의 일부를 가지고자 할 수 있습니다. 예를 들어 IoT 디바이스 구성은 버킷마다 달라질 리전 API 엔드포인트 또는 리전 리소스에 대한 참조를 포함할 수 있습니다.
새로운 S3 콘솔은 복제 규칙을 쉽게 중앙에서 생성하도록 사용할 수 있는 두 가지 기본 템플릿을 제공합니다.
- 하나 이상의 소스 버킷에서 하나 이상의 대상 버킷으로 객체 복제: 특정 AWS 리전에서 데이터가 항상 생성되고 사용자는 다른 모든 리전에서도 데이터를 사용할 수 있게 하려는 기성 전용 사용 사례에 이상적입니다.
- 모든 지정 버킷 간 객체 복제: 디바이스가 가장 가까운 리전에 데이터를 업로드하기 위해 사용하는 쓰기 전용 액세스 포인트를 정의하고, 사용자가 이 데이터를 모든 리전에서 사용할 수 있어야 하는 IoT 시나리오에 이상적입니다.
물론 필터 및 조건을 통해 보다 정교한 복제 설정을 생성할 수 있습니다. 예를 들어 접두사 또는 태그를 기반으로 특정 객체만 복제하고자 할 수 있습니다.
교차 리전 복제에 대한 버킷 버전 관리를 활성화해야 합니다.
콘솔은 복제 규칙 및 IAM 역할을 생성하고 구성하는 작업을 담당합니다. 버킷을 추가 또는 제거하려면 수정된 목록을 사용하여 S3 다중 리전 액세스 포인트를 새로 생성해야 합니다.
복제 규칙 외에도 RTC(복제 시간 제어), 지표 및 알림, 양방향 동기화와 같은 복제 옵션을 구성할 수 있습니다. RTC를 사용하면 대부분의 새 객체를 몇 초 만에 복제할 수 있으며, 복제 속도가 중요한 사용 사례는 15분 내에 해당 객체의 99.99%를 복제할 수 있습니다. 복제 지표를 사용하면 객체 및 바이트 수 측면에서 버킷이 동기화되는 방식을 모니터링할 수 있습니다. 양방향 동기화를 통해 객체 메타데이터를 버킷 간에 복제해야 하는 무거운 사용 사례에 대한 활성/활성 구성입니다.
복제가 구성된 후에는 어떤 AWS 리전이 활성화되었는지 확인할 수 있는 매우 유용한 시각적 및 대화형 요약을 얻을 수 있습니다. 맵의 위치, 리전 버킷의 이름, 그리고 적용 중인 복제 규칙을 확인할 수 있습니다.
S3 다중 리전 액세스 포인트가 정의되고 올바르게 구성되면, S3 API, AWS CLI 또는 AWS SDK를 통해 상호 작용을 시작할 수 있습니다. 예를 들어, CLI를 사용하여 새 객체를 작성하고 읽는 방법은 다음과 같습니다 (최신 CLI 버전으로 업그레이드하는 것을 잊지 마세요).
# 새 객체 만들기
aws s3api put-object --bucket arn:aws:s3::YOUR_ACCOUNT_ID:accesspoint/YOUR_ALIAS --key test.png --body test.png
# 동일한 객체 검색
aws s3api get-object --bucket arn:aws:s3::YOUR_ACCOUNT_ID:accesspoint/YOUR_ALIAS --key test.png test.png
마지막으로 Amazon CloudWatch의 버킷 지표를 사용하여 사용자 요청이 다중 AWS 리전의 버킷 전반에 분산되는 방식을 추적할 수 있습니다.
출시 시 CloudFormation Support
이제 사용자는 두 개의 새로운 CloudFormation 리소스를 사용하여 S3 다중 리전 액세스 포인트인 AWS::S3::MultiRegionAccessPoint
및 AWS::S3::MultiRegionAccessPointPolicy
를 쉽게 정의할 수 있습니다.
예시는 다음과 같습니다.
Resources:
MyS3MultiRegionAccessPoint:
Type: AWS::S3::MultiRegionAccessPoint
Properties:
Regions:
- Bucket: regional-bucket-ireland
- Bucket: regional-bucket-australia
- Bucket: regional-bucket-us-east
PublicAccessBlockConfiguration:
BlockPublicAcls: true
IgnorePublicAcls: true
BlockPublicPolicy: true
RestrictPublicBuckets: true
MyMultiRegionAccessPointPolicy:
Type: AWS::S3::MultiRegionAccessPointPolicy
Properties:
MrapName: !Ref MyS3MultiRegionAccessPoint
Policy:
Version: 2012-10-17
Statement:
- Action: '*'
Effect: Allow
Resource: !Sub
- 'arn:aws:s3::${AWS::AccountId}:accesspoint/${mrapalias}/object/*'
- mrapalias: !GetAtt
- MyS3MultiRegionAccessPoint
- Alias
Principal: {"AWS": !Ref "AWS::AccountId"}
AWS::S3::MultiRegionAccessPoint
리소스는 S3 버킷 이름에만 의존합니다. 사용자는 다른 리전 스택을 참조할 필요가 없으며, S3 다중 리전 액세스 포인트 정의를 자체 스택으로 쉽게 중앙 집중화할 수 있습니다. 그렇지 않으면 각 S3 버킷에 교차 리전 복제를 구성해야 합니다.
비용 고려 사항
S3 다중 리전 액세스 포인트를 사용하여 AWS 글로벌 네트워크 내에서 요청을 라우팅하는 경우 S3 요청, 스토리지, 데이터 전송 및 복제에 대한 표준 요금 외에 처리된 GB당 0.0033 USD의 데이터 라우팅 비용을 지불합니다. 애플리케이션이 인터넷을 통해 S3 다중 리전 액세스 포인트에 액세스하는 경우 GB당 인터넷 가속 비용도 청구됩니다. 이 비용은 전송 유형(업로드 또는 다운로드)과 클라이언트 및 버킷이 동일 또는 다른 위치에 있는지 여부에 따라 달라집니다. 자세히 알아보려면 S3 요금 페이지를 방문하여 데이터 전송 탭을 선택하세요.
몇 가지 실용적인 예를 알려 드리겠습니다.
- AWS 리전 내의 모든 트래픽: 이 간단한 경우에서 애플리케이션은 미국 동부(버지니아 북부)에서 실행되며, 사용자는 미국 동부(버지니아 북부)와 미국 서부(오레곤)에 두 개의 S3 버킷을 구성합니다. 애플리케이션이 100GB의 데이터를 업로드하며 대기 시간이 가장 짧은 버킷은 미국 동부(버지니아 북부)에 있습니다. 모든 데이터는 S3 다중 리전 액세스 포인트가 동일 리전에 라우팅하며 총 비용은 0.33 USD입니다.
- 두 AWS 리전 간의 모든 트래픽: 이 경우에서 애플리케이션은 미국 동부(버지니아 북부)에서 실행되며, 사용자는 미국 동부(오하이오)와 미국 서부(오레곤)에 두 개의 S3 버킷을 구성합니다. 애플리케이션이 100GB의 데이터를 업로드하며 대기 시간이 가장 짧은 버킷은 미국 동부(오하이오)에 있습니다. 모든 데이터는 S3 다중 리전 액세스 포인트를 통해 두 AWS 리전 전반에 라우팅됩니다. 100GB에 대한 데이터 라우팅 비용은 이전 예시와 동일(0.33 USD)하며 S3 데이터 전송 비용은 GB당 0.01 USD으로 총 비용은 1.33 USD입니다.
- 북미, 유럽 및 아시아 태평양 지역의 인터넷을 통한 모든 트래픽(다운로드 및 업로드): 이 경우 애플리케이션은 북미, 유럽 및 아시아의 고객 디바이스에서 실행되며 사용자는 미국 동부(버지니아 북부) 및 EU(아일랜드)에 두 개의 S3 버킷을 구성합니다. 북미 지역의 한 고객은 미국 동부(버지니아 북부)의 버킷으로 라우팅되는 50GB의 데이터를 업로드하고, 유럽의 두 번째 고객은 EU(아일랜드)의 버킷에서 50GB의 데이터를 다운로드하며, 아시아의 세 번째 고객은 EU(아일랜드)의 버킷에서 50GB의 데이터를 다운로드합니다. 150GB의 데이터 라우팅 비용은 0.495 USD입니다. 또한 S3에서 유럽으로의 데이터 전송이 GB당 0.09 USD(9 USD), 북미에서 미국 동부(버지니아 북부)의 S3 버킷으로의 인터넷 가속 비용이 GB당 0.0025 USD(0.125 USD), EU(아일랜드)의 S3 버킷에서 유럽으로의 인터넷 가속 비용이 GB당 0.005 USD(0.25 USD), 그리고 EU(아일랜드)의 S3 버킷에서 아시아로의 인터넷 가속 비용이 GB당 0.05 USD(2.5 USD)입니다. 총 비용은 12.37 USD입니다. 이 예시는 인터넷 가속화 비용이 대륙에 걸쳐 어떻게 작동하는지 보여주기 위한 것입니다. 또한 아시아의 추가 S3 버킷을 사용하면 아시아로의 인터넷 가속화 비용이 그 중요도만큼 줄어들 수 있습니다(다음 예시 참조).
- 북미, 유럽 및 아시아 태평양 지역의 인터넷을 통한 모든 트래픽(업로드만 가능): 이 경우 이전 예시와 동일한 조건을 고려합니다. 유일한 차이점은 모든 고객이 데이터만 업로드하고 아시아 태평양(싱가포르)에서 추가 버킷을 구성한다는 것입니다. 데이터 라우팅 비용은 동일합니다(0.495 USD). 또한 북미에서 미국 동부(버지니아 북부)의 S3 버킷으로의 인터넷 가속 비용이 GB당 0.0025 USD(0.125 USD), 유럽에서 EU(아일랜드)의 S3 버킷으로의 인터넷 가속 비용이 GB당 0.0025 USD(0.125 USD), 그리고 아시아에서 아시아 태평양(싱가포르)의 S3 버킷으로의 인터넷 가속 비용이 GB당 0.01 USD(0.5 USD)입니다. 총 비용은 1.24 USD입니다.
즉, 라우팅 비용은 예측하기 쉬우며 애플리케이션 유형이나 데이터 액세스 패턴에 의존하지 않습니다. 인터넷 가속화 비용은 액세스 패턴(업로드보다 다운로드가 더 많음)과 가장 가까운 AWS 리전과 관련하여 클라이언트 위치에 따라 다릅니다. 인터넷을 통해 데이터를 업로드하거나 다운로드하는 글로벌 애플리케이션의 경우 각 대륙에 하나 이상의 S3 버킷을 구성하여 인터넷 가속화 비용을 최소화할 수 있습니다.
지금 이용 가능
Amazon S3 다중 리전 액세스 포인트를 사용하면 여러 AWS 리전에서 데이터에 액세스할 때 탄력성을 높이고 애플리케이션 성능을 최대 60%까지 가속화할 수 있습니다. 다중 리전 애플리케이션을 설계하고 구현하는 방법을 신속하게 반복하고 간소화할 수 있도록 사용 사례에 대한 피드백을 주시기를 바랍니다.
S3 API, CLI, SDK, AWS CloudFormation 또는 S3 콘솔을 사용하여 시작할 수 있습니다. 이 새로운 기능은 전 세계 17개 AWS 리전에서 사용할 수 있습니다(지원되는 AWS 리전 전체 목록 참조).
자세히 알아보기
S3 다중 리전 액세스 포인트에 대해 자세히 알아보고 짧은 데모를 보려면 이 비디오를 시청하세요.
S3 다중 리전 액세스 포인트에 대한 기술 설명서를 확인하세요.
— Alex