3단계: DynamoDB 서비스를 사용한 프로덕션 내 배포 - Amazon DynamoDB

3단계: DynamoDB 서비스를 사용한 프로덕션 내 배포

위 섹션에서는 DynamoDB Local을 사용하여 로컬 컴퓨터에 Tic-Tac-Toe 게임 애플리케이션을 배포 및 테스트했습니다. 이제 다음과 같이 프로덕션에 애플리케이션을 배포합니다.

  • 웹 애플리케이션과 서비스의 배포 및 규모 조정을 위한 간편한 서비스인 AWS Elastic Beanstalk를 사용하여 애플리케이션을 배포합니다. 자세한 내용은 AWS Elastic Beanstalk에 Flask 애플리케이션 배포를 참조하세요.

    Elastic Beanstalk에서 하나 이상의 Amazon Elastic Compute Cloud(Amazon EC2) 인스턴스를 시작하면 Tic-Tac-Toe 애플리케이션을 실행할 Elastic Beanstalk를 통해 해당 인스턴스를 구성합니다.

  • Amazon DynamoDB 서비스를 사용하여 컴퓨터에 로컬로가 아니라 AWS에 있는 Games 테이블을 만듭니다.

또한 권한을 구성해야 합니다. DynamoDB의 Games 테이블과 같이 사용자가 만드는 모든 AWS 리소스는 기본적으로 프라이빗입니다. 리소스 소유자, 즉, Games 테이블을 만든 AWS 계정만 이 테이블에 액세스할 수 있습니다. 따라서, 사용자의 Tic-Tac-Toe 애플리케이션은 기본적으로 Games 테이블을 업데이트할 수 없습니다.

필요한 권한을 부여하려면 AWS Identity and Access Management(IAM) 역할을 만들고 이 역할에 Games 테이블 액세스 권한을 부여합니다. Amazon EC2 인스턴스가 먼저 이 역할을 맡습니다. 그 응답으로 AWS는 Amazon EC2 인스턴스가 Tic-Tac-Toe 애플리케이션을 대신하여 Games 테이블을 업데이트하는 데 사용할 수 있는 임시 보안 자격 증명을 반환합니다. Elastic Beanstalk 애플리케이션을 구성할 때 Amazon EC2 인스턴스가 맡을 수 있는 IAM 역할을 지정합니다. IAM 역할에 대한 자세한 내용은 Amazon EC2 사용 설명서의 Amazon EC2의 IAM 역할을 참조하세요.

참고

Tic-Tac-Toe 애플리케이션의 Amazon EC2 인스턴스를 만들기 전에 우선 Elastic Beanstalk이 인스턴스를 만들 AWS 리전을 결정해야 합니다. Elastic Beanstalk 애플리케이션을 만든 다음에는 구성 파일에 동일한 리전 이름과 엔드포인트를 입력해야 합니다. Tic-Tac-Toe 애플리케이션은 이 파일의 정보를 사용하여 Games 테이블을 만들고 특정 AWS 리전의 후속 요청을 전송합니다. Elastic Beanstalk이 시작하는 DynamoDB Games 테이블 및 Amazon EC2 인스턴스는 동일한 리전에 있어야 합니다. 사용 가능한 리전의 목록은 Amazon Web Services 일반 참조에서 Amazon DynamoDB를 참조하세요.

프로덕션에 Tic-Tac-Toe 애플리케이션을 배포하는 단계를 요약하면 다음과 같습니다.

  1. IAM 서비스를 사용하여 IAM 역할을 만듭니다. 이 역할에 정책을 연결하여 Games 테이블에 액세스하는 DynamoDB 작업을 위한 권한을 부여합니다.

  2. Tic-Tac-Toe 애플리케이션 코드와 구성 파일의 번들을 생성한 후 .zip 파일을 만듭니다. 이 .zip 파일을 사용하여 서버에 배포할 Elastic Beanstalk에 Tic-Tac-Toe 애플리케이션 코드를 제공합니다. 번들 생성에 대한 자세한 AWS Elastic Beanstalk 개발자 안내서에서 애플리케이션 소스 번들 생성을 참조하세요.

    구성 파일(beanstalk.config)에 AWS 리전과 엔드포인트 정보를 입력합니다. Tic-Tac-Toe 애플리케이션은 이 정보를 사용하여 연결할 DynamoDB 리전을 확인합니다.

  3. Elastic Beanstalk 환경을 설정합니다. Elastic Beanstalk이 Amazon EC2 인스턴스를 실행하고 해당 인스턴스에 Tic-Tac-Toe 애플리케이션 번들을 배포합니다. Elastic Beanstalk 환경이 준비되면 CONFIG_FILE 환경 변수를 추가하여 구성 파일 이름을 입력합니다.

  4. DynamoDB 테이블을 생성합니다. Amazon DynamoDB 서비스를 사용하여 컴퓨터에서 로컬로가 아니라 AWS에 Games 테이블을 생성합니다. 이 테이블에는 문자열 형식의 GameId 파티션 키로 구성된 단순 기본 키가 있습니다.

  5. 프로덕션에서 게임을 테스트합니다.

