AWS 개발자 자격증 샘플 문항 (번역/해설)

⏱ 23 분

문제 1

CloudFormation 을 이용해 us-east-1 에서 2티어 웹 애플리케이션을 실행한다. us-west-1 에서 개발 스택을 생성하려고 하면 프로세스가 실패한다. 무엇이 문제일까?

A. 템플릿에서 참조하는 AMI 가 us-west-1 에서 사용 불가.
B. 템플릿에서 참조하는 IAM 역할이 us-west-1 에서 유효하지 않음.
C. 두 개의 ELB 클래식 로드밸런서는 같은 이름 태그를 가질 수 없다.
D. 클라우드포메이션 템플릿은 하나의 리젼에서만 실행 가능하다.

  1. Your CloudFormation template launches a two-tier web application in us-east-1. When you attempt to create a development stack in us-west-1, the process fails.

What could be the problem?

A. The AMIs referenced in the template are not available in us-west-1.
B. The IAM roles referenced in the template are not valid in us-west-1.
C. Two ELB Classic Load Balancers cannot have the same Name tag.
D. CloudFormation templates can be launched only in a single region.


정답 : A. AMI 는 리젼 안에 저장되고 다른 리젼에서는 접근할 수 없다. AMI 를 다른 리젼에서 사용하기 위해서는, 해당 리젼으로 복사해야 한다. IAM 롤은 계정 전체에서 유효하다.

A – AMIs are stored in a region and cannot be accessed in other regions. To use the AMI in another region, you must copy it to that region. IAM roles are valid across the entire account.


인스턴스 및 AMI

*Amazon 머신 이미지(AMI)*은 필요한 소프트웨어가 이미 구성되어 있는 템플릿입니다(예: 운영 체제, 애플리케이션 서버, 애플리케이션). AMI에서 인스턴스를 바로 시작하실 수 있는데, 이 인스턴스는 AMI의 사본으로, 클라우드에서 실행되는 가상 서버입니다. 다음 그림과 같이, 한 AMI로 여러 인스턴스를 실행할 수 있습니다.

 AMI에서 여러 개의 인스턴스 시작

중지하거나 종료할 때까지 또는 실패하기 전까지 인스턴스는 계속 실행됩니다. 인스턴스가 실패하면 AMI에서 새로 실행할 수 있습니다.

인스턴스

동일한 AMI에서 다른 유형의 인스턴스를 실행할 수 있습니다. 인스턴스 유형에 따라 인스턴스에 사용되는 호스트 컴퓨터의 하드웨어가 결정됩니다. 각 인스턴스 유형은 서로 다른 컴퓨팅 및 메모리 기능을 제공합니다. 인스턴스에서 실행하려는 애플리케이션 또는 소프트웨어에 필요한 메모리 양과 컴퓨팅 파워를 기준으로 인스턴스 유형을 선택하십시오. Amazon EC2 인스턴스 유형별 하드웨어 사양에 대한 자세한 내용은 Amazon EC2 인스턴스 유형 단원을 참조하십시오.

일단 인스턴스가 시작되면, 인스턴스는 다른 컴퓨터와 다를 것이 없고, 어느 컴퓨터와 동일한 방식으로 다루시면 됩니다. 인스턴스의 완벽한 통제가 가능하며, 루트 권한이 필요한 명령어는 sudo를 사용해 실행할 수 있습니다.

AMI

Amazon Web Services(AWS)에서는 자주 사용되는 소프트웨어 구성을 포함하는 다양한 Amazon 머신 이미지(AMI)가 공개 게시하고 있습니다. 그 뿐 아니라 AWS 개발자 커뮤니티 회원들이 올린 자체 구성 AMI도 게시되어 있습니다. 또한 얼마든지 사용자 정의된 AMI을 생성할 수 있어서, 고객님께서 필요하신 기능을 모두 갖춘 새로운 인스턴스를 쉽고 빠르게 시작할 수 있습니다. 예를 들어 고객님의 애플리케이션이 웹사이트나 웹 서비스인 경우, 웹 서버와 관련 고정 콘텐츠, 그리고 동적 페이지에 사용할 코드가 포함된 AMI를 정의해 만드실 수 있습니다. 그래서, 이 AMI에서 인스턴스가 시작이 되면, 고객님의 웹 서버가 자동으로 시작되고 애플리케이션은 바로 Request를 처리할 수 있습니다.

