AWS App Runner에서의 .NET 워크로드

모듈 3

모듈 3: AWS App Runner에서의 .NET 웹 API

 실습

실습 목표

이 실습에서는 DynamoDB 테이블을 사용하는 .NET 웹 API를 생성하고, 이를 컨테이너화하고, AWS App Runner에서 호스팅합니다. 이 실습은 Windows PC, macOS 또는 Linux 컴퓨터 또는 클라우드의 Cloud9 환경에서 수행할 수 있습니다.

먼저 DynamoDB 테이블과 이 테이블에 액세스하는 .NET 6 웹 API 프로젝트를 생성합니다. 로컬에서 테스트한 후에는 Docker와 AWS deployment tool for .NET CLI를 사용하여 소프트웨어를 컨테이너화하고 Amazon Elastic Container Registry(ECR)에 배포합니다. 그런 다음 DynamoDB와 통신하는 데 필요한 AWS Artifact와 함께 App Runner 서비스를 생성합니다. 여기에는 IAM 역할, VPC 커넥터, DynamoDB용 VPC 엔드포인트가 포함됩니다. 클라우드에서 애플리케이션을 테스트하고 앱에서 DynamoDB에서 데이터를 검색할 수 있는지 확인합니다. App Runner 콘솔에서 애플리케이션을 모니터링하고 로그를 검토합니다. 마지막으로 프로젝트를 업데이트하고 업데이트를 ECR로 푸시한 다음 App Runner가 자동으로 업데이트를 배포하는 것을 확인합니다. 마지막으로 애플리케이션과 해당 리소스를 삭제합니다.

이 실습은 12단계로 구성되어 있습니다.

  1. AWS 설정
  2. 개발 환경 설정
  3. DynamoDB 테이블 생성
  4. .NET 웹 API 프로젝트 생성
  5. 로컬에서 테스트
  6. 웹 API 프로젝트를 ECR에 게시
  7. IAM 역할 생성
  8. App Runner 서비스 생성
  9. DynamoDB용 VPC 엔드포인트 생성
  10. 클라우드에서 테스트
  11. 업데이트 배포
  12. 종료

 소요 시간

90분

구현

1단계: AWS 설정

이 단계에서는 AWS 환경을 설정합니다.

이미 개발하여 AWS App Runner에 배포 중이고 AWS Deployment Tool for .NET CLI를 설치한 경우 3단계로 빠르게 넘어갈 수 있습니다.

 1. AWS 계정 취득

기존 AWS 계정을 사용하거나 AWS 계정을 생성합니다. 프로덕션 계정을 사용하지 마세요.

 2. AWS 리전 선택

AWS Console에 로그인하고 AWS App Runner를 지원하고 DynamoDB를 지원하는 작업 대상 AWS 리전을 선택합니다.

3. 개발 환경 생성

이 실습에 로컬 컴퓨터를 사용하는 경우 2단계로 진행합니다.

Cloud9을 사용하는 경우 아래를 계속 진행하세요.

AWS Console에서 Cloud9 환경을 설정합니다.

A. AWS Console에서 Cloud9로 이동하고 환경 생성을 클릭합니다.

B. 환경 이름을 AppRunnerLab으로 지정합니다.

C. 기본값을 그대로 두고 생성을 클릭합니다.

D. 환경이 생성될 때까지 기다립니다. 몇 분 정도 걸립니다. 해당 리전에서 t2.micro 인스턴스 유형을 사용할 수 없어 환경 생성이 실패할 경우 위 단계를 반복하고 다른 소형 인스턴스 유형을 선택하세요. 인스턴스 유형이 프리 티어에 속하지 않는 경우 실습 기간 동안 청구되는 요금을 염두에 두어야 합니다.

작업 확인

이제 다음을 완료했습니다.

✓ AWS 계정

✓ AWS Management Console에 로그인하는 방법 파악

✓ 작업할 리전 선정

✓ 사용할 수 있는 로컬 컴퓨터 또는 Cloud9 환경 마련

2단계: 개발 환경 설정

이 단계에서는 소프트웨어를 설치하여 개발 환경을 설정합니다. 이미 설치한 항목은 건너뛰세요.

1. AWS CLI 설치

AWS 명령줄 인터페이스(CLI)를 설치합니다.

2. AWS CLI 구성

AWS 계정의 사용자와 연결되도록 AWS CLI를 구성합니다.

