

 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 서버를 실행 중인 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. **`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 프로그래밍 언어 웹 사이트에서 [다운로드](https://golang.org/dl/)를 참조하세요.

1. 다음과 같이 Go 바이너리에 대한 경로를 `PATH` 환경 변수에 추가합니다.

   1. 편집을 위해 셸 프로파일 파일(예: `~/.bashrc`)을 엽니다.

   1. 이 코드 줄 끝에 다음을 입력하여 코드가 다음과 같이 표시되도록 합니다.

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

   1. 파일을 저장합니다.

1. 터미널이 방금 참조한 Go 바이너리를 찾을 수 있도록 `~/.bashrc` 파일을 소스로 지정합니다.

   ```
   . ~/.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(내 실행기.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. **명령**에 `hello.go 5 9`를 입력합니다. 이 코드에서 `5`는 `os.Args[1]`을 나타내고 `9`는 `os.Args[2]`를 나타냅니다.  
![\[AWS Cloud9 IDE에서 Go 코드를 실행하는 출력\]](http://docs.aws.amazon.com/ko_kr/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단계: 설치 및 구성 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 SDK for Go AWS 필요합니다.

### GOPATH 환경 변수를 설정하려면
<a name="sample-go-sdk-set-gopath"></a>

1. 편집을 위해 `~/.bashrc` 파일을 엽니다.

1. 파일의 마지막 줄 뒤에 이 코드를 입력합니다.

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

1. 파일을 저장합니다.

1. 터미널이 방금 참조한 `GOPATH` 환경 변수를 찾을 수 있도록 `~/.bashrc` 파일을 소스로 지정합니다.

   ```
   . ~/.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>

** `go get` ** 명령을 실행하여 AWS SDK for Go 소스의 위치를 지정합니다.

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

Go는 환경 변수, 즉 `GOPATH` 환경의 `go` 폴더에 지정된 위치에 AWS SDK for 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의 메뉴 모음에서 **실행**, **실행 구성**, **새 실행 구성을** 선택합니다.

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는 **Amazon Web Services 일반 참조의 [Amazon Simple Storage Service(Amazon S3)](https://docs.aws.amazon.com/general/latest/gr/rande.html#s3_region)를 참조하세요.
**참고**  
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) 단원을 참조하세요.