리전 간 AMI 복사

지리적으로 다른 리전 간에 AMI를 복사하면 다음과 같은 이점이 제공됩니다.

  • 일관적인 글로벌 배포: 한 리전에서 다른 리전으로 AMI를 복사하면 동일한 AMI를 기반으로 하는 일관적인 인스턴스를 여러 리전에서 시작할 수 있습니다.
  • 확장성: 사용자의 지역에 관계없이 요구 사항에 대응하는 글로벌 애플리케이션을 보다 손쉽게 설계하고 구축할 수 있습니다.
  • 성능: 애플리케이션을 분산하여 성능을 높이고 애플리케이션의 핵심 구성 요소를 사용자에게 보다 가까이 둘 수 있습니다. 또한 인스턴스 유형이나 여타 AWS 서비스와 같은 리전별 기능을 활용할 수 있습니다.
  • 고가용성: 여러 AWS 리전을 포괄하는 애플리케이션을 설계하고 배포하여 가용성을 높일 수 있습니다.

 서로 다른 리전에 복사된 AMI


문제 2

당신의 애플리케이션은 SQS 큐에서 명령을 읽고 파트너가 호스팅하는 웹 서비스로 보낸다. 파트너의 엔드포인트가 다운되면, 당신의 애플리케이션이 명령을 큐로 계속해서 리턴한다. 이렇게 반복해서 시도하면 리소스가 모두 사용되고, 전송되지 않은 명령어는 손실되면 안 된다.

어떻게 하면 리소스를 낭비하지 않으면서 파트너의 중단된 웹 서비스를 수용할 수 있을까?

A. 딜레이 큐를 생성하고 DelaySeconds 를 30초로 설정한다.
B. VisibilityTimeout 을 30초로 설정해서 명령어를 다시 큐에 입력한다.
C. 전달되지 않은 메시지 큐(dead letter queue)를 생성하고 Maximum Receives 를 3으로 설정한다.
D. DelaySeconds 를 30초로 설정하고 다시 큐에 입력한다.

  1. Your application reads commands from an SQS queue and sends them to web services hosted by your partners. When a partner’s endpoint goes down, your application continually returns their commands to the queue. The repeated attempts to deliver these commands use up resources. Commands that can’t be delivered must not be lost.

How can you accommodate the partners’ broken web services without wasting your resources?

A. Create a delay queue and set DelaySeconds to 30 seconds.
B. Requeue the message with a VisibilityTimeout of 30 seconds.
C. Create a dead letter queue and set the Maximum Receives to 3.
D. Requeue the message with a DelaySeconds of 30 seconds.


정답 : C. 큐를 설정해놓으면, 큐에서 가져간 메시지를 최대 횟수만큼 재시도한 후 자동으로 데드 레터 큐로 보내지게 된다. 그것을 찾을 때까지 저장된다.

C – After a message is taken from the queue and returned for the maximum number of retries, it is automatically sent to a dead letter queue, if one has been configured. It stays there until you retrieve it for forensic purposes.


Amazon Simple Queue Service

Amazon Simple Queue Service(Amazon SQS)는 마이크로 서비스, 분산 시스템 및 서버리스 애플리케이션을 쉽게 분리하고 확장할 수 있게 해주는 완전관리형 메시지 대기열 서비스입니다. Amazon SQS를 사용하면 분산된 애플리케이션 구성 요소 간 데이터 이동이 가능하며, 이러한 구성 요소의 결합을 해제할 수 있습니다.

Amazon SQS 배달 못한 편지 대기열

Amazon SQS는 다른 대기열(소스 대기열)이 처리(소비)하지 못한 메시지를 보낼 수 있는 배달 못한 편지 대기열을 지원합니다. 배달 못한 편지 대기열은 문제가 있는 메시지를 구분하여 처리가 실패한 이유를 확인할 수 있으므로 애플리케이션 또는 메시징 시스템을 디버깅하는 데 유용합니다.