명령/터미널 창에서 다음 명령(aws configure)을 사용하여 리전을 구성합니다.

3. .NET SDK 설치

.NET 6 SDK를 설치합니다. 운영 체제에 맞는 SDK를 다운로드하여 설치합니다.

Cloud9을 사용하는 경우 필요한 도구 설치(1단계 및 2단계)에서 이 명령을 실행할 수 있습니다. 그리고 다음 명령을 실행합니다. ./dotnet-install.sh -c LTS

4. AWS Development Tool for .NET CLI 설치

명령/터미널 창에서 다음 명령을 사용하여 AWS Deployment tool for .NET CLI를 설치합니다.

dotnet tool install -g aws.deploy.tools

5. Docker 설치

Docker 데스크톱을 설치합니다. 이미 Docker를 사용하고 있다면 버전 17.05 이상이 필요합니다.

6. IDE 설치

Microsoft Visual Studio 2022(Windows), Visual Studio Code(Linux, macOS, Windows) 또는 JetBrains Rider(Linux, macOS, Windows)와 같은 IDE를 설치합니다. .NET 웹 개발을 위한 옵션 또는 확장 프로그램을 C#으로 설치해야 합니다.

작업 확인

이제 다음을 완료했습니다.

✓ 모든 필수 소프트웨어 설치

✓ AWS 사용자 및 리전에 맞게 AWS CLI 구성

3단계: DynamoDB 테이블 생성

이 단계에서는 Weather라는 DynamoDB 테이블을 생성하고 일부 데이터 레코드를 생성합니다.

 1. AWS Console에서 DynamoDB 테이블 생성

AWS Console에서 Amazon DynamoDB로 이동하여 테이블 생성을 클릭합니다.

    A. 테이블 이름: Weather
    B. 파티션 키: Location
    C. 정렬 키: Timestamp
    D. 테이블 생성 클릭

 2. 테이블에 항목 채우기

Weather 테이블 이름을 클릭하여 세부 정보 페이지로 이동한 다음 테이블 항목 탐색을 클릭합니다. 다음 항목을 추가합니다.

A. 항목 생성JSON 보기를 클릭합니다. 아래에 JSON(댈러스, 아침)을 입력하고 항목 생성을 클릭합니다.

{
  "Location": {
    "S": "Dallas"
  },
  "Timestamp": {
    "S": "2022-07-23T06:00:00"
  },
  "Summary": {
    "S": "Hot"
  },
  "TempC": {
    "N": "33"
  },
  "TempF": {
    "N": "92"
  }
}

B. 같은 방법으로 다음 JSON을 사용하여 두 번째 항목(댈러스, 정오)을 추가합니다.

{
  "Location": {
    "S": "Dallas"
  },
  "Timestamp": {
    "S": "2022-07-23T12:00:00"
  },
  "Summary": {
    "S": "Scorching"
  },
  "TempC": {
    "N": "43"
  },
  "TempF": {
    "N": "109"
  }
}

C. 다음 JSON을 사용하여 세 번째 항목(댈러스, 저녁)을 추가합니다.

{
  "Location": {
    "S": "Dallas"
  },
  "Timestamp": {
    "S": "2022-07-23T18:00:00"
  },
  "Summary": {
    "S": "Hot"
  },
  "TempC": {
    "N": "36"
  },
  "TempF": {
    "N": "97"
  }
}

D. 다음 JSON을 사용하여 네 번째 항목(미네소타, 아침)을 추가합니다.

{
  "Location": {
    "S": "Minneapolis"
  },
  "Timestamp": {
    "S": "2022-07-23T06:00:00"
  },
  "Summary": {
    "S": "Cool"
  },
  "TempC": {
    "N": "13"
  },
  "TempF": {
    "N": "56"
  }
}

E. 다음 JSON을 사용하여 다섯 번째 항목(미니애폴리스, 정오)을 추가합니다.

{
  "Location": {
    "S": "Minneapolis"
  },
  "Timestamp": {
    "S": "2022-07-23T12:00:00"
  },
  "Summary": {
    "S": "Balmy"
  },
  "TempC": {
    "N": "22"
  },
  "TempF": {
    "N": "72"
  }
}

F. 다음 JSON을 사용하여 여섯 번째 항목(미니애폴리스, 저녁)을 추가합니다. 

