适用于 AWS Cloud9 的 Go 教程 - AWS Cloud9

AWS Cloud9 不再向新客户提供。 AWS Cloud9 的现有客户可以继续正常使用该服务。了解更多

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

适用于 AWS Cloud9 的 Go 教程

该教程让您能够在 AWS Cloud9 开发环境中运行部分 Go 代码。

按照本教程操作并创建此示例可能会对您的 AWS 账户收费。其中包括可能对 Amazon EC2 和 Amazon S3 等服务收取的费用。有关更多信息,请参阅 Amazon EC2 定价Amazon S3 定价

先决条件

在使用此示例之前,请确保您的设置满足以下要求:

  • 您必须有现成的 AWS Cloud9 EC2 开发环境。本示例假设您已经有连接到运行 Amazon Linux 或 Ubuntu Server 的 Amazon EC2 实例的 EC2 环境。如果您有不同类型的环境或操作系统,可能需要按照本示例的说明来设置相关的工具。有关更多信息,请参阅在中创建环境 AWS Cloud9

  • 您已将适用于现有环境的 AWS Cloud9 IDE 打开。当您打开环境时,AWS Cloud9 会在 Web 浏览器中为该环境打开 IDE。有关更多信息,请参阅在 AWS Cloud9 中打开环境

步骤 1:安装所需工具

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

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

  2. 运行 yum update(对于 Amazon Linux)或 apt update(对于 Ubuntu Server)命令,以帮助确保已安装最新的安全更新和错误修复。

    对于 Amazon Linux:

    sudo yum -y update

    对于 Ubuntu Server:

    sudo apt update
  3. 要安装 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 (下载) 页面。

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

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

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

      PATH=$PATH:/usr/local/go/bin
    3. 保存该文件。

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

    . ~/.bashrc
  6. 通过运行 go version 命令确认此时已成功安装和配置 Go。如果成功,输出会包含 Go 版本号。

步骤 2:添加代码

在 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:运行代码

  1. 在 AWS Cloud9 IDE 中的菜单栏上依次选择 Run(运行)Run Configurations(运行配置)New Run Configuration(新建运行配置)

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

    注意

    如果 Go 不可用,您可以为 Go 创建自定义运行程序。

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

    2. My Runner.run (我的 Runner.run) 选项卡上,将选项卡的内容替换为以下代码。

      { "cmd" : ["go", "run", "$file", "$args"], "info" : "Running $project_path$file_name...", "selector" : "source.go" }
    3. 在菜单栏上依次选择 File (文件)、Save As (另存为),然后在 /.c9/runners 文件夹中将该文件保存为 Go.run

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

    5. 选择 hello.go 选项卡以将其激活。

  3. Command(命令)中,键入 hello.go 5 9。在代码中,5 表示 os.Args[1]9 表示 os.Args[2]

    在 AWS Cloud9 IDE 中运行 Go 代码的输出
  4. 选择 Run (运行) 按钮,然后比较输出。

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

步骤 4:安装和配置 AWS SDK for Go

您可以改进此示例,以使用 AWS SDK for Go 创建 Amazon S3 存储桶,列出您的可用存储桶,然后删除刚刚创建的存储桶。

在该步骤中,您安装并配置 AWS SDK for Go,它提供了一种简便方法以从 Go 代码中与 AWS 服务(如 Amazon S3)交互。在安装之AWS SDK for Go前,必须设置 GOPATH 环境变量。安装 AWS SDK for Go 并设置 GOPATH 环境变量后,必须在环境中设置凭证管理。AWS SDK for Go需要使用这些凭证来与 AWS 服务进行交互。

设置 GOPATH 环境变量

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

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

    GOPATH=~/environment/go export GOPATH
  3. 保存该文件。

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

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

安装 AWS SDK for Go

运行 go get 命令,指定AWS SDK for Go源文件的位置。

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

Go 会将 AWS SDK for Go 源文件安装到 GOPATH 环境变量指定的位置(环境中的 go 文件夹)。

在环境中设置凭证管理

每次您使用 AWS SDK for Go 调用 AWS 服务时,都必须提供一组凭证才能进行调用。这些凭证确定 AWS SDK for Go 是否具有相应的权限以进行该调用。如果凭证没有包括合适的权限,调用将失败。

在此步骤中,您将凭证存储在环境内。为此,请按照 从 AWS Cloud9 中的环境调用 AWS 服务 中的说明操作,然后返回到本主题。

有关其他信息,请参阅 AWS SDK for Go 开发人员指南中的指定凭证

步骤 5:添加 AWS 开发工具包代码

在此步骤中,您会添加一些代码,此次用于与 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:运行 AWS 开发工具包代码

  1. 在 AWS Cloud9 IDE 中的菜单栏上依次选择 Run(运行)Run Configurations(运行配置)New Run Configuration(新建运行配置)

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

  3. 对于 Command (命令),请键入 s3.go YOUR_BUCKET_NAME THE_AWS_REGION ,其中 YOUR_BUCKET_NAME 是要创建并随后删除的存储桶的名称, THE_AWS_REGION 是要在其中创建存储桶的 AWS 区域的 ID。例如,对于美国东部 (俄亥俄) 区域,请使用 us-east-2。有关更多 ID,请参阅 中的 Amazon Simple Storage Service (Amazon S3)Amazon Web Services 一般参考

    注意

    Amazon S3 存储桶名称在整个 AWS 中都必须是唯一的,而不仅仅在您的 AWS 账户中唯一。

  4. 选择 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:清除

为防止在使用完该示例后一直对您的 AWS 账户收费,应删除环境。有关说明,请参阅 在 AWS Cloud9 中删除环境