생성자 또는 소비자 애플리케이션 내부의 오류 상태 또는 애플리케이션 코드에 문제를 발생시키는 예기치 않은 상태 변경 등의 다양한 문제로 인해 메시지를 처리할 수 없는 경우가 있습니다.

리드라이브 정책소스 대기열, 배달 못한 편지 대기열, 그리고 소스 대기열의 소비자가 메시지 처리에 실패한 횟수가 정해진 숫자에 도달하면 Amazon SQS가 소스 대기열에서 배달 못한 편지 대기열로 메시지를 옮기도록 하는 조건 등을 지정합니다. 예를 들어, 소스 대기열의 리드라이브 정책에 maxReceiveCount가 5로 설정되어 있을 때 소스 대기열의 소비자가 메시지 하나를 5번 받았는데 한 번도 삭제하지 못하는 경우, Amazon SQS는 이 메시지를 배달 못한 대기열로 옮깁니다.

배달 못한 편지 대기열의 주된 용도는 메시지 전송 실패를 처리하는 것입니다. 제대로 처리하지 못한 메시지를 구분하여 배달 못한 편지 대기열에 격리한 다음, 처리에 실패한 이유를 확인할 수 있습니다. 배달 못한 편지 대기열을 설정하면 다음과 같이 할 수 있습니다.

  • 배달 못한 편지 대기열로 메시지가 배달되면 경보가 울리도록 구성합니다.
  • 메시지가 배달 못한 편지 대기열로 배달되게 만든 예외적인 상황의 로그를 검사합니다.
  • 배달 못한 편지 대기열로 배달된 메시지의 내용을 분석하여 소프트웨어 문제 또는 생산자나 소비자의 하드웨어 문제를 진단합니다.
  • 소비자에게 메시지를 처리하기에 충분한 시간을 주었는지 확인합니다.

문제 3

당신의 애플리케이션은 SQS 큐에 써야 한다. 회사 보안 정책에 따라 AWS 자격 증명은 항상 암호화되고 일주일에 한 번 이상 순환되어야 한다.

당신의 애플리케이션이 큐에 write 할 수 있는 자격증명을 어떻게 안전하게 제공할 수 있는가?

A. 애플리케이션이 런타임에 Amazon S3 에서 액세스키를 가져오도록 한다.
B. IAM 역할로 애플리케이션의 Amazon EC2 인스턴스를 실행한다.
C. 애플리케이션 소스 코드 내에서 액세스키를 암호화한다.
D. 인스턴스를 Active Directory 도메인에 등록하고 AD 인증을 사용한다.

  1. Your application must write to an SQS queue. Your corporate security policies require that AWS credentials are always encrypted and are rotated at least once a week.

How can you securely provide credentials that allow your application to write to the queue?

A. Have the application fetch an access key from an Amazon S3 bucket at run time.
B. Launch the application’s Amazon EC2 instance with an IAM role.
C. Encrypt an access key in the application source code.
D. Enroll the instance in an Active Directory domain and use AD authentication.


정답 : B. IAM 롤은 임시 보안 토큰에 기반하고 있어서 자동적으로 순환된다. 키를 소스 코드 내에서 다루는 것은 불가능하고 아주 나쁜 아이디어다. S3 버켓에 대한 자격 증명이 없으면 S3 버킷에서 자격 증명을 검색할 수 없다. Active Directory 인증은 AWS 리소스에 접근할 권한을 얻을 수 없다.

B – IAM roles are based on temporary security tokens, so they are rotated automatically. Keys in the source code cannot be rotated (and are a very bad idea). It’s impossible to retrieve credentials from an S3 bucket if you don’t already have credentials for that bucket. Active Directory authorization will not grant access to AWS resources.


IAM

IAM(AWS Identity and Access Management)은 AWS 리소스에 대한 액세스를 안전하게 제어할 수 있는 웹 서비스입니다. IAM을 사용하여 리소스를 사용하도록 인증(로그인) 및 권한 부여(권한 있음)된 대상을 제어합니다.