{
  "Location": {
    "S": "Minneapolis"
  },
  "Timestamp": {
    "S": "2022-07-23T18:00:00"
  },
  "Summary": {
    "S": "Balmy"
  },
  "TempC": {
    "N": "19"
  },
  "TempF": {
    "N": "67"
  }
}

작업 확인

이제 다음을 완료했습니다.

✓ Weather라는 DynamoDB 테이블의 6개 항목 채우기

4단계: .NET 웹 API 프로젝트 생성

이 단계에서는 dotnet new 명령을 사용하여 웹 API 프로젝트를 생성하고 DynamoDB 테이블에서 데이터를 검색하도록 프로젝트 코드를 업데이트합니다.

1. 개발 폴더로 이동

명령/터미널 창을 열고 개발 폴더로 이동합니다.

2. .NET WebAPI 프로젝트 생성

아래의 dotnet new 명령을 실행하여 HelloAppRunnerVpc라는 새 웹 API 프로젝트를 생성합니다.

dotnet new webapi -n HelloAppRunnerVpc --framework net6.0

3. IDE에서 프로젝트 열기

IDE에서 HelloAppRunnerVpc 프로젝트를 엽니다.

IDE용 AWS Toolkit이 설치되어 있는 경우, AWS 탐색기에서 리전을 1단계에서 선택한 리전으로 설정하세요.

4. 생성된 프로젝트 검토

생성된 프로젝트는 .NET 샘플에서 많이 사용되는 WeatherForecast API입니다.

사용해 보려면 F5 키를 누르고 Swagger로 테스트합니다. 서비스에 모의 날씨 데이터 JSON을 반환하는 /WeatherForecast 작업이 있는 것을 확인할 수 있습니다.

프로그램 실행을 중지합니다.

5. AWS SDK NuGet 패키지 추가

명령/터미널 창에서 프로젝트 폴더로 이동합니다. 아래의 dotnet add package 명령을 실행하여 AWS SDK NuGet 패키지 AWSSDK.DynamoDBv2를 프로젝트에 추가합니다.

cd HelloAppRunnerVpc
 dotnet add package AWSSDK.DynamoDBv2

6. Program.cs 수정

코드 편집기에서 Program.cs 파일을 열고 App Runner에서 필요하지 않을 다음 문을 삭제하거나 주석 처리합니다.

//app.UseHttpsRedirection();

 7. WeatherForecast 클래스 코딩

WeatherForecast.cs를 열고 아래 코드로 바꿉니다. 이 클래스에는 Weather 테이블에서 검색된 항목이 들어 있습니다.

namespace HelloAppRunnerVpc;

public class WeatherForecast
{
    public DateTime Date { get; set; }
    public int TemperatureC { get; set; }
    public int TemperatureF { get; set; }
    public string? Summary { get; set; }
}

 8. WeatherForecastController 클래스 코딩

컨트롤러 폴더에서 WeatherForecastController.cs를 열고 아래 코드로 바꿉니다. RegionEndpoint.USEast1을 작업 중인 리전으로 업데이트합니다. 이 코드는 서비스의 루트에 상태 확인 메서드를 구현하고, 위치 파라미터를 가져와 DynamoDB Weather 테이블에서 해당 데이터를 검색하는 WeatherForecast 메서드를 /WeatherForecast에 구현합니다. 테이블 스캔을 수행하여 파티션 키가 위치와 일치하는 레코드를 찾습니다. 그 결과가 JSON 레코드의 배열로 출력됩니다.
using Amazon;
using Amazon.DynamoDBv2;
using Amazon.DynamoDBv2.DocumentModel;
using Microsoft.AspNetCore.Mvc;

namespace HelloAppRunnerVpc.Controllers;

[ApiController]
[Route("")]
public class WeatherForecastController : ControllerBase
{
    static readonly RegionEndpoint region = RegionEndpoint.USEast1;

    private readonly ILogger _logger;

    public WeatherForecastController(ILogger<WeatherForecastController> logger)
    {
        _logger = logger;
    }

    [HttpGet("")]
    public string GetHealthcheck()
    {
        return "Healthcheck: Healthy";
    }

