

 AWS Cloud9 는 더 이상 신규 고객이 사용할 수 없습니다. AWS Cloud9 의 기존 고객은 정상적으로 서비스를 계속 이용할 수 있습니다. [자세히 알아보기](https://aws.amazon.com/blogs/devops/how-to-migrate-from-aws-cloud9-to-aws-ide-toolkits-or-aws-cloudshell/)

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

# 에 대한 .NET 자습서 AWS Cloud9
<a name="sample-dotnetcore"></a>

이 자습서를 사용하면 AWS Cloud9 개발 환경에서 일부 .NET 코드를 실행할 수 있습니다.

이 자습서를 따르고이 샘플을 생성하면 AWS 계정에 요금이 부과될 수 있습니다. 여기에는 Amazon EC2 및 Amazon S3 같은 서비스에 대한 발생할 수 있는 요금이 포함됩니다. 자세한 내용은 [Amazon EC2 요금](https://aws.amazon.com/ec2/pricing/) 및 [Amazon S3 요금](https://aws.amazon.com/s3/pricing/)을 참조하세요.

**Topics**
+ [사전 조건](#sample-dotnetcore-prereqs)
+ [1단계: 필수 도구 설치](#sample-dotnetcore-setup)
+ [2단계(선택 사항): Lambda 함수에 대한 .NET CLI 확장 설치](#sample-dotnetcore-lambda)
+ [3단계: .NET 콘솔 애플리케이션 프로젝트 만들기](#sample-dotnetcore-app)
+ [4단계: 코드 추가](#sample-dotnetcore-code)
+ [5단계: 코드 빌드 및 실행](#sample-dotnetcore-run)
+ [6단계:를 사용하는 .NET 콘솔 애플리케이션 프로젝트 생성 및 설정 AWS SDK for .NET](#sample-dotnetcore-sdk)
+ [7단계: AWS SDK 코드 추가](#sample-dotnetcore-sdk-code)
+ [8단계: AWS SDK 코드 빌드 및 실행](#sample-dotnetcore-sdk-run)
+ [9단계: 정리](#sample-dotnetcore-clean-up)

## 사전 조건
<a name="sample-dotnetcore-prereqs"></a>

이 샘플을 사용하기 전에 설정이 다음 요구 사항을 충족하는지 확인하세요.
+ **기존 AWS Cloud9 EC2 개발 환경이 있어야 합니다.** 이 샘플에서는 Amazon Linux 또는 Ubuntu 서버를 실행 중인 Amazon EC2 인스턴스에 연결된 EC2 환경이 이미 있다고 가정합니다. 다른 환경 또는 운영 시스템이라면 이 샘플 지침을 관련 도구를 설치하는 데에 적용해야 합니다. 자세한 내용은 [에서 환경 생성 AWS Cloud9](create-environment.md) 단원을 참조하십시오.
+ **기존 환경의 AWS Cloud9 IDE가 이미 열려 있습니다.** 환경을 열면가 웹 브라우저에서 해당 환경의 IDE를 AWS Cloud9 엽니다. 자세한 내용은 [에서 환경 열기 AWS Cloud9](open-environment.md) 단원을 참조하십시오.

## 1단계: 필수 도구 설치
<a name="sample-dotnetcore-setup"></a>

이 단계에서는 이 샘플을 실행하는 데 필요한 .NET SDK를 환경에 설치합니다.

1. .NET SDK의 최신 버전이 환경에 이미 설치되었는지 여부를 확인합니다. 이렇게 하려면 AWS Cloud9 IDE의 터미널 세션에서 ** `--version` ** 옵션을 사용하여 .NET Core 명령줄 인터페이스(CLI)를 실행합니다.

   ```
   dotnet --version
   ```

   .NET 명령줄 도구 버전이 표시되고 버전이 2.0 이상이면 [3단계: .NET 콘솔 애플리케이션 프로젝트 만들기](#sample-dotnetcore-app) 단원으로 이동합니다. 버전이 2.0 미만이거나 `bash: dotnet: command not found`와 같은 오류가 표시되면 계속해서 .NET SDK를 설치합니다.

1. Amazon Linux의 경우 AWS Cloud9 IDE의 터미널 세션에서 다음 명령을 실행하여 최신 보안 업데이트 및 버그 수정이 설치되었는지 확인하고 .NET SDK에 필요한 `libunwind` 패키지를 설치합니다. (터미널 세션을 새로 시작하려면 메뉴 모음에서 **Window(창), New Terminal(새 터미널)**을 선택합니다.)

   ```
   sudo yum -y update
   sudo yum -y install libunwind
   ```

   Ubuntu Server의 경우 AWS Cloud9 IDE의 터미널 세션에서 다음 명령을 실행하여 최신 보안 업데이트 및 버그 수정이 설치되었는지 확인합니다. (터미널 세션을 새로 시작하려면 메뉴 모음에서 **Window(창), New Terminal(새 터미널)**을 선택합니다.)

   ```
   sudo apt -y update
   ```

1. 다음 명령을 실행하여 환경으로 .NET SDK 설치 프로그램을 다운로드합니다.

   ```
   wget https://dot.net/v1/dotnet-install.sh
   ```

1. 다음 명령을 실행하여 현재 사용자가 설치 프로그램 스크립트 실행 파일을 생성합니다.

   ```
   sudo chmod u=rx dotnet-install.sh
   ```

1. 다음 명령을 실행하여 .NET SDK를 다운로드해 설치하는 설치 프로그램 스크립트를 실행합니다.

   ```
   ./dotnet-install.sh -c Current
   ```

1. `PATH`에 .NET SDK를 추가합니다. 이렇게 하려면 환경에 대한 셸 프로필(예: `.bashrc` 파일)에서 다음과 같이 환경에 대한 `PATH` 변수에 `$HOME/.dotnet` 하위 디렉터리를 추가합니다.

   1. **`vi` **명령을 사용하여 편집을 위해 `.bashrc` 파일을 엽니다.

      ```
      vi ~/.bashrc
      ```

   1. Amazon Linux의 경우 아래쪽 화살표 또는 `j` 키를 사용하여 `export PATH`로 시작하는 행으로 이동합니다.

      Ubuntu Server의 경우 `G`를 입력하여 파일의 마지막 행으로 이동합니다.

   1. 오른쪽 화살표 또는 `$` 키를 사용하여 해당 행의 끝으로 이동합니다.

   1. `i` 키를 눌러서 삽입 모드로 전환합니다.`-- INSERT ---`가 표시 화면의 끝에 나타납니다.

   1. Amazon Linux의 경우 `:$HOME/.dotnet`을 입력하여 `$HOME/.dotnet` 하위 디렉터리를** `PATH` **변수에 추가합니다. 반드시 콜론 문자(`:`)를 포함해야 합니다. 이제 이 행은 다음과 같습니다.

      ```
      export PATH=$PATH:$HOME/.local/bin:$HOME/bin:$HOME/.dotnet
      ```

      Ubuntu Server의 경우 오른쪽 화살표 키를 누르고 `Enter` 키를 두 번 누른 다음 파일 끝에 직접 다음 행을 입력합니다.

      ```
      export PATH=$HOME/.dotnet:$PATH
      ```

   1. 파일을 저장합니다. 이렇게 하려면 `Esc` 키를 누릅니다. 표시 화면 끝에서 `-- INSERT ---`가 사라집니다. (파일에 쓰고 나서 파일을 종료하기 위해 `:wq`를 입력하고 나서 `Enter`를 누릅니다.

1. `.bashrc` 파일을 소싱하여 .NET SDK를 로드합니다.

   ```
   . ~/.bashrc
   ```

1. **`--help` **옵션을 지정한 상태로 .NET CLI를 실행하여 .NET SDK가 로드되었는지 확인합니다.

   ```
   dotnet --help
   ```

   성공하면 추가 사용법 정보와 함께 .NET SDK 버전 번호가 표시됩니다.

1. 환경에서 .NET SDK 설치 프로그램 스크립트를 더 이상 유지하지 않으려면 다음과 같이 해당 파일을 삭제할 수 있습니다.

   ```
   rm dotnet-install.sh
   ```

## 2단계(선택 사항): Lambda 함수에 대한 .NET CLI 확장 설치
<a name="sample-dotnetcore-lambda"></a>

이 자습서에서는 필수는 아니지만 `Amazon.Lambda.Tools` 패키지를 설치하는 경우 .NET CLI를 사용하여 AWS Lambda 함수와 AWS Serverless Application Model 애플리케이션을 배포할 수 있습니다.

1. 이 패키지를 설치하려면 다음 명령을 실행합니다.

   ```
   dotnet tool install -g Amazon.Lambda.Tools
   ```

1. 이제 설치된 Lambda 도구를 가리키도록 `PATH` 및 `DOTNET_ROOT` 환경 변수를 설정합니다. `.bashrc` 파일에서 `export PATH` 섹션을 찾아 다음과 같이 표시되도록 편집합니다(이 파일 편집에 대한 자세한 내용은 1단계 참조).

   ```
   export PATH=$PATH:$HOME/.local/bin:$HOME/bin:$HOME/.dotnet:$HOME/.dotnet/tools
   export DOTNET_ROOT=$HOME/.dotnet
   ```

## 3단계: .NET 콘솔 애플리케이션 프로젝트 만들기
<a name="sample-dotnetcore-app"></a>

이 단계에서는 .NET을 사용하여 `hello` 프로젝트를 생성합니다. 이 프로젝트에는 IDE의 터미널에서 단순 애플리케이션을 실행하기 위해 .NET에 필요한 모든 파일이 포함되어 있습니다. 애플리케이션의 코드는 C\$1으로 작성되었습니다.

.NET 콘솔 애플리케이션 프로젝트를 생성합니다. 이렇게 하려면 사용할 콘솔 애플리케이션 프로젝트 템플릿 유형 및 프로그래밍 언어(이 샘플에서는 C\$1)를 지정하여 **`new`** 명령과 함께 .NET CLI를 실행합니다.

 `-n` 옵션은 프로젝트가 `hello`라는 새 디렉터리로 출력됨을 나타냅니다. 그런 다음 해당 디렉터리로 이동합니다.

```
dotnet new console -lang C# -n hello
cd hello
```

이전 명령은 여러 파일을 포함하는 `obj` 하위 디렉터리와 추가 독립 실행형 파일을 `hello` 디렉터리에 추가합니다. 다음 키 파일 두 개에 유의해야 합니다.
+ `hello/hello.csproj` 파일에는 콘솔 애플리케이션 프로젝트에 대한 정보가 들어 있습니다.
+ `hello/Program.cs` 파일에는 실행할 애플리케이션의 코드가 들어 있습니다.

## 4단계: 코드 추가
<a name="sample-dotnetcore-code"></a>

이 단계에서는 애플리케이션에 코드를 추가합니다.

 AWS Cloud9 IDE의 **환경** 창에서 `hello/Program.cs` 파일을 엽니다.

편집기에서 이 파일의 현재 내용을 다음 코드로 바꾼 다음 `Program.cs` 파일을 저장합니다.

```
using System;

namespace hello
{
  class Program
  {
    static void Main(string[] args)
    {
     if (args.Length < 2) {
       Console.WriteLine("Please provide 2 numbers");
       return;
     }

     Console.WriteLine("Hello, World!");

     Console.WriteLine("The sum of 2 and 3 is 5.");

     int sum = Int32.Parse(args[0]) + Int32.Parse(args[1]);

     Console.WriteLine("The sum of {0} and {1} is {2}.",
     args[0], args[1], sum);

    }
  }
}
```

## 5단계: 코드 빌드 및 실행
<a name="sample-dotnetcore-run"></a>

이 단계에서는 프로젝트 및 관련 종속 항목을 바이너리 파일 세트(실행 가능한 애플리케이션 파일 포함)로 빌드합니다. 그런 다음 애플리케이션을 실행합니다.

1. IDE에서 다음과 같이 .NET용 빌더를 생성합니다.

   1. 메뉴 모음에서 **Run, Build System, New Build System(실행, 빌드 시스템, 새 빌드 시스템)**을 선택합니다.

   1. **My Builder.build** 탭에서 탭의 내용을 다음 코드로 바꿉니다.

      ```
      {
        "cmd" : ["dotnet", "build"],
        "info" : "Building..."
      }
      ```

   1. **File, Save As(파일, 다른 이름으로 저장)**를 선택합니다.

   1. **Filename(파일 이름)**에 `.NET.build`를 입력합니다.

   1. **Folder(폴더)**에 `/.c9/builders`를 입력합니다.

   1. **저장**을 선택합니다.

1. 편집기에 `Program.cs` 파일의 내용이 표시된 상태로 메뉴 모음에서 **실행, 빌드 시스템, .NET**을 선택합니다. 그런 다음 **Run, Build(실행, 빌드)**를 선택합니다.

   이 빌더는 `bin` 하위 디렉터리를 추가하고 `Debug` 하위 디렉터리를 `hello/obj` 하위 디렉터리에 추가합니다. 다음 키 파일 세 개에 유의하십시오.
   + `hello/bin/Debug/netcoreapp3.1/hello.dll` 파일은 실행 가능한 애플리케이션 파일입니다.
   + `hello/bin/Debug/netcoreapp3.1/hello.deps.json` 파일은 애플리케이션의 종속 항목을 나열합니다.
   + `hello/bin/Debug/netcoreapp3.1/hello.runtimeconfig.json` 파일은 애플리케이션의 버전과 공유 실행 시간을 지정합니다.
**참고**  
폴더 이름 `netcoreapp3.1`은 이 예에 사용된 .NET SDK의 버전을 나타냅니다. 설치한 버전에 따라 폴더 이름에 다른 번호가 표시될 수 있습니다.

1. 다음과 같이 .NET용 실행기를 생성합니다.

   1. 메뉴 모음에서 **Run, Run With, New Runner(실행, 실행 도구, 새 실행기)**를 선택합니다.

   1. **My Runner.run** 탭에서 탭의 내용을 다음 코드로 바꿉니다.

      ```
      {
        "cmd" : ["dotnet", "run", "$args"],
        "working_dir": "$file_path",
        "info" : "Running..."
      }
      ```

   1. **File, Save As(파일, 다른 이름으로 저장)**를 선택합니다.

   1. **Filename(파일 이름)**에 `.NET.run`를 입력합니다.

   1. **Folder(폴더)**에 `/.c9/runners`를 입력합니다.

   1. **저장**을 선택합니다.

1. 다음과 같이 추가할 두 정수(예: `5`와 `9`)를 지정하여 애플리케이션을 실행합니다.

   1. 편집기에 `Program.cs` 파일의 내용이 표시된 상태로, **Run(실행), Run Configurations(실행 구성), New Run Configuration(새로운 실행 구성)**을 선택합니다.

   1. **[새로 만들기] - 유휴** 탭에서 **실행기: 자동**을 선택한 다음 **.NET**을 선택합니다.

   1. **Command(명령)** 상자에 `hello 5 9`를 입력합니다.

   1. **실행**을 선택합니다.

      기본적으로 이 실행기는 .NET에 `hello/bin/Debug/netcoreapp3.1` 디렉터리의 `hello.dll` 파일을 실행하도록 지시합니다.

      출력을 다음과 비교합니다.

      ```
      Hello, World!
      The sum of 2 and 3 is 5.
      The sum of 5 and 9 is 14.
      ```

## 6단계:를 사용하는 .NET 콘솔 애플리케이션 프로젝트 생성 및 설정 AWS SDK for .NET
<a name="sample-dotnetcore-sdk"></a>

이 샘플을 개선하여 AWS SDK for .NET 를 사용하여 Amazon S3 버킷을 생성하고 사용 가능한 버킷을 나열한 다음 방금 생성한 버킷을 삭제할 수 있습니다.

이 새 프로젝트에서는 AWS SDK for .NET에 대한 참조를 추가합니다. 는 .NET 코드에서 Amazon S3와 같은 AWS 서비스와 상호 작용하는 편리한 방법을 AWS SDK for .NET 제공합니다. 그런 다음 환경에서 AWS 자격 증명 관리를 설정합니다. 는 AWS 서비스와 상호 작용하기 위해 이러한 자격 증명이 AWS SDK for .NET 필요합니다.

### 프로젝트를 만들려면
<a name="sample-dotnetcore-sdk-create"></a>

1. .NET 콘솔 애플리케이션 프로젝트를 생성합니다. 이렇게 하려면 사용할 콘솔 애플리케이션 프로젝트 템플릿 유형 및 프로그래밍 언어를 지정하여 **`new`** 명령과 함께 .NET CLI를 실행합니다.

   `-n` 옵션은 프로젝트가 `s3`라는 새 디렉터리로 출력됨을 나타냅니다. 그런 다음 해당 디렉터리로 이동합니다.

   ```
   dotnet new console -lang C# -n s3
   cd s3
   ```

1.  AWS SDK for .NET에 Amazon S3 패키지에 대한 프로젝트 참조를 추가합니다. 이렇게 하려면, NuGet의 Amazon S3 패키지 이름을 지정하여** `add package` **명령으로 .NET CLI를 실행합니다. (NuGet은 .NET용 패키지의 생성, 호스팅 및 사용 방식을 정의하고 이러한 각 역할에 사용할 도구를 제공합니다.)

   ```
   dotnet add package AWSSDK.S3
   ```

   Amazon S3 패키지에 대한 프로젝트 참조를 추가하면 NuGet에서 AWS SDK for .NET의 나머지에 대한 프로젝트 참조도 추가합니다.
**참고**  
NuGet의 기타 AWS 관련 패키지 이름 및 버전은 [NuGet 웹 사이트에서 aws-sdk로 태그가 지정된 NuGet 패키지를](https://www.nuget.org/packages?q=Tags%3A%22aws-sdk%22) 참조하세요. NuGet 

### AWS 자격 증명 관리를 설정하려면
<a name="sample-dotnetcore-sdk-creds"></a>

를 사용하여 AWS 서비스를 호출 AWS SDK for .NET 할 때마다 호출과 함께 자격 AWS 증명 세트를 제공해야 합니다. 이러한 자격 증명은에 해당 호출을 수행할 수 AWS SDK for .NET 있는 적절한 권한이 있는지 여부를 결정합니다. 자격 증명으로 적절한 권한이 확인되지 않는 경우 호출이 실패합니다.

환경에 자격 증명을 저장하려면 [AWS 서비스 의 환경에서 호출 AWS Cloud9](credentials.md)의 지침을 따른 다음 이 주제로 돌아옵니다.

자세한 내용은 *AWS SDK for .NET 개발자 안내서*의 [AWS 자격 증명 구성을 참조하세요](https://docs.aws.amazon.com/sdk-for-net/v3/developer-guide/net-dg-config-creds.html).

## 7단계: AWS SDK 코드 추가
<a name="sample-dotnetcore-sdk-code"></a>

이 단계에서는 Amazon S3와 상호 작용하는 코드를 추가하여 버킷을 생성하고 생성된 버킷을 삭제한 다음 사용 가능한 버킷의 목록을 나열합니다.

 AWS Cloud9 IDE의 **환경** 창에서 `s3/Program.cs` 파일을 엽니다. 편집기에서 이 파일의 현재 내용을 다음 코드로 바꾼 다음 `Program.cs` 파일을 저장합니다.

```
using Amazon;
using Amazon.S3;
using Amazon.S3.Model;
using Amazon.S3.Util;
using System;
using System.Threading.Tasks;
     
namespace s3
{
  class Program
  {
   async static Task Main(string[] args)
   {
    if (args.Length < 2) {
      Console.WriteLine("Usage: <the bucket name> <the AWS Region to use>");
      Console.WriteLine("Example: my-test-bucket us-east-2");
      return;
    }
     
    if (args[1] != "us-east-2") {
      Console.WriteLine("Cannot continue. The only supported AWS Region ID is " +
      "'us-east-2'.");
       return;
     }
         
      var bucketRegion = RegionEndpoint.USEast2;
      // Note: You could add more valid AWS Regions above as needed.
     
      using (var s3Client = new AmazonS3Client(bucketRegion)) {
      var bucketName = args[0];
        
      // Create the bucket.
      try
      {
       if (await AmazonS3Util.DoesS3BucketExistV2Async(s3Client, bucketName))
       {
         Console.WriteLine("Cannot continue. Cannot create bucket. \n" +
         "A bucket named '{0}' already exists.", bucketName);
         return;
       } else {
         Console.WriteLine("\nCreating the bucket named '{0}'...", bucketName);
         await s3Client.PutBucketAsync(bucketName);
         }
       }
       catch (AmazonS3Exception e)
       {
        Console.WriteLine("Cannot continue. {0}", e.Message);
       }
       catch (Exception e)
       {
        Console.WriteLine("Cannot continue. {0}", e.Message);
       }
        
       // Confirm that the bucket was created.
       if (await AmazonS3Util.DoesS3BucketExistV2Async(s3Client, bucketName))
       {
          Console.WriteLine("Created the bucket named '{0}'.", bucketName);
       } else {
         Console.WriteLine("Did not create the bucket named '{0}'.", bucketName);
       }
        
       // Delete the bucket.
       Console.WriteLine("\nDeleting the bucket named '{0}'...", bucketName);
       await s3Client.DeleteBucketAsync(bucketName);
        
       // Confirm that the bucket was deleted.
       if (await AmazonS3Util.DoesS3BucketExistV2Async(s3Client, bucketName))
       {
          Console.WriteLine("Did not delete the bucket named '{0}'.", bucketName);
       } else {
         Console.WriteLine("Deleted the bucket named '{0}'.", bucketName);
       };
        
        // List current buckets.
       Console.WriteLine("\nMy buckets now are:");
       var response = await s3Client.ListBucketsAsync();
        
       foreach (var bucket in response.Buckets)
       {
       Console.WriteLine(bucket.BucketName);
       }
      }
    }
  }
}
```

## 8단계: AWS SDK 코드 빌드 및 실행
<a name="sample-dotnetcore-sdk-run"></a>

이 단계에서는 프로젝트 및 관련 종속 항목을 바이너리 파일 세트(실행 가능한 애플리케이션 파일 포함)로 빌드합니다. 그런 다음 애플리케이션을 실행합니다.

1. 프로젝트를 빌드합니다. 이렇게 하려면 편집기에 `s3/Program.cs`파일의 내용이 표시된 상태로 메뉴 모음에서 **Run, Build(실행, 빌드)**를 선택합니다.

1. 다음과 같이 생성할 Amazon S3 버킷 이름과 및 버킷을 생성할 AWS 리전의 ID를 지정하여 애플리케이션(예: `my-test-bucket` 및 `us-east-2`)을 실행합니다.

   1. 편집기에 `s3/Program.cs` 파일의 내용이 여전히 표시된 상태로, **Run(실행), Run Configurations(실행 구성), New Run Configuration(새로운 실행 구성)**을 선택합니다.

   1. **[새로 만들기] - 유휴** 탭에서 **실행기: 자동**을 선택한 다음 **.NET**을 선택합니다.

   1. **명령** 상자에 애플리케이션의 이름, 생성할 Amazon S3 버킷의 이름, 버킷을 생성할 AWS 리전의 ID(예: `s3 my-test-bucket us-east-2`)를 입력합니다.

   1. **실행**을 선택합니다.

      기본적으로 이 실행기는 .NET에 `s3/bin/Debug/netcoreapp3.1` 디렉터리의 `s3.dll` 파일을 실행하도록 지시합니다.

      결과를 다음 출력과 비교합니다.

      ```
      Creating a new bucket named 'my-test-bucket'...
      Created the bucket named 'my-test-bucket'.
      
      Deleting the bucket named 'my-test-bucket'...
      Deleted the bucket named 'my-test-bucket'.
      
      My buckets now are:
      ```

## 9단계: 정리
<a name="sample-dotnetcore-clean-up"></a>

이 샘플 사용을 완료한 후 AWS 계정에 지속적인 요금이 부과되지 않도록 하려면 환경을 삭제해야 합니다. 지침은 [에서 환경 삭제 AWS Cloud9](delete-environment.md) 단원을 참조하세요.