문제 4

다음 중 일시적으로 일관성 없는 결과를 리턴할 수 있는 작업은 무엇인가?

A. Amazon S3 에서 객체를 처음 생성 후 가져오는 작업.
B. Amazon RDS DB에 데이터를 isnert 후 row 를 select.
C. Amazon RDS DB에서 데이터를 delete 한 후 row 를 select.
D. Amazon S3 에서 객체를 삭제 후 가져오는 작업.

  1. Which operation could return temporarily inconsistent results?

A. Getting an object from Amazon S3 after it was initially created
B. Selecting a row from an Amazon RDS database after it was inserted
C. Selecting a row from an Amazon RDS database after it was deleted
D. Getting an object from Amazon S3 after it was deleted


정답 : D. S3 has eventual consistency for overwrite PUTS and DELETES.


Amazon S3

Amazon Simple Storage Service는 인터넷용 스토리지 서비스입니다. 개발자가 보다 쉽게 웹 규모 컴퓨팅 작업을 할 수 있도록 설계되었습니다.

Amazon S3에서 제공하는 단순한 웹 서비스 인터페이스를 사용하여 웹에서 언제 어디서나 원하는 양의 데이터를 저장하고 검색할 수 있습니다. 또한 개발자는 Amazon이 자체 웹 사이트의 글로벌 네트워크 운영에 사용하는 것과 같은 높은 확장성과 신뢰성을 갖춘 빠르고 경제적인 데이터 스토리지 인프라에 액세스할 수 있습니다.


문제 5

다음 속성을 갖는 DynamoDB 테이블을 만들고 있다.

  • PurchaseOrderNumber (partition key)
  • CustomerID
  • PurchaseDate
  • TotalPurchaseValue

애플리케이션 중 하나가 날짜 범위에 걸쳐 특정 고객의 총 구매 가격을 계산하기 위해 테이블을 사용하려고 한다.

테이블에 추가되어야 하는 보조 인덱스는 무엇인가?

A. CustomerID 의 파티션 키와 PurchaseDate 의 정렬키를 갖는 로컬 보조 인덱스; TotalPurchaseValue 를 프로젝트한다.
B. PurchaseDate 의 파티션 키와 CustomerID 의 정렬키를 갖는 로컬 보조 인덱스; TotalPurchaseValue 를 프로젝트한다.
C. CustomerID 의 파티션 키와 PurchaseDate 의 정렬키를 갖는 글로벌 보조 인덱스; TotalPurchaseValue 를 프로젝트한다.
D. PurchaseDate 의 파티션 키와 CustomerID 의 정렬키를 갖는 글로벌 보조 인덱스; TotalPurchaseValue 를 프로젝트한다.

  1. You are creating a DynamoDB table with the following attributes:
  • PurchaseOrderNumber (partition key)
  • CustomerID
  • PurchaseDate
  • TotalPurchaseValue

One of your applications must retrieve items from the table to calculate the total value of purchases for a particular customer over a date range.

What secondary index do you need to add to the table?

A. Local secondary index with a partition key of CustomerID and sort key of PurchaseDate; project the TotalPurchaseValue attribute
B. Local secondary index with a partition key of PurchaseDate and sort key of CustomerID; project the TotalPurchaseValue attribute
C. Global secondary index with a partition key of CustomerID and sort key of PurchaseDate; project the TotalPurchaseValue attribute
D. Global secondary index with a partition key of PurchaseDate and sort key of CustomerID; project the TotalPurchaseValue attribute


정답 : C. 특정 CustomerID 로 쿼리를 날려야하기 때문에 글로벌 보조 인덱스는 다른 파티션 키가 필요하다. 원하는 날짜 범위로 찾기 위해서 정렬키로는 PurchaseDate 가 필요하다. 원하는 항목인 TotalPurchaseValue 를 프로젝트하는 것은 모두 동일하다.