    [HttpGet("WeatherForecast")]
    public async Task<IEnumerable<WeatherForecast>> GetWeatherForecast(string location = "Dallas")
    {
        List<WeatherForecast> forecasts = new List<WeatherForecast>();

        try
        {
            _logger.LogInformation($"00 enter GET, location = {location}");

            var client = new AmazonDynamoDBClient(region);
            Table table = Table.LoadTable(client, "Weather");

            var filter = new ScanFilter();
            filter.AddCondition("Location", ScanOperator.Equal, location);

            var scanConfig = new ScanOperationConfig()
            {
                Filter = filter,
                Select = SelectValues.SpecificAttributes,
                AttributesToGet = new List<string> { "Location", "Timestamp", "TempC", "TempF", "Summary" }
            };

            _logger.LogInformation($"10 table.Scan");

            Search search = table.Scan(scanConfig);

            List<Document> matches;
            do
            {
                _logger.LogInformation($"20 table.GetNextSetAsync");
                matches = await search.GetNextSetAsync();
                foreach (var match in matches)
                {
                    forecasts.Add(new WeatherForecast
                    {
                        Date = Convert.ToDateTime(match["Timestamp"]),
                        TemperatureC = Convert.ToInt32(match["TempC"]),
                        TemperatureF = Convert.ToInt32(match["TempF"]),
                        Summary = Convert.ToString(match["Summary"])
                    });
                }
            } while (!search.IsDone);

            _logger.LogInformation($"30 exited results loop");

        }
        catch (Exception ex)
        {
            _logger.LogError(ex, "90 Exception");
        }

        _logger.LogInformation($"99 returning {forecasts.Count} results");

        return forecasts.ToArray();
    }
}

9. 변경 사항 저장 및 빌드

변경 사항을 저장하고 프로젝트가 빌드되는지 확인합니다.

작업 확인

이제 다음을 완료했습니다.

✓ HelloAppRunnerVpc라는 이름의 웹 API 프로젝트 생성

✓ WeatherForecastController.cs 파일에 리전 설정

5단계: 로컬에서 테스트

이 단계에서는 웹 API를 로컬에서 테스트하고 DynamoDB에서 데이터 검색을 확인합니다.

 1. 프로젝트 디버깅

IDE에서 F5 키를 누르고 앱이 빌드되어 브라우저에서 실행될 때까지 기다립니다.

 2. 상태 확인 작업 테스트

브라우저에서 URL의 Swagger 경로를 제거하여 서비스 루트에 도달하면 상태 확인 메시지가 표시됩니다. App Runner는 정기적으로 사이트를 핑하여 상태를 확인합니다.

 3. 댈러스의 일기 예보 작업 테스트

URL 경로 끝에 /WeatherForecast?location=Dallas를 추가합니다. 1단계에서 DynamoDB 테이블에 생성한 값과 함께 일기 예보 데이터 JSON이 표시됩니다.

4. 미니애폴리스의 일기 예보 작업 테스트

URL 경로를 /WeatherForecast?location=Minneapolis로 끝나도록 변경합니다. 이제 그 도시의 수치가 보일 것입니다.

5. 잘못된 위치의 일기 예보 작업 테스트

다른 위치 이름을 시도하면 테이블에 해당 데이터가 없으므로 빈 응답이 표시됩니다.

6. 프로그램 중지

프로그램 실행을 중지합니다.

로컬에서 테스트할 때는 앱에서 DynamoDB에 액세스하는 것이 간단했지만 클라우드에서는 그렇지 않습니다. App Runner는 기본적으로 퍼블릭 엔드포인트로 제한되기 때문입니다. App Runner용 VPC 커넥터와 DynamoDB용 해당 VPC 엔드포인트를 추가하는 단계를 더 거쳐야 합니다.

작업 확인

이제 다음을 완료했습니다.

✓ 웹 API 프로젝트를 로컬에서 테스트

✓ DynamoDB 데이터 검색 확인

6단계: 웹 API 프로젝트를 ECR에 게시

이 단계에서는 AWS .NET 배포 도구를 사용하여 프로젝트를 컨테이너화하고 컨테이너 이미지를 Amazon Elastic Container Registry(ECR)로 푸시합니다.

1. Dockerfile 생성

다음 코드를 사용하여 텍스트 파일을 Dockerfile이라는 프로젝트 폴더에 추가합니다.
FROM mcr.microsoft.com/dotnet/aspnet:6.0 AS base
WORKDIR /app
EXPOSE 80
EXPOSE 443