3.1: Amazon EC2의 IAM 역할 생성

Amazon EC2 유형의 IAM 역할을 만들면 Tic-Tac-Toe 애플리케이션을 실행 중인 Amazon EC2 인스턴스가 올바른 IAM 역할을 맡고 Games 테이블에 액세스하기 위한 애플리케이션 요청을 보낼 수 있습니다. 역할을 만들 때에는 [Custom Policy(사용자 지정 정책)] 옵션을 선택하고 다음 정책을 복사하여 붙여 넣습니다.

{ "Version":"2012-10-17", "Statement":[ { "Action":[ "dynamodb:ListTables" ], "Effect":"Allow", "Resource":"*" }, { "Action":[ "dynamodb:*" ], "Effect":"Allow", "Resource":[ "arn:aws:dynamodb:us-west-2:922852403271:table/Games", "arn:aws:dynamodb:us-west-2:922852403271:table/Games/index/*" ] } ] }

자세한 지침은 IAM 사용 설명서AWS 서비스에 대한 역할 생성(AWS Management Console)을 참조하세요.

3.2: Amazon DynamoDB에서 Games 테이블 생성

DynamoDB의 Games 테이블은 게임 데이터를 저장합니다. 테이블이 존재하지 않을 경우, 애플리케이션이 해당 테이블을 만듭니다. 이 예제에서는 애플리케이션이 Games 테이블을 만들도록 합니다.

3.3: Tic-Tac-Toe 애플리케이션 코드 번들링 및 배포

이 예제의 단계를 따른 경우 이미 Tic-Tac-Toe 애플리케이션 다운로드를 완료한 상태여야 합니다. 그렇지 않을 경우 애플리케이션을 다운로드하고 로컬 컴퓨터에 모든 파일을 추출하세요. 지침은 1단계: 로컬 배포 및 테스트 단원을 참조하세요.

모든 파일을 추출하면 code 폴더가 나타납니다. 이 폴더를 Elastic Beanstalk에 전달하려면 이 폴더의 콘텐츠를 .zip 파일로 번들링해야 합니다. 우선 해당 폴더에 구성 파일을 추가합니다. 애플리케이션이 리전 및 엔드포인트 정보를 사용하여 지정된 리전에 DynamoDB 테이블을 만들고, 지정된 엔드포인트를 사용하여 후속 테이블 작업 요청을 보냅니다.

  1. Tic-Tac-Toe 애플리케이션을 다운로드한 폴더로 전환합니다.

  2. 애플리케이션 루트 폴더에서 다음 콘텐츠가 포함된 텍스트 파일을 만들고 이름을 beanstalk.config로 지정합니다.

    [dynamodb] region=<AWS region> endpoint=<DynamoDB endpoint>

    예를 들어 다음과 같은 콘텐츠를 사용할 수 있습니다.

    [dynamodb] region=us-west-2 endpoint=dynamodb.us-west-2.amazonaws.com

    사용 가능한 리전 목록은 Amazon Web Services 일반 참조Amazon DynamoDB를 참조하세요.

    중요

    구성 파일에 지정된 리전은 Tic-Tac-Toe 애플리케이션이 DynamoDB에 Games 테이블을 만드는 위치입니다. 다음 단원에서 설명하는 Elastic Beanstalk 애플리케이션을 동일한 리전에 만들어야 합니다.

    참고

    Elastic Beanstalk 애플리케이션을 만들면 환경 시작을 요청하고 환경 유형을 선택할 수 있습니다. Tic-Tac-Toe 예제 애플리케이션을 테스트하려면 [단일 인스턴스] 환경 유형을 선택하여 아래 항목을 생략하고 다음 단계로 건너뛸 수 있습니다.

    하지만 [로드 밸런싱, 자동 조정] 환경 유형은 가용성과 확장성이 높은 환경을 제공합니다. 다른 애플리케이션을 만들고 배포할 경우 이러한 환경을 사용하는 것이 좋습니다. 이 환경 유형을 선택할 경우, 다음과 같이 UUID를 만들고 구성 파일에 추가해야 합니다.

    [dynamodb] region=us-west-2 endpoint=dynamodb.us-west-2.amazonaws.com [flask] secret_key= 284e784d-1a25-4a19-92bf-8eeb7a9example

    클라이언트-서버 통신에서 서버가 응답을 보내면 보안상의 이유로 서버가 서명된 쿠키를 보내고 클라이언트는 다음 요청 시 이 쿠키를 다시 서버로 보냅니다. 서버가 한 대인 경우 서버가 시작될 때 로컬에서 암호화 키를 만들 수 있습니다. 서버가 여러 대일 경우 모두 동일한 암호화 키를 알아야 합니다. 그렇지 않으면 피어 서버가 설정한 쿠키를 읽을 수 없습니다. 구성 파일에 secret_key를 추가하면 모든 서버가 이 암호화 키를 사용하도록 알릴 수 있습니다.

  3. 애플리케이션 루트 폴더의 내용(beanstalk.config 파일 포함)을 압축합니다(예: TicTacToe.zip).

  4. .zip 파일을 Amazon Simple Storage Service(Amazon S3) 버킷에 업로드합니다. 다음 단원에서는 이 .zip 파일을 Elastic Beanstalk에 제공하여 한 서버 또는 여러 서버에 업로드합니다.

    Amazon S3 버킷에 업로드하는 방법에 관한 지침은 Amazon Simple Storage Service 사용 설명서에서 버킷 생성버킷에 객체 추가 섹션을 참조하세요.