C – The query is for a particular CustomerID, so a Global Secondary Index is needed for a different partition key. To retrieve only the desired date range, the PurchaseDate must be the sort key. Projecting the TotalPurchaseValue into the index provides all the data needed to satisfy the use case.


Amazon DynamoDB

Amazon DynamoDB는 완전관리형 NoSQL 데이터베이스 서비스로서 원활한 확장성과 함께 빠르고 예측 가능한 성능을 제공합니다. Amazon DynamoDB를 사용하여 데이터 규모에 관계없이 데이터를 저장 및 검색하고, 어떤 수준의 요청 트래픽이라도 처리할 수 있는 데이터베이스 테이블을 생성할 수 있습니다. Amazon DynamoDB는 테이블의 데이터와 트래픽을 충분한 수의 서버로 자동 분산하여 고객이 지정한 요청 용량과 저장된 데이터 규모를 처리하면서도 일관되고 빠른 성능을 발휘합니다.

  • 기본키 : 파티션 키
  • 복합 기본 키 : 파티션 키 + 정렬 키

인덱스 작업

Amazon DynamoDB는 지정된 기본 키 값을 사용하여 테이블의 항목에 신속하게 액세스할 수 있습니다. 그러나 많은 애플리케이션에서는 주요 키가 아닌 속성을 가진 데이터에 효율적으로 액세스할 수 있다는 장점을 활용하기 위해 하나 이상의 보조(또는 대체) 키를 사용하기도 합니다. 이를 위해 테이블에서 하나 이상의 보조 인덱스를 생성하고 이 인덱스에 대해 Query 또는 Scan 요청을 발급할 수 있습니다.

보조 인덱스는 대체 키와 함께 테이블의 속성 하위 집합을 포함하여 Query 작업을 지원하는 데이터 구조입니다. 테이블에서 Query를 사용하는 것과 거의 같은 방식으로 Query를 사용하여 인덱스에서 데이터를 가져올 수 있습니다. 한 테이블에 여러 보조 인덱스es를 포함할 수 있어 서로 다른 여러 쿼리 패턴에 애플리케이션 액세스가 제공됩니다.

  • Global secondary index - 파티션 키 및 정렬 키가 기본 테이블의 파티션 및 정렬 키와 다를 수 있는 인덱스. 모든 파티션에서 인덱스의 쿼리가 기본 테이블의 모든 데이터에 적용될 수 있으므로 글로벌 보조 인덱스는 "글로벌"하게 간주됩니다.
  • 로컬 보조 인덱스 - 기본 테이블과 파티션 키는 동일하지만 정렬 키는 다른 인덱스. local secondary index는 local secondary index의 모든 파티션이 동일한 파티션 키 값을 가진 기본 테이블 파티션으로 한정된다는 의미에서 "로컬"입니다.

문제 6

당신의 CloudFormation 템플릿은 다음 Mappings section 을 따른다.

1
2
3
4
5
6
"Mappings": {
"RegionMap": {
"us-east-1" : { "32" : "ami-6411e20d"},
"us-west-1" : { "32" : "ami-c9c7978c"}
}
}

스택이 us-east-1 에서 실행될 때, “ami-6411e20d” 값이 발생하는 JSON 스니펫은 무엇인가?

  1. { “Fn::FindInMap” : [ “Mappings”, { “RegionMap” : [“us-east-1”, “us-west-1”] }, “32”]}
  2. { “Fn::FindInMap” : [ “Mappings”, { “Ref” : “AWS::Region” }, “32”]}
  3. { “Fn::FindInMap” : [ “RegionMap”, { “Ref” : “AWS::Region” }, “32”]}
  4. { “Fn::FindInMap” : [ “RegionMap”, { “RegionMap” : “AWS::Region” }, “32”]}
  1. Your CloudFormation template has the following Mappings section:

Which JSON snippet will result in the value “ami-6411e20d” when a stack is launched in us-east-1?


정답 : C – Learn how to create and reference mappings here.


Mapping