FROM mcr.microsoft.com/dotnet/sdk:6.0 AS build
WORKDIR /src
COPY ["HelloAppRunnerVpc.csproj", "."]
RUN dotnet restore "./HelloAppRunnerVpc.csproj"
COPY . .
WORKDIR "/src/."
RUN dotnet build "HelloAppRunnerVpc.csproj" -c Release -o /app/build

FROM build AS publish
RUN dotnet publish "HelloAppRunnerVpc.csproj" -c Release -o /app/publish

FROM base AS final
WORKDIR /app
COPY --from=publish /app/publish .
ENTRYPOINT ["dotnet", "HelloAppRunnerVpc.dll"]

2. ECR에 배포

프로젝트를 컨테이너 이미지로 ECR에 배포합니다.

a. 명령/터미널 창에서 이 명령을 실행하여 원하는 리전을 지정하여 배포를 시작합니다. (그림 1)

dotnet aws deploy --region us-west-2

b. Amazon Elastic Container Registry(ECR)로 컨테이너 이미지를 푸시할지 여부를 선택합니다.

c. 현재 설정 프롬프트에서 이미지 태그를 변경할 번호를 입력하고 최신으로 설정합니다. (그림 2)

d. Enter를 눌러 배포를 확인합니다.

3. 배포 대기

배포가 완료될 때까지 기다립니다.

4. AWS Console에서 배포 확인

컨테이너 이미지가 ECR에 배포되었는지 확인합니다. AWS Console에서 ECR로 이동합니다. helloapprunnervpc라는 이름의 저장소가 나열됩니다.

작업 확인

이제 다음을 완료했습니다.

✓ Dockerfile을 사용하여 프로젝트 컨테이너화

✓ 컨테이너 이미지를 Amazon ECR에 배포

7단계: IAM 역할 생성

이 단계에서는 AWS Console을 사용하여 AppRunnerInstanceDynamoDB라는 IAM 역할을 생성합니다. 이 역할을 통해 App Runner EC2 인스턴스가 DynamoDB 테이블에 액세스할 수 있습니다.

1. DynamoDB 테이블 액세스를 위한 정책 생성

Weather DynamoDB 테이블에 대한 액세스를 허용하는 정책을 생성합니다.    

    a. Identity and Access Management(IAM)로 이동합니다.

    b. 왼쪽 창에서 정책을 선택하고 정책 생성을 클릭합니다.

    c. 정책을 생성하고 아래에 JSON을 입력합니다. 이때 [계정]을 12자리 AWS 계정 번호로, [리전]을 해당 리전으로 바꿉니다.

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "",
            "Effect": "Allow",
            "Action": "dynamodb:*",
            "Resource": "arn:aws:dynamodb:[region]:[account]:table/Weather"
        }
    ]
}

    d. 다음: 태그를 클릭하고 다음: 검토를 선택합니다. 정책 이름을 ddb-Weather로 지정하고 정책 생성을 클릭합니다.

2. EC2 인스턴스용 역할 생성

App Runner EC2 인스턴스용 역할 생성:

    a. 왼쪽 창에서 역할을 선택하고 역할 생성을 클릭합니다.

    b. 신뢰할 수 있는 엔터티 유형에서 AWS 서비스를 선택합니다. (그림 1)

    c. 사용 사례에서 EC2를 선택하고 다음을 클릭합니다. (그림 1)

    d. 다음 권한을 검색하고 선택합니다. ddb-Weather, AmazonDynamoDBFullAccess, AWSAppRunnerFullAccess. 그런 다음 다음을 클릭합니다. (그림 2)

    e. 신뢰 관계 탭에서 신뢰 정책 편집을 클릭합니다. 이 JSON으로 바꾸고 정책 업데이트를 클릭합니다. (그림 5)

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": {
                "Service": [
                    "ec2.amazonaws.com",
                    "tasks.apprunner.amazonaws.com"
                ]
            },
            "Action": "sts:AssumeRole"
        }
    ]
}

    f. 역할 이름을 AppRunnerInstanceDynamoDB로 지정하고 역할 생성을 클릭합니다. (그림 3)

작업 확인

이제 다음을 완료했습니다.

✓ 세 가지 정책이 포함된 AppRunnerInstanceDynamoDB라는 IAM 역할 생성 

8단계: App Runner 서비스 생성

이 단계에서는 App Runner 서비스와 VPC 커넥터를 생성합니다.

 1. 서비스 생성

