

 AWS Cloud9 不再向新客户提供。 AWS Cloud9 的现有客户可以继续正常使用这项服务。[了解详情](https://aws.amazon.com/blogs/devops/how-to-migrate-from-aws-cloud9-to-aws-ide-toolkits-or-aws-cloudshell/)

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 去教程 AWS Cloud9
<a name="sample-go"></a>

本教程使你能够在 AWS Cloud9 开发环境中运行一些 Go 代码。

按照本教程并创建此示例可能会导致您的 AWS 账户被扣款。其中包括可能对 Amazon EC2 和 Amazon S3 等服务收取的费用。有关更多信息，请参阅 [Amazon EC2 定价](https://aws.amazon.com/ec2/pricing/)和 [Amazon S3 定价](https://aws.amazon.com/s3/pricing/)。

**Topics**
+ [先决条件](#sample-go-prereqs)
+ [步骤 1：安装所需工具](#sample-go-install)
+ [步骤 2：添加代码](#sample-go-code)
+ [步骤 3：运行代码](#sample-go-run)
+ [步骤 4：安装和配置 适用于 Go 的 AWS SDK](#sample-go-sdk)
+ [第 5 步：添加 AWS SDK 代码](#sample-go-sdk-code)
+ [第 6 步：运行 S AWS DK 代码](#sample-go-sdk-run)
+ [步骤 7：清除](#sample-go-clean-up)

## 先决条件
<a name="sample-go-prereqs"></a>

在使用此示例之前，请确保您的设置满足以下要求：
+ **您必须拥有现有 AWS Cloud9 的 EC2 开发环境。**本示例假设您已经有连接到运行 Amazon Linux 或 Ubuntu Server 的 Amazon EC2 实例的 EC2 环境。如果您有不同类型的环境或操作系统，可能需要按照本示例的说明来设置相关的工具。有关更多信息，请参阅 [在中创建环境 AWS Cloud9](create-environment.md)。
+ **您已经打开了现有环境的 AWS Cloud9 IDE。**打开环境时，会在 Web 浏览器中 AWS Cloud9 打开该环境的 IDE。有关更多信息，请参阅 [在中打开环境 AWS Cloud9](open-environment.md)。

## 步骤 1：安装所需工具
<a name="sample-go-install"></a>

在此步骤中，安装和配置运行此示例需要的 Go。

1. 在 AWS Cloud9 IDE 的终端会话中，通过运行**`go version`**命令来确认 Go 是否已安装。（要开始新的终端会话，请在菜单栏上依次选择 **Window（窗口）**> **New Terminal（新建终端）**。） 如果成功，则输出应包含 Go 版本号。否则，会输出错误消息。如果已安装 GO，请向前跳至[步骤 2：添加代码](#sample-go-code)。

1. 运行 **`yum update`**（对于 Amazon Linux）或 **`apt update`**（对于 Ubuntu Server）命令，以帮助确保已安装最新的安全更新和错误修复。

   对于 Amazon Linux：

   ```
   sudo yum -y update
   ```

   对于 Ubuntu Server：

   ```
   sudo apt update
   ```

1. 要安装 Go，请运行以下命令（一次运行一个命令）。

   ```
   wget https://storage.googleapis.com/golang/go1.9.3.linux-amd64.tar.gz # Download the Go installer.
   sudo tar -C /usr/local -xzf ./go1.9.3.linux-amd64.tar.gz              # Install Go.
   rm ./go1.9.3.linux-amd64.tar.gz                                       # Delete the installer.
   ```

   上述命令假定安装在编写本主题时最新的稳定版本 Go。有关更多信息，请在 Go Programming Language 网站上参阅 [Downloads](https://golang.org/dl/) (下载) 页面。

1. 将指向 Go 二进制文件的路径添加到 `PATH` 环境变量，如下所示。

   1. 打开 Shell 配置文件（例如 `~/.bashrc`）以进行编辑。

   1. 在这一行代码的末尾键入以下内容，现在的代码如下所示。

      ```
      PATH=$PATH:/usr/local/go/bin
      ```

   1. 保存该文件。

1. 给出 `~/.bashrc` 文件来源，使终端现在可以找到您刚刚引用的 Go 二进制文件。

   ```
   . ~/.bashrc
   ```

1. 通过运行 **`go version`** 命令确认此时已成功安装和配置 Go。如果成功，输出会包含 Go 版本号。

## 步骤 2：添加代码
<a name="sample-go-code"></a>

在 AWS Cloud9 IDE 中，使用此内容创建一个文件，然后使用该名称保存该文件`hello.go`。（要创建文件，请在菜单栏上依次选择 **File（文件）**、**New File（新建文件）**。要保存文件，请依次选择 **File（文件）**、**Save（保存）**。）

```
package main

import (
  "fmt"
  "os"
  "strconv"
)

func main() {
  fmt.Printf("Hello, World!\n")

  fmt.Printf("The sum of 2 and 3 is 5.\n")

  first, _ := strconv.Atoi(os.Args[1])
  second, _ := strconv.Atoi(os.Args[2])
  sum := first + second

  fmt.Printf("The sum of %s and %s is %s.",
    os.Args[1], os.Args[2], strconv.Itoa(sum))
}
```

## 步骤 3：运行代码
<a name="sample-go-run"></a>

1. 在 AWS Cloud9 IDE 的菜单栏上，选择 “运行”、“**运行****配置**”、“**新建运行配置**”。

1. 在 **[New] - Idle ([新建] - 空闲)** 选项卡上，选择 **Runner: Auto (运行程序: 自动)**，然后选择 **Go**。
**注意**  
如果 **Go** 不可用，您可以为 Go 创建自定义运行程序。  
在 **[New] - Idle ([新建] - 空闲)** 选项卡上，选择 **Runner: Auto (运行程序: 自动)**，然后选择 **New Runner (新建运行程序)**。
在 **My Runner.run (我的 Runner.run)** 选项卡上，将选项卡的内容替换为以下代码。  

      ```
      {
        "cmd" : ["go", "run", "$file", "$args"],
        "info" : "Running $project_path$file_name...",
        "selector" : "source.go"
      }
      ```
在菜单栏上依次选择 **File** (文件)、**Save As** (另存为)，然后在 `/.c9/runners` 文件夹中将该文件保存为 `Go.run`。
在 **[New] - Idle ([新建] - 空闲)** 选项卡上，选择 **Runner: Auto (运行程序: 自动)**，然后选择 **Go**。
选择 **hello.go** 选项卡以将其激活。

1. 在 **Command（命令）**中，键入 `hello.go 5 9`。在代码中，`5` 表示 `os.Args[1]`，`9` 表示 `os.Args[2]`。  
![\[在 AWS Cloud9 IDE 中运行 Go 代码的输出\]](http://docs.aws.amazon.com/zh_cn/cloud9/latest/user-guide/images/ide-go-simple.png)

1. 选择 **Run (运行)** 按钮，然后比较输出。

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

## 步骤 4：安装和配置 适用于 Go 的 AWS SDK
<a name="sample-go-sdk"></a>

您可以增强此示例，使用创建 Amazon S3 存储桶，列出您的可用存储桶，然后删除您刚刚创建的存储桶。 适用于 Go 的 AWS SDK 

在此步骤中，您将安装和配置 适用于 Go 的 AWS SDK，它提供了一种通过 Go 代码与 Amazon S3 等 AWS 服务进行交互的便捷方式。在安装之 适用于 Go 的 AWS SDK前，必须设置 `GOPATH` 环境变量。安装 适用于 Go 的 AWS SDK 并设置 `GOPATH` 环境变量后，必须在环境中设置凭证管理。 适用于 Go 的 AWS SDK 需要这些凭据才能与 AWS 服务进行交互。

### 设置 GOPATH 环境变量
<a name="sample-go-sdk-set-gopath"></a>

1. 打开您的 `~/.bashrc` 文件以进行编辑。

1. 在文件中的最后一行后面，键入以下代码。

   ```
   GOPATH=~/environment/go
      
   export GOPATH
   ```

1. 保存该文件。

1. 给出 `~/.bashrc` 文件来源，使终端现在可以找到您刚刚引用的 `GOPATH` 环境变量。

   ```
   . ~/.bashrc
   ```

1. 通过运行 **`echo $GOPATH`** 命令，确认已成功设置 `GOPATH` 环境变量。如果成功，输出应为 `/home/ec2-user/environment/go` 或 `/home/ubuntu/environment/go`。

### 要安装 适用于 Go 的 AWS SDK
<a name="sample-go-sdk-install-sdk"></a>

运行**`go get`**命令，指定 适用于 Go 的 AWS SDK 源的位置。

```
go get -u github.com/aws/aws-sdk-go/...
```

Go 将 适用于 Go 的 AWS SDK 源代码安装到`GOPATH`环境变量指定的位置，即环境中的`go`文件夹。

### 在环境中设置凭证管理
<a name="sample-go-sdk-creds"></a>

每次使用调 适用于 Go 的 AWS SDK 用 AWS 服务时，都必须为呼叫提供一组凭据。这些证书决定了是否 适用于 Go 的 AWS SDK 具有进行该呼叫的相应权限。如果凭证没有包括合适的权限，调用将失败。

在此步骤中，您将凭证存储在环境内。为此，请按照 [AWS 服务 从中的环境中呼叫 AWS Cloud9](credentials.md) 中的说明操作，然后返回到本主题。

有关其他信息，请参阅 *适用于 Go 的 AWS SDK 开发人员指南*中的[指定凭证](https://docs.aws.amazon.com/sdk-for-go/latest/developer-guide/configuring-sdk.html#specifying-credentials)。

## 第 5 步：添加 AWS SDK 代码
<a name="sample-go-sdk-code"></a>

在此步骤中，您会添加一些代码，此次用于与 Amazon S3 交互来创建存储桶，列出可用的存储桶，然后删除刚刚创建的存储桶。您将稍后运行此代码。

在 AWS Cloud9 IDE 中，使用此内容创建一个文件，然后使用该名称保存该文件`s3.go`。

```
package main

import (
	"fmt"
	"os"

	"github.com/aws/aws-sdk-go/aws"
	"github.com/aws/aws-sdk-go/aws/session"
	"github.com/aws/aws-sdk-go/service/s3"
)

func main() {

	if len(os.Args) < 3 {
		fmt.Printf("Usage: go run s3.go <the bucket name> <the AWS Region to use>\n" +
			"Example: go run s3.go my-test-bucket us-east-2\n")
		os.Exit(1)
	}

	sess := session.Must(session.NewSessionWithOptions(session.Options{
		SharedConfigState: session.SharedConfigEnable,
	}))
	svc := s3.New(sess, &aws.Config{
		Region: aws.String(os.Args[2]),
	})

	listMyBuckets(svc)
	createMyBucket(svc, os.Args[1], os.Args[2])
	listMyBuckets(svc)
	deleteMyBucket(svc, os.Args[1])
	listMyBuckets(svc)
}

// List all of your available buckets in this AWS Region.
func listMyBuckets(svc *s3.S3) {
	result, err := svc.ListBuckets(nil)

	if err != nil {
		exitErrorf("Unable to list buckets, %v", err)
	}

	fmt.Println("My buckets now are:\n")

	for _, b := range result.Buckets {
		fmt.Printf(aws.StringValue(b.Name) + "\n")
	}

	fmt.Printf("\n")
}

// Create a bucket in this AWS Region.
func createMyBucket(svc *s3.S3, bucketName string, region string) {
	fmt.Printf("\nCreating a new bucket named '" + bucketName + "'...\n\n")

	_, err := svc.CreateBucket(&s3.CreateBucketInput{
		Bucket: aws.String(bucketName),
		CreateBucketConfiguration: &s3.CreateBucketConfiguration{
			LocationConstraint: aws.String(region),
		},
	})

	if err != nil {
		exitErrorf("Unable to create bucket, %v", err)
	}

	// Wait until bucket is created before finishing
	fmt.Printf("Waiting for bucket %q to be created...\n", bucketName)

	err = svc.WaitUntilBucketExists(&s3.HeadBucketInput{
		Bucket: aws.String(bucketName),
	})
}

// Delete the bucket you just created.
func deleteMyBucket(svc *s3.S3, bucketName string) {
	fmt.Printf("\nDeleting the bucket named '" + bucketName + "'...\n\n")

	_, err := svc.DeleteBucket(&s3.DeleteBucketInput{
		Bucket: aws.String(bucketName),
	})

	if err != nil {
		exitErrorf("Unable to delete bucket, %v", err)
	}

	// Wait until bucket is deleted before finishing
	fmt.Printf("Waiting for bucket %q to be deleted...\n", bucketName)

	err = svc.WaitUntilBucketNotExists(&s3.HeadBucketInput{
		Bucket: aws.String(bucketName),
	})
}

// If there's an error, display it.
func exitErrorf(msg string, args ...interface{}) {
	fmt.Fprintf(os.Stderr, msg+"\n", args...)
	os.Exit(1)
}
```

## 第 6 步：运行 S AWS DK 代码
<a name="sample-go-sdk-run"></a>

1. 在 AWS Cloud9 IDE 的菜单栏上，选择 “运行”、“**运行****配置**”、“**新建运行配置**”。

1. 在 **[New] - Idle ([新建] - 空闲)** 选项卡上，选择 **Runner: Auto (运行程序: 自动)**，然后选择 **Go**。

1. 在 **Comman** d 中`s3.go YOUR_BUCKET_NAME THE_AWS_REGION `，键入，其中` YOUR_BUCKET_NAME `是您要创建然后删除的存储桶的名称，` THE_AWS_REGION `也是您要在其中创建存储桶的 AWS 区域的 ID。例如，对于美国东部 (俄亥俄) 区域，请使用 `us-east-2`。欲了解更多信息 IDs，请参阅中的[亚马逊简单存储服务 (Amazon S3) S](https://docs.aws.amazon.com/general/latest/gr/rande.html#s3_region) ervice。*Amazon Web Services 一般参考*
**注意**  
Amazon S3 存储桶名称必须是唯一的，而 AWS不仅仅是您的 AWS 账户。

1. 选择 **Run (运行)** 按钮，然后比较输出。

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

## 步骤 7：清除
<a name="sample-go-clean-up"></a>

为了防止在您使用完此示例后继续向您的 AWS 账户收费，您应该删除该环境。有关说明，请参阅[删除中的环境 AWS Cloud9](delete-environment.md)。