Mappings 섹션(선택 사항)은 키를 해당하는 명명된 값 세트와 맞춥니다. 예를 들어 리전에 따라 값을 설정하려면 리전 이름을 키로 사용하고 각각의 특정 리전에 대해 지정할 값을 포함하는 매핑을 생성할 수 있습니다. Fn::FindInMap 내장 함수를 사용하여 맵에서 값을 불러올 수 있습니다.

Mappings 섹션은 키 이름 Mappings로 이루어집니다. 매핑의 키는 문자열이어야 합니다. 값은 String이나 List 유형이 될 수 있습니다. 다음 예제는 Mapping01(논리적 이름)이라는 매핑 하나가 있는 Mappings 섹션을 보여줍니다.

매핑에서 값 반환

Fn::FindInMap 함수를 사용하여 지정한 키에 따라 명명된 값을 반환할 수 있습니다. 다음 예제 템플릿에는 FindInMap 함수를 통해 ImageId 속성이 할당된 Amazon EC2 리소스가 포함되어 있습니다. FindInMap 함수는 키를 스택이 생성되는 리전(AWS::Region 가상 파라미터 사용)으로 지정하고 32를 매핑할 값으로 지정합니다.


문제 7

당신의 웹 애플리케이션은 DynamoDB 테이블에서 값을 읽어오고, 속성을 바꾸고, 그 아이템을 다시 테이블에 작성한다. 한 프로세스가 다른 프로세스의 변겨 사항을 덮어쓰지 않도록 해야 한다.

어떻게 동시성을 보장할 수 있을까?

  1. 조건부 쓰기를 이용해 optimistic concurrency (낙관적 동시성) 을 구현.
  2. 조건부 읽기를 이용해 pessimistic concurrency (비관적 동시성) 을 구현.
  3. 읽을 때 아이템을 locking 해서 optimistic concurrency (낙관적 동시성) 을 구현.
  4. 읽을 때 아이템을 locking 해서 essimistic concurrency (비관적 동시성) 을 구현
  1. Your web application reads an item from your DynamoDB table, changes an attribute, and then writes the item back to the table. You need to ensure that one process doesn’t overwrite a simultaneous change from another process.

How can you ensure concurrency?

  1. Implement optimistic concurrency by using a conditional write.
  2. Implement pessimistic concurrency by using a conditional write.
  3. Implement optimistic concurrency by locking the item upon read.
  4. Implement pessimistic concurrency by locking the item upon read.

정답 : 1. Optimistic concurrency 은 값이 변경되는 것을 방지하기 위해 저장 시 값을 확인한다. Pessimistic concurrency 는 아이템이나 row 를 locking 해서 값이 변경되는 것을 방지한다. DynamoDB 는 아이템 locking 을 지원하지 않으며 조건부 쓰기가 optimistic concurrency 을 구현하기에 이상적이다.

A – Optimistic concurrency depends on checking a value upon save to ensure that it has not changed. Pessimistic concurrency prevents a value from changing by locking the item or row in the database. DynamoDB does not support item locking, and conditional writes are perfect for implementing optimistic concurrency.


문제 8

당신의 애플리케이션은 모든 파트너에게 제공되어야 하는 이벤트를 트리거한다. 정확한 파트너 리스트는 지속적으로 변경된다: 일부 파트너는 고가용성 엔드 포인트를 실행하고, 다른 파트너의 엔드 포인트는 매일 밤 몇 시간만 온라인 상태가 된다. 당신의 애플리케이션은 미션 크리티컬하므로 파트너와의 커뮤니케이션이 지연되어선 안 된다. 어떤 파트너에게 발생한 이벤트 전달 지연은 다른 파트너에 대한 전달을 지연시킬 수 없어야 한다.

