Amazon Web Services 한국 블로그

AWS SDK for Go 1.0 정식 출시

올해 초 AWS 개발 도구팀에 개발 PM으로 계신 문성찬(Peter Moon)님이 Go 언어를 위한 AWS SDK 출시 계획을 알려드린 바 있는데, 정식 출시 소식을 알려드리게 되었습니다. 아래 글을 참고하시기 바랍니다. – Jeff;


AWS의 제품을 다양한 개발자 커뮤니티에 선보이기 위해 열심히 노력하고 있습니다. GitHub에 다양한 라이브러리와 개발 도구를 오픈 소스로 제공하는 것도 이러한 이유입니다. 이를 통해 저희의 개발자 고객과의 협력과 직접 소통을 할 수 있게 되었습니다. 이러한 오픈 소스 커뮤니티와의 경험을 토대로 AWS SDK for Go 언어에 대한 계획을 시작하였습니다. (자세히 보기)

지난 10개월의 프로젝트를 통해 다양한 커뮤니티 피드백 및 공헌을 이끌어 왔으며 이를 통해 실험적인 단계에서 큰 진전을 이룰 수 있었습니다. 오늘 실제로 제품으로서 사용 가능한 AWS SDK for Go 버전 1.0을 공개합니다. 다른 많은 프로젝트처럼, 본 SDK 역시 의미적 버전 방식을 따릅니다. 이는 1.0 부터 같은 버전 아래에서 1.x 형식으로 업그레이드가 진행되고, 안전하게 기존 코드 변경 없이 사용 가능합니다.

지난 6월 개발자 미리보기를 출시한 이후 몇 가지 중요한 기능 개선을 추가하였습니다.

  • Sessions – 클라이언트 간 설정 및 Request Handler를 공유 가능
  • JMESPATH 지원 – 간단한 표현식으로 복잡한 API 응답 및 다른 구조를 쿼리하고 변경 가능
  • Paginators – 목록 형태의 API 응답을 페이지 형식으로 호출 가능
  • Waiters – AWS 리소스에 대한 비동기적 변화 감지
  • Documentation – 좀 더 세부적이 개발 문서 제공

아래에 새로운 기능에 대한 몇 가지 코드 스니핏을 참고하십시오.

// Create a session
s := session.New(aws.NewConfig().WithRegion("us-west-2"))
// Add a handler to print every API request for the session
s.Handlers.Send.PushFront(func(r *request.Request) {
	fmt.Printf("Request: %s/%s\n", r.ClientInfo.ServiceName, r.Operation)
})
// We want to start all instances in a VPC, so let's get their IDs first.
ec2client := ec2.New(s)
var instanceIDsToStart []*string
describeInstancesInput := &ec2.DescribeInstancesInput{
	Filters: []*ec2.Filter{
		&ec2.Filter{
			Name:   aws.String("vpc-id"),
			Values: aws.StringSlice([]string{"vpc-82977de9"}),
		},
	},
}
// Use a paginator to easily iterate over multiple pages of response
ec2client.DescribeInstancesPages(describeInstancesInput,
	func(page *ec2.DescribeInstancesOutput, lastPage bool) bool {
		// Use JMESPath expressions to query complex structures
		ids, _ := awsutil.ValuesAtPath(page, "Reservations[].Instances[].InstanceId")
		for _, id := range ids {
			instanceIDsToStart = append(instanceIDsToStart, id.(*string))
		}
		return !lastPage
	})
// The SDK provides several utility functions for literal  pointer transformation
fmt.Println("Starting:", aws.StringValueSlice(instanceIDsToStart))
// Skipped for brevity here, but *always* handle errors in the real world :)
ec2client.StartInstances(&ec2.StartInstancesInput{
	InstanceIds: instanceIDsToStart,
})
// Finally, use a waiter function to wait until the instances are running
ec2client.WaitUntilInstanceRunning(describeInstancesInput)
fmt.Println("Instances are now running.")

본 프로젝트를 위해 노력해준 Coda HaleStripe에 감사드립니다. AWS SDK for Go에 대한 기반 코드를 공헌해 주셔서 초기 시작에 큰 도움을 주셨습니다. 이제 여러분의 개발에 사용할 수 있게 되었고, Go 언어를 사용하는 애플리케이션에 본 SDK가 도움이 되어 더 많은 혁신이 만들어질 수 있기를 기대합니다.

더 자세한 사항은 아래를 참고해주세요.

문성찬 (Perter Moon), AWS 선임 제품 관리자

본 글은 Now Available: Version 1.0 of the AWS SDK for Go의 한국어 번역입니다.