AWS Console에서 AWS App Runner로 이동하여 서비스 생성을 클릭합니다.

    a. 리포지토리 유형: 컨테이너 레지스트리. (그림 1)

    b. 제공자: Amazon ECR.

    c. 찾아보기를 클릭하고 6단계에서 ECR에 배포한 컨테이너를 선택합니다. (그림 2)

    d. 배포 설정 트리거에서 자동을 선택합니다.

    e. ECR 액세스 역할에서 새 서비스 역할 생성을 선택합니다.

    f. 다음을 클릭합니다.

 2. 서비스 구성

서비스 구성 페이지에서

    a. 서비스 이름을 HelloAppRunnerVpc로 지정합니다.

    b. b. 포트: 80.

3. 인스턴스 역할 구성

보안 섹션을 펼치고 인스턴스 역할을 AppRunnerInstanceDynamoDB로 설정합니다.

4. VPC 커넥터 생성

네트워킹 섹션을 펼치고 VPC 커넥터를 생성합니다.

    a. 네트워킹에서 커스텀 VPC를 선택합니다.

    b. VPC 커넥터에서 새로 추가를 클릭합니다.

    c. VPC 커넥터 이름으로 AppRunnerDynamoDB를 입력합니다. (그림 1)

    d. VPC: 기본 VPC를 선택합니다.

    e. 서브넷: 모든 서브넷을 선택합니다.

    f. 보안 그룹: 기본 보안 그룹을 선택합니다. (그림 2)

    g. 추가를 클릭합니다. 서브넷 중 하나가 App Runner 서비스를 지원하지 않는다는 오류 메시지가 표시되면 서브넷 목록에서 해당 서브넷을 제거하고 추가를 다시 클릭하세요. (그림 2)

    h. 다음을 클릭하고 생성 및 배포를 선택합니다.

5. 배포 대기

배포를 기다립니다. 몇 분 정도 걸립니다. 이때 잠시 쉬어가면 좋습니다.

6. 서비스 URL 기록

서비스 배포가 완료되면 서비스 생성 성공이라는 메시지가 표시됩니다.

기본 도메인 URL을 기록합니다. 서비스 URL입니다.

이벤트 로그를 새로 고침 하면 서비스가 실행 중인지 확인할 수 있습니다.

7. 서비스 URL로 이동

URL로 이동하면 상태 확인이 보일 것입니다. AWS 서비스는 App Runner에서 호스팅되지만 아직 DynamoDB에 액세스할 수 없습니다. App Runner VPC 커넥터를 생성했지만, 여전히 DynamoDB에 맞는 VPC 엔드포인트를 생성해야 합니다.

작업 확인

이제 다음을 완료했습니다.

✓ HelloAppRunnerVpc라는 실행 중인 AWS App Runner 서비스 생성

✓ 서비스 엔드포인트 URL 생성

✓ 상태 확인 URL이 브라우저에서 응답하는지 확인

9단계: DynamoDB용 VPC 엔드포인트 생성

이 단계에서는 DynamoDB용 VPC 엔드포인트를 생성합니다.

1. AWS Console에서 VPC로 이동

2. 엔드포인트 생성

왼쪽 패널에서 엔드포인트를 선택하고 엔드포인트 생성을 클릭합니다.

    a. 이름: vpc-endpoint-dynamodb. (그림 1)

    b. b. 서비스 카테고리: AWS 서비스.

    c. 서비스: 검색 상자에 DynamoDB를 입력하고 com.amazonaws.region.dynamodb를 선택합니다.

    d. VPC: 기본 VPC를 선택합니다.

    e. 라우팅 테이블: 기본 라우팅 테이블을 선택합니다.

    f. 엔드포인트 생성을 클릭합니다. (그림 2)

작업 확인

이제 다음을 완료했습니다.

vpc-endpoint-dynamodb라는 이름의 DynamoDB용 VPC 엔드포인트 생성

10단계: 클라우드에서 테스트

이제 모든 것을 종합해서 클라우드에서 웹 API를 테스트할 준비를 마쳤습니다.

 1. 서비스 URL 방문

브라우저에서 6단계에서 기록한 서비스 URL을 방문합니다. 상태 확인 응답이 표시됩니다.

 2. 댈러스의 일기 예보 작업 테스트