이를 코딩하는 적절한 방법은 무엇인가?

  1. Amazon SWF 태스크로 이벤트 전달을 구현한다. Amazon SWF 워크플로우 실행으로 시작한다.
  2. 이벤트를 Amazon SNS 메시지로 보낸다. 파트너에게 HTTP 를 생성하도록 지시한다. Amazon SNS 토픽으로 파터너의 HTTP 엔드포인트를 구독한다.
  3. 파트너마다 SQS 큐를 생성한다. 큐를 돌면서 이벤트를 작성한다. 파트너들은 큐를 통해서 메시지를 받는다.
  4. 이벤트를 Amazon SNS 메시지로 보낸다. 파트너마다 Amazon SNS 토픽을 구독하는 SQS 큐를 만든다. 파트너는 큐를 이용해서 메시지를 받는다.
  1. Your application triggers events that must be delivered to all your partners. The exact partner list is constantly changing: some partners run a highly available endpoint, and other partners’ endpoints are online only a few hours each night. Your application is mission-critical, and communication with your partners must not introduce delay in its operation. A delay in delivering the event to one partner cannot delay delivery to other partners.

What is an appropriate way to code this?

  1. Implement an Amazon SWF task to deliver the message to each partner. Initiate an Amazon SWF workflow execution.
  2. Send the event as an Amazon SNS message. Instruct your partners to create an HTTP. Subscribe their HTTP endpoint to the Amazon SNS topic.
  3. Create one SQS queue per partner. Iterate through the queues and write the event to each one. Partners retrieve messages from their queue.
  4. Send the event as an Amazon SNS message. Create one SQS queue per partner that subscribes to the Amazon SNS topic. Partners retrieve messages from their queue.

정답 : 4. 두 가지 과제가 있다. 커맨드는 여러 파트너들에게 뿌려져야 하고, 당신의 앱은 파트너로부터 분리되어야 한다 (파트너가 고가용성을 제공하지 않기 때문에). 커맨드를 SNS 메시지로 보내고 publication/subscribe 모델을 이용해 fan-out 을 달성할 수 있다. 큐에 메시지를 직접 쓰는 것은 앱의 대기시간이 길어지고, 활성화된 파트너를 모니터링해야 한다. 파트너가 빠르게 변화하기 때문에 Amazon SWF 워크플로우를 작성하는 것은 어려울 수 있다.

D – There are two challenges here: the command must be “fanned out” to a variable pool of partners, and your app must be decoupled from the partners because they are not highly available. Sending the command as an SNS message achieves the fan-out via its publication/subscribe model, and using an SQS queue for each partner decouples your app from the partners. Writing the message to each queue directly would cause more latency for your app and would require your app to monitor which partners were active. It would be difficult to write an Amazon SWF workflow for a rapidly changing set of partners.


Amazon SWF

Amazon Simple Workflow Service(Amazon SWF)를 사용하면 분산 구성 요소 간에 작업을 조정하는 애플리케이션을 쉽게 구축할 수 있습니다. Amazon SWF에서 작업은 애플리케이션의 구성 요소에서 수행하는 논리적 작업 단위를 나타냅니다. 애플리케이션 간 작업 조정에서는 애플리케이션의 논리적 흐름에 따라 작업 간 종속성, 일정 예약 및 동시성을 관리합니다. Amazon SWF에서는 작업 구현에 대한 모든 권한과 진행률 추적 및 상태 유지와 같은 기본적인 복잡성에 대한 염려 없이 작업을 조정할 수 있는 모든 권한을 제공합니다.


문제 9

한 리젼의 클라우포메이션 스택 수가 제한에 도달했다.

제한(limit)을 늘리는 방법은 무엇인가?

  1. AWS Command Line Interface 를 이용한다.
  2. limits@amazon.com 에 "CoudFormation"을 주제로 해서 메일을 보낸다.
  3. AWS Management Console 안의 고객 센터(Support Center)를 이용한다.
  4. 모든 서비스의 제한은 고정되어 있어 증가시킬 수 없다.
  1. You have reached your account limit for the number of CloudFormation stacks in a region.

How do you increase your limit?

  1. Use the AWS Command Line Interface.
  2. Send an email to limits@amazon.com with the subject “CloudFormation.”
  3. Use the Support Center in the AWS Management Console.
  4. All service limits are fixed and cannot be increased.

정답 : 3. 고객센터에 연락해야 한다.

C – The Support Center in the AWS Management Console allows customers to request limit increases by creating a case.


문제 10

