

 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 主控台應用程式專案 適用於 .NET 的 AWS SDK](#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 開發環境。**本範例假設您已具備 EC2 環境，且該環境已連線到執行 Amazon Linux 或 Ubuntu Server 的 Amazon EC2 執行個體。如果您有不同類型的環境或作業系統，您可能需要依照此範例的說明來設定相關工具。如需詳細資訊，請參閱[在 中建立環境 AWS Cloud9](create-environment.md)。
+ **您已開啟現有環境的 AWS Cloud9 IDE。**當您開啟環境時，請在 Web 瀏覽器中 AWS Cloud9 開啟該環境的 IDE。如需詳細資訊，請參閱[在 中開啟環境 AWS Cloud9](open-environment.md)。

## 步驟 1：安裝必要工具
<a name="sample-dotnetcore-setup"></a>

在此步驟中，您會將 .NET 開發套件安裝到您的環境，這是執行此範例的必要項目。

1. 確認您的環境中是否已安裝最新版本的 .NET SDK。若要這樣做，請在 IDE AWS Cloud9 的終端機工作階段中，使用 **`--version`**選項執行 .NET Core 命令列界面 (CLI)。

   ```
   dotnet --version
   ```

   如果顯示的 .NET 命令列工具版本是 2.0 或更高版本，請直接跳到 [步驟 3：建立 .NET 主控台應用程式專案](#sample-dotnetcore-app)。如果版本低於 2.0，或`bash: dotnet: command not found`顯示 等錯誤，請繼續安裝 .NET 開發套件。

1. 對於 Amazon Linux，在 IDE AWS Cloud9 的終端機工作階段中執行下列命令，以協助確保已安裝最新的安全性更新和錯誤修正，並安裝 .NET SDK 所需的`libunwind`套件。(若要啟動新終端機工作階段，請在選單列上，選擇 **Window (視窗)、New Terminal** (新增終端機))。

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

   對於 Ubuntu Server，在 IDE AWS Cloud9 的終端機工作階段中，執行下列命令，以協助確保已安裝最新的安全性更新和錯誤修正。(若要啟動新終端機工作階段，請在選單列上，選擇 **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 開發套件。

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

1. 將 .NET 開發套件新增至您的 `PATH`。若要這樣做，請在環境的 shell 描述檔 (例如，`.bashrc` 檔案) 中，將 `$HOME/.dotnet` 子目錄新增到環境的 `PATH` 變數，如下所示。

   1. 使用 `.bashrc`**`vi` 命令，開啟 ** 檔案以供編輯。

      ```
      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. 接著設定 `PATH` 和 `DOTNET_ROOT` 環境變數，以便指向已安裝的 Lambda 工具。在 `.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`。此專案包含 .NET 從 IDE 中的終端機執行簡單應用程式所需的所有檔案。應用程式的程式碼是以 C\$1 編寫。

建立 .NET 主控台應用程式專案。若要執行此操作，請使用 **`new`**命令執行 .NET CLI，指定主控台應用程式專案範本類型和要使用的程式設計語言 （在此範例中為 C\$1)。

 `-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>

在此步驟中，您將新增一些程式碼到應用程式。

從 **IDE 中的環境**視窗中，開啟 `hello/Program.cs` 檔案。 AWS Cloud9 

在編輯器中，使用以下程式碼取代該檔案的目前內容，然後儲存 `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 (我的 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 (我的 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 主控台應用程式專案 適用於 .NET 的 AWS SDK
<a name="sample-dotnetcore-sdk"></a>

您可以增強此範例，以使用 適用於 .NET 的 AWS SDK 建立 Amazon S3 儲存貯體、列出可用的儲存貯體，然後刪除您剛建立的儲存貯體。

在這個新專案中，您會新增 適用於 .NET 的 AWS SDK的參考。 適用於 .NET 的 AWS SDK 提供便捷的方式，讓您從 .NET 程式碼與 Amazon S3 等 AWS 服務互動。然後，您可以在環境中設定 AWS 登入資料管理。 適用於 .NET 的 AWS SDK 需要這些登入資料才能與 AWS 服務互動。

### 建立專案
<a name="sample-dotnetcore-sdk-create"></a>

1. 建立 .NET 主控台應用程式專案。若要這樣做，請使用 **`new`**命令執行 .NET CLI，指定主控台應用程式專案範本類型和要使用的程式設計語言。

   `-n` 選項表示專案經輸出到新的目錄 `s3` 中。接著導覽至該目錄。

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

1. 在 適用於 .NET 的 AWS SDK中新增 Amazon S3 套件的專案參考。若要執行此操作，請使用 **`add package`**命令執行 .NET CLI，並在 NuGet 中指定 Amazon S3 套件的名稱。(NuGet 定義如何建立、託管和消耗 .NET 套件，並提供這些角色的工具。)

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

   當您新增 Amazon S3 套件的專案參考時，NuGet 也會在其餘 適用於 .NET 的 AWS SDK中新增專案參考。
**注意**  
如需 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>

每次使用 適用於 .NET 的 AWS SDK 來呼叫 AWS 服務時，您必須隨呼叫提供一組 AWS 登入資料。這些登入資料會判斷 是否 適用於 .NET 的 AWS SDK 具有進行該呼叫的適當許可。如果登入資料未涵蓋適當許可，呼叫即會失敗。

若要將憑證存放在環境中，請遵循 [AWS 服務 從 中的環境呼叫 AWS Cloud9](credentials.md) 中的指示，然後返回本主題。

如需詳細資訊，請參閱《 *適用於 .NET 的 AWS SDK 開發人員指南*》中的[設定 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 互動，藉此建立儲存貯體、刪除您剛建立的儲存貯體，然後列出可用的儲存貯體。

從 **IDE 中的環境**視窗中，開啟 `s3/Program.cs` 檔案。 AWS Cloud9 在編輯器中，使用以下程式碼取代該檔案的目前內容，然後儲存 `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)。