경로 끝에 /WeatherForecast?location=Dallas를 추가합니다. 이제 1단계에서 입력한 댈러스의 레코드가 표시됩니다.

 3. 미니애폴리스의 일기 예보 작업 테스트

3. 경로 끝을 /WeatherForecast?location=Minneapolis로 변경합니다. 그러면 해당 위치에 대한 레코드가 표시됩니다.

축하합니다! 웹 API는 AWS App Runner에서 호스팅되며 서비스는 DynamoDB와 통신합니다.

작업 확인

이제 다음을 완료했습니다.

✓ AWS App Runner 서비스가 DynamoDB 테이블에서 데이터를 검색할 수 있는지 확인

11단계: 업데이트 배포

이 단계에서는 웹 API를 업데이트하고, 업데이트된 컨테이너를 푸시하고, App Runner가 업데이트된 컨테이너를 서비스에 자동으로 배포하는 것을 확인합니다. 서비스를 생성할 때 8단계에서 자동 배포를 구성했기 때문에 이 작업을 수행할 수 있습니다.

1. 서비스 수정

IDE에서 GetWeatherForecast 메서드를 변경하여 응답이 약간 달라지도록 합니다. 예를 들어 요약 필드에 느낌표를 추가할 수 있습니다.

2. 로컬에서 빌드 및 테스트

프로젝트를 로컬에서 빌드하고 테스트하여 예상대로 작동하는지 확인합니다. 

3. 컨테이너 재배포

프로그램을 중지합니다. 6단계에서 했던 것처럼 명령/터미널 창에서 dotnet aws deploy를 다시 실행하여 업데이트된 컨테이너를 ECR에 배포합니다. 태그가 아직 최신인지 확인합니다.

4. 서비스 재배포 모니터링

AWS App Runner 콘솔에서 서비스를 확인합니다. 새 컨테이너가 배포된 직후 App Runner는 업데이트를 자동으로 배포합니다.

5. 업데이트된 서비스 테스트

업데이트가 완료될 때까지 기다린 다음 10단계에서처럼 서비스를 탐색하여 테스트합니다. 이제 서비스에서 출력한 새 버전이 표시되는지 확인합니다.

작업 확인

이제 다음을 완료했습니다.

✓ 웹 API 프로젝트를 변경하여 업데이트

✓ 업데이트된 컨테이너를 ECR에 배포

✓ App Runner가 업데이트를 자동으로 배포했는지 확인 

12단계: 종료

프로젝트 변경 사항을 자유롭게 실험하여 지식을 테스트합니다.

프로젝트를 모두 마쳤으면 종료하세요. 사용하지 않는 항목에 대해서는 요금이 부과되는 것을 원하지 않을 것입니다.

1. App Runner 서비스 삭제

AWS Console에서 App Runner로 이동하여 HelloAppRunnerVpc 서비스를 삭제합니다.

2. DynamoDB 테이블 삭제

DynamoDB로 이동하여 Weather 테이블을 삭제합니다.

3. 컨테이너 이미지 삭제

ECR로 이동하여 helloapprunnervpc 컨테이너 이미지를 삭제합니다.

4. AWS Cloud9 환경 삭제

Cloud9을 사용하는 경우 Cloud9으로 이동하여 AppRunnerLab 환경을 삭제합니다.

작업 확인

이제 다음을 완료했습니다.

✓ App Runner 서비스 삭제

✓ DynamoDB 테이블 삭제

✓ ECR 컨테이너 이미지 삭제 

요약

이 실습에서는 DynamoDB 테이블을 생성하고 데이터를 채웠습니다. dotnet new 명령을 사용하여 .NET 웹 애플리케이션 프로젝트를 생성했습니다. DynamoDB 테이블에서 날씨 데이터를 검색하는 웹 API를 코딩했습니다. ECR에 컨테이너를 배포했습니다. 웹 API를 호스팅하기 위해 App Runner 서비스를 생성했습니다. App Runner VPC 커넥터와 DynamoDB용 VPC 엔드포인트를 생성하여 두 서비스를 연결했습니다. 이제 AWS에 호스팅된 애플리케이션을 테스트한 후 제대로 작동하는 것을 확인했습니다. 업데이트된 컨테이너를 ECR에 배포하고 App Runner 서비스에 자동으로 배포되는 것을 확인했습니다. 마지막으로 AWS에서 애플리케이션을 분리했습니다.

이 페이지의 내용이 도움이 되었나요?

기술 평가