당신은 하나의 Amazon VPC 에 3-티어 웹 애플리케이션(웹, 앱, 데이터)를 가지고 있다. 웹과 앱 티어는 각각 2개의 가용성 영역에 걸쳐 있으며 별도의 서브넷에 있고 ELB 클래식 로드 밸런서 뒤에 있다. 데이터 티어는 데이터베이스 서브넷에 있는 Multi-AZ Amazon RDS MySQL 데이터베이스 인스턴스다. 앱 티어 인스턴스에서 데이터베이스 티어를 호출하면 시간 초과 오류(timeout error)가 발생한다.

무엇이 원인일까?

  1. 앱 계층 인스턴스와 연결된 IAM 역할에는 MySQL 데이터베이스에 대한 권한이 없어서.
  2. Amazon RDS 인스턴스의 Security Group 이 포트 3306 에서 애플리케이션 인스턴스의 트래픽을 허용하지 않아서.
  3. Amazon RDS 데이터베이스 인스턴스에 공용(public) IP 주소가 없어서.
  4. Amazon VPC 에서 앱 계층과 데이터베이스 계층 사이에 정의된 경로가 없어서.
  1. You have a three-tier web application (web, app, and data) in a single Amazon VPC. The web and app tiers each span two Availability Zones, are in separate subnets, and sit behind ELB Classic Load Balancers. The data tier is a Multi-AZ Amazon RDS MySQL database instance in database subnets. When you call the database tier from your app tier instances, you receive a timeout error.

What could be causing this?

  1. The IAM role associated with the app tier instances does not have rights to the MySQL database.
  2. The security group for the Amazon RDS instance does not allow traffic on port 3306 from the app instances.
  3. The Amazon RDS database instance does not have a public IP address.
  4. There is no route defined between the app tier and the database tier in the Amazon VPC.

정답 : 2. 보안그룹은 기본적으로 모든 네트워크 트래픽을 막아서, 그룹이 제대로 설정되지 않으면 타임아웃 에러를 발생시킨다. IAM 은 MySQL 보안을 제어하지 않는다. Amazon VPC 의 모든 서브넷은 다른 모든 서브넷으로 라우팅된다. Amazon VPC의 내부 트래픽에는 공용 IP 주소가 필요하지 않다.

B – Security groups block all network traffic by default, so if a group is not correctly configured, it can lead to a timeout error. MySQL security, not IAM, controls MySQL security. All subnets in an Amazon VPC have routes to all other subnets. Internal traffic within an Amazon VPC does not require public IP addresses


Amazon VPC

Amazon Virtual Private Cloud(Amazon VPC)를 사용하면 정의한 가상 네트워크에서 AWS 리소스를 시작할 수 있습니다. 이 가상 네트워크는 AWS의 확장 가능한 인프라를 사용한다는 이점과 함께 고객의 자체 데이터 센터에서 운영하는 기존 네트워크와 매우 유사합니다.

Virtual Private Cloud(VPC)는 사용자의 AWS 계정 전용 가상 네트워크입니다. VPC는 AWS 클라우드에서 다른 가상 네트워크와 논리적으로 분리되어 있습니다. Amazon EC2 인스턴스와 같은 AWS 리소스를 VPC에서 실행할 수 있습니다. IP 주소 범위와 VPC 범위를 설정하고 서브넷을 추가하고 보안 그룹을 연결한 다음 라우팅 테이블을 구성합니다.

서브넷은 VPC의 IP 주소 범위입니다. 지정된 서브넷으로 AWS 리소스를 시작할 수 있습니다. 인터넷에 연결되어야 하는 리소스에는 퍼블릭 서브넷을 사용하고, 인터넷에 연결되지 않는 리소스에는 프라이빗 서브넷을 사용하십시오. 퍼블릭 서브넷과 프라이빗 서브넷에 대한 자세한 내용은 VPC 및 서브넷 기본 사항을 참조하십시오.

각 서브넷의 AWS리소스를 보호하기 위해 보안 그룹 및 네트워크 액세스 제어 목록(ACL)을 비롯한 여러 보안 계층을 사용할 수 있습니다. 자세한 내용은 보안 단원을 참조하십시오.