

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

# Unity용 플러그인: 관리형 컨테이너 플릿에 게임 배포
<a name="unity-plug-in-container"></a>

이 안내 플러그인 워크플로를 사용하여 게임 서버의 컨테이너 이미지를 생성하고 컨테이너 기반 호스팅 솔루션에 배포합니다. 이 워크플로를 성공적으로 완료하면 컨테이너화된 게임 서버가 클라우드에서 실행되며 플러그인을 사용하여 게임 클라이언트를 시작하고, 게임 세션에 연결하며, 게임을 플레이할 수 있습니다.

## 시작하기 전에
<a name="unity-plug-in-container-prereqs"></a>

이 워크플로는 다음 작업을 완료했다고 가정합니다.
+ **게임 서버 코드를 Amazon GameLift Servers 서버 SDK와 통합합니다.** 호스팅하는 게임 서버는 새 게임 세션을 시작하고 게임 세션 상태를 보고하라는 요청에 응답할 수 있도록 Amazon GameLift Servers 서비스와 통신할 수 있어야 합니다. 이 작업을 완료하지 않은 경우 먼저 플러그인 워크플로우인 Anywhere로 호스팅을 따르는 것이 좋습니다. 게임 서버 코드 준비에 대한 지침은 [서버 코드 통합](unity-plug-in-anywhere.md#unity-plug-in-anywhere-integrate-server) 섹션을 참조하세요. 관리형 컨테이너 플릿의 경우 게임을 서버 SDK 버전 5.2 이상과 통합해야 합니다.
**참고**  
샘플 게임을 가져온 경우이 작업이 이미 완료됩니다.
+ **Linux에서 실행할 게임 서버 실행 파일을 패키징합니다.**
+ **게임 서버 빌드와 함께 배포할 파일을 수집합니다.** 로컬 시스템에서 작업 디렉터리를 생성하여 파일을 구성합니다. 해당 파일은 게임 서버 컨테이너 이미지로 구축됩니다. 여기에는 게임 종속성, 컨테이너 시작 시 게임 서버 및 기타 프로세스를 실행하는 스크립트 등을 포함할 수 있습니다.
+ **Amazon GameLift Servers를 사용한 게임 클라이언트 코드를 통합합니다.** 이 작업을 완료하는 한 가지 방법은 이미 통합된 샘플 자산(플러그인에 포함됨)을 추가하는 것입니다. 게임 클라이언트 코드 준비에 대한 지침은 [클라이언트 코드 통합](unity-plug-in-anywhere.md#unity-plug-in-anywhere-integrate-client) 섹션을 참조하세요.
+ **로컬 컴퓨터에 Docker를 설치합니다.** 플러그인이 컨테이너 이미지를 생성하여 ECR 리포지토리로 푸시하도록 하려면 이 도구를 설치해야 합니다. 또는 이러한 작업을 수동으로 수행하고 플러그인에 기존 컨테이너 이미지를 사용하도록 지시할 수 있습니다. 이미지를 수동으로 빌드하는 방법에 대한 자세한 내용은 [Amazon GameLift Servers용 컨테이너 이미지 빌드](https://docs.aws.amazon.com/gameliftservers/latest/developerguide/containers-prepare-images.html)를 참조하세요.

**Amazon GameLift Servers 관리형 컨테이너 워크플로를 시작하려면:**
+ Unity 편집기 기본 도구 모음에서 Amazon GameLift Servers 메뉴를 선택하고 **관리형 컨테이너**를 선택합니다. 이 작업을 수행하면 **관리형 컨테이너가 있는 호스트** 플러그인 페이지가 열립니다. 이 페이지는 게임 서버 빌드로 컨테이너 이미지를 생성하고, 컨테이너 플릿에 배포하며, 게임을 시작하는 단계별 프로세스를 제공합니다.

## 0단계: 프로필 설정
<a name="unity-plug-in-container-profile"></a>

이 섹션에는 현재 선택한 사용자 프로필이 표시됩니다. 현재 사용자 프로필이 이 워크플로에 사용할 프로필인지 확인합니다. 이 워크플로에서 생성하는 모든 리소스는 프로필의 AWS 계정과 연결되며 프로필의 기본 AWS 리전에 배치됩니다. 프로필 사용자의 권한에 따라 AWS 리소스 및 작업에 대한 액세스 권한이 결정됩니다.

다음과 같은 경우 선택한 사용자 프로필을 수정해야 할 수 있습니다.
+ 현재 선택된 프로필이 없습니다.
+ 다른 프로필을 선택하거나 새 프로필을 생성하려고 합니다.
+ 선택한 프로필을 부트스트랩해야 합니다(부트스트랩 상태가 비활성인 경우).

**선택한 사용자 프로필을 설정하거나 변경하려면**
+ Amazon GameLift Servers 메뉴에서 ** AWS 액세스 자격 증명 열기를** 선택합니다.

## 1단계: 컨테이너 준비 상태 평가
<a name="unity-plug-in-container-assess"></a>

게임 서버를 컨테이너 플릿에 배포하기 전에 컨테이너 이미지에 패키징하고 Amazon ECR 리포지토리에 저장해야 합니다. 플러그인은 이러한 작업을 사용자를 대신하여 완료할 수 있으며 이러한 작업을 수동으로 수행할 수 있습니다. 이 단계에서는 컨테이너 이미지 및 ECR 리포지토리의 상태에 대한 정보를 제공합니다.

평가 질문을 사용하여 플러그인에 수행해야 할 단계를 알려줍니다.
+ **새 컨테이너 이미지를 생성합니다.** 이 옵션을 선택하면 다음 단계에서 게임 서버 빌드 디렉터리의 위치와 빌드 실행 파일을 묻는 메시지가 표시됩니다. 플러그인은 Dockerfile 템플릿(Amazon GameLift Servers에서 제공)을 사용하고 게임에 맞게 자동으로 구성합니다. [Amazon GameLift Servers용 컨테이너 이미지 빌드](containers-prepare-images.md)에서 템플릿을 확인할 수 있습니다. 이 옵션을 선택한 후 플러그인이 새 이미지를 저장할 위치를 지정합니다.
  + 새 Amazon ECR 리포지토리를 생성하고 여기에 컨테이너 이미지를 푸시합니다. 플러그인은 선택한 사용자 프로필 AWS 리전 에서 AWS 계정 및 기본값을 사용하여 프라이빗 ECR 리포지토리를 생성합니다.
  + 이전에 생성된 Amazon ECR 리포지토리에 컨테이너 이미지를 푸시합니다. 이 옵션을 선택하면 다음 단계에서 목록에서 기존 Amazon ECR 리포지토리를 선택하라는 메시지가 표시됩니다. 목록에는 선택한 사용자 프로필의 AWS 계정 및 기본값 AWS 리전 에 대한 모든 Amazon ECR 리포지토리가 포함됩니다. 퍼블릭 또는 프라이빗 리포지토리를 선택할 수 있습니다.
+ **기존 컨테이너 이미지를 사용합니다.** 이미지를 수동으로 빌드한 경우 Amazon GameLift Servers에서 제공하는 Dockerfile 템플릿을 사용하는 것이 좋으며, 이 템플릿은 [Amazon GameLift Servers용 컨테이너 이미지 빌드](containers-prepare-images.md)에서 사용할 수 있습니다. 이 옵션을 선택한 후 이미지의 위치를 지정합니다.
  + 로컬에 저장된 Docker 생성 이미지입니다. 이 옵션을 선택하면 플러그인이 새 Amazon ECR 프라이빗 리포지토리를 생성하고 로컬 이미지 파일을 푸시합니다. 다음 단계에서는 플러그인이 이미지 파일을 찾는 데 사용하는 이미지 ID를 묻는 메시지가 표시됩니다.
  + Amazon ECR 리포지토리에 이미 저장된 컨테이너 이미지입니다. 이 옵션을 선택하면 다음 단계에서 목록의 기존 Amazon ECR 리포지토리 및 이미지를 선택하라는 메시지가 표시됩니다. 목록에는 선택한 사용자 프로필의 AWS 계정 및 기본값 AWS 리전 에 대한 모든 Amazon ECR 리포지토리가 포함됩니다. 퍼블릭 또는 프라이빗 리포지토리를 선택할 수 있습니다.
  +  Linux의 Unity 6.3에는 glibc 2.35가 필요합니다. Amazon Linux 2023에는 glibc 2.34가 포함되어 있습니다. 소스에서 glibc 2.35를 빌드하고 glibc 2.35를 사용하도록 Unity 바이너리를 구성하는 작업을 처리하는 Dockerfile 템플릿이 아래에 제공됩니다.

### Unity 6.3 게임 서버 컨테이너 이미지용 Dockerfile 템플릿
<a name="w2aab9c11b9c21c27c11c11b1"></a>

이 템플릿은 Amazon GameLift Servers 플릿에서 게임 서버 컨테이너를 사용하는 데 필요한 최소 지침을 포함합니다. 게임 서버의 필요에 따라 콘텐츠를 수정합니다.

```
# Base image
# ----------
  # Add the base image that you want to use over here,
  # Make sure to use an image with the same architecture as the
  # Instance type you are planning to use on your fleets.
FROM public.ecr.aws/amazonlinux/amazonlinux

# Game build directory
# --------------------
  # Add your game build directory in the 'GAME_BUILD_DIRECTORY' env variable below.
  #
# Game executable
# ---------------
  # Add the relative path to your executable in the 'GAME_EXECUTABLE' env variable below.
  # The game build provided over here needs to be integrated with gamelift server sdk.
  # This template assumes that the executable path is relative to the game build directory.
  #
# Launch parameters
# -----------------
  # Add any launch parameters to pass into your executable in the 'LAUNCH_PARAMS' env variable below.
  #
# Default directory
# -----------------
  # The value provided in 'HOME_DIR' below will be where the game executable and logs exist.
  #
ARG GAME_BUILD_DIRECTORY
ARG GAME_EXECUTABLE
ARG LAUNCH_PARAMS

ENV GAME_BUILD_DIRECTORY=$GAME_BUILD_DIRECTORY \
    GAME_EXECUTABLE=$GAME_EXECUTABLE \
    LAUNCH_PARAMS=$LAUNCH_PARAMS \
    HOME_DIR="/local/game"

# install dependencies as necessary
RUN yum install -y shadow-utils bison wget gcc make patchelf tar gzip && \
    yum clean all && rm -fr /var/cache

RUN mkdir -p $HOME_DIR
COPY .$GAME_BUILD_DIRECTORY/ $HOME_DIR

# Change directory to home
WORKDIR $HOME_DIR

# Build glibc 2.35 and patch Unity binaries
RUN GLIBC_VERSION="2.35" && \
    INSTALL_PREFIX="/opt/glibc-${GLIBC_VERSION}" && \
    ARCH=$(uname -m) && \
    if [ "$ARCH" = "x86_64" ]; then \
        INTERPRETER="${INSTALL_PREFIX}/lib/ld-linux-x86-64.so.2"; \
        MONO_ARCH="x86_64"; \
    elif [ "$ARCH" = "aarch64" ]; then \
        INTERPRETER="${INSTALL_PREFIX}/lib/ld-linux-aarch64.so.1"; \
        MONO_ARCH="aarch64"; \
    else \
        echo "ERROR: Unsupported architecture: $ARCH"; exit 1; \
    fi && \
    cd /tmp && \
    wget -q "https://ftp.gnu.org/gnu/glibc/glibc-${GLIBC_VERSION}.tar.gz" && \
    tar -xzf "glibc-${GLIBC_VERSION}.tar.gz" && \
    cd "glibc-${GLIBC_VERSION}" && mkdir glibc-build && cd glibc-build && \
    touch /etc/ld.so.conf && \
    ../configure --prefix="${INSTALL_PREFIX}" && \
    make -s all && make -s install && \
    cd / && rm -rf /tmp/glibc-* && \
    GLIBC_LIB="${INSTALL_PREFIX}/lib" && \
    EXECUTABLE_NAME=$(echo "$GAME_EXECUTABLE" | sed 's/\.[^.]*$//') && \
    DATA_DIR="$HOME_DIR/${EXECUTABLE_NAME}_Data" && \
    patchelf --set-interpreter "$INTERPRETER" "$HOME_DIR/$GAME_EXECUTABLE" && \
    patchelf --set-rpath "$GLIBC_LIB:$HOME_DIR:/lib64:$DATA_DIR/MonoBleedingEdge/$MONO_ARCH" "$HOME_DIR/$GAME_EXECUTABLE" && \
    patchelf --set-rpath "$GLIBC_LIB:/lib64" "$HOME_DIR/UnityPlayer.so" && \
    MONO_LIB="$DATA_DIR/MonoBleedingEdge/$MONO_ARCH/libmonobdwgc-2.0.so" && \
    if [ -f "$MONO_LIB" ]; then patchelf --set-rpath "$GLIBC_LIB:/lib64" "$MONO_LIB"; fi && \
    GAME_ASSEMBLY="$HOME_DIR/GameAssembly.so" && \
    if [ -f "$GAME_ASSEMBLY" ]; then patchelf --set-rpath "$GLIBC_LIB:/lib64" "$GAME_ASSEMBLY"; fi

RUN useradd -m gamescale && \
    echo "gamescale ALL=(ALL) NOPASSWD:ALL" >> /etc/sudoers && \
    chown -R gamescale:gamescale $HOME_DIR

# Add permissions to game build
RUN chmod +x ./$GAME_EXECUTABLE

USER gamescale

# Check directory before starting the container
RUN ls -lhrt .

# Check path before starting the container
RUN echo $PATH

# Start the game build
ENTRYPOINT ["/bin/sh", "-c", "./$GAME_EXECUTABLE $LAUNCH_PARAMS"]
```

## 2단계: 이미지 배포 구성
<a name="unity-plug-in-container-configure"></a>

이 단계에서는 플러그인이 컨테이너 플릿에 컨테이너 이미지를 배포하는 데 필요한 정보를 제공합니다. 이 단계에서는 다음 정보를 요청합니다.
+ 1단계에서 선택한 항목을 기반으로 한 게임 서버 빌드, 컨테이너 이미지 또는 Amazon ECR 리포지토리의 위치입니다.
+ 관리형 컨테이너 배포에 사용할 시나리오입니다.
+ 선택적 배포 설정. 이 섹션에는 플러그인이 기본적으로 사용하는 구성 설정이 있습니다. 이를 수정하거나 기본값을 유지할 수 있습니다.
  + 기본적으로 게임 이름은 게임 프로젝트 이름으로 설정됩니다. 플러그인이 생성하는 모든 AWS 리소스는 게임 이름 값을 참조합니다.
  + 포트 범위, 메모리 제한, vCPU 제한은 컨테이너 플릿의 구성 설정입니다. 이러한 값을 사용자 지정하는 방법에 대한 자세한 내용은 연결 포트 범위는 [네트워크 연결 구성](containers-design-fleet.md#containers-custom-network) 섹션을 참조하고 리소스 제한은 [리소스 제한 설정](containers-design-fleet.md#containers-design-fleet-limits) 섹션을 참조하세요.
  + 컨테이너 이미지 태그는 Amazon ECR에서 컨테이너 이미지를 분류하는 데 사용됩니다. 기본값은 `unity-gamelift-plugin`입니다.

### 배포 시나리오 옵션
<a name="unity-plug-in-container-configure-scenarios"></a>

#### 단일 리전 컨테이너 플릿
<a name="w2aab9c11b9c21c27c13b7b3b1"></a>

이 시나리오에서는 게임 서버를 단일 컨테이너 플릿에 배포합니다. 이는 AWS 및 컨테이너 구성과의 서버 통합을 테스트하기 위한 좋은 시작점입니다. 다음과 같은 리소스를 배포합니다.
+ Amazon GameLift Servers 컨테이너 그룹 정의는 컨테이너 플릿에서 컨테이너 이미지를 배포하고 실행하는 방법을 설명합니다.
+ 별칭을 사용하여 게임 서버 컨테이너가 설치되고 실행 중인 Amazon GameLift Servers 컨테이너 플릿(온디맨드).
+ 플레이어가 게임을 인증하고 시작할 수 있는 Amazon Cognito 사용자 풀 및 클라이언트.
+ 사용자 풀을 API와 연결하는 API 게이트웨이 권한 부여자.
+ API Gateway에 대한 과도한 플레이어 호출을 스로틀링하기 위한 웹 액세스 제어 목록(ACL).
+ 게임 세션을 요청하고 게임에 참여하는 등 게임 클라이언트를 대신하여 Amazon GameLift Servers 서비스에 요청하는 백엔드 서비스: 
  + 플레이어가 게임 세션 슬롯을 요청할 수 있는 API Gateway \+ Lambda 함수. 이 함수는 슬롯이 확보되지 않는 경우 `CreateGameSession()`을 호출합니다.
  + 플레이어가 게임 요청에 대한 연결 정보를 얻을 수 있는 API Gateway \+ Lambda 함수.

#### FlexMatch가 있는 단일 리전 컨테이너 플릿
<a name="w2aab9c11b9c21c27c13b7b3b3"></a>

이 시나리오에서는 게임 서버를 컨테이너 플릿에 배포하고, 게임 세션 배치를 구성하며, FlexMatch 매치메이킹을 설정합니다. 이 시나리오는 호스팅 솔루션용 사용자 지정 매치메이커 설계를 시작할 준비가 되었을 때 유용합니다. 이 시나리오를 사용하여 이 솔루션의 기본 리소스를 만들고 필요에 따라 나중에 사용자 지정할 수 있습니다. 다음과 같은 리소스를 배포합니다.
+ Amazon GameLift Servers 컨테이너 그룹 정의는 컨테이너 플릿에서 컨테이너 이미지를 배포하고 실행하는 방법을 설명합니다.
+ 별칭을 사용하여 게임 서버 컨테이너가 설치되고 실행 중인 Amazon GameLift Servers 컨테이너 플릿(온디맨드).
+ FlexMatch 매치메이킹 구성 및 매치메이킹 규칙은 플레이어 요청을 수락하고 매치를 구성하도록 설정.
+ Amazon GameLift Servers 게임 세션 대기열은 (실행 가능성, 비용, 플레이어 지연 시간 등을 기반으로) 가능한 최상의 호스팅 리소스를 찾고 게임 세션을 시작하여 제안된 매치에 대한 요청을 충족시켜 줌.
+ 플레이어가 게임을 인증하고 시작할 수 있는 Amazon Cognito 사용자 풀 및 클라이언트.
+ 사용자 풀을 API와 연결하는 API 게이트웨이 권한 부여자.
+ API Gateway에 대한 과도한 플레이어 호출을 스로틀링하기 위한 웹 액세스 제어 목록(ACL).
+ 게임 세션을 요청하고 게임에 참여하는 등 게임 클라이언트를 대신하여 Amazon GameLift Servers 서비스에 요청하는 백엔드 서비스: 
  + 플레이어가 게임 세션 슬롯을 요청할 수 있는 API Gateway \+ Lambda 함수. 이 함수는 슬롯이 확보되지 않는 경우 `StartMatchmaking()`을 호출합니다.
  + 플레이어가 게임 요청에 대한 연결 정보를 얻을 수 있는 API Gateway \+ Lambda 함수.
+ 플레이어용 매치메이킹 티켓과 게임 세션 정보를 저장하는 DynamoDB 테이블.
+ GameSessionQueue 이벤트를 처리하는 Amazon SNS 주제 \+ Lambda 함수.

## 컨테이너 플릿 배포
<a name="unity-plug-in-container-deploy"></a>

플릿 구성이 완료되면 **컨테이너 플릿 배포** 버튼을 선택하여 배포를 시작합니다. 플러그인이 컨테이너 이미지를 생성하여 ECR에 푸시하고, 컨테이너 플릿에 대한 호스팅 리소스를 프로비저닝하며, 선택한 호스팅 솔루션 시나리오에 대해 플릿 및 기타 AWS 리소스를 배포하는 동안 이 프로세스는 몇 분 정도 소요될 수 있습니다.

배포를 시작하면 각 단계의 진행 상황을 추적할 수 있습니다. 구성에 따라 단계에 다음이 포함될 수 있습니다.
+ 컨테이너 이미지 구성
+ Amazon ECT 리포지토리 생성 
+ 이미지 빌드 및 Amazon ECR로 푸시
+ 컨테이너 그룹 정의 생성
+ 컨테이너 플릿 생성

자세한 배포 정보를 보려면 ** AWS Management Console에서 보기**를 선택합니다. 컨테이너 플릿이 활성 상태에 도달하면 플릿은 게임 세션을 호스팅할 준비가 된 서버 프로세스로 컨테이너를 적극적으로 실행하고 있습니다.

배포가 완료되면 게임 세션을 호스팅하고 플레이어 연결을 수락할 준비가 된 작동 컨테이너 플릿이 있습니다.

진행 중인 배포는 중지할 수 없습니다. 배포가 잘못된 상태가 되거나 실패하는 경우 **배포 재설정** 옵션을 사용하여 다시 시작할 수 있습니다.

## 클라이언트 시작
<a name="unity-plug-in-container-launch"></a>

이제 Amazon GameLift Servers로 호스팅된 멀티플레이어 게임을 시작하고 플레이하는 데 모든 작업을 완료했습니다. 게임을 플레이하려면 **클라이언트 시작**을 선택하여 게임 클라이언트의 로컬 인스턴스를 시작합니다.
+ 단일 플릿 시나리오를 배포한 경우 한 명의 플레이어가 있는 게임 클라이언트의 하나의 인스턴스를 열고 서버 맵을 입력하여 이동할 수 있습니다. 또한 게임 클라이언트의 두 번째 인스턴스를 열어 동일한 서버 게임 맵에 두 번째 플레이어를 추가할 수 있습니다.
+ FlexMatch 시나리오를 배포한 경우 호스팅 솔루션은 두 개 이상의 게임 클라이언트가 매치메이킹 요청을 할 때까지 기다립니다. 플레이어 한 명과 함께 게임 클라이언트의 인스턴스를 두 개 이상 엽니다. 두 플레이어가 매칭되고 매치를 위해 게임 세션에 참여하라는 메시지가 표시됩니다.

## 컨테이너 플릿 업데이트
<a name="unity-plug-in-container-update"></a>

관리형 컨테이너 호스팅 솔루션을 성공적으로 배포한 경우 **배포 업데이트** 기능을 사용할 수 있습니다. 이 옵션을 사용하면 새 플릿을 생성할 필요 없이 배포된 컨테이너 플릿의 구성 설정을 업데이트할 수 있습니다.

배포를 업데이트할 때 다른 게임 서버 빌드로 컨테이너 이미지를 배포하고, Amazon ECR 리포지토리를 변경하며, 다른 배포 시나리오를 선택하고, 선택적 구성 설정을 사용자 지정할 수 있습니다.

변경사항을 배포할 준비가 되면 업데이트를 선택합니다. 배포 업데이트에 필요한 시간은 전체 배포와 유사합니다. 자세한 배포 정보를 보려면 ** AWS 관리 콘솔에서 보기를** 선택합니다.

## 배포된 리소스를 정리합니다.
<a name="unity-plug-in-container-cleanup"></a>

더 이상 필요하지 않은 관리형 컨테이너 솔루션의 AWS 리소스를 정리하는 것이 가장 좋습니다. 리소스를 제거하지 않으면 이러한 리소스에 대한 비용이 계속 발생할 수 있습니다.

다음 리소스를 삭제합니다.
+ 관리형 컨테이너 리소스 스택. 이 스택의 리소스는 선택한 배포 시나리오에 따라 달라집니다. 전체 스택을 삭제하려면 CloudFormation 콘솔을 사용합니다. Amazon GameLift Servers 플러그인에서 생성된 스택은 다음 명명 규칙을 사용합니다. `GameLiftPluginForUnity-{GameName}-Containers`. 플러그인에서 새 관리형 컨테이너 배포를 시작하기 전에 스택 삭제 프로세스가 완료될 때까지 기다립니다. 자세한 내용은 [CloudFormation 콘솔에서 스택 삭제](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/cfn-console-delete-stack.html)를 참조하세요.
+ Amazon ECR 리포지토리. 플러그인을 사용하여 컨테이너 이미지에 대한 리포지토리를 생성한 경우 더 이상 필요하지 않은 저장소는 삭제하는 것이 좋습니다. 관리형 컨테이너 배포를 재설정하기 전에는 리포지토리를 삭제할 필요가 없습니다. 배포를 업데이트하거나 재설정하면 플러그인은 다른 리포지토리를 사용하도록 지시되지 않는 한 동일한 리포지토리를 자동으로 사용합니다. 자세한 내용은 [Amazon ECR에서 프라이빗 리포지토리 삭제](https://docs.aws.amazon.com/AmazonECR/latest/userguide/repository-delete.html)를 참조하세요.