3.4: AWS Elastic Beanstalk 환경 설정

이 단계에서는 환경을 포함한 구성 요소의 컬렉션인 Elastic Beanstalk 애플리케이션을 만듭니다. 이 예제에서는 하나의 Amazon EC2 인스턴스를 시작하여 Tic-Tac-Toe 애플리케이션을 배포 및 실행합니다.

  1. 다음 사용자 지정 URL을 입력하여 Elastic Beanstalk 콘솔을 설정하고 환경을 설정합니다.

    https://console.aws.amazon.com/elasticbeanstalk/?region=<AWS-Region>#/newApplication ?applicationName=TicTacToeyour-name &solutionStackName=Python &sourceBundleUrl=https://s3.amazonaws.com/<bucket-name>/TicTacToe.zip &environmentType=SingleInstance &instanceType=t1.micro

    사용자 지정 URL에 대한 자세한 내용은 AWS Elastic Beanstalk 개발자 안내서에서 Launch Now URL 생성 단원을 참조하세요. URL에 대해 다음 사항을 참조하세요.

    • AWS 리전 이름(구성 파일에 입력한 이름과 동일), Amazon S3 버킷 이름, 객체 이름을 제공해야 합니다.

    • URL은 테스트를 위해 [SingleInstance] 환경 유형과 t1.micro 인스턴스 유형을 요청합니다.

    • 애플리케이션 이름은 고유해야 합니다. 따라서 이전 URL에서 applicationName 앞에 사용자 이름을 추가하는 것이 좋습니다.

    이렇게 하면 Elastic Beanstalk 콘솔이 열리며 로그인이 필요한 경우도 있습니다.

  2. Elastic Beanstalk 콘솔에서 [Review and Launch]를 선택한 다음 [Launch]를 선택합니다.

  3. 나중에 참조할 수 있도록 URL을 기록합니다. 이 URL에서 Tic-Tac-Toe 애플리케이션 홈 페이지가 열립니다.

    홈 페이지에 생성 중인 환경을 보여 주는 애플리케이션 스크린샷입니다.
  4. Tic-Tac-Toe 애플리케이션이 구성 파일의 위치를 알 수 있도록 구성합니다.

    Elastic Beanstalk가 애플리케이션을 만들면 [Configuration]을 선택합니다.

    1. 다음 스크린샷과 같이 [Software Configuration] 옆에 있는 기어 모양 아이콘을 선택합니다.

      소프트웨어 구성 옆에 기어 아이콘을 보여 주는 Tic-Tac-Toe 애플리케이션 스크린샷입니다.
    2. [Environment Properties] 섹션의 끝부분에서 CONFIG_FILE 및 해당 값 beanstalk.config를 입력한 다음 [Save]를 선택합니다.

      이 환경 업데이트가 완료되는 데 몇 분이 소요될 수 있습니다.

      환경 속성 섹션을 보여 주는 애플리케이션 스크린샷입니다.

    업데이트가 완료되면 게임을 플레이할 수 있습니다.

  5. 다음 예제와 같이 브라우저에 이전 단계에서 복사한 URL을 입력합니다.

    http://<pen-name>.elasticbeanstalk.com

    그러면 애플리케이션 홈 페이지가 열립니다.

    생성 버튼, 초대장, 진행 중인 게임 및 최근 기록을 보여 주는 애플리케이션 홈 페이지의 스크린샷입니다.
  6. testuser1로 로그인하고 [CREATE]를 선택하여 새 Tic-Tac-Toe 게임을 시작합니다.

  7. Choose an Opponent(상대방 선택) 상자에 testuser2를 입력합니다.

    상대방 상자의 선택을 보여 주는 애플리케이션 스크린샷입니다.
  8. 다른 브라우저 창을 엽니다.

    동일한 사용자로 로그인되지 않도록 브라우저 창의 모든 쿠키를 지웠는지 반드시 확인하세요.

  9. 다음 예제와 같이 동일한 URL을 입력하여 애플리케이션 홈 페이지를 엽니다.

    http://<env-name>.elasticbeanstalk.com
  10. testuser2로 로그인합니다.

  11. 보류 중인 초대 목록에 있는 testuser1의 초대에 대해 [accept]를 선택합니다.

    초대 목록의 testuser1 초대를 보여 주는 애플리케이션 스크린샷입니다.
  12. 이제 게임 페이지가 나타납니다.

    빈 tic-tac-toe 그리드를 보여 주는 애플리케이션 스크린샷입니다.

    testuser1 및 testuser2 모두 게임을 플레이할 수 있습니다. 동작이 일어날 때마다 애플리케이션 Games 테이블의 해당 항목에 저장합니다.