AWS SDK로 견고한(리질리언트) 서비스 구축·관리하기
AWS SDK로 견고한(리질리언트) 서비스 구축·관리하기
이 코드 예제들은 로드 밸런싱된 웹 서비스를 만들어 책·영화·노래 추천을 반환하는 방법을 보여드려요. 예제는 서비스가 실패에 어떻게 대응하는지, 그리고 실패가 발생할 때 더 견고하게 재구성하는 방법을 보여줘요.
출처: 문서
본문
이 시나리오는 다음과 같은 구성 요소로 이루어져요.
- Amazon EC2 Auto Scaling 그룹 — 시작 템플릿(launch template)을 기반으로 Amazon Elastic Compute Cloud(Amazon EC2) 인스턴스를 만들고, 인스턴스 수를 지정된 범위 안에 유지해요.
- Elastic Load Balancing — HTTP 요청을 처리하고 분산해요.
- 헬스 체크 — Auto Scaling 그룹의 인스턴스 상태를 모니터링하고, 정상인 인스턴스에만 요청을 전달해요.
- Python 웹 서버 — 각 EC2 인스턴스에서 HTTP 요청을 처리하며, 추천과 헬스 체크에 응답해요.
- Amazon DynamoDB 테이블 — 추천 서비스를 시뮬레이션해요.
- AWS Systems Manager 파라미터 — 파라미터를 업데이트해 웹 서버의 요청·헬스 체크 응답을 제어해요.
이 시나리오는 일부 인스턴스에 장애가 발생했을 때 서비스가 어떻게 반응하는지, 그리고 장애에 더 견고하게 응답하도록 서비스를 재구성하는 방법을 살펴봐요.
.NET (SDK for .NET)
Note GitHub에 더 많은 내용이 있어요. 전체 예제와 설정·실행 방법은 AWS Code Examples Repository에서 확인할 수 있어요.
명령 프롬프트에서 대화형 시나리오를 실행해요.
static async Task Main(string[] args)
{
_configuration = new ConfigurationBuilder()
.SetBasePath(Directory.GetCurrentDirectory())
.AddJsonFile("settings.json") // Load settings from .json file.
.AddJsonFile("settings.local.json",
true) // Optionally, load local settings.
.Build();
// Set up dependency injection for the AWS services.
using var host = Host.CreateDefaultBuilder(args)
.ConfigureLogging(logging =>
logging.AddFilter("System", LogLevel.Debug)
.AddFilter<DebugLoggerProvider>("Microsoft", LogLevel.Information)
.AddFilter<ConsoleLoggerProvider>("Microsoft", LogLevel.Trace))
.ConfigureServices((_, services) =>
services.AddAWSService<IAmazonIdentityManagementService>()
.AddAWSService<IAmazonDynamoDB>()
.AddAWSService<IAmazonElasticLoadBalancingV2>()
.AddAWSService<IAmazonSimpleSystemsManagement>()
.AddAWSService<IAmazonAutoScaling>()
.AddAWSService<IAmazonEC2>()
.AddTransient<AutoScalerWrapper>()
.AddTransient<ElasticLoadBalancerWrapper>()
.AddTransient<SmParameterWrapper>()
.AddTransient<Recommendations>()
.AddSingleton<IConfiguration>(_configuration)
)
.Build();
ServicesSetup(host);
ResourcesSetup();
try
{
Console.WriteLine(new string('-', 80));
Console.WriteLine("Welcome to the Resilient Architecture Example Scenario.");
Console.WriteLine(new string('-', 80));
await Deploy(true);
Console.WriteLine("Now let's begin the scenario.");
Console.WriteLine(new string('-', 80));
await Demo(true);
Console.WriteLine(new string('-', 80));
Console.WriteLine("Finally, let's clean up our resources.");
Console.WriteLine(new string('-', 80));
await DestroyResources(true);
Console.WriteLine(new string('-', 80));
Console.WriteLine("Resilient Architecture Example Scenario is complete.");
Console.WriteLine(new string('-', 80));
}
catch (Exception ex)
{
Console.WriteLine(new string('-', 80));
Console.WriteLine($"There was a problem running the scenario: {ex.Message}");
await DestroyResources(true);
Console.WriteLine(new string('-', 80));
}
}
이 시나리오는 다음 래퍼 클래스들을 만들어요.
- Auto Scaling 및 EC2 액션을 감싸는 클래스 — 시작 템플릿·Auto Scaling 그룹·인스턴스 프로필 등을 관리해요.
- Elastic Load Balancing 액션을 감싸는 클래스 — 로드 밸런서·타깃 그룹·리스너·헬스 체크를 관리해요.
- DynamoDB로 추천 서비스를 시뮬레이션하는 클래스 — 추천 데이터를 저장하고 조회해요.
- Systems Manager 액션을 감싸는 클래스 — 파라미터를 관리해요.
API 상세는 AWS SDK for .NET API Reference의 다음 항목을 참고해요.
AttachLoadBalancerTargetGroups,CreateAutoScalingGroup,CreateInstanceProfile,CreateLaunchTemplate,CreateListener,CreateLoadBalancer,CreateTargetGroup,DeleteAutoScalingGroup,DeleteInstanceProfile,DeleteLaunchTemplate,DeleteLoadBalancer,DeleteTargetGroup,DescribeAutoScalingGroups,DescribeAvailabilityZones,DescribeIamInstanceProfileAssociations,DescribeInstances,DescribeLoadBalancers,DescribeSubnets,DescribeTargetGroups,DescribeTargetHealth,DescribeVpcs,RebootInstances,ReplaceIamInstanceProfileAssociation,TerminateInstanceInAutoScalingGroup,UpdateAutoScalingGroup
Java (SDK for Java 2.x)
Note GitHub에 더 많은 내용이 있어요. 전체 예제와 설정·실행 방법은 AWS Code Examples Repository에서 확인할 수 있어요.
명령 프롬프트에서 대화형 시나리오를 실행해요. 시나리오는 Auto Scaling 및 EC2 액션 래퍼 클래스, Elastic Load Balancing 래퍼 클래스, DynamoDB 추천 서비스 클래스, Systems Manager 래퍼 클래스를 사용해 리소스를 배포·테스트·정리해요.
API 상세는 AWS SDK for Java 2.x API Reference의 다음 항목을 참고해요.
AttachLoadBalancerTargetGroups,CreateAutoScalingGroup,CreateInstanceProfile,CreateLaunchTemplate,CreateListener,CreateLoadBalancer,CreateTargetGroup,DeleteAutoScalingGroup,DeleteInstanceProfile,DeleteLaunchTemplate,DeleteLoadBalancer,DeleteTargetGroup,DescribeAutoScalingGroups,DescribeAvailabilityZones,DescribeIamInstanceProfileAssociations,DescribeInstances,DescribeLoadBalancers,DescribeSubnets,DescribeTargetGroups,DescribeTargetHealth,DescribeVpcs,RebootInstances,ReplaceIamInstanceProfileAssociation,TerminateInstanceInAutoScalingGroup,UpdateAutoScalingGroup
JavaScript (SDK for JavaScript v3)
Note GitHub에 더 많은 내용이 있어요. 전체 예제와 설정·실행 방법은 AWS Code Examples Repository에서 확인할 수 있어요.
명령 프롬프트에서 대화형 시나리오를 실행해요. JavaScript 버전은 다음 단계로 나뉘어요.
- 모든 리소스를 배포하는 단계 — Auto Scaling 그룹, 로드 밸런서, 타깃 그룹, DynamoDB 테이블, Systems Manager 파라미터를 만들어요.
- 데모를 실행하는 단계 — 인스턴스에 장애를 주입하고 서비스의 대응을 관찰해요.
- 모든 리소스를 삭제하는 단계 — 생성한 리소스를 정리해요.
API 상세는 AWS SDK for JavaScript API Reference의 다음 항목을 참고해요.
AttachLoadBalancerTargetGroups,CreateAutoScalingGroup,CreateInstanceProfile,CreateLaunchTemplate,CreateListener,CreateLoadBalancer,CreateTargetGroup,DeleteAutoScalingGroup,DeleteInstanceProfile,DeleteLaunchTemplate,DeleteLoadBalancer,DeleteTargetGroup,DescribeAutoScalingGroups,DescribeAvailabilityZones,DescribeIamInstanceProfileAssociations,DescribeInstances,DescribeLoadBalancers,DescribeSubnets,DescribeTargetGroups,DescribeTargetHealth,DescribeVpcs,RebootInstances,ReplaceIamInstanceProfileAssociation,TerminateInstanceInAutoScalingGroup,UpdateAutoScalingGroup
Python (SDK for Python / Boto3)
Note GitHub에 더 많은 내용이 있어요. 전체 예제와 설정·실행 방법은 AWS Code Examples Repository에서 확인할 수 있어요.
명령 프롬프트에서 대화형 시나리오를 실행해요. 시나리오는 다음 래퍼 클래스들을 사용해요.
- Auto Scaling 및 EC2 액션 래퍼 클래스 — 시작 템플릿·Auto Scaling 그룹·인스턴스 프로필 등을 관리해요.
- Elastic Load Balancing 래퍼 클래스 — 로드 밸런서·타깃 그룹·리스너·헬스 체크를 관리해요.
- DynamoDB 추천 서비스 클래스 — 추천 데이터를 저장하고 조회해요.
- Systems Manager 래퍼 클래스 — 파라미터를 관리해요.
API 상세는 AWS SDK for Python (Boto3) API Reference의 다음 항목을 참고해요.
AttachLoadBalancerTargetGroups,CreateAutoScalingGroup,CreateInstanceProfile,CreateLaunchTemplate,CreateListener,CreateLoadBalancer,CreateTargetGroup,DeleteAutoScalingGroup,DeleteInstanceProfile,DeleteLaunchTemplate,DeleteLoadBalancer,DeleteTargetGroup,DescribeAutoScalingGroups,DescribeAvailabilityZones,DescribeIamInstanceProfileAssociations,DescribeInstances,DescribeLoadBalancers,DescribeSubnets,DescribeTargetGroups,DescribeTargetHealth,DescribeVpcs,RebootInstances,ReplaceIamInstanceProfileAssociation,TerminateInstanceInAutoScalingGroup,UpdateAutoScalingGroup
참고: 이 시나리오의 전체 소스 코드는 매우 방대해요. 각 언어(SDK for .NET, SDK for Java 2.x, SDK for JavaScript v3, SDK for Python/Boto3)의 완전한 예제와 설정·실행 방법은 AWS Code Examples Repository의 저장소에서 확인할 수 있어요.