

 AWS Cloud9 は新規顧客には利用できなくなりました。 AWS Cloud9 の既存のお客様は、通常どおりサービスを引き続き使用できます。[詳細はこちら](https://aws.amazon.com/blogs/devops/how-to-migrate-from-aws-cloud9-to-aws-ide-toolkits-or-aws-cloudshell/)

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

# の Go チュートリアル 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: をインストールして設定する AWS SDK for Go](#sample-go-sdk)
+ [ステップ 5: AWS SDK コードを追加する](#sample-go-sdk-code)
+ [ステップ 6: AWS SDK コードを実行する](#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 が既に開いている。**環境を開くと、 はウェブブラウザでその環境の IDE AWS Cloud9 を開きます。詳細については、「[で環境を開く 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. (Amazon Linux) 用 ** `yum update` ** または (Ubuntu Server) 用 ** `apt update` ** コマンドを実行して、最新のセキュリティ更新プログラムおよびバグ修正がインストールされていることを確認します。

   Amazon Linux の場合:

   ```
   sudo yum -y update
   ```

   Ubuntu Server の場合:

   ```
   sudo apt update
   ```

1. Go をインストールするには、以下のコマンドを 1 つずつ実行します。

   ```
   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 プログラミング言語ウェブサイトで「[Downloads](https://golang.org/dl/)」を参照してください。

1. Go バイナリのパスを `PATH` 環境変数に追加します。次のようになります。

   1. 編集のため、シェルプロファイルのファイル (たとえば `~/.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`。(メニューバーでファイルを作成するには、**ファイル**、**New File (新しいファイル)**を選択します。 ファイルを保存するには、**ファイル**、**保存**を選択します。)

```
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 のメニューバーで、**Run**、**Run Configurations**、**New Run Configuration** を選択します。

1. [**[New] - Idle ([新規] - アイドル)**] タブで、[**Runner: Auto (ランナー: 自動)**] を選択し、[**Go**] を選択します。
**注記**  
[**Go**] が利用できない場合は、Go 用のカスタムランナーを作成できます。  
[**[New] - Idle ([新規] - アイドル)**] タブで、[**Runner: Auto (ランナー: 自動)**] を選択し、[**New Runner (新しいランナー)**] を選択します。
[**My Runner.run**] タブで、タブの内容を以下のコードに置き換えます。  

      ```
      {
        "cmd" : ["go", "run", "$file", "$args"],
        "info" : "Running $project_path$file_name...",
        "selector" : "source.go"
      }
      ```
メニューバーで [**File (ファイル)**]、[**Save As (名前を付けて保存)**] の順に選択し、ファイルを `Go.run` として `/.c9/runners` フォルダに保存します。
[**[New] - Idle ([新規] - アイドル)**] タブで、[**Runner: Auto (ランナー: 自動)**] を選択し、[**Go**] を選択します。
[**hello.go**] タブを選択し、アクティブにします。

1. ［**Command (コマンド)**］に「`hello.go 5 9`」と入力します。コード内の `5` は `os.Args[1]` を、`9` は `os.Args[2]` を表します。  
![\[IDE での Go AWS Cloud9 コードの実行の出力\]](http://docs.aws.amazon.com/ja_jp/cloud9/latest/user-guide/images/ide-go-simple.png)

1. ［**実行**］ボタンを選択して、出力を比較します。

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

## ステップ 4: をインストールして設定する AWS SDK for Go
<a name="sample-go-sdk"></a>

このサンプルを強化して、 AWS SDK for Go を使用して Amazon S3 バケットを作成し、使用可能なバケットを一覧表示してから、先ほど作成したバケットを削除できます。

このステップでは、Go コードから Amazon S3 などの AWS サービスとやり取りする便利な方法 AWS SDK for Goを提供する をインストールして設定します。 AWS SDK for Goをインストールする前に、`GOPATH` 環境変数を設定する必要があります。 AWS SDK for Go インストールして `GOPATH` 環境変数を設定したら、環境で認証情報管理をセットアップする必要があります。が サービスとやり取り AWS するには、これらの認証情報 AWS SDK for Go が必要です。

### 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` が出力されます。

### をインストールするには AWS SDK for Go
<a name="sample-go-sdk-install-sdk"></a>

 AWS SDK for Go ソースの場所を指定して、 ** `go get` ** コマンドを実行します。

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

Go は、`GOPATH`環境変数で指定された場所に AWS SDK for Go ソースをインストールします。これは環境内の`go`フォルダです。

### 環境で認証情報管理を設定するには
<a name="sample-go-sdk-creds"></a>

を使用して AWS サービスを AWS SDK for Go 呼び出すたびに、呼び出しで一連の認証情報を指定する必要があります。これらの認証情報は、 にその呼び出しを行うための適切なアクセス許可 AWS SDK for Go があるかどうかを決定します。認証情報に適切なアクセス権限がない場合は、呼び出しは失敗します。

このステップでは、環境内に認証情報を保存します。これを行うには、[の環境 AWS のサービス からの呼び出し AWS Cloud9](credentials.md)の手順を実行してから、このトピックに戻ります。

詳細については、*AWS SDK for Go デベロッパーガイド*の「[認証情報の指定](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: AWS SDK コードを実行する
<a name="sample-go-sdk-run"></a>

1.  AWS Cloud9 IDE のメニューバーで、**Run**、**Run Configurations**、**New Run Configuration** を選択します。

1. [**[New] - Idle ([新規] - アイドル)**] タブで、[**Runner: Auto (ランナー: 自動)**] を選択し、[**Go**] を選択します。

1. **コマンドには**、「」と入力します。ここで`s3.go YOUR_BUCKET_NAME THE_AWS_REGION `、 ` YOUR_BUCKET_NAME ` は作成して削除するバケットの名前、 ` THE_AWS_REGION `はバケットを作成する AWS リージョンの ID です。たとえば、米国東部 (オハイオ) リージョンの場合は、`us-east-2` を使用します。他の ID については、[の「](https://docs.aws.amazon.com/general/latest/gr/rande.html#s3_region)Amazon Simple Storage Service (Amazon S3)*Amazon Web Services 全般のリファレンス*」を参照してください。
**注記**  
Amazon S3 バケット名は、アカウント AWS だけでなく AWS、 全体で一意である必要があります。

1. ［**実行**］ボタンを選択して、出力を比較します。

   ```
   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)」を参照してください。