Merge branch 'd-update-aws-sdk'

This commit is contained in:
James Nugent 2016-08-11 12:52:35 -04:00
commit 21d1ac41fa
24 changed files with 2266 additions and 563 deletions

View File

@ -15,6 +15,7 @@ import (
"github.com/aws/aws-sdk-go/aws/session"
"github.com/aws/aws-sdk-go/service/iam"
"github.com/aws/aws-sdk-go/service/sts"
"github.com/hashicorp/errwrap"
"github.com/hashicorp/go-cleanhttp"
)
@ -25,7 +26,12 @@ func GetAccountId(iamconn *iam.IAM, stsconn *sts.STS, authProviderName string) (
cfg := &aws.Config{}
setOptionalEndpoint(cfg)
metadataClient := ec2metadata.New(session.New(cfg))
sess, err := session.NewSession(cfg)
if err != nil {
return "", errwrap.Wrapf("Error creating AWS session: %s", err)
}
metadataClient := ec2metadata.New(sess)
info, err := metadataClient.IAMInfo()
if err != nil {
// This can be triggered when no IAM Role is assigned

View File

@ -648,12 +648,15 @@ func getMockedAwsIamStsApi(endpoints []*iamEndpoint) (func(), *iam.IAM, *sts.STS
sc := awsCredentials.NewStaticCredentials("accessKey", "secretKey", "")
sess := session.New(&aws.Config{
sess, err := session.NewSession(&aws.Config{
Credentials: sc,
Region: aws.String("us-east-1"),
Endpoint: aws.String(ts.URL),
CredentialsChainVerboseErrors: aws.Bool(true),
})
if err != nil {
panic(fmt.Sprintf("Error creating AWS Session: %s", err))
}
iamConn := iam.New(sess)
stsConn := sts.New(sess)
return ts.Close, iamConn, stsConn

View File

@ -1,18 +1,12 @@
package aws
import (
"crypto/tls"
"fmt"
"log"
"net/http"
"strings"
"github.com/hashicorp/go-cleanhttp"
"github.com/hashicorp/go-multierror"
"github.com/hashicorp/terraform/helper/logging"
"github.com/hashicorp/terraform/terraform"
"crypto/tls"
"github.com/aws/aws-sdk-go/aws"
"github.com/aws/aws-sdk-go/aws/awserr"
"github.com/aws/aws-sdk-go/aws/request"
@ -56,6 +50,11 @@ import (
"github.com/aws/aws-sdk-go/service/sns"
"github.com/aws/aws-sdk-go/service/sqs"
"github.com/aws/aws-sdk-go/service/sts"
"github.com/hashicorp/errwrap"
"github.com/hashicorp/go-cleanhttp"
"github.com/hashicorp/go-multierror"
"github.com/hashicorp/terraform/helper/logging"
"github.com/hashicorp/terraform/terraform"
)
type Config struct {
@ -182,7 +181,10 @@ func (c *Config) Client() (interface{}, error) {
}
// Set up base session
sess := session.New(awsConfig)
sess, err := session.NewSession(awsConfig)
if err != nil {
return nil, errwrap.Wrapf("Error creating AWS session: %s", err)
}
sess.Handlers.Build.PushFrontNamed(addTerraformVersionToUserAgent)
// Some services exist only in us-east-1, e.g. because they manage

6
vendor/github.com/aws/aws-sdk-go/Gemfile generated vendored Normal file
View File

@ -0,0 +1,6 @@
source 'https://rubygems.org'
gem 'yard', git: 'git://github.com/lsegal/yard', ref: '5025564a491e1b7c6192632cba2802202ca08449'
gem 'yard-go', git: 'git://github.com/jasdel/yard-go', ref: 'e78e1ef7cdf5e0f3266845b26bb4fd64f1dd6f85'
gem 'rdiscount'

152
vendor/github.com/aws/aws-sdk-go/Makefile generated vendored Normal file
View File

@ -0,0 +1,152 @@
LINTIGNOREDOT='awstesting/integration.+should not use dot imports'
LINTIGNOREDOC='service/[^/]+/(api|service|waiters)\.go:.+(comment on exported|should have comment or be unexported)'
LINTIGNORECONST='service/[^/]+/(api|service|waiters)\.go:.+(type|struct field|const|func) ([^ ]+) should be ([^ ]+)'
LINTIGNORESTUTTER='service/[^/]+/(api|service)\.go:.+(and that stutters)'
LINTIGNOREINFLECT='service/[^/]+/(api|service)\.go:.+method .+ should be '
LINTIGNOREINFLECTS3UPLOAD='service/s3/s3manager/upload\.go:.+struct field SSEKMSKeyId should be '
LINTIGNOREDEPS='vendor/.+\.go'
SDK_WITH_VENDOR_PKGS=$(shell go list ./... | grep -v "/vendor/src")
SDK_ONLY_PKGS=$(shell go list ./... | grep -v "/vendor/")
SDK_GO_1_4=$(shell go version | grep "go1.4")
SDK_GO_VERSION=$(shell go version | awk '''{print $$3}''' | tr -d '''\n''')
all: get-deps generate unit
help:
@echo "Please use \`make <target>' where <target> is one of"
@echo " api_info to print a list of services and versions"
@echo " docs to build SDK documentation"
@echo " build to go build the SDK"
@echo " unit to run unit tests"
@echo " integration to run integration tests"
@echo " performance to run performance tests"
@echo " verify to verify tests"
@echo " lint to lint the SDK"
@echo " vet to vet the SDK"
@echo " generate to go generate and make services"
@echo " gen-test to generate protocol tests"
@echo " gen-services to generate services"
@echo " get-deps to go get the SDK dependencies"
@echo " get-deps-tests to get the SDK's test dependencies"
@echo " get-deps-verify to get the SDK's verification dependencies"
generate: gen-test gen-endpoints gen-services
gen-test: gen-protocol-test
gen-services:
go generate ./service
gen-protocol-test:
go generate ./private/protocol/...
gen-endpoints:
go generate ./private/endpoints
build:
@echo "go build SDK and vendor packages"
@go build ${SDK_ONLY_PKGS}
unit: get-deps-tests build verify
@echo "go test SDK and vendor packages"
@go test -tags $(SDK_ONLY_PKGS)
unit-with-race-cover: get-deps-tests build verify
@echo "go test SDK and vendor packages"
@go test -tags -race -cpu=1,2,4 $(SDK_ONLY_PKGS)
integration: get-deps-tests integ-custom smoke-tests performance
integ-custom:
go test -tags "integration" ./awstesting/integration/customizations/...
smoke-tests: get-deps-tests
gucumber -go-tags "integration" ./awstesting/integration/smoke
performance: get-deps-tests
AWS_TESTING_LOG_RESULTS=${log-detailed} AWS_TESTING_REGION=$(region) AWS_TESTING_DB_TABLE=$(table) gucumber -go-tags "integration" ./awstesting/performance
sandbox-tests: sandbox-test-go14 sandbox-test-go15 sandbox-test-go15-novendorexp sandbox-test-go16 sandbox-test-go17 sandbox-test-gotip
sandbox-test-go14:
docker build -f ./awstesting/sandbox/Dockerfile.test.go1.4 -t "aws-sdk-go-1.4" .
docker run -t aws-sdk-go-1.4
sandbox-test-go15:
docker build -f ./awstesting/sandbox/Dockerfile.test.go1.5 -t "aws-sdk-go-1.5" .
docker run -t aws-sdk-go-1.5
sandbox-test-go15-novendorexp:
docker build -f ./awstesting/sandbox/Dockerfile.test.go1.5-novendorexp -t "aws-sdk-go-1.5-novendorexp" .
docker run -t aws-sdk-go-1.5-novendorexp
sandbox-test-go16:
docker build -f ./awstesting/sandbox/Dockerfile.test.go1.6 -t "aws-sdk-go-1.6" .
docker run -t aws-sdk-go-1.6
sandbox-test-go17:
docker build -f ./awstesting/sandbox/Dockerfile.test.go1.7 -t "aws-sdk-go-1.7" .
docker run -t aws-sdk-go-1.7
sandbox-test-gotip:
@echo "Run make update-aws-golang-tip, if this test fails because missing aws-golang:tip container"
docker build -f ./awstesting/sandbox/Dockerfile.test.gotip -t "aws-sdk-go-tip" .
docker run -t aws-sdk-go-tip
update-aws-golang-tip:
docker build -f ./awstesting/sandbox/Dockerfile.golang-tip -t "aws-golang:tip" .
verify: get-deps-verify lint vet
lint:
@echo "go lint SDK and vendor packages"
@lint=`if [ -z "${SDK_GO_1_4}" ]; then golint ./...; else echo "skipping golint"; fi`; \
lint=`echo "$$lint" | grep -E -v -e ${LINTIGNOREDOT} -e ${LINTIGNOREDOC} -e ${LINTIGNORECONST} -e ${LINTIGNORESTUTTER} -e ${LINTIGNOREINFLECT} -e ${LINTIGNOREDEPS} -e ${LINTIGNOREINFLECTS3UPLOAD}`; \
echo "$$lint"; \
if [ "$$lint" != "" ] && [ "$$lint" != "skipping golint" ]; then exit 1; fi
SDK_BASE_FOLDERS=$(shell ls -d */ | grep -v vendor | grep -v awsmigrate)
ifneq (,$(findstring go1.5, ${SDK_GO_VERSION}))
GO_VET_CMD=go tool vet --all -shadow
else ifneq (,$(findstring go1.6, ${SDK_GO_VERSION}))
GO_VET_CMD=go tool vet --all -shadow -example=false
else ifneq (,$(findstring devel, ${SDK_GO_VERSION}))
GO_VET_CMD=go tool vet --all -shadow -tests=false
else
GO_VET_CMD=echo skipping go vet, ${SDK_GO_VERSION}
endif
vet:
${GO_VET_CMD} ${SDK_BASE_FOLDERS}
get-deps: get-deps-tests get-deps-verify
@echo "go get SDK dependencies"
@go get -v $(SDK_ONLY_PKGS)
get-deps-tests:
@echo "go get SDK testing dependencies"
go get github.com/gucumber/gucumber/cmd/gucumber
go get github.com/stretchr/testify
go get github.com/smartystreets/goconvey
get-deps-verify:
@echo "go get SDK verification utilities"
@if [ -z "${SDK_GO_1_4}" ]; then go get github.com/golang/lint/golint; else echo "skipped getting golint"; fi
bench:
@echo "go bench SDK packages"
@go test -run NONE -bench . -benchmem -tags 'bench' $(SDK_ONLY_PKGS)
bench-protocol:
@echo "go bench SDK protocol marshallers"
@go test -run NONE -bench . -benchmem -tags 'bench' ./private/protocol/...
docs:
@echo "generate SDK docs"
rm -rf doc && bundle install && bundle exec yard
@# This env variable, DOCS, is for internal use
@if [ -n "$(AWS_DOC_GEN_TOOL)" ]; then echo "For internal use. Subject to change."; $(AWS_DOC_GEN_TOOL) `pwd`; fi
api_info:
@go run private/model/cli/api-info/api-info.go

116
vendor/github.com/aws/aws-sdk-go/README.md generated vendored Normal file
View File

@ -0,0 +1,116 @@
# AWS SDK for Go
<span style="display: inline-block;">
[![API Reference](http://img.shields.io/badge/api-reference-blue.svg)](http://docs.aws.amazon.com/sdk-for-go/api)
[![Join the chat at https://gitter.im/aws/aws-sdk-go](https://badges.gitter.im/Join%20Chat.svg)](https://gitter.im/aws/aws-sdk-go?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge)
[![Build Status](https://img.shields.io/travis/aws/aws-sdk-go.svg)](https://travis-ci.org/aws/aws-sdk-go)
[![Apache V2 License](http://img.shields.io/badge/license-Apache%20V2-blue.svg)](https://github.com/aws/aws-sdk-go/blob/master/LICENSE.txt)
</span>
aws-sdk-go is the official AWS SDK for the Go programming language.
Checkout our [release notes](https://github.com/aws/aws-sdk-go/releases) for information about the latest bug fixes, updates, and features added to the SDK.
## Installing
If you are using Go 1.5 with the `GO15VENDOREXPERIMENT=1` vendoring flag, or 1.6 and higher you can use the following command to retrieve the SDK. The SDK's non-testing dependencies will be included and are vendored in the `vendor` folder.
go get -u github.com/aws/aws-sdk-go
Otherwise if your Go environment does not have vendoring support enabled, or you do not want to include the vendored SDK's dependencies you can use the following command to retrieve the SDK and its non-testing dependencies using `go get`.
go get -u github.com/aws/aws-sdk-go/aws/...
go get -u github.com/aws/aws-sdk-go/service/...
If you're looking to retrieve just the SDK without any dependencies use the following command.
go get -d github.com/aws/aws-sdk-go/
These two processes will still include the `vendor` folder and it should be deleted if its not going to be used by your environment.
rm -rf $GOPATH/src/github.com/aws/aws-sdk-go/vendor
## Reference Documentation
[`Getting Started Guide`](https://aws.amazon.com/sdk-for-go/) - This document is a general introduction how to configure and make requests with the SDK. If this is your first time using the SDK, this documentation and the API documentation will help you get started. This document focuses on the syntax and behavior of the SDK. The [Service Developer Guide](https://aws.amazon.com/documentation/) will help you get started using specific AWS services.
[`SDK API Reference Documentation`](https://docs.aws.amazon.com/sdk-for-go/api/) - Use this document to look up all API operation input and output parameters for AWS services supported by the SDK. The API reference also includes documentation of the SDK, and examples how to using the SDK, service client API operations, and API operation require parameters.
[`Service Developer Guide`](https://aws.amazon.com/documentation/) - Use this documentation to learn how to interface with an AWS service. These are great guides both, if you're getting started with a service, or looking for more information on a service. You should not need this document for coding, though in some cases, services may supply helpful samples that you might want to look out for.
[`SDK Examples`](https://github.com/aws/aws-sdk-go/tree/master/example) - Included in the SDK's repo are a several hand crafted examples using the SDK features and AWS services.
## Configuring Credentials
Before using the SDK, ensure that you've configured credentials. The best
way to configure credentials on a development machine is to use the
`~/.aws/credentials` file, which might look like:
```
[default]
aws_access_key_id = AKID1234567890
aws_secret_access_key = MY-SECRET-KEY
```
You can learn more about the credentials file from this
[blog post](http://blogs.aws.amazon.com/security/post/Tx3D6U6WSFGOK2H/A-New-and-Standardized-Way-to-Manage-Credentials-in-the-AWS-SDKs).
Alternatively, you can set the following environment variables:
```
AWS_ACCESS_KEY_ID=AKID1234567890
AWS_SECRET_ACCESS_KEY=MY-SECRET-KEY
```
### AWS shared config file (`~/.aws/config`)
The AWS SDK for Go added support the shared config file in release [v1.3.0](https://github.com/aws/aws-sdk-go/releases/tag/v1.3.0). You can opt into enabling support for the shared config by setting the environment variable `AWS_SDK_LOAD_CONFIG` to a truthy value. See the [Session](https://github.com/aws/aws-sdk-go/wiki/sessions) wiki for more information about this feature.
## Using the Go SDK
To use a service in the SDK, create a service variable by calling the `New()`
function. Once you have a service client, you can call API operations which each
return response data and a possible error.
To list a set of instance IDs from EC2, you could run:
```go
package main
import (
"fmt"
"github.com/aws/aws-sdk-go/aws"
"github.com/aws/aws-sdk-go/aws/session"
"github.com/aws/aws-sdk-go/service/ec2"
)
func main() {
// Create an EC2 service object in the "us-west-2" region
// Note that you can also configure your region globally by
// exporting the AWS_REGION environment variable
svc := ec2.New(session.New(), &aws.Config{Region: aws.String("us-west-2")})
// Call the DescribeInstances Operation
resp, err := svc.DescribeInstances(nil)
if err != nil {
panic(err)
}
// resp has all of the response data, pull out instance IDs:
fmt.Println("> Number of reservation sets: ", len(resp.Reservations))
for idx, res := range resp.Reservations {
fmt.Println(" > Number of instances: ", len(res.Instances))
for _, inst := range resp.Reservations[idx].Instances {
fmt.Println(" - Instance ID: ", *inst.InstanceId)
}
}
}
```
You can find more information and operations in our
[API documentation](http://docs.aws.amazon.com/sdk-for-go/api/).
## License
This SDK is distributed under the
[Apache License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0),
see LICENSE.txt and NOTICE.txt for more information.

View File

@ -130,11 +130,12 @@ type Config struct {
// client to create a new http.Client. This options is only meaningful if you're not
// already using a custom HTTP client with the SDK. Enabled by default.
//
// Must be set and provided to the session.New() in order to disable the EC2Metadata
// overriding the timeout for default credentials chain.
// Must be set and provided to the session.NewSession() in order to disable
// the EC2Metadata overriding the timeout for default credentials chain.
//
// Example:
// sess := session.New(aws.NewConfig().WithEC2MetadataDiableTimeoutOverride(true))
// sess, err := session.NewSession(aws.NewConfig().WithEC2MetadataDiableTimeoutOverride(true))
//
// svc := s3.New(sess)
//
EC2MetadataDisableTimeoutOverride *bool
@ -150,7 +151,7 @@ type Config struct {
// NewConfig returns a new Config pointer that can be chained with builder methods to
// set multiple configuration values inline without using pointers.
//
// sess := session.New(aws.NewConfig().WithRegion("us-west-2").WithMaxRetries(10))
// sess, err := session.NewSession(aws.NewConfig().WithRegion("us-west-2").WithMaxRetries(10))
//
func NewConfig() *Config {
return &Config{}

View File

@ -30,13 +30,22 @@ func NewStaticCredentials(id, secret, token string) *Credentials {
}})
}
// NewStaticCredentialsFromCreds returns a pointer to a new Credentials object
// wrapping the static credentials value provide. Same as NewStaticCredentials
// but takes the creds Value instead of individual fields
func NewStaticCredentialsFromCreds(creds Value) *Credentials {
return NewCredentials(&StaticProvider{Value: creds})
}
// Retrieve returns the credentials or error if the credentials are invalid.
func (s *StaticProvider) Retrieve() (Value, error) {
if s.AccessKeyID == "" || s.SecretAccessKey == "" {
return Value{ProviderName: StaticProviderName}, ErrStaticCredentialsEmpty
}
s.Value.ProviderName = StaticProviderName
if len(s.Value.ProviderName) == 0 {
s.Value.ProviderName = StaticProviderName
}
return s.Value, nil
}

View File

@ -0,0 +1,161 @@
// Package stscreds are credential Providers to retrieve STS AWS credentials.
//
// STS provides multiple ways to retrieve credentials which can be used when making
// future AWS service API operation calls.
package stscreds
import (
"fmt"
"time"
"github.com/aws/aws-sdk-go/aws"
"github.com/aws/aws-sdk-go/aws/client"
"github.com/aws/aws-sdk-go/aws/credentials"
"github.com/aws/aws-sdk-go/service/sts"
)
// ProviderName provides a name of AssumeRole provider
const ProviderName = "AssumeRoleProvider"
// AssumeRoler represents the minimal subset of the STS client API used by this provider.
type AssumeRoler interface {
AssumeRole(input *sts.AssumeRoleInput) (*sts.AssumeRoleOutput, error)
}
// DefaultDuration is the default amount of time in minutes that the credentials
// will be valid for.
var DefaultDuration = time.Duration(15) * time.Minute
// AssumeRoleProvider retrieves temporary credentials from the STS service, and
// keeps track of their expiration time. This provider must be used explicitly,
// as it is not included in the credentials chain.
type AssumeRoleProvider struct {
credentials.Expiry
// STS client to make assume role request with.
Client AssumeRoler
// Role to be assumed.
RoleARN string
// Session name, if you wish to reuse the credentials elsewhere.
RoleSessionName string
// Expiry duration of the STS credentials. Defaults to 15 minutes if not set.
Duration time.Duration
// Optional ExternalID to pass along, defaults to nil if not set.
ExternalID *string
// The policy plain text must be 2048 bytes or shorter. However, an internal
// conversion compresses it into a packed binary format with a separate limit.
// The PackedPolicySize response element indicates by percentage how close to
// the upper size limit the policy is, with 100% equaling the maximum allowed
// size.
Policy *string
// The identification number of the MFA device that is associated with the user
// who is making the AssumeRole call. Specify this value if the trust policy
// of the role being assumed includes a condition that requires MFA authentication.
// The value is either the serial number for a hardware device (such as GAHT12345678)
// or an Amazon Resource Name (ARN) for a virtual device (such as arn:aws:iam::123456789012:mfa/user).
SerialNumber *string
// The value provided by the MFA device, if the trust policy of the role being
// assumed requires MFA (that is, if the policy includes a condition that tests
// for MFA). If the role being assumed requires MFA and if the TokenCode value
// is missing or expired, the AssumeRole call returns an "access denied" error.
TokenCode *string
// ExpiryWindow will allow the credentials to trigger refreshing prior to
// the credentials actually expiring. This is beneficial so race conditions
// with expiring credentials do not cause request to fail unexpectedly
// due to ExpiredTokenException exceptions.
//
// So a ExpiryWindow of 10s would cause calls to IsExpired() to return true
// 10 seconds before the credentials are actually expired.
//
// If ExpiryWindow is 0 or less it will be ignored.
ExpiryWindow time.Duration
}
// NewCredentials returns a pointer to a new Credentials object wrapping the
// AssumeRoleProvider. The credentials will expire every 15 minutes and the
// role will be named after a nanosecond timestamp of this operation.
//
// Takes a Config provider to create the STS client. The ConfigProvider is
// satisfied by the session.Session type.
func NewCredentials(c client.ConfigProvider, roleARN string, options ...func(*AssumeRoleProvider)) *credentials.Credentials {
p := &AssumeRoleProvider{
Client: sts.New(c),
RoleARN: roleARN,
Duration: DefaultDuration,
}
for _, option := range options {
option(p)
}
return credentials.NewCredentials(p)
}
// NewCredentialsWithClient returns a pointer to a new Credentials object wrapping the
// AssumeRoleProvider. The credentials will expire every 15 minutes and the
// role will be named after a nanosecond timestamp of this operation.
//
// Takes an AssumeRoler which can be satisfiede by the STS client.
func NewCredentialsWithClient(svc AssumeRoler, roleARN string, options ...func(*AssumeRoleProvider)) *credentials.Credentials {
p := &AssumeRoleProvider{
Client: svc,
RoleARN: roleARN,
Duration: DefaultDuration,
}
for _, option := range options {
option(p)
}
return credentials.NewCredentials(p)
}
// Retrieve generates a new set of temporary credentials using STS.
func (p *AssumeRoleProvider) Retrieve() (credentials.Value, error) {
// Apply defaults where parameters are not set.
if p.RoleSessionName == "" {
// Try to work out a role name that will hopefully end up unique.
p.RoleSessionName = fmt.Sprintf("%d", time.Now().UTC().UnixNano())
}
if p.Duration == 0 {
// Expire as often as AWS permits.
p.Duration = DefaultDuration
}
input := &sts.AssumeRoleInput{
DurationSeconds: aws.Int64(int64(p.Duration / time.Second)),
RoleArn: aws.String(p.RoleARN),
RoleSessionName: aws.String(p.RoleSessionName),
ExternalId: p.ExternalID,
}
if p.Policy != nil {
input.Policy = p.Policy
}
if p.SerialNumber != nil && p.TokenCode != nil {
input.SerialNumber = p.SerialNumber
input.TokenCode = p.TokenCode
}
roleOutput, err := p.Client.AssumeRole(input)
if err != nil {
return credentials.Value{ProviderName: ProviderName}, err
}
// We will proactively generate new credentials before they expire.
p.SetExpiration(*roleOutput.Credentials.Expiration, p.ExpiryWindow)
return credentials.Value{
AccessKeyID: *roleOutput.Credentials.AccessKeyId,
SecretAccessKey: *roleOutput.Credentials.SecretAccessKey,
SessionToken: *roleOutput.Credentials.SessionToken,
ProviderName: ProviderName,
}, nil
}

View File

@ -90,12 +90,14 @@ func CredChain(cfg *aws.Config, handlers request.Handlers) *credentials.Credenti
Providers: []credentials.Provider{
&credentials.EnvProvider{},
&credentials.SharedCredentialsProvider{Filename: "", Profile: ""},
remoteCredProvider(*cfg, handlers),
RemoteCredProvider(*cfg, handlers),
},
})
}
func remoteCredProvider(cfg aws.Config, handlers request.Handlers) credentials.Provider {
// RemoteCredProvider returns a credenitials provider for the default remote
// endpoints such as EC2 or ECS Roles.
func RemoteCredProvider(cfg aws.Config, handlers request.Handlers) credentials.Provider {
ecsCredURI := os.Getenv("AWS_CONTAINER_CREDENTIALS_RELATIVE_URI")
if len(ecsCredURI) > 0 {

229
vendor/github.com/aws/aws-sdk-go/aws/session/doc.go generated vendored Normal file
View File

@ -0,0 +1,229 @@
/*
Package session provides configuration for the SDK's service clients.
Sessions can be shared across all service clients that share the same base
configuration. The Session is built from the SDK's default configuration and
request handlers.
Sessions should be cached when possible, because creating a new Session will
load all configuration values from the environment, and config files each time
the Session is created. Sharing the Session value across all of your service
clients will ensure the configuration is loaded the fewest number of times possible.
Concurrency
Sessions are safe to use concurrently as long as the Session is not being
modified. The SDK will not modify the Session once the Session has been created.
Creating service clients concurrently from a shared Session is safe.
Sessions from Shared Config
Sessions can be created using the method above that will only load the
additional config if the AWS_SDK_LOAD_CONFIG environment variable is set.
Alternatively you can explicitly create a Session with shared config enabled.
To do this you can use NewSessionWithOptions to configure how the Session will
be created. Using the NewSessionWithOptions with SharedConfigState set to
SharedConfigEnabled will create the session as if the AWS_SDK_LOAD_CONFIG
environment variable was set.
Creating Sessions
When creating Sessions optional aws.Config values can be passed in that will
override the default, or loaded config values the Session is being created
with. This allows you to provide additional, or case based, configuration
as needed.
By default NewSession will only load credentials from the shared credentials
file (~/.aws/credentials). If the AWS_SDK_LOAD_CONFIG environment variable is
set to a truthy value the Session will be created from the configuration
values from the shared config (~/.aws/config) and shared credentials
(~/.aws/credentials) files. See the section Sessions from Shared Config for
more information.
Create a Session with the default config and request handlers. With credentials
region, and profile loaded from the environment and shared config automatically.
Requires the AWS_PROFILE to be set, or "default" is used.
// Create Session
sess, err := session.NewSession()
// Create a Session with a custom region
sess, err := session.NewSession(&aws.Config{Region: aws.String("us-east-1")})
// Create a S3 client instance from a session
sess, err := session.NewSession()
if err != nil {
// Handle Session creation error
}
svc := s3.New(sess)
Create Session With Option Overrides
In addition to NewSession, Sessions can be created using NewSessionWithOptions.
This func allows you to control and override how the Session will be created
through code instead of being driven by environment variables only.
Use NewSessionWithOptions when you want to provide the config profile, or
override the shared config state (AWS_SDK_LOAD_CONFIG).
// Equivalent to session.New
sess, err := session.NewSessionWithOptions(session.Options{})
// Specify profile to load for the session's config
sess, err := session.NewSessionWithOptions(session.Options{
Profile: "profile_name",
})
// Specify profile for config and region for requests
sess, err := session.NewSessionWithOptions(session.Options{
Config: aws.Config{Region: aws.String("us-east-1")},
Profile: "profile_name",
})
// Force enable Shared Config support
sess, err := session.NewSessionWithOptions(session.Options{
SharedConfigState: SharedConfigEnable,
})
Deprecated "New" function
The New session function has been deprecated because it does not provide good
way to return errors that occur when loading the configuration files and values.
Because of this, the NewWithError
Adding Handlers
You can add handlers to a session for processing HTTP requests. All service
clients that use the session inherit the handlers. For example, the following
handler logs every request and its payload made by a service client:
// Create a session, and add additional handlers for all service
// clients created with the Session to inherit. Adds logging handler.
sess, err := session.NewSession()
sess.Handlers.Send.PushFront(func(r *request.Request) {
// Log every request made and its payload
logger.Println("Request: %s/%s, Payload: %s",
r.ClientInfo.ServiceName, r.Operation, r.Params)
})
Deprecated "New" function
The New session function has been deprecated because it does not provide good
way to return errors that occur when loading the configuration files and values.
Because of this, NewSession was created so errors can be retrieved when
creating a session fails.
Shared Config Fields
By default the SDK will only load the shared credentials file's (~/.aws/credentials)
credentials values, and all other config is provided by the environment variables,
SDK defaults, and user provided aws.Config values.
If the AWS_SDK_LOAD_CONFIG environment variable is set, or SharedConfigEnable
option is used to create the Session the full shared config values will be
loaded. This includes credentials, region, and support for assume role. In
addition the Session will load its configuration from both the shared config
file (~/.aws/config) and shared credentials file (~/.aws/credentials). Both
files have the same format.
If both config files are present the configuration from both files will be
read. The Session will be created from configuration values from the shared
credentials file (~/.aws/credentials) over those in the shared credentials
file (~/.aws/config).
Credentials are the values the SDK should use for authenticating requests with
AWS Services. They arfrom a configuration file will need to include both
aws_access_key_id and aws_secret_access_key must be provided together in the
same file to be considered valid. The values will be ignored if not a complete
group. aws_session_token is an optional field that can be provided if both of
the other two fields are also provided.
aws_access_key_id = AKID
aws_secret_access_key = SECRET
aws_session_token = TOKEN
Assume Role values allow you to configure the SDK to assume an IAM role using
a set of credentials provided in a config file via the source_profile field.
Both "role_arn" and "source_profile" are required. The SDK does not support
assuming a role with MFA token Via the Session's constructor. You can use the
stscreds.AssumeRoleProvider credentials provider to specify custom
configuration and support for MFA.
role_arn = arn:aws:iam::<account_number>:role/<role_name>
source_profile = profile_with_creds
external_id = 1234
mfa_serial = not supported!
role_session_name = session_name
Region is the region the SDK should use for looking up AWS service endpoints
and signing requests.
region = us-east-1
Environment Variables
When a Session is created several environment variables can be set to adjust
how the SDK functions, and what configuration data it loads when creating
Sessions. All environment values are optional, but some values like credentials
require multiple of the values to set or the partial values will be ignored.
All environment variable values are strings unless otherwise noted.
Environment configuration values. If set both Access Key ID and Secret Access
Key must be provided. Session Token and optionally also be provided, but is
not required.
# Access Key ID
AWS_ACCESS_KEY_ID=AKID
AWS_ACCESS_KEY=AKID # only read if AWS_ACCESS_KEY_ID is not set.
# Secret Access Key
AWS_SECRET_ACCESS_KEY=SECRET
AWS_SECRET_KEY=SECRET=SECRET # only read if AWS_SECRET_ACCESS_KEY is not set.
# Session Token
AWS_SESSION_TOKEN=TOKEN
Region value will instruct the SDK where to make service API requests to. If is
not provided in the environment the region must be provided before a service
client request is made.
AWS_REGION=us-east-1
# AWS_DEFAULT_REGION is only read if AWS_SDK_LOAD_CONFIG is also set,
# and AWS_REGION is not also set.
AWS_DEFAULT_REGION=us-east-1
Profile name the SDK should load use when loading shared config from the
configuration files. If not provided "default" will be used as the profile name.
AWS_PROFILE=my_profile
# AWS_DEFAULT_PROFILE is only read if AWS_SDK_LOAD_CONFIG is also set,
# and AWS_PROFILE is not also set.
AWS_DEFAULT_PROFILE=my_profile
SDK load config instructs the SDK to load the shared config in addition to
shared credentials. This also expands the configuration loaded so the shared
credentials will have parity with the shared config file. This also enables
Region and Profile support for the AWS_DEFAULT_REGION and AWS_DEFAULT_PROFILE
env values as well.
AWS_SDK_LOAD_CONFIG=1
Shared credentials file path can be set to instruct the SDK to use an alternative
file for the shared credentials. If not set the file will be loaded from
$HOME/.aws/credentials on Linux/Unix based systems, and
%USERPROFILE%\.aws\credentials on Windows.
AWS_SHARED_CREDENTIALS_FILE=$HOME/my_shared_credentials
Shared config file path can be set to instruct the SDK to use an alternative
file for the shared config. If not set the file will be loaded from
$HOME/.aws/config on Linux/Unix based systems, and
%USERPROFILE%\.aws\config on Windows.
AWS_CONFIG_FILE=$HOME/my_shared_config
*/
package session

View File

@ -0,0 +1,188 @@
package session
import (
"os"
"path/filepath"
"strconv"
"github.com/aws/aws-sdk-go/aws/credentials"
)
// envConfig is a collection of environment values the SDK will read
// setup config from. All environment values are optional. But some values
// such as credentials require multiple values to be complete or the values
// will be ignored.
type envConfig struct {
// Environment configuration values. If set both Access Key ID and Secret Access
// Key must be provided. Session Token and optionally also be provided, but is
// not required.
//
// # Access Key ID
// AWS_ACCESS_KEY_ID=AKID
// AWS_ACCESS_KEY=AKID # only read if AWS_ACCESS_KEY_ID is not set.
//
// # Secret Access Key
// AWS_SECRET_ACCESS_KEY=SECRET
// AWS_SECRET_KEY=SECRET=SECRET # only read if AWS_SECRET_ACCESS_KEY is not set.
//
// # Session Token
// AWS_SESSION_TOKEN=TOKEN
Creds credentials.Value
// Region value will instruct the SDK where to make service API requests to. If is
// not provided in the environment the region must be provided before a service
// client request is made.
//
// AWS_REGION=us-east-1
//
// # AWS_DEFAULT_REGION is only read if AWS_SDK_LOAD_CONFIG is also set,
// # and AWS_REGION is not also set.
// AWS_DEFAULT_REGION=us-east-1
Region string
// Profile name the SDK should load use when loading shared configuration from the
// shared configuration files. If not provided "default" will be used as the
// profile name.
//
// AWS_PROFILE=my_profile
//
// # AWS_DEFAULT_PROFILE is only read if AWS_SDK_LOAD_CONFIG is also set,
// # and AWS_PROFILE is not also set.
// AWS_DEFAULT_PROFILE=my_profile
Profile string
// SDK load config instructs the SDK to load the shared config in addition to
// shared credentials. This also expands the configuration loaded from the shared
// credentials to have parity with the shared config file. This also enables
// Region and Profile support for the AWS_DEFAULT_REGION and AWS_DEFAULT_PROFILE
// env values as well.
//
// AWS_SDK_LOAD_CONFIG=1
EnableSharedConfig bool
// Shared credentials file path can be set to instruct the SDK to use an alternate
// file for the shared credentials. If not set the file will be loaded from
// $HOME/.aws/credentials on Linux/Unix based systems, and
// %USERPROFILE%\.aws\credentials on Windows.
//
// AWS_SHARED_CREDENTIALS_FILE=$HOME/my_shared_credentials
SharedCredentialsFile string
// Shared config file path can be set to instruct the SDK to use an alternate
// file for the shared config. If not set the file will be loaded from
// $HOME/.aws/config on Linux/Unix based systems, and
// %USERPROFILE%\.aws\config on Windows.
//
// AWS_CONFIG_FILE=$HOME/my_shared_config
SharedConfigFile string
}
var (
credAccessEnvKey = []string{
"AWS_ACCESS_KEY_ID",
"AWS_ACCESS_KEY",
}
credSecretEnvKey = []string{
"AWS_SECRET_ACCESS_KEY",
"AWS_SECRET_KEY",
}
credSessionEnvKey = []string{
"AWS_SESSION_TOKEN",
}
regionEnvKeys = []string{
"AWS_REGION",
"AWS_DEFAULT_REGION", // Only read if AWS_SDK_LOAD_CONFIG is also set
}
profileEnvKeys = []string{
"AWS_PROFILE",
"AWS_DEFAULT_PROFILE", // Only read if AWS_SDK_LOAD_CONFIG is also set
}
)
// loadEnvConfig retrieves the SDK's environment configuration.
// See `envConfig` for the values that will be retrieved.
//
// If the environment variable `AWS_SDK_LOAD_CONFIG` is set to a truthy value
// the shared SDK config will be loaded in addition to the SDK's specific
// configuration values.
func loadEnvConfig() envConfig {
enableSharedConfig, _ := strconv.ParseBool(os.Getenv("AWS_SDK_LOAD_CONFIG"))
return envConfigLoad(enableSharedConfig)
}
// loadEnvSharedConfig retrieves the SDK's environment configuration, and the
// SDK shared config. See `envConfig` for the values that will be retrieved.
//
// Loads the shared configuration in addition to the SDK's specific configuration.
// This will load the same values as `loadEnvConfig` if the `AWS_SDK_LOAD_CONFIG`
// environment variable is set.
func loadSharedEnvConfig() envConfig {
return envConfigLoad(true)
}
func envConfigLoad(enableSharedConfig bool) envConfig {
cfg := envConfig{}
cfg.EnableSharedConfig = enableSharedConfig
setFromEnvVal(&cfg.Creds.AccessKeyID, credAccessEnvKey)
setFromEnvVal(&cfg.Creds.SecretAccessKey, credSecretEnvKey)
setFromEnvVal(&cfg.Creds.SessionToken, credSessionEnvKey)
// Require logical grouping of credentials
if len(cfg.Creds.AccessKeyID) == 0 || len(cfg.Creds.SecretAccessKey) == 0 {
cfg.Creds = credentials.Value{}
} else {
cfg.Creds.ProviderName = "EnvConfigCredentials"
}
regionKeys := regionEnvKeys
profileKeys := profileEnvKeys
if !cfg.EnableSharedConfig {
regionKeys = regionKeys[:1]
profileKeys = profileKeys[:1]
}
setFromEnvVal(&cfg.Region, regionKeys)
setFromEnvVal(&cfg.Profile, profileKeys)
cfg.SharedCredentialsFile = sharedCredentialsFilename()
cfg.SharedConfigFile = sharedConfigFilename()
return cfg
}
func setFromEnvVal(dst *string, keys []string) {
for _, k := range keys {
if v := os.Getenv(k); len(v) > 0 {
*dst = v
break
}
}
}
func sharedCredentialsFilename() string {
if name := os.Getenv("AWS_SHARED_CREDENTIALS_FILE"); len(name) > 0 {
return name
}
return filepath.Join(userHomeDir(), ".aws", "credentials")
}
func sharedConfigFilename() string {
if name := os.Getenv("AWS_CONFIG_FILE"); len(name) > 0 {
return name
}
return filepath.Join(userHomeDir(), ".aws", "config")
}
func userHomeDir() string {
homeDir := os.Getenv("HOME") // *nix
if len(homeDir) == 0 { // windows
homeDir = os.Getenv("USERPROFILE")
}
return homeDir
}

View File

@ -1,17 +1,11 @@
// Package session provides a way to create service clients with shared configuration
// and handlers.
//
// Generally this package should be used instead of the `defaults` package.
//
// A session should be used to share configurations and request handlers between multiple
// service clients. When service clients need specific configuration aws.Config can be
// used to provide additional configuration directly to the service client.
package session
import (
"github.com/aws/aws-sdk-go/aws"
"github.com/aws/aws-sdk-go/aws/client"
"github.com/aws/aws-sdk-go/aws/corehandlers"
"github.com/aws/aws-sdk-go/aws/credentials"
"github.com/aws/aws-sdk-go/aws/credentials/stscreds"
"github.com/aws/aws-sdk-go/aws/defaults"
"github.com/aws/aws-sdk-go/aws/request"
"github.com/aws/aws-sdk-go/private/endpoints"
@ -21,36 +15,199 @@ import (
// store configurations and request handlers for those services.
//
// Sessions are safe to create service clients concurrently, but it is not safe
// to mutate the session concurrently.
// to mutate the Session concurrently.
//
// The Session satisfies the service client's client.ClientConfigProvider.
type Session struct {
Config *aws.Config
Handlers request.Handlers
}
// New creates a new instance of the handlers merging in the provided Configs
// on top of the SDK's default configurations. Once the session is created it
// can be mutated to modify Configs or Handlers. The session is safe to be read
// concurrently, but it should not be written to concurrently.
// New creates a new instance of the handlers merging in the provided configs
// on top of the SDK's default configurations. Once the Session is created it
// can be mutated to modify the Config or Handlers. The Session is safe to be
// read concurrently, but it should not be written to concurrently.
//
// Example:
// // Create a session with the default config and request handlers.
// sess := session.New()
// If the AWS_SDK_LOAD_CONFIG environment is set to a truthy value, the New
// method could now encounter an error when loading the configuration. When
// The environment variable is set, and an error occurs, New will return a
// session that will fail all requests reporting the error that occured while
// loading the session. Use NewSession to get the error when creating the
// session.
//
// // Create a session with a custom region
// sess := session.New(&aws.Config{Region: aws.String("us-east-1")})
// If the AWS_SDK_LOAD_CONFIG environment variable is set to a truthy value
// the shared config file (~/.aws/config) will also be loaded, in addition to
// the shared credentials file (~/.aws/config). Values set in both the
// shared config, and shared credentials will be taken from the shared
// credentials file.
//
// // Create a session, and add additional handlers for all service
// // clients created with the session to inherit. Adds logging handler.
// sess := session.New()
// sess.Handlers.Send.PushFront(func(r *request.Request) {
// // Log every request made and its payload
// logger.Println("Request: %s/%s, Payload: %s", r.ClientInfo.ServiceName, r.Operation, r.Params)
// Deprecated: Use NewSession functiions to create sessions instead. NewSession
// has the same functionality as New except an error can be returned when the
// func is called instead of waiting to receive an error until a request is made.
func New(cfgs ...*aws.Config) *Session {
// load initial config from environment
envCfg := loadEnvConfig()
if envCfg.EnableSharedConfig {
s, err := newSession(envCfg, cfgs...)
if err != nil {
// Old session.New expected all errors to be discovered when
// a request is made, and would report the errors then. This
// needs to be replicated if an error occurs while creating
// the session.
msg := "failed to create session with AWS_SDK_LOAD_CONFIG enabled. " +
"Use session.NewSession to handle errors occuring during session creation."
// Session creation failed, need to report the error and prevent
// any requests from succeeding.
s = &Session{Config: defaults.Config()}
s.Config.MergeIn(cfgs...)
s.Config.Logger.Log("ERROR:", msg, "Error:", err)
s.Handlers.Validate.PushBack(func(r *request.Request) {
r.Error = err
})
}
return s
}
return oldNewSession(cfgs...)
}
// NewSession returns a new Session created from SDK defaults, config files,
// environment, and user provided config files. Once the Session is created
// it can be mutated to modify the Config or Handlers. The Session is safe to
// be read concurrently, but it should not be written to concurrently.
//
// If the AWS_SDK_LOAD_CONFIG environment variable is set to a truthy value
// the shared config file (~/.aws/config) will also be loaded in addition to
// the shared credentials file (~/.aws/config). Values set in both the
// shared config, and shared credentials will be taken from the shared
// credentials file. Enabling the Shared Config will also allow the Session
// to be built with retrieving credentials with AssumeRole set in the config.
//
// See the NewSessionWithOptions func for information on how to override or
// control through code how the Session will be created. Such as specifing the
// config profile, and controlling if shared config is enabled or not.
func NewSession(cfgs ...*aws.Config) (*Session, error) {
envCfg := loadEnvConfig()
return newSession(envCfg, cfgs...)
}
// SharedConfigState provides the ability to optionally override the state
// of the session's creation based on the shared config being enabled or
// disabled.
type SharedConfigState int
const (
// SharedConfigStateFromEnv does not override any state of the
// AWS_SDK_LOAD_CONFIG env var. It is the default value of the
// SharedConfigState type.
SharedConfigStateFromEnv SharedConfigState = iota
// SharedConfigDisable overrides the AWS_SDK_LOAD_CONFIG env var value
// and disables the shared config functionality.
SharedConfigDisable
// SharedConfigEnable overrides the AWS_SDK_LOAD_CONFIG env var value
// and enables the shared config functionality.
SharedConfigEnable
)
// Options provides the means to control how a Session is created and what
// configuration values will be loaded.
//
type Options struct {
// Provides config values for the SDK to use when creating service clients
// and making API requests to services. Any value set in with this field
// will override the associated value provided by the SDK defaults,
// environment or config files where relevent.
//
// If not set, configuration values from from SDK defaults, environment,
// config will be used.
Config aws.Config
// Overrides the config profile the Session should be created from. If not
// set the value of the environment variable will be loaded (AWS_PROFILE,
// or AWS_DEFAULT_PROFILE if the Shared Config is enabled).
//
// If not set and environment variables are not set the "default"
// (DefaultSharedConfigProfile) will be used as the profile to load the
// session config from.
Profile string
// Instructs how the Session will be created based on the AWS_SDK_LOAD_CONFIG
// environment variable. By default a Session will be created using the
// value provided by the AWS_SDK_LOAD_CONFIG environment variable.
//
// Setting this value to SharedConfigEnable or SharedConfigDisable
// will allow you to override the AWS_SDK_LOAD_CONFIG environment variable
// and enable or disable the shared config functionality.
SharedConfigState SharedConfigState
}
// NewSessionWithOptions returns a new Session created from SDK defaults, config files,
// environment, and user provided config files. This func uses the Options
// values to configure how the Session is created.
//
// If the AWS_SDK_LOAD_CONFIG environment variable is set to a truthy value
// the shared config file (~/.aws/config) will also be loaded in addition to
// the shared credentials file (~/.aws/config). Values set in both the
// shared config, and shared credentials will be taken from the shared
// credentials file. Enabling the Shared Config will also allow the Session
// to be built with retrieving credentials with AssumeRole set in the config.
//
// // Equivalent to session.New
// sess, err := session.NewSessionWithOptions(session.Options{})
//
// // Specify profile to load for the session's config
// sess, err := session.NewSessionWithOptions(session.Options{
// Profile: "profile_name",
// })
//
// // Create a S3 client instance from a session
// sess := session.New()
// svc := s3.New(sess)
func New(cfgs ...*aws.Config) *Session {
// // Specify profile for config and region for requests
// sess, err := session.NewSessionWithOptions(session.Options{
// Config: aws.Config{Region: aws.String("us-east-1")},
// Profile: "profile_name",
// })
//
// // Force enable Shared Config support
// sess, err := session.NewSessionWithOptions(session.Options{
// SharedConfigState: SharedConfigEnable,
// })
func NewSessionWithOptions(opts Options) (*Session, error) {
envCfg := loadEnvConfig()
if len(opts.Profile) > 0 {
envCfg.Profile = opts.Profile
}
switch opts.SharedConfigState {
case SharedConfigDisable:
envCfg.EnableSharedConfig = false
case SharedConfigEnable:
envCfg.EnableSharedConfig = true
}
return newSession(envCfg, &opts.Config)
}
// Must is a helper function to ensure the Session is valid and there was no
// error when calling a NewSession function.
//
// This helper is intended to be used in variable initialization to load the
// Session and configuration at startup. Such as:
//
// var sess = session.Must(session.NewSession())
func Must(sess *Session, err error) *Session {
if err != nil {
panic(err)
}
return sess
}
func oldNewSession(cfgs ...*aws.Config) *Session {
cfg := defaults.Config()
handlers := defaults.Handlers()
@ -72,6 +229,95 @@ func New(cfgs ...*aws.Config) *Session {
return s
}
func newSession(envCfg envConfig, cfgs ...*aws.Config) (*Session, error) {
cfg := defaults.Config()
handlers := defaults.Handlers()
// Get a merged version of the user provided config to determine if
// credentials were.
userCfg := &aws.Config{}
userCfg.MergeIn(cfgs...)
// Order config files will be loaded in with later files overwriting
// previous config file values.
cfgFiles := []string{envCfg.SharedConfigFile, envCfg.SharedCredentialsFile}
if !envCfg.EnableSharedConfig {
// The shared config file (~/.aws/config) is only loaded if instructed
// to load via the envConfig.EnableSharedConfig (AWS_SDK_LOAD_CONFIG).
cfgFiles = cfgFiles[1:]
}
// Load additional config from file(s)
sharedCfg, err := loadSharedConfig(envCfg.Profile, cfgFiles)
if err != nil {
return nil, err
}
mergeConfigSrcs(cfg, userCfg, envCfg, sharedCfg, handlers)
s := &Session{
Config: cfg,
Handlers: handlers,
}
initHandlers(s)
return s, nil
}
func mergeConfigSrcs(cfg, userCfg *aws.Config, envCfg envConfig, sharedCfg sharedConfig, handlers request.Handlers) {
// Merge in user provided configuration
cfg.MergeIn(userCfg)
// Region if not already set by user
if len(aws.StringValue(cfg.Region)) == 0 {
if len(envCfg.Region) > 0 {
cfg.WithRegion(envCfg.Region)
} else if envCfg.EnableSharedConfig && len(sharedCfg.Region) > 0 {
cfg.WithRegion(sharedCfg.Region)
}
}
// Configure credentials if not already set
if cfg.Credentials == credentials.AnonymousCredentials && userCfg.Credentials == nil {
if len(envCfg.Creds.AccessKeyID) > 0 {
cfg.Credentials = credentials.NewStaticCredentialsFromCreds(
envCfg.Creds,
)
} else if envCfg.EnableSharedConfig && len(sharedCfg.AssumeRole.RoleARN) > 0 && sharedCfg.AssumeRoleSource != nil {
cfgCp := *cfg
cfgCp.Credentials = credentials.NewStaticCredentialsFromCreds(
sharedCfg.AssumeRoleSource.Creds,
)
cfg.Credentials = stscreds.NewCredentials(
&Session{
Config: &cfgCp,
Handlers: handlers.Copy(),
},
sharedCfg.AssumeRole.RoleARN,
func(opt *stscreds.AssumeRoleProvider) {
opt.RoleSessionName = sharedCfg.AssumeRole.RoleSessionName
if len(sharedCfg.AssumeRole.ExternalID) > 0 {
opt.ExternalID = aws.String(sharedCfg.AssumeRole.ExternalID)
}
// MFA not supported
},
)
} else if len(sharedCfg.Creds.AccessKeyID) > 0 {
cfg.Credentials = credentials.NewStaticCredentialsFromCreds(
sharedCfg.Creds,
)
} else {
// Fallback to default credentials provider
cfg.Credentials = credentials.NewCredentials(
defaults.RemoteCredProvider(*cfg, handlers),
)
}
}
}
func initHandlers(s *Session) {
// Add the Validate parameter handler if it is not disabled.
s.Handlers.Validate.Remove(corehandlers.ValidateParametersHandler)
@ -80,12 +326,11 @@ func initHandlers(s *Session) {
}
}
// Copy creates and returns a copy of the current session, coping the config
// Copy creates and returns a copy of the current Session, coping the config
// and handlers. If any additional configs are provided they will be merged
// on top of the session's copied config.
// on top of the Session's copied config.
//
// Example:
// // Create a copy of the current session, configured for the us-west-2 region.
// // Create a copy of the current Session, configured for the us-west-2 region.
// sess.Copy(&aws.Config{Region: aws.String("us-west-2")})
func (s *Session) Copy(cfgs ...*aws.Config) *Session {
newSession := &Session{
@ -101,10 +346,6 @@ func (s *Session) Copy(cfgs ...*aws.Config) *Session {
// ClientConfig satisfies the client.ConfigProvider interface and is used to
// configure the service client instances. Passing the Session to the service
// client's constructor (New) will use this method to configure the client.
//
// Example:
// sess := session.New()
// s3.New(sess)
func (s *Session) ClientConfig(serviceName string, cfgs ...*aws.Config) client.Config {
s = s.Copy(cfgs...)
endpoint, signingRegion := endpoints.NormalizeEndpoint(

View File

@ -0,0 +1,294 @@
package session
import (
"fmt"
"os"
"github.com/aws/aws-sdk-go/aws/awserr"
"github.com/aws/aws-sdk-go/aws/credentials"
"github.com/go-ini/ini"
)
const (
// Static Credentials group
accessKeyIDKey = `aws_access_key_id` // group required
secretAccessKey = `aws_secret_access_key` // group required
sessionTokenKey = `aws_session_token` // optional
// Assume Role Credentials group
roleArnKey = `role_arn` // group required
sourceProfileKey = `source_profile` // group required
externalIDKey = `external_id` // optional
mfaSerialKey = `mfa_serial` // optional
roleSessionNameKey = `role_session_name` // optional
// Additional Config fields
regionKey = `region`
// DefaultSharedConfigProfile is the default profile to be used when
// loading configuration from the config files if another profile name
// is not provided.
DefaultSharedConfigProfile = `default`
)
type assumeRoleConfig struct {
RoleARN string
SourceProfile string
ExternalID string
MFASerial string
RoleSessionName string
}
// sharedConfig represents the configuration fields of the SDK config files.
type sharedConfig struct {
// Credentials values from the config file. Both aws_access_key_id
// and aws_secret_access_key must be provided together in the same file
// to be considered valid. The values will be ignored if not a complete group.
// aws_session_token is an optional field that can be provided if both of the
// other two fields are also provided.
//
// aws_access_key_id
// aws_secret_access_key
// aws_session_token
Creds credentials.Value
AssumeRole assumeRoleConfig
AssumeRoleSource *sharedConfig
// Region is the region the SDK should use for looking up AWS service endpoints
// and signing requests.
//
// region
Region string
}
type sharedConfigFile struct {
Filename string
IniData *ini.File
}
// loadSharedConfig retrieves the configuration from the list of files
// using the profile provided. The order the files are listed will determine
// precedence. Values in subsequent files will overwrite values defined in
// earlier files.
//
// For example, given two files A and B. Both define credentials. If the order
// of the files are A then B, B's credential values will be used instead of A's.
//
// See sharedConfig.setFromFile for information how the config files
// will be loaded.
func loadSharedConfig(profile string, filenames []string) (sharedConfig, error) {
if len(profile) == 0 {
profile = DefaultSharedConfigProfile
}
files, err := loadSharedConfigIniFiles(filenames)
if err != nil {
return sharedConfig{}, err
}
cfg := sharedConfig{}
if err = cfg.setFromIniFiles(profile, files); err != nil {
return sharedConfig{}, err
}
if len(cfg.AssumeRole.SourceProfile) > 0 {
if err := cfg.setAssumeRoleSource(profile, files); err != nil {
return sharedConfig{}, err
}
}
return cfg, nil
}
func loadSharedConfigIniFiles(filenames []string) ([]sharedConfigFile, error) {
files := make([]sharedConfigFile, 0, len(filenames))
for _, filename := range filenames {
if _, err := os.Stat(filename); os.IsNotExist(err) {
// Trim files from the list that don't exist.
continue
}
f, err := ini.Load(filename)
if err != nil {
return nil, SharedConfigLoadError{Filename: filename}
}
files = append(files, sharedConfigFile{
Filename: filename, IniData: f,
})
}
return files, nil
}
func (cfg *sharedConfig) setAssumeRoleSource(origProfile string, files []sharedConfigFile) error {
var assumeRoleSrc sharedConfig
// Multiple level assume role chains are not support
if cfg.AssumeRole.SourceProfile == origProfile {
assumeRoleSrc = *cfg
assumeRoleSrc.AssumeRole = assumeRoleConfig{}
} else {
err := assumeRoleSrc.setFromIniFiles(cfg.AssumeRole.SourceProfile, files)
if err != nil {
return err
}
}
if len(assumeRoleSrc.Creds.AccessKeyID) == 0 {
return SharedConfigAssumeRoleError{RoleARN: cfg.AssumeRole.RoleARN}
}
cfg.AssumeRoleSource = &assumeRoleSrc
return nil
}
func (cfg *sharedConfig) setFromIniFiles(profile string, files []sharedConfigFile) error {
// Trim files from the list that don't exist.
for _, f := range files {
if err := cfg.setFromIniFile(profile, f); err != nil {
if _, ok := err.(SharedConfigProfileNotExistsError); ok {
// Ignore proviles missings
continue
}
return err
}
}
return nil
}
// setFromFile loads the configuration from the file using
// the profile provided. A sharedConfig pointer type value is used so that
// multiple config file loadings can be chained.
//
// Only loads complete logically grouped values, and will not set fields in cfg
// for incomplete grouped values in the config. Such as credentials. For example
// if a config file only includes aws_access_key_id but no aws_secret_access_key
// the aws_access_key_id will be ignored.
func (cfg *sharedConfig) setFromIniFile(profile string, file sharedConfigFile) error {
section, err := file.IniData.GetSection(profile)
if err != nil {
// Fallback to to alternate profile name: profile <name>
section, err = file.IniData.GetSection(fmt.Sprintf("profile %s", profile))
if err != nil {
return SharedConfigProfileNotExistsError{Profile: profile, Err: err}
}
}
// Shared Credentials
akid := section.Key(accessKeyIDKey).String()
secret := section.Key(secretAccessKey).String()
if len(akid) > 0 && len(secret) > 0 {
cfg.Creds = credentials.Value{
AccessKeyID: akid,
SecretAccessKey: secret,
SessionToken: section.Key(sessionTokenKey).String(),
ProviderName: fmt.Sprintf("SharedConfigCredentials: %s", file.Filename),
}
}
// Assume Role
roleArn := section.Key(roleArnKey).String()
srcProfile := section.Key(sourceProfileKey).String()
if len(roleArn) > 0 && len(srcProfile) > 0 {
cfg.AssumeRole = assumeRoleConfig{
RoleARN: roleArn,
SourceProfile: srcProfile,
ExternalID: section.Key(externalIDKey).String(),
MFASerial: section.Key(mfaSerialKey).String(),
RoleSessionName: section.Key(roleSessionNameKey).String(),
}
}
// Region
if v := section.Key(regionKey).String(); len(v) > 0 {
cfg.Region = v
}
return nil
}
// SharedConfigLoadError is an error for the shared config file failed to load.
type SharedConfigLoadError struct {
Filename string
Err error
}
// Code is the short id of the error.
func (e SharedConfigLoadError) Code() string {
return "SharedConfigLoadError"
}
// Message is the description of the error
func (e SharedConfigLoadError) Message() string {
return fmt.Sprintf("failed to load config file, %s", e.Filename)
}
// OrigErr is the underlying error that caused the failure.
func (e SharedConfigLoadError) OrigErr() error {
return e.Err
}
// Error satisfies the error interface.
func (e SharedConfigLoadError) Error() string {
return awserr.SprintError(e.Code(), e.Message(), "", e.Err)
}
// SharedConfigProfileNotExistsError is an error for the shared config when
// the profile was not find in the config file.
type SharedConfigProfileNotExistsError struct {
Profile string
Err error
}
// Code is the short id of the error.
func (e SharedConfigProfileNotExistsError) Code() string {
return "SharedConfigProfileNotExistsError"
}
// Message is the description of the error
func (e SharedConfigProfileNotExistsError) Message() string {
return fmt.Sprintf("failed to get profile, %s", e.Profile)
}
// OrigErr is the underlying error that caused the failure.
func (e SharedConfigProfileNotExistsError) OrigErr() error {
return e.Err
}
// Error satisfies the error interface.
func (e SharedConfigProfileNotExistsError) Error() string {
return awserr.SprintError(e.Code(), e.Message(), "", e.Err)
}
// SharedConfigAssumeRoleError is an error for the shared config when the
// profile contains assume role information, but that information is invalid
// or not complete.
type SharedConfigAssumeRoleError struct {
RoleARN string
}
// Code is the short id of the error.
func (e SharedConfigAssumeRoleError) Code() string {
return "SharedConfigAssumeRoleError"
}
// Message is the description of the error
func (e SharedConfigAssumeRoleError) Message() string {
return fmt.Sprintf("failed to load assume role for %s, source profile has no shared credentials",
e.RoleARN)
}
// OrigErr is the underlying error that caused the failure.
func (e SharedConfigAssumeRoleError) OrigErr() error {
return nil
}
// Error satisfies the error interface.
func (e SharedConfigAssumeRoleError) Error() string {
return awserr.SprintError(e.Code(), e.Message(), "", nil)
}

View File

@ -545,7 +545,7 @@ func (ctx *signingCtx) buildBodyDigest() {
} else {
hash = hex.EncodeToString(makeSha256Reader(ctx.Body))
}
if ctx.ServiceName == "s3" {
if ctx.ServiceName == "s3" || ctx.ServiceName == "glacier" {
ctx.Request.Header.Set("X-Amz-Content-Sha256", hash)
}
}

View File

@ -5,4 +5,4 @@ package aws
const SDKName = "aws-sdk-go"
// SDKVersion is the version of this SDK
const SDKVersion = "1.2.10"
const SDKVersion = "1.3.1"

7
vendor/github.com/aws/aws-sdk-go/sdk.go generated vendored Normal file
View File

@ -0,0 +1,7 @@
// Package sdk is the official AWS SDK for the Go programming language.
//
// See our Developer Guide for information for on getting started and using
// the SDK.
//
// https://github.com/aws/aws-sdk-go/wiki
package sdk

View File

@ -106,13 +106,13 @@ func (c *CloudWatchLogs) CreateExportTaskRequest(input *CreateExportTaskInput) (
// Creates an ExportTask which allows you to efficiently export data from a
// Log Group to your Amazon S3 bucket.
//
// This is an asynchronous call. If all the required information is provided,
// This is an asynchronous call. If all the required information is provided,
// this API will initiate an export task and respond with the task Id. Once
// started, DescribeExportTasks can be used to get the status of an export task.
// You can only have one active (RUNNING or PENDING) export task at a time,
// per account.
//
// You can export logs from multiple log groups or multiple time ranges to
// You can export logs from multiple log groups or multiple time ranges to
// the same Amazon S3 bucket. To separate out log data for each export task,
// you can specify a prefix that will be used as the Amazon S3 key prefix for
// all exported objects.
@ -169,9 +169,12 @@ func (c *CloudWatchLogs) CreateLogGroupRequest(input *CreateLogGroupInput) (req
// must be unique within a region for an AWS account. You can create up to 500
// log groups per account.
//
// You must use the following guidelines when naming a log group: Log group
// names can be between 1 and 512 characters long. Allowed characters are a-z,
// A-Z, 0-9, '_' (underscore), '-' (hyphen), '/' (forward slash), and '.' (period).
// You must use the following guidelines when naming a log group:
//
// Log group names can be between 1 and 512 characters long.
//
// Allowed characters are a-z, A-Z, 0-9, '_' (underscore), '-' (hyphen),
// '/' (forward slash), and '.' (period).
func (c *CloudWatchLogs) CreateLogGroup(input *CreateLogGroupInput) (*CreateLogGroupOutput, error) {
req, out := c.CreateLogGroupRequest(input)
err := req.Send()
@ -225,9 +228,11 @@ func (c *CloudWatchLogs) CreateLogStreamRequest(input *CreateLogStreamInput) (re
// stream must be unique within the log group. There is no limit on the number
// of log streams that can exist in a log group.
//
// You must use the following guidelines when naming a log stream: Log stream
// names can be between 1 and 512 characters long. The ':' colon character is
// not allowed.
// You must use the following guidelines when naming a log stream:
//
// Log stream names can be between 1 and 512 characters long.
//
// The ':' colon character is not allowed.
func (c *CloudWatchLogs) CreateLogStream(input *CreateLogStreamInput) (*CreateLogStreamOutput, error) {
req, out := c.CreateLogStreamRequest(input)
err := req.Send()
@ -590,10 +595,10 @@ func (c *CloudWatchLogs) DescribeDestinationsRequest(input *DescribeDestinations
// the request. The list returned in the response is ASCII-sorted by destination
// name.
//
// By default, this operation returns up to 50 destinations. If there are
// more destinations to list, the response would contain a nextToken value in
// the response body. You can also limit the number of destinations returned
// in the response by specifying the limit parameter in the request.
// By default, this operation returns up to 50 destinations. If there are more
// destinations to list, the response would contain a nextToken value in the
// response body. You can also limit the number of destinations returned in
// the response by specifying the limit parameter in the request.
func (c *CloudWatchLogs) DescribeDestinations(input *DescribeDestinationsInput) (*DescribeDestinationsOutput, error) {
req, out := c.DescribeDestinationsRequest(input)
err := req.Send()
@ -669,7 +674,7 @@ func (c *CloudWatchLogs) DescribeExportTasksRequest(input *DescribeExportTasksIn
// Returns all the export tasks that are associated with the AWS account making
// the request. The export tasks can be filtered based on TaskId or TaskStatus.
//
// By default, this operation returns up to 50 export tasks that satisfy the
// By default, this operation returns up to 50 export tasks that satisfy the
// specified filters. If there are more export tasks to list, the response would
// contain a nextToken value in the response body. You can also limit the number
// of export tasks returned in the response by specifying the limit parameter
@ -731,7 +736,7 @@ func (c *CloudWatchLogs) DescribeLogGroupsRequest(input *DescribeLogGroupsInput)
// the request. The list returned in the response is ASCII-sorted by log group
// name.
//
// By default, this operation returns up to 50 log groups. If there are more
// By default, this operation returns up to 50 log groups. If there are more
// log groups to list, the response would contain a nextToken value in the response
// body. You can also limit the number of log groups returned in the response
// by specifying the limit parameter in the request.
@ -816,7 +821,7 @@ func (c *CloudWatchLogs) DescribeLogStreamsRequest(input *DescribeLogStreamsInpu
// Returns all the log streams that are associated with the specified log group.
// The list returned in the response is ASCII-sorted by log stream name.
//
// By default, this operation returns up to 50 log streams. If there are more
// By default, this operation returns up to 50 log streams. If there are more
// log streams to list, the response would contain a nextToken value in the
// response body. You can also limit the number of log streams returned in the
// response by specifying the limit parameter in the request. This operation
@ -903,7 +908,7 @@ func (c *CloudWatchLogs) DescribeMetricFiltersRequest(input *DescribeMetricFilte
// Returns all the metrics filters associated with the specified log group.
// The list returned in the response is ASCII-sorted by filter name.
//
// By default, this operation returns up to 50 metric filters. If there are
// By default, this operation returns up to 50 metric filters. If there are
// more metric filters to list, the response would contain a nextToken value
// in the response body. You can also limit the number of metric filters returned
// in the response by specifying the limit parameter in the request.
@ -988,7 +993,7 @@ func (c *CloudWatchLogs) DescribeSubscriptionFiltersRequest(input *DescribeSubsc
// Returns all the subscription filters associated with the specified log group.
// The list returned in the response is ASCII-sorted by filter name.
//
// By default, this operation returns up to 50 subscription filters. If there
// By default, this operation returns up to 50 subscription filters. If there
// are more subscription filters to list, the response would contain a nextToken
// value in the response body. You can also limit the number of subscription
// filters returned in the response by specifying the limit parameter in the
@ -1076,14 +1081,14 @@ func (c *CloudWatchLogs) FilterLogEventsRequest(input *FilterLogEventsInput) (re
// the event timestamp. You can limit the streams searched to an explicit list
// of logStreamNames.
//
// By default, this operation returns as much matching log events as can fit
// By default, this operation returns as much matching log events as can fit
// in a response size of 1MB, up to 10,000 log events, or all the events found
// within a time-bounded scan window. If the response includes a nextToken,
// then there is more data to search, and the search can be resumed with a new
// request providing the nextToken. The response will contain a list of searchedLogStreams
// that contains information about which streams were searched in the request
// and whether they have been searched completely or require further pagination.
// The limit parameter in the request. can be used to specify the maximum number
// The limit parameter in the request can be used to specify the maximum number
// of events to return in a page.
func (c *CloudWatchLogs) FilterLogEvents(input *FilterLogEventsInput) (*FilterLogEventsOutput, error) {
req, out := c.FilterLogEventsRequest(input)
@ -1166,7 +1171,7 @@ func (c *CloudWatchLogs) GetLogEventsRequest(input *GetLogEventsInput) (req *req
// Retrieves log events from the specified log stream. You can provide an optional
// time range to filter the results on the event timestamp.
//
// By default, this operation returns as much log events as can fit in a response
// By default, this operation returns as much log events as can fit in a response
// size of 1MB, up to 10,000 log events. The response will always include a
// nextForwardToken and a nextBackwardToken in the response body. You can use
// any of these tokens in subsequent GetLogEvents requests to paginate through
@ -1251,7 +1256,7 @@ func (c *CloudWatchLogs) PutDestinationRequest(input *PutDestinationInput) (req
// Currently, the only supported physical resource is a Amazon Kinesis stream
// belonging to the same account as the destination.
//
// A destination controls what is written to its Amazon Kinesis stream through
// A destination controls what is written to its Amazon Kinesis stream through
// an access policy. By default, PutDestination does not set any access policy
// with the destination, which means a cross-account user will not be able to
// call PutSubscriptionFilter against this destination. To enable that, the
@ -1358,19 +1363,28 @@ func (c *CloudWatchLogs) PutLogEventsRequest(input *PutLogEventsInput) (req *req
// Uploads a batch of log events to the specified log stream.
//
// Every PutLogEvents request must include the sequenceToken obtained from
// Every PutLogEvents request must include the sequenceToken obtained from
// the response of the previous request. An upload in a newly created log stream
// does not require a sequenceToken.
// does not require a sequenceToken. You can also get the sequenceToken using
// DescribeLogStreams.
//
// The batch of events must satisfy the following constraints: The maximum
// batch size is 1,048,576 bytes, and this size is calculated as the sum of
// all event messages in UTF-8, plus 26 bytes for each log event. None of the
// log events in the batch can be more than 2 hours in the future. None of the
// log events in the batch can be older than 14 days or the retention period
// of the log group. The log events in the batch must be in chronological ordered
// by their timestamp. The maximum number of log events in a batch is 10,000.
// A batch of log events in a single PutLogEvents request cannot span more than
// 24 hours. Otherwise, the PutLogEvents operation will fail.
// The batch of events must satisfy the following constraints:
//
// The maximum batch size is 1,048,576 bytes, and this size is calculated
// as the sum of all event messages in UTF-8, plus 26 bytes for each log event.
//
// None of the log events in the batch can be more than 2 hours in the future.
//
// None of the log events in the batch can be older than 14 days or the retention
// period of the log group.
//
// The log events in the batch must be in chronological ordered by their
// timestamp.
//
// The maximum number of log events in a batch is 10,000.
//
// A batch of log events in a single PutLogEvents request cannot span more
// than 24 hours. Otherwise, the PutLogEvents operation will fail.
func (c *CloudWatchLogs) PutLogEvents(input *PutLogEventsInput) (*PutLogEventsOutput, error) {
req, out := c.PutLogEventsRequest(input)
err := req.Send()
@ -1424,8 +1438,8 @@ func (c *CloudWatchLogs) PutMetricFilterRequest(input *PutMetricFilterInput) (re
// group. Metric filters allow you to configure rules to extract metric data
// from log events ingested through PutLogEvents requests.
//
// The maximum number of metric filters that can be associated with a log
// group is 100.
// The maximum number of metric filters that can be associated with a log group
// is 100.
func (c *CloudWatchLogs) PutMetricFilter(input *PutMetricFilterInput) (*PutMetricFilterOutput, error) {
req, out := c.PutMetricFilterRequest(input)
err := req.Send()
@ -1530,17 +1544,22 @@ func (c *CloudWatchLogs) PutSubscriptionFilterRequest(input *PutSubscriptionFilt
// Creates or updates a subscription filter and associates it with the specified
// log group. Subscription filters allow you to subscribe to a real-time stream
// of log events ingested through PutLogEvents requests and have them delivered
// to a specific destination. Currently, the supported destinations are: An
// Amazon Kinesis stream belonging to the same account as the subscription filter,
// for same-account delivery. A logical destination (used via an ARN of Destination)
// belonging to a different account, for cross-account delivery. An Amazon
// Kinesis Firehose stream belonging to the same account as the subscription
// filter, for same-account delivery. An AWS Lambda function belonging to
// the same account as the subscription filter, for same-account delivery.
// to a specific destination. Currently, the supported destinations are:
//
// An Amazon Kinesis stream belonging to the same account as the subscription
// filter, for same-account delivery.
//
// Currently there can only be one subscription filter associated with a log
// group.
// A logical destination (used via an ARN of Destination) belonging to a
// different account, for cross-account delivery.
//
// An Amazon Kinesis Firehose stream belonging to the same account as the
// subscription filter, for same-account delivery.
//
// An AWS Lambda function belonging to the same account as the subscription
// filter, for same-account delivery.
//
// Currently there can only be one subscription filter associated with a
// log group.
func (c *CloudWatchLogs) PutSubscriptionFilter(input *PutSubscriptionFilterInput) (*PutSubscriptionFilterOutput, error) {
req, out := c.PutSubscriptionFilterRequest(input)
err := req.Send()
@ -1649,7 +1668,7 @@ type CreateExportTaskInput struct {
// Name of Amazon S3 bucket to which the log data will be exported.
//
// Note: Only buckets in the same AWS region are supported.
// Note: Only buckets in the same AWS region are supported.
Destination *string `locationName:"destination" min:"1" type:"string" required:"true"`
// Prefix that will be used as the start of Amazon S3 key for every object exported.
@ -3121,17 +3140,18 @@ func (s MetricFilterMatchRecord) GoString() string {
type MetricTransformation struct {
_ struct{} `type:"structure"`
// The name of the CloudWatch metric to which the monitored log information
// should be published. For example, you may publish to a metric called ErrorCount.
// (Optional) A default value to emit when a filter pattern does not match a
// log event. Can be null.
DefaultValue *float64 `locationName:"defaultValue" type:"double"`
// Name of the metric.
MetricName *string `locationName:"metricName" type:"string" required:"true"`
// The destination namespace of the new CloudWatch metric.
// Namespace to which the metric belongs.
MetricNamespace *string `locationName:"metricNamespace" type:"string" required:"true"`
// What to publish to the metric. For example, if you're counting the occurrences
// of a particular term like "Error", the value will be "1" for each occurrence.
// If you're counting the bytes transferred the published value will be the
// value in the log event.
// A string representing a value to publish to this metric when a filter pattern
// matches a log event.
MetricValue *string `locationName:"metricValue" type:"string" required:"true"`
}
@ -3195,7 +3215,7 @@ type PutDestinationInput struct {
DestinationName *string `locationName:"destinationName" min:"1" type:"string" required:"true"`
// The ARN of an IAM role that grants CloudWatch Logs permissions to do Amazon
// Kinesis PutRecord requests on the desitnation stream.
// Kinesis PutRecord requests on the destination stream.
RoleArn *string `locationName:"roleArn" min:"1" type:"string" required:"true"`
// The ARN of an Amazon Kinesis stream to deliver matching log events to.
@ -3544,11 +3564,17 @@ type PutSubscriptionFilterInput struct {
_ struct{} `type:"structure"`
// The ARN of the destination to deliver matching log events to. Currently,
// the supported destinations are: An Amazon Kinesis stream belonging to the
// same account as the subscription filter, for same-account delivery. A logical
// destination (used via an ARN of Destination) belonging to a different account,
// for cross-account delivery. An Amazon Kinesis Firehose stream belonging
// to the same account as the subscription filter, for same-account delivery.
// the supported destinations are:
//
// An Amazon Kinesis stream belonging to the same account as the subscription
// filter, for same-account delivery.
//
// A logical destination (used via an ARN of Destination) belonging to a
// different account, for cross-account delivery.
//
// An Amazon Kinesis Firehose stream belonging to the same account as the
// subscription filter, for same-account delivery.
//
// An AWS Lambda function belonging to the same account as the subscription
// filter, for same-account delivery.
DestinationArn *string `locationName:"destinationArn" min:"1" type:"string" required:"true"`

View File

@ -19,7 +19,7 @@ import (
//
// You can use CloudWatch Logs to:
//
// Monitor Logs from Amazon EC2 Instances in Real-time: You can use CloudWatch
// Monitor Logs from Amazon EC2 Instances in Real-time: You can use CloudWatch
// Logs to monitor applications and systems using log data. For example, CloudWatch
// Logs can track the number of errors that occur in your application logs and
// send you a notification whenever the rate of errors exceeds a threshold you
@ -30,12 +30,12 @@ import (
// codes in an Apache access log). When the term you are searching for is found,
// CloudWatch Logs reports the data to a Amazon CloudWatch metric that you specify.
//
// Monitor Amazon CloudTrail Logged Events: You can create alarms in Amazon
// Monitor Amazon CloudTrail Logged Events: You can create alarms in Amazon
// CloudWatch and receive notifications of particular API activity as captured
// by CloudTrail and use the notification to perform troubleshooting.
//
// Archive Log Data: You can use CloudWatch Logs to store your log data in
// highly durable storage. You can change the log retention setting so that
// Archive Log Data: You can use CloudWatch Logs to store your log data
// in highly durable storage. You can change the log retention setting so that
// any log events older than this setting are automatically deleted. The CloudWatch
// Logs agent makes it easy to quickly send both rotated and non-rotated log
// data off of a host and into the log service. You can then access the raw

View File

@ -3979,8 +3979,7 @@ type RadiusSettings struct {
// The amount of time, in seconds, to wait for the RADIUS server to respond.
RadiusTimeout *int64 `min:"1" type:"integer"`
// The shared secret code that was specified when your RADIUS endpoints were
// created.
// Not currently used.
SharedSecret *string `min:"8" type:"string"`
// Not currently used.

View File

@ -113,18 +113,18 @@ func (c *EMR) AddJobFlowStepsRequest(input *AddJobFlowStepsInput) (req *request.
// on how to do this, go to Add More than 256 Steps to a Job Flow (http://docs.aws.amazon.com/ElasticMapReduce/latest/DeveloperGuide/AddMoreThan256Steps.html)
// in the Amazon Elastic MapReduce Developer's Guide.
//
// A step specifies the location of a JAR file stored either on the master
// A step specifies the location of a JAR file stored either on the master
// node of the job flow or in Amazon S3. Each step is performed by the main
// function of the main class of the JAR file. The main class can be specified
// either in the manifest of the JAR or by using the MainFunction parameter
// of the step.
//
// Elastic MapReduce executes each step in the order listed. For a step to
// Elastic MapReduce executes each step in the order listed. For a step to
// be considered complete, the main function must exit with a zero exit code
// and all Hadoop jobs started while the step was running must have completed
// and run successfully.
//
// You can only add steps to a job flow that is in one of the following states:
// You can only add steps to a job flow that is in one of the following states:
// STARTING, BOOTSTRAPPING, RUNNING, or WAITING.
func (c *EMR) AddJobFlowSteps(input *AddJobFlowStepsInput) (*AddJobFlowStepsOutput, error) {
req, out := c.AddJobFlowStepsRequest(input)
@ -280,20 +280,22 @@ func (c *EMR) DescribeJobFlowsRequest(input *DescribeJobFlowsInput) (req *reques
// ListClusters, DescribeCluster, ListSteps, ListInstanceGroups and ListBootstrapActions
// instead.
//
// DescribeJobFlows returns a list of job flows that match all of the supplied
// DescribeJobFlows returns a list of job flows that match all of the supplied
// parameters. The parameters can include a list of job flow IDs, job flow states,
// and restrictions on job flow creation date and time.
//
// Regardless of supplied parameters, only job flows created within the last
// Regardless of supplied parameters, only job flows created within the last
// two months are returned.
//
// If no parameters are supplied, then job flows matching either of the following
// If no parameters are supplied, then job flows matching either of the following
// criteria are returned:
//
// Job flows created and completed in the last two weeks Job flows created
// within the last two months that are in one of the following states: RUNNING,
// WAITING, SHUTTING_DOWN, STARTING Amazon Elastic MapReduce can return a
// maximum of 512 job flow descriptions.
// Job flows created and completed in the last two weeks
//
// Job flows created within the last two months that are in one of the following
// states: RUNNING, WAITING, SHUTTING_DOWN, STARTING
//
// Amazon Elastic MapReduce can return a maximum of 512 job flow descriptions.
func (c *EMR) DescribeJobFlows(input *DescribeJobFlowsInput) (*DescribeJobFlowsOutput, error) {
req, out := c.DescribeJobFlowsRequest(input)
err := req.Send()
@ -977,7 +979,7 @@ func (c *EMR) SetTerminationProtectionRequest(input *SetTerminationProtectionInp
// is analogous to calling the Amazon EC2 DisableAPITermination API on all of
// the EC2 instances in a cluster.
//
// SetTerminationProtection is used to prevent accidental termination of a
// SetTerminationProtection is used to prevent accidental termination of a
// job flow and to ensure that in the event of an error, the instances will
// persist so you can recover any data stored in their ephemeral instance storage.
//
@ -1096,7 +1098,7 @@ func (c *EMR) TerminateJobFlowsRequest(input *TerminateJobFlowsInput) (req *requ
// the job flow is running are stopped. Any log files not already saved are
// uploaded to Amazon S3 if a LogUri was specified when the job flow was created.
//
// The maximum number of JobFlows allowed is 10. The call to TerminateJobFlows
// The maximum number of JobFlows allowed is 10. The call to TerminateJobFlows
// is asynchronous. Depending on the configuration of the job flow, it may take
// up to 5-20 minutes for the job flow to completely terminate and release allocated
// resources, such as Amazon EC2 instances.
@ -1304,12 +1306,16 @@ func (s AddTagsOutput) GoString() string {
// Flow on the MapR Distribution for Hadoop (http://docs.aws.amazon.com/ElasticMapReduce/latest/DeveloperGuide/emr-mapr.html).
// Currently supported values are:
//
// "mapr-m3" - launch the job flow using MapR M3 Edition. "mapr-m5" - launch
// the job flow using MapR M5 Edition. "mapr" with the user arguments specifying
// "--edition,m3" or "--edition,m5" - launch the job flow using MapR M3 or M5
// Edition, respectively. In Amazon EMR releases 4.0 and greater, the only
// accepted parameter is the application name. To pass arguments to applications,
// you supply a configuration for each application.
// "mapr-m3" - launch the job flow using MapR M3 Edition.
//
// "mapr-m5" - launch the job flow using MapR M5 Edition.
//
// "mapr" with the user arguments specifying "--edition,m3" or "--edition,m5"
// - launch the job flow using MapR M3 or M5 Edition, respectively.
//
// In Amazon EMR releases 4.0 and greater, the only accepted parameter is
// the application name. To pass arguments to applications, you supply a configuration
// for each application.
type Application struct {
_ struct{} `type:"structure"`
@ -1409,7 +1415,7 @@ type Cluster struct {
// Amazon EMR releases 4.x or later.
//
// The list of Configurations supplied to the EMR cluster.
// The list of Configurations supplied to the EMR cluster.
Configurations []*Configuration `type:"list"`
// Provides information about the EC2 instances in a cluster grouped by category.
@ -1608,7 +1614,7 @@ func (s Command) GoString() string {
// Amazon EMR releases 4.x or later.
//
// Specifies a hardware and software configuration of the EMR cluster. This
// Specifies a hardware and software configuration of the EMR cluster. This
// includes configurations for applications and software bundled with Amazon
// EMR. The Configuration object is a JSON object which is defined by a classification
// and a set of properties. Configurations can be nested, so a configuration
@ -1933,7 +1939,7 @@ type Ec2InstanceAttributes struct {
// not specify this value, the job flow is launched in the normal AWS cloud,
// outside of a VPC.
//
// Amazon VPC currently does not support cluster compute quadruple extra large
// Amazon VPC currently does not support cluster compute quadruple extra large
// (cc1.4xlarge) instances. Thus, you cannot specify the cc1.4xlarge instance
// type for nodes of a job flow launched in a VPC.
Ec2SubnetId *string `type:"string"`
@ -1963,6 +1969,36 @@ func (s Ec2InstanceAttributes) GoString() string {
return s.String()
}
// The details of the step failure. The service attempts to detect the root
// cause for many common failures.
type FailureDetails struct {
_ struct{} `type:"structure"`
// The path to the log file where the step failure root cause was originally
// recorded.
LogFile *string `type:"string"`
// The descriptive message including the error the EMR service has identified
// as the cause of step failure. This is text from an error log that describes
// the root cause of the failure.
Message *string `type:"string"`
// The reason for the step failure. In the case where the service cannot successfully
// determine the root cause of the failure, it returns "Unknown Error" as a
// reason.
Reason *string `type:"string"`
}
// String returns the string representation
func (s FailureDetails) String() string {
return awsutil.Prettify(s)
}
// GoString returns the string representation
func (s FailureDetails) GoString() string {
return s.String()
}
// A job flow step consisting of a JAR file whose main function will be executed.
// The main function submits a job for Hadoop to execute and waits for the job
// to finish or fail.
@ -2093,15 +2129,15 @@ type InstanceGroup struct {
// Amazon EMR releases 4.x or later.
//
// The list of configurations supplied for an EMR cluster instance group. You
// can specify a separate configuration for each instance group (master, core,
// and task).
// The list of configurations supplied for an EMR cluster instance group.
// You can specify a separate configuration for each instance group (master,
// core, and task).
Configurations []*Configuration `type:"list"`
// The EBS block devices that are mapped to this instance group.
EbsBlockDevices []*EbsBlockDevice `type:"list"`
// If the instance group is EBS-optimized. An Amazon EBSoptimized instance
// If the instance group is EBS-optimized. An Amazon EBS-optimized instance
// uses an optimized configuration stack and provides additional, dedicated
// capacity for Amazon EBS I/O.
EbsOptimized *bool `type:"boolean"`
@ -2155,9 +2191,9 @@ type InstanceGroupConfig struct {
// Amazon EMR releases 4.x or later.
//
// The list of configurations supplied for an EMR cluster instance group. You
// can specify a separate configuration for each instance group (master, core,
// and task).
// The list of configurations supplied for an EMR cluster instance group.
// You can specify a separate configuration for each instance group (master,
// core, and task).
Configurations []*Configuration `type:"list"`
// EBS configurations that will be attached to each Amazon EC2 instance in the
@ -2600,7 +2636,7 @@ type JobFlowInstancesConfig struct {
// the job flow to launch. If you do not specify this value, the job flow is
// launched in the normal Amazon Web Services cloud, outside of an Amazon VPC.
//
// Amazon VPC currently does not support cluster compute quadruple extra large
// Amazon VPC currently does not support cluster compute quadruple extra large
// (cc1.4xlarge) instances. Thus you cannot specify the cc1.4xlarge instance
// type for nodes of a job flow launched in a Amazon VPC.
Ec2SubnetId *string `type:"string"`
@ -3207,13 +3243,15 @@ type RunJobFlowInput struct {
// For Amazon EMR releases 3.x and 2.x. For Amazon EMR releases 4.x and greater,
// use ReleaseLabel.
//
// The version of the Amazon Machine Image (AMI) to use when launching Amazon
// The version of the Amazon Machine Image (AMI) to use when launching Amazon
// EC2 instances in the job flow. The following values are valid:
//
// The version number of the AMI to use, for example, "2.0." If the AMI supports
// multiple versions of Hadoop (for example, AMI 1.0 supports both Hadoop 0.18
// and 0.20) you can use the JobFlowInstancesConfig HadoopVersion parameter
// to modify the version of Hadoop from the defaults shown above.
// The version number of the AMI to use, for example, "2.0."
//
// If the AMI supports multiple versions of Hadoop (for example, AMI 1.0
// supports both Hadoop 0.18 and 0.20) you can use the JobFlowInstancesConfig
// HadoopVersion parameter to modify the version of Hadoop from the defaults
// shown above.
//
// For details about the AMI versions currently supported by Amazon Elastic
// MapReduce, go to AMI Versions Supported in Elastic MapReduce (http://docs.aws.amazon.com/ElasticMapReduce/latest/DeveloperGuide/EnvironmentConfig_AMIVersion.html#ami-versions-supported)
@ -3222,7 +3260,7 @@ type RunJobFlowInput struct {
// Amazon EMR releases 4.x or later.
//
// A list of applications for the cluster. Valid values are: "Hadoop", "Hive",
// A list of applications for the cluster. Valid values are: "Hadoop", "Hive",
// "Mahout", "Pig", and "Spark." They are case insensitive.
Applications []*Application `type:"list"`
@ -3232,7 +3270,7 @@ type RunJobFlowInput struct {
// Amazon EMR releases 4.x or later.
//
// The list of configurations supplied for the EMR cluster you are creating.
// The list of configurations supplied for the EMR cluster you are creating.
Configurations []*Configuration `type:"list"`
// A specification of the number and type of Amazon EC2 instances on which to
@ -3255,26 +3293,34 @@ type RunJobFlowInput struct {
// For Amazon EMR releases 3.x and 2.x. For Amazon EMR releases 4.x and greater,
// use Applications.
//
// A list of strings that indicates third-party software to use with the job
// A list of strings that indicates third-party software to use with the job
// flow that accepts a user argument list. EMR accepts and forwards the argument
// list to the corresponding installation script as bootstrap action arguments.
// For more information, see Launch a Job Flow on the MapR Distribution for
// Hadoop (http://docs.aws.amazon.com/ElasticMapReduce/latest/DeveloperGuide/emr-mapr.html).
// Currently supported values are:
//
// "mapr-m3" - launch the cluster using MapR M3 Edition. "mapr-m5" - launch
// the cluster using MapR M5 Edition. "mapr" with the user arguments specifying
// "--edition,m3" or "--edition,m5" - launch the job flow using MapR M3 or M5
// Edition respectively. "mapr-m7" - launch the cluster using MapR M7 Edition.
// "hunk" - launch the cluster with the Hunk Big Data Analtics Platform. "hue"-
// launch the cluster with Hue installed. "spark" - launch the cluster with
// Apache Spark installed. "ganglia" - launch the cluster with the Ganglia Monitoring
// System installed.
// "mapr-m3" - launch the cluster using MapR M3 Edition.
//
// "mapr-m5" - launch the cluster using MapR M5 Edition.
//
// "mapr" with the user arguments specifying "--edition,m3" or "--edition,m5"
// - launch the job flow using MapR M3 or M5 Edition respectively.
//
// "mapr-m7" - launch the cluster using MapR M7 Edition.
//
// "hunk" - launch the cluster with the Hunk Big Data Analtics Platform.
//
// "hue"- launch the cluster with Hue installed.
//
// "spark" - launch the cluster with Apache Spark installed.
//
// "ganglia" - launch the cluster with the Ganglia Monitoring System installed.
NewSupportedProducts []*SupportedProductConfig `type:"list"`
// Amazon EMR releases 4.x or later.
//
// The release label for the Amazon EMR release. For Amazon EMR 3.x and 2.x
// The release label for the Amazon EMR release. For Amazon EMR 3.x and 2.x
// AMIs, use amiVersion instead instead of ReleaseLabel.
ReleaseLabel *string `type:"string"`
@ -3288,13 +3334,14 @@ type RunJobFlowInput struct {
// For Amazon EMR releases 3.x and 2.x. For Amazon EMR releases 4.x and greater,
// use Applications.
//
// A list of strings that indicates third-party software to use with the job
// A list of strings that indicates third-party software to use with the job
// flow. For more information, go to Use Third Party Applications with Amazon
// EMR (http://docs.aws.amazon.com/ElasticMapReduce/latest/DeveloperGuide/emr-supported-products.html).
// Currently supported values are:
//
// "mapr-m3" - launch the job flow using MapR M3 Edition. "mapr-m5" - launch
// the job flow using MapR M5 Edition.
// "mapr-m3" - launch the job flow using MapR M3 Edition.
//
// "mapr-m5" - launch the job flow using MapR M5 Edition.
SupportedProducts []*string `type:"list"`
// A list of tags to associate with a cluster and propagate to Amazon EC2 instances.
@ -3699,6 +3746,10 @@ func (s StepStateChangeReason) GoString() string {
type StepStatus struct {
_ struct{} `type:"structure"`
// The details for the step failure including reason, message, and log file
// path where the root cause was identified.
FailureDetails *FailureDetails `type:"structure"`
// The execution state of the cluster step.
State *string `type:"string" enum:"StepState"`
@ -3877,7 +3928,7 @@ type VolumeSpecification struct {
// The number of I/O operations per second (IOPS) that the volume supports.
Iops *int64 `type:"integer"`
// The volume size, in gibibytes (GiB). This can be a number from 1 1024.
// The volume size, in gibibytes (GiB). This can be a number from 1 - 1024.
// If the volume type is EBS-optimized, the minimum value is 10.
SizeInGB *int64 `type:"integer" required:"true"`
@ -4035,10 +4086,6 @@ const (
)
// The type of instance.
//
// A small instance
//
// A large instance
const (
// @enum JobFlowExecutionState
JobFlowExecutionStateStarting = "STARTING"

View File

@ -178,19 +178,20 @@ func (c *Lambda) CreateEventSourceMappingRequest(input *CreateEventSourceMapping
// This event source mapping is relevant only in the AWS Lambda pull model,
// where AWS Lambda invokes the function. For more information, go to AWS Lambda:
// How it Works (http://docs.aws.amazon.com/lambda/latest/dg/lambda-introduction.html)
// in the AWS Lambda Developer Guide. You provide mapping information (for
// example, which stream to read from and which Lambda function to invoke) in
// the request body.
// in the AWS Lambda Developer Guide.
//
// Each event source, such as an Amazon Kinesis or a DynamoDB stream, can
// be associated with multiple AWS Lambda function. A given Lambda function
// can be associated with multiple AWS event sources.
// You provide mapping information (for example, which stream to read from
// and which Lambda function to invoke) in the request body.
//
// If you are using versioning, you can specify a specific function version
// Each event source, such as an Amazon Kinesis or a DynamoDB stream, can be
// associated with multiple AWS Lambda function. A given Lambda function can
// be associated with multiple AWS event sources.
//
// If you are using versioning, you can specify a specific function version
// or an alias via the function name parameter. For more information about versioning,
// see AWS Lambda Function Versioning and Aliases (http://docs.aws.amazon.com/lambda/latest/dg/versioning-aliases.html).
//
// This operation requires permission for the lambda:CreateEventSourceMapping
// This operation requires permission for the lambda:CreateEventSourceMapping
// action.
func (c *Lambda) CreateEventSourceMapping(input *CreateEventSourceMappingInput) (*EventSourceMappingConfiguration, error) {
req, out := c.CreateEventSourceMappingRequest(input)
@ -750,8 +751,9 @@ func (c *Lambda) InvokeRequest(input *InvokeInput) (req *request.Request, output
// version by providing function version or alias name that is pointing to the
// function version using the Qualifier parameter in the request. If you don't
// provide the Qualifier parameter, the $LATEST version of the Lambda function
// is invoked. For information about the versioning feature, see AWS Lambda
// Function Versioning and Aliases (http://docs.aws.amazon.com/lambda/latest/dg/versioning-aliases.html).
// is invoked. Invocations occur at least once in response to an event and functions
// must be idempotent to handle this. For information about the versioning feature,
// see AWS Lambda Function Versioning and Aliases (http://docs.aws.amazon.com/lambda/latest/dg/versioning-aliases.html).
//
// This operation requires permission for the lambda:InvokeFunction action.
func (c *Lambda) Invoke(input *InvokeInput) (*InvokeOutput, error) {
@ -804,10 +806,11 @@ func (c *Lambda) InvokeAsyncRequest(input *InvokeAsyncInput) (req *request.Reque
return
}
// This API is deprecated. We recommend you use Invoke API (see Invoke). Submits
// an invocation request to AWS Lambda. Upon receiving the request, Lambda executes
// the specified function asynchronously. To see the logs generated by the Lambda
// function execution, see the CloudWatch Logs console.
// This API is deprecated. We recommend you use Invoke API (see Invoke).
//
// Submits an invocation request to AWS Lambda. Upon receiving the request,
// Lambda executes the specified function asynchronously. To see the logs generated
// by the Lambda function execution, see the CloudWatch Logs console.
//
// This operation requires permission for the lambda:InvokeFunction action.
func (c *Lambda) InvokeAsync(input *InvokeAsyncInput) (*InvokeAsyncOutput, error) {
@ -1444,11 +1447,13 @@ type AddPermissionInput struct {
_ struct{} `type:"structure"`
// The AWS Lambda action you want to allow in this statement. Each Lambda action
// is a string starting with lambda: followed by the API name (see Operations).
// For example, lambda:CreateFunction. You can use wildcard (lambda:*) to grant
// permission for all AWS Lambda actions.
// is a string starting with lambda: followed by the API name . For example,
// lambda:CreateFunction. You can use wildcard (lambda:*) to grant permission
// for all AWS Lambda actions.
Action *string `type:"string" required:"true"`
// A unique token that must be supplied by the principal invoking the function.
// This is currently only used for Alexa Smart Home functions.
EventSourceToken *string `type:"string"`
// Name of the Lambda function whose resource policy you are updating by adding
@ -1475,32 +1480,32 @@ type AddPermissionInput struct {
// the qualifier, then permission applies only when request is made using qualified
// function ARN:
//
// arn:aws:lambda:aws-region:acct-id:function:function-name:2
// arn:aws:lambda:aws-region:acct-id:function:function-name:2
//
// If you specify an alias name, for example PROD, then the permission is valid
// only for requests made using the alias ARN:
//
// arn:aws:lambda:aws-region:acct-id:function:function-name:PROD
// arn:aws:lambda:aws-region:acct-id:function:function-name:PROD
//
// If the qualifier is not specified, the permission is valid only when requests
// is made using unqualified function ARN.
//
// arn:aws:lambda:aws-region:acct-id:function:function-name
// arn:aws:lambda:aws-region:acct-id:function:function-name
Qualifier *string `location:"querystring" locationName:"Qualifier" min:"1" type:"string"`
// The AWS account ID (without a hyphen) of the source owner. For example, if
// the SourceArn identifies a bucket, then this is the bucket owner's account
// ID. You can use this additional condition to ensure the bucket you specify
// is owned by a specific account (it is possible the bucket owner deleted the
// bucket and some other AWS account created the bucket). You can also use this
// condition to specify all sources (that is, you don't specify the SourceArn)
// owned by a specific account.
// This parameter is used for S3 and SES only. The AWS account ID (without a
// hyphen) of the source owner. For example, if the SourceArn identifies a bucket,
// then this is the bucket owner's account ID. You can use this additional condition
// to ensure the bucket you specify is owned by a specific account (it is possible
// the bucket owner deleted the bucket and some other AWS account created the
// bucket). You can also use this condition to specify all sources (that is,
// you don't specify the SourceArn) owned by a specific account.
SourceAccount *string `type:"string"`
// This is optional; however, when granting Amazon S3 permission to invoke your
// function, you should specify this field with the bucket Amazon Resource Name
// (ARN) as its value. This ensures that only events generated from the specified
// bucket can invoke the function.
// function, you should specify this field with the Amazon Resource Name (ARN)
// as its value. This ensures that only events generated from the specified
// source can invoke the function.
//
// If you add a permission for the Amazon S3 principal without providing the
// source ARN, any AWS account that creates a mapping to your function ARN can
@ -1686,7 +1691,7 @@ type CreateEventSourceMappingInput struct {
// AWS Lambda also allows you to specify only the function name with the account
// ID qualifier (for example, account-id:Thumbnail).
//
// Note that the length constraint applies only to the ARN. If you specify
// Note that the length constraint applies only to the ARN. If you specify
// only the function name, it is limited to 64 character in length.
FunctionName *string `min:"1" type:"string" required:"true"`
@ -1770,6 +1775,9 @@ type CreateFunctionInput struct {
Role *string `type:"string" required:"true"`
// The runtime environment for the Lambda function you are uploading.
//
// To use the Node.js runtime v4.3, set the value to "nodejs4.3". To use earlier
// runtime (v0.10.42), set the value to "nodejs".
Runtime *string `type:"string" required:"true" enum:"Runtime"`
// The function execution time at which Lambda should terminate the function.
@ -2053,10 +2061,11 @@ type FunctionCode struct {
// The Amazon S3 object (the deployment package) version you want to upload.
S3ObjectVersion *string `min:"1" type:"string"`
// A zip file containing your deployment package. If you are using the API directly,
// the zip file must be base64-encoded (if you are using the AWS SDKs or the
// AWS CLI, the SDKs or CLI will do the encoding for you). For more information
// about creating a .zip file, go to Execution Permissions (http://docs.aws.amazon.com/lambda/latest/dg/intro-permission-model.html#lambda-intro-execution-role.html)
// The contents of your zip file containing your deployment package. If you
// are using the web API directly, the contents of the zip file must be base64-encoded.
// If you are using the AWS SDKs or the AWS CLI, the SDKs or CLI will do the
// encoding for you. For more information about creating a .zip file, go to
// Execution Permissions (http://docs.aws.amazon.com/lambda/latest/dg/intro-permission-model.html#lambda-intro-execution-role.html)
// in the AWS Lambda Developer Guide.
//
// ZipFile is automatically base64 encoded/decoded by the SDK.
@ -2148,6 +2157,9 @@ type FunctionConfiguration struct {
Role *string `type:"string"`
// The runtime environment for the Lambda function.
//
// To use the Node.js runtime v4.3, set the value to "nodejs4.3". To use earlier
// runtime (v0.10.42), set the value to "nodejs".
Runtime *string `type:"string" enum:"Runtime"`
// The function execution time at which Lambda should terminate the function.
@ -2350,7 +2362,7 @@ func (s *GetFunctionInput) Validate() error {
return nil
}
// This response contains the object for the Lambda function location (see API_FunctionCodeLocation.
// This response contains the object for the Lambda function location (see .
type GetFunctionOutput struct {
_ struct{} `type:"structure"`
@ -2531,7 +2543,7 @@ type InvokeInput struct {
// You can set this optional parameter to Tail in the request only if you specify
// the InvocationType parameter with value RequestResponse. In this case, AWS
// Lambda returns the base64-encoded last 4 KB of log data produced by your
// Lambda function in the x-amz-log-results header.
// Lambda function in the x-amz-log-result header.
LogType *string `location:"header" locationName:"X-Amz-Log-Type" type:"string" enum:"LogType"`
// JSON that you want to provide to your Lambda function as input.
@ -2694,7 +2706,8 @@ func (s ListAliasesOutput) GoString() string {
type ListEventSourceMappingsInput struct {
_ struct{} `type:"structure"`
// The Amazon Resource Name (ARN) of the Amazon Kinesis stream.
// The Amazon Resource Name (ARN) of the Amazon Kinesis stream. (This parameter
// is optional.)
EventSourceArn *string `location:"querystring" locationName:"EventSourceArn" type:"string"`
// The name of the Lambda function.
@ -2745,7 +2758,7 @@ func (s *ListEventSourceMappingsInput) Validate() error {
return nil
}
// Contains a list of event sources (see API_EventSourceMappingConfiguration)
// Contains a list of event sources (see )
type ListEventSourceMappingsOutput struct {
_ struct{} `type:"structure"`
@ -3148,7 +3161,12 @@ type UpdateFunctionCodeInput struct {
// The Amazon S3 object (the deployment package) version you want to upload.
S3ObjectVersion *string `min:"1" type:"string"`
// Based64-encoded .zip file containing your packaged source code.
// The contents of your zip file containing your deployment package. If you
// are using the web API directly, the contents of the zip file must be base64-encoded.
// If you are using the AWS SDKs or the AWS CLI, the SDKs or CLI will do the
// encoding for you. For more information about creating a .zip file, go to
// Execution Permissions (http://docs.aws.amazon.com/lambda/latest/dg/intro-permission-model.html#lambda-intro-execution-role.html)
// in the AWS Lambda Developer Guide.
//
// ZipFile is automatically base64 encoded/decoded by the SDK.
ZipFile []byte `type:"blob"`
@ -3221,6 +3239,10 @@ type UpdateFunctionConfigurationInput struct {
// it executes your function.
Role *string `type:"string"`
// The runtime environment for the Lambda function.
//
// To use the Node.js runtime v4.3, set the value to "nodejs4.3". To use earlier
// runtime (v0.10.42), set the value to "nodejs".
Runtime *string `type:"string" enum:"Runtime"`
// The function execution time at which AWS Lambda should terminate the function.
@ -3348,3 +3370,12 @@ const (
// @enum Runtime
RuntimePython27 = "python2.7"
)
const (
// @enum ThrottleReason
ThrottleReasonConcurrentInvocationLimitExceeded = "ConcurrentInvocationLimitExceeded"
// @enum ThrottleReason
ThrottleReasonFunctionInvocationRateLimitExceeded = "FunctionInvocationRateLimitExceeded"
// @enum ThrottleReason
ThrottleReasonCallerRateLimitExceeded = "CallerRateLimitExceeded"
)

View File

@ -4616,6 +4616,57 @@ func (c *RDS) ResetDBParameterGroup(input *ResetDBParameterGroupInput) (*DBParam
return out, err
}
const opRestoreDBClusterFromS3 = "RestoreDBClusterFromS3"
// RestoreDBClusterFromS3Request generates a "aws/request.Request" representing the
// client's request for the RestoreDBClusterFromS3 operation. The "output" return
// value can be used to capture response data after the request's "Send" method
// is called.
//
// Creating a request object using this method should be used when you want to inject
// custom logic into the request's lifecycle using a custom handler, or if you want to
// access properties on the request object before or after sending the request. If
// you just want the service response, call the RestoreDBClusterFromS3 method directly
// instead.
//
// Note: You must call the "Send" method on the returned request object in order
// to execute the request.
//
// // Example sending a request using the RestoreDBClusterFromS3Request method.
// req, resp := client.RestoreDBClusterFromS3Request(params)
//
// err := req.Send()
// if err == nil { // resp is now filled
// fmt.Println(resp)
// }
//
func (c *RDS) RestoreDBClusterFromS3Request(input *RestoreDBClusterFromS3Input) (req *request.Request, output *RestoreDBClusterFromS3Output) {
op := &request.Operation{
Name: opRestoreDBClusterFromS3,
HTTPMethod: "POST",
HTTPPath: "/",
}
if input == nil {
input = &RestoreDBClusterFromS3Input{}
}
req = c.newRequest(op, input, output)
output = &RestoreDBClusterFromS3Output{}
req.Data = output
return
}
// Creates an Amazon Aurora DB cluster from data stored in an Amazon S3 bucket.
// Amazon RDS must be authorized to access the Amazon S3 bucket and the data
// must be created using the Percona XtraBackup utility as described in Migrating
// Data from an External MySQL Database to an Amazon Aurora DB Cluster (http://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/Aurora.Migrate.html).
func (c *RDS) RestoreDBClusterFromS3(input *RestoreDBClusterFromS3Input) (*RestoreDBClusterFromS3Output, error) {
req, out := c.RestoreDBClusterFromS3Request(input)
err := req.Send()
return out, err
}
const opRestoreDBClusterFromSnapshot = "RestoreDBClusterFromSnapshot"
// RestoreDBClusterFromSnapshotRequest generates a "aws/request.Request" representing the
@ -5775,8 +5826,7 @@ type CreateDBClusterInput struct {
DBClusterIdentifier *string `type:"string" required:"true"`
// The name of the DB cluster parameter group to associate with this DB cluster.
// If this argument is omitted, default.aurora5.6 for the specified engine will
// be used.
// If this argument is omitted, default.aurora5.6 will be used.
//
// Constraints:
//
@ -5831,7 +5881,7 @@ type CreateDBClusterInput struct {
// Constraints: Must contain from 8 to 41 characters.
MasterUserPassword *string `type:"string"`
// The name of the master user for the client DB cluster.
// The name of the master user for the DB cluster.
//
// Constraints:
//
@ -7167,8 +7217,6 @@ type CreateDBSecurityGroupInput struct {
//
// Must not be "Default"
//
// Cannot contain spaces
//
// Example: mysecuritygroup
DBSecurityGroupName *string `type:"string" required:"true"`
@ -8966,8 +9014,6 @@ type DeleteDBSecurityGroupInput struct {
// Cannot end with a hyphen or contain two consecutive hyphens
//
// Must not be "Default"
//
// Cannot contain spaces
DBSecurityGroupName *string `type:"string" required:"true"`
}
@ -10493,9 +10539,10 @@ type DescribeDBSnapshotsInput struct {
// public - Return all DB snapshots that have been marked as public.
//
// If you don't specify a SnapshotType value, then both automated and manual
// snapshots are returned. You can include shared snapshots with these results
// by setting the IncludeShared parameter to true. You can include public snapshots
// with these results by setting the IncludePublic parameter to true.
// snapshots are returned. Shared and public DB snapshots are not included in
// the returned results by default. You can include shared snapshots with these
// results by setting the IncludeShared parameter to true. You can include public
// snapshots with these results by setting the IncludePublic parameter to true.
//
// The IncludeShared and IncludePublic parameters don't apply for SnapshotType
// values of manual or automated. The IncludePublic parameter doesn't apply
@ -12659,6 +12706,22 @@ type ModifyDBInstanceInput struct {
// Cannot end with a hyphen or contain two consecutive hyphens
DBSecurityGroups []*string `locationNameList:"DBSecurityGroupName" type:"list"`
// The new DB subnet group for the DB instance. You can use this parameter to
// move your DB instance to a different VPC, or to a different subnet group
// in the same VPC. If your DB instance is not in a VPC, you can also use this
// parameter to move your DB instance into a VPC. For more information, see
// Updating the VPC for a DB Instance (http://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_VPC.WorkingWithRDSInstanceinaVPC.html#USER_VPC.Non-VPC2VPC).
//
// Changing the subnet group causes an outage during the change. The change
// is applied during the next maintenance window, unless you specify true for
// the ApplyImmediately parameter.
//
// Constraints: Must contain no more than 255 alphanumeric characters, periods,
// underscores, spaces, or hyphens.
//
// Example: mySubnetGroup
DBSubnetGroupName *string `type:"string"`
// Specify the Active Directory Domain to move the instance to.
//
// The specified Active Directory Domain must be created prior to this operation.
@ -12717,6 +12780,11 @@ type ModifyDBInstanceInput struct {
// snapshot of the instance.
Iops *int64 `type:"integer"`
// The license model for the DB instance.
//
// Valid values: license-included | bring-your-own-license | general-public-license
LicenseModel *string `type:"string"`
// The new password for the DB instance master user. Can be any printable ASCII
// character except "/", """, or "@".
//
@ -13293,6 +13361,9 @@ type Option struct {
// The option settings for this option.
OptionSettings []*OptionSetting `locationNameList:"OptionSetting" type:"list"`
// The version of the option.
OptionVersion *string `type:"string"`
// Indicate if this option is permanent.
Permanent *bool `type:"boolean"`
@ -13330,6 +13401,9 @@ type OptionConfiguration struct {
// The option settings to include in an option group.
OptionSettings []*OptionSetting `locationNameList:"OptionSetting" type:"list"`
// The version for the option.
OptionVersion *string `type:"string"`
// The optional port for the option.
Port *int64 `type:"integer"`
@ -13450,6 +13524,9 @@ type OptionGroupOption struct {
// for each option in an option group.
OptionGroupOptionSettings []*OptionGroupOptionSetting `locationNameList:"OptionGroupOptionSetting" type:"list"`
// Specifies the versions that are available for the option.
OptionGroupOptionVersions []*OptionVersion `locationNameList:"OptionVersion" type:"list"`
// List of all options that are prerequisites for this option.
OptionsDependedOn []*string `locationNameList:"OptionName" type:"list"`
@ -13560,6 +13637,28 @@ func (s OptionSetting) GoString() string {
return s.String()
}
// The version for an option. Option group option versions are returned by the
// DescribeOptionGroupOptions action.
type OptionVersion struct {
_ struct{} `type:"structure"`
// True if the version is the default version of the option; otherwise, false.
IsDefault *bool `type:"boolean"`
// The version of the option.
Version *string `type:"string"`
}
// String returns the string representation
func (s OptionVersion) String() string {
return awsutil.Prettify(s)
}
// GoString returns the string representation
func (s OptionVersion) GoString() string {
return s.String()
}
// Contains a list of available options for a DB instance
//
// This data type is used as a response element in the DescribeOrderableDBInstanceOptions
@ -13731,6 +13830,9 @@ type PendingModifiedValues struct {
// or is in progress.
DBInstanceIdentifier *string `type:"string"`
// The new DB subnet group for the DB instance.
DBSubnetGroupName *string `type:"string"`
// Indicates the database engine version.
EngineVersion *string `type:"string"`
@ -13738,6 +13840,11 @@ type PendingModifiedValues struct {
// applied or is being applied.
Iops *int64 `type:"integer"`
// The license model for the DB instance.
//
// Valid values: license-included | bring-your-own-license | general-public-license
LicenseModel *string `type:"string"`
// Contains the pending or in-progress change of the master credentials for
// the DB instance.
MasterUserPassword *string `type:"string"`
@ -14432,6 +14539,267 @@ func (s ResourcePendingMaintenanceActions) GoString() string {
return s.String()
}
type RestoreDBClusterFromS3Input struct {
_ struct{} `type:"structure"`
// A list of EC2 Availability Zones that instances in the restored DB cluster
// can be created in.
AvailabilityZones []*string `locationNameList:"AvailabilityZone" type:"list"`
// The number of days for which automated backups of the restored DB cluster
// are retained. You must specify a minimum value of 1.
//
// Default: 1
//
// Constraints:
//
// Must be a value from 1 to 35
BackupRetentionPeriod *int64 `type:"integer"`
// A value that indicates that the restored DB cluster should be associated
// with the specified CharacterSet.
CharacterSetName *string `type:"string"`
// The name of the DB cluster to create from the source data in the S3 bucket.
// This parameter is isn't case-sensitive.
//
// Constraints:
//
// Must contain from 1 to 63 alphanumeric characters or hyphens.
//
// First character must be a letter.
//
// Cannot end with a hyphen or contain two consecutive hyphens.
//
// Example: my-cluster1
DBClusterIdentifier *string `type:"string" required:"true"`
// The name of the DB cluster parameter group to associate with the restored
// DB cluster. If this argument is omitted, default.aurora5.6 will be used.
//
// Constraints:
//
// Must be 1 to 255 alphanumeric characters
//
// First character must be a letter
//
// Cannot end with a hyphen or contain two consecutive hyphens
DBClusterParameterGroupName *string `type:"string"`
// A DB subnet group to associate with the restored DB cluster.
//
// Constraints: Must contain no more than 255 alphanumeric characters, periods,
// underscores, spaces, or hyphens. Must not be default.
//
// Example: mySubnetgroup
DBSubnetGroupName *string `type:"string"`
// The database name for the restored DB cluster.
DatabaseName *string `type:"string"`
// The name of the database engine to be used for the restored DB cluster.
//
// Valid Values: aurora
Engine *string `type:"string" required:"true"`
// The version number of the database engine to use.
//
// Aurora
//
// Example: 5.6.10a
EngineVersion *string `type:"string"`
// The KMS key identifier for an encrypted DB cluster.
//
// The KMS key identifier is the Amazon Resource Name (ARN) for the KMS encryption
// key. If you are creating a DB cluster with the same AWS account that owns
// the KMS encryption key used to encrypt the new DB cluster, then you can use
// the KMS key alias instead of the ARN for the KM encryption key.
//
// If the StorageEncrypted parameter is true, and you do not specify a value
// for the KmsKeyId parameter, then Amazon RDS will use your default encryption
// key. AWS KMS creates the default encryption key for your AWS account. Your
// AWS account has a different default encryption key for each AWS region.
KmsKeyId *string `type:"string"`
// The password for the master database user. This password can contain any
// printable ASCII character except "/", """, or "@".
//
// Constraints: Must contain from 8 to 41 characters.
MasterUserPassword *string `type:"string" required:"true"`
// The name of the master user for the restored DB cluster.
//
// Constraints:
//
// Must be 1 to 16 alphanumeric characters.
//
// First character must be a letter.
//
// Cannot be a reserved word for the chosen database engine.
MasterUsername *string `type:"string" required:"true"`
// A value that indicates that the restored DB cluster should be associated
// with the specified option group.
//
// Permanent options cannot be removed from an option group. An option group
// cannot be removed from a DB cluster once it is associated with a DB cluster.
OptionGroupName *string `type:"string"`
// The port number on which the instances in the restored DB cluster accept
// connections.
//
// Default: 3306
Port *int64 `type:"integer"`
// The daily time range during which automated backups are created if automated
// backups are enabled using the BackupRetentionPeriod parameter.
//
// Default: A 30-minute window selected at random from an 8-hour block of time
// per region. To see the time blocks available, see Adjusting the Preferred
// Maintenance Window (http://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/AdjustingTheMaintenanceWindow.html)
// in the Amazon RDS User Guide.
//
// Constraints:
//
// Must be in the format hh24:mi-hh24:mi.
//
// Times should be in Universal Coordinated Time (UTC).
//
// Must not conflict with the preferred maintenance window.
//
// Must be at least 30 minutes.
PreferredBackupWindow *string `type:"string"`
// The weekly time range during which system maintenance can occur, in Universal
// Coordinated Time (UTC).
//
// Format: ddd:hh24:mi-ddd:hh24:mi
//
// Default: A 30-minute window selected at random from an 8-hour block of time
// per region, occurring on a random day of the week. To see the time blocks
// available, see Adjusting the Preferred Maintenance Window (http://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/AdjustingTheMaintenanceWindow.html)
// in the Amazon RDS User Guide.
//
// Valid Days: Mon, Tue, Wed, Thu, Fri, Sat, Sun
//
// Constraints: Minimum 30-minute window.
PreferredMaintenanceWindow *string `type:"string"`
// The name of the Amazon S3 bucket that contains the data used to create the
// Amazon Aurora DB cluster.
S3BucketName *string `type:"string" required:"true"`
// The Amazon Resource Name (ARN) of the AWS Identity and Access Management
// (IAM) role that authorizes Amazon RDS to access the Amazon S3 bucket on your
// behalf.
S3IngestionRoleArn *string `type:"string" required:"true"`
// The prefix for all of the file names that contain the data used to create
// the Amazon Aurora DB cluster. If you do not specify a SourceS3Prefix value,
// then the Amazon Aurora DB cluster is created by using all of the files in
// the Amazon S3 bucket.
S3Prefix *string `type:"string"`
// The identifier for the database engine that was backed up to create the files
// stored in the Amazon S3 bucket.
//
// Valid values: mysql
SourceEngine *string `type:"string" required:"true"`
// The version of the database that the backup files were created from.
//
// MySQL version 5.5 and 5.6 are supported.
//
// Example: 5.6.22
SourceEngineVersion *string `type:"string" required:"true"`
// Specifies whether the restored DB cluster is encrypted.
StorageEncrypted *bool `type:"boolean"`
// A list of tags.
Tags []*Tag `locationNameList:"Tag" type:"list"`
// A list of EC2 VPC security groups to associate with the restored DB cluster.
VpcSecurityGroupIds []*string `locationNameList:"VpcSecurityGroupId" type:"list"`
}
// String returns the string representation
func (s RestoreDBClusterFromS3Input) String() string {
return awsutil.Prettify(s)
}
// GoString returns the string representation
func (s RestoreDBClusterFromS3Input) GoString() string {
return s.String()
}
// Validate inspects the fields of the type to determine if they are valid.
func (s *RestoreDBClusterFromS3Input) Validate() error {
invalidParams := request.ErrInvalidParams{Context: "RestoreDBClusterFromS3Input"}
if s.DBClusterIdentifier == nil {
invalidParams.Add(request.NewErrParamRequired("DBClusterIdentifier"))
}
if s.Engine == nil {
invalidParams.Add(request.NewErrParamRequired("Engine"))
}
if s.MasterUserPassword == nil {
invalidParams.Add(request.NewErrParamRequired("MasterUserPassword"))
}
if s.MasterUsername == nil {
invalidParams.Add(request.NewErrParamRequired("MasterUsername"))
}
if s.S3BucketName == nil {
invalidParams.Add(request.NewErrParamRequired("S3BucketName"))
}
if s.S3IngestionRoleArn == nil {
invalidParams.Add(request.NewErrParamRequired("S3IngestionRoleArn"))
}
if s.SourceEngine == nil {
invalidParams.Add(request.NewErrParamRequired("SourceEngine"))
}
if s.SourceEngineVersion == nil {
invalidParams.Add(request.NewErrParamRequired("SourceEngineVersion"))
}
if invalidParams.Len() > 0 {
return invalidParams
}
return nil
}
type RestoreDBClusterFromS3Output struct {
_ struct{} `type:"structure"`
// Contains the result of a successful invocation of the following actions:
//
// CreateDBCluster
//
// DeleteDBCluster
//
// FailoverDBCluster
//
// ModifyDBCluster
//
// RestoreDBClusterFromSnapshot
//
// RestoreDBClusterToPointInTime
//
// This data type is used as a response element in the DescribeDBClusters
// action.
DBCluster *DBCluster `type:"structure"`
}
// String returns the string representation
func (s RestoreDBClusterFromS3Output) String() string {
return awsutil.Prettify(s)
}
// GoString returns the string representation
func (s RestoreDBClusterFromS3Output) GoString() string {
return s.String()
}
type RestoreDBClusterFromSnapshotInput struct {
_ struct{} `type:"structure"`
@ -14785,7 +15153,7 @@ type RestoreDBInstanceFromDBSnapshotInput struct {
// The database name for the restored DB instance.
//
// This parameter doesn't apply to the MySQL or MariaDB engines.
// This parameter doesn't apply to the MySQL, PostgreSQL, or MariaDB engines.
DBName *string `type:"string"`
// The identifier for the DB snapshot to restore from.

495
vendor/vendor.json vendored
View File

@ -283,598 +283,413 @@
"revision": "4239b77079c7b5d1243b7b4736304ce8ddb6f0f2"
},
{
"checksumSHA1": "NuOPMyBrQF/R5cXmLo5zI2kIs7M=",
"comment": "v1.1.23",
"checksumSHA1": "QhFYdDb2z6DMbZPsDi9oCQS9nRY=",
"path": "github.com/aws/aws-sdk-go",
"revision": "13d7266e75bd078dd0e904106be68b2e52860fd7",
"revisionTime": "2016-08-06T21:45:34Z",
"version": "v1.3.1"
},
{
"checksumSHA1": "4e7X+SkJ2EfR4pNJtMlTVwIh90g=",
"path": "github.com/aws/aws-sdk-go/aws",
"revision": "3b8c171554fc7d4fc53b87e25d4926a9e7495c2e",
"revisionTime": "2016-07-29T00:51:21Z",
"version": "v1.2.10",
"versionExact": "v1.2.10"
"revision": "13d7266e75bd078dd0e904106be68b2e52860fd7",
"revisionTime": "2016-08-06T21:45:34Z"
},
{
"checksumSHA1": "Y9W+4GimK4Fuxq+vyIskVYFRnX4=",
"comment": "v1.1.23",
"path": "github.com/aws/aws-sdk-go/aws/awserr",
"revision": "3b8c171554fc7d4fc53b87e25d4926a9e7495c2e",
"revisionTime": "2016-07-29T00:51:21Z",
"version": "v1.2.10",
"versionExact": "v1.2.10"
"revision": "13d7266e75bd078dd0e904106be68b2e52860fd7",
"revisionTime": "2016-08-06T21:45:34Z"
},
{
"checksumSHA1": "dkfyy7aRNZ6BmUZ4ZdLIcMMXiPA=",
"comment": "v1.1.23",
"path": "github.com/aws/aws-sdk-go/aws/awsutil",
"revision": "3b8c171554fc7d4fc53b87e25d4926a9e7495c2e",
"revisionTime": "2016-07-29T00:51:21Z",
"version": "v1.2.10",
"versionExact": "v1.2.10"
"revision": "13d7266e75bd078dd0e904106be68b2e52860fd7",
"revisionTime": "2016-08-06T21:45:34Z"
},
{
"checksumSHA1": "RsYlRfQceaAgqjIrExwNsb/RBEM=",
"comment": "v1.1.23",
"path": "github.com/aws/aws-sdk-go/aws/client",
"revision": "3b8c171554fc7d4fc53b87e25d4926a9e7495c2e",
"revisionTime": "2016-07-29T00:51:21Z",
"version": "v1.2.10",
"versionExact": "v1.2.10"
"revision": "13d7266e75bd078dd0e904106be68b2e52860fd7",
"revisionTime": "2016-08-06T21:45:34Z"
},
{
"checksumSHA1": "ieAJ+Cvp/PKv1LpUEnUXpc3OI6E=",
"comment": "v1.1.23",
"path": "github.com/aws/aws-sdk-go/aws/client/metadata",
"revision": "3b8c171554fc7d4fc53b87e25d4926a9e7495c2e",
"revisionTime": "2016-07-29T00:51:21Z",
"version": "v1.2.10",
"versionExact": "v1.2.10"
"revision": "13d7266e75bd078dd0e904106be68b2e52860fd7",
"revisionTime": "2016-08-06T21:45:34Z"
},
{
"checksumSHA1": "gNWirlrTfSLbOe421hISBAhTqa4=",
"comment": "v1.1.23",
"path": "github.com/aws/aws-sdk-go/aws/corehandlers",
"revision": "3b8c171554fc7d4fc53b87e25d4926a9e7495c2e",
"revisionTime": "2016-07-29T00:51:21Z",
"version": "v1.2.10",
"versionExact": "v1.2.10"
"revision": "13d7266e75bd078dd0e904106be68b2e52860fd7",
"revisionTime": "2016-08-06T21:45:34Z"
},
{
"checksumSHA1": "EiauD48zRlXIFvAENgZ+PXSEnT0=",
"comment": "v1.1.23",
"checksumSHA1": "dNZNaOPfBPnzE2CBnfhXXZ9g9jU=",
"path": "github.com/aws/aws-sdk-go/aws/credentials",
"revision": "3b8c171554fc7d4fc53b87e25d4926a9e7495c2e",
"revisionTime": "2016-07-29T00:51:21Z",
"version": "v1.2.10",
"versionExact": "v1.2.10"
"revision": "13d7266e75bd078dd0e904106be68b2e52860fd7",
"revisionTime": "2016-08-06T21:45:34Z"
},
{
"checksumSHA1": "KQiUK/zr3mqnAXD7x/X55/iNme0=",
"comment": "v1.1.23",
"path": "github.com/aws/aws-sdk-go/aws/credentials/ec2rolecreds",
"revision": "3b8c171554fc7d4fc53b87e25d4926a9e7495c2e",
"revisionTime": "2016-07-29T00:51:21Z",
"version": "v1.2.10",
"versionExact": "v1.2.10"
"revision": "13d7266e75bd078dd0e904106be68b2e52860fd7",
"revisionTime": "2016-08-06T21:45:34Z"
},
{
"checksumSHA1": "NUJUTWlc1sV8b7WjfiYc4JZbXl0=",
"path": "github.com/aws/aws-sdk-go/aws/credentials/endpointcreds",
"revision": "3b8c171554fc7d4fc53b87e25d4926a9e7495c2e",
"revisionTime": "2016-07-29T00:51:21Z",
"version": "v1.2.10",
"versionExact": "v1.2.10"
"revision": "13d7266e75bd078dd0e904106be68b2e52860fd7",
"revisionTime": "2016-08-06T21:45:34Z"
},
{
"checksumSHA1": "svFeyM3oQkk0nfQ0pguDjMgV2M4=",
"comment": "v1.1.23",
"checksumSHA1": "4Ipx+5xN0gso+cENC2MHMWmQlR4=",
"path": "github.com/aws/aws-sdk-go/aws/credentials/stscreds",
"revision": "13d7266e75bd078dd0e904106be68b2e52860fd7",
"revisionTime": "2016-08-06T21:45:34Z"
},
{
"checksumSHA1": "dVqXFA18tta86y9KIfBqejJRI8Q=",
"path": "github.com/aws/aws-sdk-go/aws/defaults",
"revision": "3b8c171554fc7d4fc53b87e25d4926a9e7495c2e",
"revisionTime": "2016-07-29T00:51:21Z",
"version": "v1.2.10",
"versionExact": "v1.2.10"
"revision": "13d7266e75bd078dd0e904106be68b2e52860fd7",
"revisionTime": "2016-08-06T21:45:34Z"
},
{
"checksumSHA1": "U0SthWum+t9ACanK7SDJOg3dO6M=",
"comment": "v1.1.23",
"path": "github.com/aws/aws-sdk-go/aws/ec2metadata",
"revision": "3b8c171554fc7d4fc53b87e25d4926a9e7495c2e",
"revisionTime": "2016-07-29T00:51:21Z",
"version": "v1.2.10",
"versionExact": "v1.2.10"
"revision": "13d7266e75bd078dd0e904106be68b2e52860fd7",
"revisionTime": "2016-08-06T21:45:34Z"
},
{
"checksumSHA1": "NyUg1P8ZS/LHAAQAk/4C5O4X3og=",
"comment": "v1.1.23",
"path": "github.com/aws/aws-sdk-go/aws/request",
"revision": "3b8c171554fc7d4fc53b87e25d4926a9e7495c2e",
"revisionTime": "2016-07-29T00:51:21Z",
"version": "v1.2.10",
"versionExact": "v1.2.10"
"revision": "13d7266e75bd078dd0e904106be68b2e52860fd7",
"revisionTime": "2016-08-06T21:45:34Z"
},
{
"checksumSHA1": "46SVikiXo5xuy/CS6mM1XVTUU7w=",
"comment": "v1.1.23",
"checksumSHA1": "6rpx6vnvZFvQTIKtxCmhKctnTBU=",
"path": "github.com/aws/aws-sdk-go/aws/session",
"revision": "3b8c171554fc7d4fc53b87e25d4926a9e7495c2e",
"revisionTime": "2016-07-29T00:51:21Z",
"version": "v1.2.10",
"versionExact": "v1.2.10"
"revision": "13d7266e75bd078dd0e904106be68b2e52860fd7",
"revisionTime": "2016-08-06T21:45:34Z"
},
{
"checksumSHA1": "0HzXzMByDLiJSqrMEqbg5URAx0o=",
"checksumSHA1": "7lla+sckQeF18wORAGuU2fFMlp4=",
"path": "github.com/aws/aws-sdk-go/aws/signer/v4",
"revision": "3b8c171554fc7d4fc53b87e25d4926a9e7495c2e",
"revisionTime": "2016-07-29T00:51:21Z",
"version": "v1.2.10",
"versionExact": "v1.2.10"
"revision": "13d7266e75bd078dd0e904106be68b2e52860fd7",
"revisionTime": "2016-08-06T21:45:34Z"
},
{
"checksumSHA1": "sgft7A0lRCVD7QBogydg46lr3NM=",
"comment": "v1.1.23",
"path": "github.com/aws/aws-sdk-go/private/endpoints",
"revision": "3b8c171554fc7d4fc53b87e25d4926a9e7495c2e",
"revisionTime": "2016-07-29T00:51:21Z",
"version": "v1.2.10",
"versionExact": "v1.2.10"
"revision": "13d7266e75bd078dd0e904106be68b2e52860fd7",
"revisionTime": "2016-08-06T21:45:34Z"
},
{
"checksumSHA1": "wk7EyvDaHwb5qqoOP/4d3cV0708=",
"comment": "v1.1.23",
"path": "github.com/aws/aws-sdk-go/private/protocol",
"revision": "3b8c171554fc7d4fc53b87e25d4926a9e7495c2e",
"revisionTime": "2016-07-29T00:51:21Z",
"version": "v1.2.10",
"versionExact": "v1.2.10"
"revision": "13d7266e75bd078dd0e904106be68b2e52860fd7",
"revisionTime": "2016-08-06T21:45:34Z"
},
{
"checksumSHA1": "uNmSKXAF8B9HWEciW+iyUwZ99qQ=",
"comment": "v1.1.23",
"path": "github.com/aws/aws-sdk-go/private/protocol/ec2query",
"revision": "3b8c171554fc7d4fc53b87e25d4926a9e7495c2e",
"revisionTime": "2016-07-29T00:51:21Z",
"version": "v1.2.10",
"versionExact": "v1.2.10"
"revision": "13d7266e75bd078dd0e904106be68b2e52860fd7",
"revisionTime": "2016-08-06T21:45:34Z"
},
{
"checksumSHA1": "L7xWYwx0jNQnzlYHwBS+1q6DcCI=",
"comment": "v1.1.23",
"path": "github.com/aws/aws-sdk-go/private/protocol/json/jsonutil",
"revision": "3b8c171554fc7d4fc53b87e25d4926a9e7495c2e",
"revisionTime": "2016-07-29T00:51:21Z",
"version": "v1.2.10",
"versionExact": "v1.2.10"
"revision": "13d7266e75bd078dd0e904106be68b2e52860fd7",
"revisionTime": "2016-08-06T21:45:34Z"
},
{
"checksumSHA1": "H9TymcQkQnXSXSVfjggiiS4bpzM=",
"comment": "v1.1.23",
"path": "github.com/aws/aws-sdk-go/private/protocol/jsonrpc",
"revision": "3b8c171554fc7d4fc53b87e25d4926a9e7495c2e",
"revisionTime": "2016-07-29T00:51:21Z",
"version": "v1.2.10",
"versionExact": "v1.2.10"
"revision": "13d7266e75bd078dd0e904106be68b2e52860fd7",
"revisionTime": "2016-08-06T21:45:34Z"
},
{
"checksumSHA1": "isoix7lTx4qIq2zI2xFADtti5SI=",
"comment": "v1.1.23",
"path": "github.com/aws/aws-sdk-go/private/protocol/query",
"revision": "3b8c171554fc7d4fc53b87e25d4926a9e7495c2e",
"revisionTime": "2016-07-29T00:51:21Z",
"version": "v1.2.10",
"versionExact": "v1.2.10"
"revision": "13d7266e75bd078dd0e904106be68b2e52860fd7",
"revisionTime": "2016-08-06T21:45:34Z"
},
{
"checksumSHA1": "5xzix1R8prUyWxgLnzUQoxTsfik=",
"comment": "v1.1.23",
"path": "github.com/aws/aws-sdk-go/private/protocol/query/queryutil",
"revision": "3b8c171554fc7d4fc53b87e25d4926a9e7495c2e",
"revisionTime": "2016-07-29T00:51:21Z",
"version": "v1.2.10",
"versionExact": "v1.2.10"
"revision": "13d7266e75bd078dd0e904106be68b2e52860fd7",
"revisionTime": "2016-08-06T21:45:34Z"
},
{
"checksumSHA1": "TW/7U+/8ormL7acf6z2rv2hDD+s=",
"comment": "v1.1.23",
"path": "github.com/aws/aws-sdk-go/private/protocol/rest",
"revision": "3b8c171554fc7d4fc53b87e25d4926a9e7495c2e",
"revisionTime": "2016-07-29T00:51:21Z",
"version": "v1.2.10",
"versionExact": "v1.2.10"
"revision": "13d7266e75bd078dd0e904106be68b2e52860fd7",
"revisionTime": "2016-08-06T21:45:34Z"
},
{
"checksumSHA1": "oUOTWZIpPJiGjc9p/hntdBDvS10=",
"comment": "v1.1.23",
"path": "github.com/aws/aws-sdk-go/private/protocol/restjson",
"revision": "3b8c171554fc7d4fc53b87e25d4926a9e7495c2e",
"revisionTime": "2016-07-29T00:51:21Z",
"version": "v1.2.10",
"versionExact": "v1.2.10"
"revision": "13d7266e75bd078dd0e904106be68b2e52860fd7",
"revisionTime": "2016-08-06T21:45:34Z"
},
{
"checksumSHA1": "Y6Db2GGfGD9LPpcJIPj8vXE8BbQ=",
"comment": "v1.1.23",
"path": "github.com/aws/aws-sdk-go/private/protocol/restxml",
"revision": "3b8c171554fc7d4fc53b87e25d4926a9e7495c2e",
"revisionTime": "2016-07-29T00:51:21Z",
"version": "v1.2.10",
"versionExact": "v1.2.10"
"revision": "13d7266e75bd078dd0e904106be68b2e52860fd7",
"revisionTime": "2016-08-06T21:45:34Z"
},
{
"checksumSHA1": "eUEkjyMPAuekKBE4ou+nM9tXEas=",
"comment": "v1.1.23",
"path": "github.com/aws/aws-sdk-go/private/protocol/xml/xmlutil",
"revision": "3b8c171554fc7d4fc53b87e25d4926a9e7495c2e",
"revisionTime": "2016-07-29T00:51:21Z",
"version": "v1.2.10",
"versionExact": "v1.2.10"
"revision": "13d7266e75bd078dd0e904106be68b2e52860fd7",
"revisionTime": "2016-08-06T21:45:34Z"
},
{
"checksumSHA1": "F6mth+G7dXN1GI+nktaGo8Lx8aE=",
"path": "github.com/aws/aws-sdk-go/private/signer/v2",
"revision": "3b8c171554fc7d4fc53b87e25d4926a9e7495c2e",
"revisionTime": "2016-07-29T00:51:21Z",
"version": "v1.2.10",
"versionExact": "v1.2.10"
},
{
"comment": "v1.1.23",
"path": "github.com/aws/aws-sdk-go/private/signer/v4",
"revision": "2cc71659118a868dc7544a7ef0808eb42d487011",
"version": "v1.2.10",
"versionExact": "v1.2.10"
"revision": "13d7266e75bd078dd0e904106be68b2e52860fd7",
"revisionTime": "2016-08-06T21:45:34Z"
},
{
"checksumSHA1": "Eo9yODN5U99BK0pMzoqnBm7PCrY=",
"comment": "v1.1.23",
"path": "github.com/aws/aws-sdk-go/private/waiter",
"revision": "3b8c171554fc7d4fc53b87e25d4926a9e7495c2e",
"revisionTime": "2016-07-29T00:51:21Z",
"version": "v1.2.10",
"versionExact": "v1.2.10"
"revision": "13d7266e75bd078dd0e904106be68b2e52860fd7",
"revisionTime": "2016-08-06T21:45:34Z"
},
{
"checksumSHA1": "j8CUd3jhZ8K+cI8fy785NmqJyzg=",
"comment": "v1.1.23",
"path": "github.com/aws/aws-sdk-go/service/apigateway",
"revision": "3b8c171554fc7d4fc53b87e25d4926a9e7495c2e",
"revisionTime": "2016-07-29T00:51:21Z",
"version": "v1.2.10",
"versionExact": "v1.2.10"
"revision": "13d7266e75bd078dd0e904106be68b2e52860fd7",
"revisionTime": "2016-08-06T21:45:34Z"
},
{
"checksumSHA1": "qoTWohhN8wMZvdMAbwi+B5YhQJ0=",
"path": "github.com/aws/aws-sdk-go/service/applicationautoscaling",
"revision": "3b8c171554fc7d4fc53b87e25d4926a9e7495c2e",
"revisionTime": "2016-07-29T00:51:21Z",
"version": "v1.2.10",
"versionExact": "v1.2.10"
"revision": "13d7266e75bd078dd0e904106be68b2e52860fd7",
"revisionTime": "2016-08-06T21:45:34Z"
},
{
"checksumSHA1": "AUA6op9dlm0X4vv1YPFnIFs6404=",
"comment": "v1.1.23",
"path": "github.com/aws/aws-sdk-go/service/autoscaling",
"revision": "3b8c171554fc7d4fc53b87e25d4926a9e7495c2e",
"revisionTime": "2016-07-29T00:51:21Z",
"version": "v1.2.10",
"versionExact": "v1.2.10"
"revision": "13d7266e75bd078dd0e904106be68b2e52860fd7",
"revisionTime": "2016-08-06T21:45:34Z"
},
{
"checksumSHA1": "vp/AYdsQnZtoPqtX86VsgmLIx1w=",
"comment": "v1.1.23",
"path": "github.com/aws/aws-sdk-go/service/cloudformation",
"revision": "3b8c171554fc7d4fc53b87e25d4926a9e7495c2e",
"revisionTime": "2016-07-29T00:51:21Z",
"version": "v1.2.10",
"versionExact": "v1.2.10"
"revision": "13d7266e75bd078dd0e904106be68b2e52860fd7",
"revisionTime": "2016-08-06T21:45:34Z"
},
{
"checksumSHA1": "4deSd9La3EF2Cmq+tD5rcvhfTGQ=",
"comment": "v1.1.23",
"path": "github.com/aws/aws-sdk-go/service/cloudfront",
"revision": "3b8c171554fc7d4fc53b87e25d4926a9e7495c2e",
"revisionTime": "2016-07-29T00:51:21Z",
"version": "v1.2.10",
"versionExact": "v1.2.10"
"revision": "13d7266e75bd078dd0e904106be68b2e52860fd7",
"revisionTime": "2016-08-06T21:45:34Z"
},
{
"checksumSHA1": "eCFTaV9GKqv/UEzwRgFFUaFz098=",
"comment": "v1.1.23",
"path": "github.com/aws/aws-sdk-go/service/cloudtrail",
"revision": "3b8c171554fc7d4fc53b87e25d4926a9e7495c2e",
"revisionTime": "2016-07-29T00:51:21Z",
"version": "v1.2.10",
"versionExact": "v1.2.10"
"revision": "13d7266e75bd078dd0e904106be68b2e52860fd7",
"revisionTime": "2016-08-06T21:45:34Z"
},
{
"checksumSHA1": "G9CmCfw00Bjz0TtJsEnxGE6mv/0=",
"comment": "v1.1.23",
"path": "github.com/aws/aws-sdk-go/service/cloudwatch",
"revision": "3b8c171554fc7d4fc53b87e25d4926a9e7495c2e",
"revisionTime": "2016-07-29T00:51:21Z",
"version": "v1.2.10",
"versionExact": "v1.2.10"
"revision": "13d7266e75bd078dd0e904106be68b2e52860fd7",
"revisionTime": "2016-08-06T21:45:34Z"
},
{
"checksumSHA1": "mWNJKpt18ASs9/RhnIjILcsGlng=",
"comment": "v1.1.23",
"path": "github.com/aws/aws-sdk-go/service/cloudwatchevents",
"revision": "3b8c171554fc7d4fc53b87e25d4926a9e7495c2e",
"revisionTime": "2016-07-29T00:51:21Z",
"version": "v1.2.10",
"versionExact": "v1.2.10"
"revision": "13d7266e75bd078dd0e904106be68b2e52860fd7",
"revisionTime": "2016-08-06T21:45:34Z"
},
{
"checksumSHA1": "Q6xeArbCzOunYsn2tFyTA5LN1Cg=",
"comment": "v1.1.23",
"checksumSHA1": "sP/qEaDICVBV3rRw2sl759YI0iw=",
"path": "github.com/aws/aws-sdk-go/service/cloudwatchlogs",
"revision": "3b8c171554fc7d4fc53b87e25d4926a9e7495c2e",
"revisionTime": "2016-07-29T00:51:21Z",
"version": "v1.2.10",
"versionExact": "v1.2.10"
"revision": "13d7266e75bd078dd0e904106be68b2e52860fd7",
"revisionTime": "2016-08-06T21:45:34Z"
},
{
"checksumSHA1": "p5a/DcdUvhTx0PCRR+/CRXk9g6c=",
"comment": "v1.1.23",
"path": "github.com/aws/aws-sdk-go/service/codecommit",
"revision": "3b8c171554fc7d4fc53b87e25d4926a9e7495c2e",
"revisionTime": "2016-07-29T00:51:21Z",
"version": "v1.2.10",
"versionExact": "v1.2.10"
"revision": "13d7266e75bd078dd0e904106be68b2e52860fd7",
"revisionTime": "2016-08-06T21:45:34Z"
},
{
"checksumSHA1": "N8Sgq+xG2vYJdKBikM3yQuIBZfs=",
"comment": "v1.1.23",
"path": "github.com/aws/aws-sdk-go/service/codedeploy",
"revision": "3b8c171554fc7d4fc53b87e25d4926a9e7495c2e",
"revisionTime": "2016-07-29T00:51:21Z",
"version": "v1.2.10",
"versionExact": "v1.2.10"
"revision": "13d7266e75bd078dd0e904106be68b2e52860fd7",
"revisionTime": "2016-08-06T21:45:34Z"
},
{
"checksumSHA1": "BiT1NC5G4H7OeNcI7jzkZUzlpr4=",
"comment": "v1.1.23",
"checksumSHA1": "i4hrcsFXLAQXzaxvWh6+BG8XcIU=",
"path": "github.com/aws/aws-sdk-go/service/directoryservice",
"revision": "3b8c171554fc7d4fc53b87e25d4926a9e7495c2e",
"revisionTime": "2016-07-29T00:51:21Z",
"version": "v1.2.10",
"versionExact": "v1.2.10"
"revision": "13d7266e75bd078dd0e904106be68b2e52860fd7",
"revisionTime": "2016-08-06T21:45:34Z"
},
{
"checksumSHA1": "y+pZPK8hcTDwq1zHuRduWE14flw=",
"comment": "v1.1.23",
"path": "github.com/aws/aws-sdk-go/service/dynamodb",
"revision": "3b8c171554fc7d4fc53b87e25d4926a9e7495c2e",
"revisionTime": "2016-07-29T00:51:21Z",
"version": "v1.2.10",
"versionExact": "v1.2.10"
"revision": "13d7266e75bd078dd0e904106be68b2e52860fd7",
"revisionTime": "2016-08-06T21:45:34Z"
},
{
"checksumSHA1": "Ao/Vq8RYiaW63HasBBPkNg/i7CM=",
"comment": "v1.1.23",
"path": "github.com/aws/aws-sdk-go/service/ec2",
"revision": "3b8c171554fc7d4fc53b87e25d4926a9e7495c2e",
"revisionTime": "2016-07-29T00:51:21Z",
"version": "v1.2.10",
"versionExact": "v1.2.10"
"revision": "13d7266e75bd078dd0e904106be68b2e52860fd7",
"revisionTime": "2016-08-06T21:45:34Z"
},
{
"checksumSHA1": "IEHq+VLH1fud1oQ4MXj1nqfpgUY=",
"comment": "v1.1.23",
"path": "github.com/aws/aws-sdk-go/service/ecr",
"revision": "3b8c171554fc7d4fc53b87e25d4926a9e7495c2e",
"revisionTime": "2016-07-29T00:51:21Z",
"version": "v1.2.10",
"versionExact": "v1.2.10"
"revision": "13d7266e75bd078dd0e904106be68b2e52860fd7",
"revisionTime": "2016-08-06T21:45:34Z"
},
{
"checksumSHA1": "sHPoLMWXO5tM63ipuxVXduuRypI=",
"comment": "v1.1.23",
"path": "github.com/aws/aws-sdk-go/service/ecs",
"revision": "3b8c171554fc7d4fc53b87e25d4926a9e7495c2e",
"revisionTime": "2016-07-29T00:51:21Z",
"version": "v1.2.10",
"versionExact": "v1.2.10"
"revision": "13d7266e75bd078dd0e904106be68b2e52860fd7",
"revisionTime": "2016-08-06T21:45:34Z"
},
{
"checksumSHA1": "1vOgFGxLhjNe6BK3RJaV1OqisCs=",
"comment": "v1.1.23",
"path": "github.com/aws/aws-sdk-go/service/efs",
"revision": "3b8c171554fc7d4fc53b87e25d4926a9e7495c2e",
"revisionTime": "2016-07-29T00:51:21Z",
"version": "v1.2.10",
"versionExact": "v1.2.10"
"revision": "13d7266e75bd078dd0e904106be68b2e52860fd7",
"revisionTime": "2016-08-06T21:45:34Z"
},
{
"checksumSHA1": "rjSScNzMTvEHv7Lk5KcxDpNU5EE=",
"comment": "v1.1.23",
"path": "github.com/aws/aws-sdk-go/service/elasticache",
"revision": "3b8c171554fc7d4fc53b87e25d4926a9e7495c2e",
"revisionTime": "2016-07-29T00:51:21Z",
"version": "v1.2.10",
"versionExact": "v1.2.10"
"revision": "13d7266e75bd078dd0e904106be68b2e52860fd7",
"revisionTime": "2016-08-06T21:45:34Z"
},
{
"checksumSHA1": "RZF1yHtJhAqaMwbeAM/6BdLLavk=",
"comment": "v1.1.23",
"path": "github.com/aws/aws-sdk-go/service/elasticbeanstalk",
"revision": "3b8c171554fc7d4fc53b87e25d4926a9e7495c2e",
"revisionTime": "2016-07-29T00:51:21Z",
"version": "v1.2.10",
"versionExact": "v1.2.10"
"revision": "13d7266e75bd078dd0e904106be68b2e52860fd7",
"revisionTime": "2016-08-06T21:45:34Z"
},
{
"checksumSHA1": "VAlXnW+WxxWRcCv4xsCoox2kgE0=",
"comment": "v1.1.23",
"path": "github.com/aws/aws-sdk-go/service/elasticsearchservice",
"revision": "3b8c171554fc7d4fc53b87e25d4926a9e7495c2e",
"revisionTime": "2016-07-29T00:51:21Z",
"version": "v1.2.10",
"versionExact": "v1.2.10"
"revision": "13d7266e75bd078dd0e904106be68b2e52860fd7",
"revisionTime": "2016-08-06T21:45:34Z"
},
{
"checksumSHA1": "qHuJHGUAuuizD9834MP3gVupfdo=",
"path": "github.com/aws/aws-sdk-go/service/elastictranscoder",
"revision": "3b8c171554fc7d4fc53b87e25d4926a9e7495c2e",
"revisionTime": "2016-07-29T00:51:21Z",
"version": "v1.2.10",
"versionExact": "v1.2.10"
"revision": "13d7266e75bd078dd0e904106be68b2e52860fd7",
"revisionTime": "2016-08-06T21:45:34Z"
},
{
"checksumSHA1": "1c9xsISLQWKSrORIpdokCCWCe2M=",
"comment": "v1.1.23",
"path": "github.com/aws/aws-sdk-go/service/elb",
"revision": "3b8c171554fc7d4fc53b87e25d4926a9e7495c2e",
"revisionTime": "2016-07-29T00:51:21Z",
"version": "v1.2.10",
"versionExact": "v1.2.10"
"revision": "13d7266e75bd078dd0e904106be68b2e52860fd7",
"revisionTime": "2016-08-06T21:45:34Z"
},
{
"checksumSHA1": "bvVmHWxCOk0Cmw333zQ5jutPCZQ=",
"comment": "v1.1.15",
"checksumSHA1": "MA6U/Vj0D00yihMHD6bXKyjtfeE=",
"path": "github.com/aws/aws-sdk-go/service/emr",
"revision": "3b8c171554fc7d4fc53b87e25d4926a9e7495c2e",
"revisionTime": "2016-07-29T00:51:21Z",
"version": "v1.2.10",
"versionExact": "v1.2.10"
"revision": "13d7266e75bd078dd0e904106be68b2e52860fd7",
"revisionTime": "2016-08-06T21:45:34Z"
},
{
"checksumSHA1": "TtIAgZ+evpkKB5bBYCB69k0wZoU=",
"comment": "v1.1.23",
"path": "github.com/aws/aws-sdk-go/service/firehose",
"revision": "3b8c171554fc7d4fc53b87e25d4926a9e7495c2e",
"revisionTime": "2016-07-29T00:51:21Z",
"version": "v1.2.10",
"versionExact": "v1.2.10"
"revision": "13d7266e75bd078dd0e904106be68b2e52860fd7",
"revisionTime": "2016-08-06T21:45:34Z"
},
{
"checksumSHA1": "B1EtgBrv//gYqA+Sp6a/SK2zLO4=",
"comment": "v1.1.23",
"path": "github.com/aws/aws-sdk-go/service/glacier",
"revision": "3b8c171554fc7d4fc53b87e25d4926a9e7495c2e",
"revisionTime": "2016-07-29T00:51:21Z",
"version": "v1.2.10",
"versionExact": "v1.2.10"
"revision": "13d7266e75bd078dd0e904106be68b2e52860fd7",
"revisionTime": "2016-08-06T21:45:34Z"
},
{
"checksumSHA1": "kXJ9ycLAIj0PFSFbfrA/LR/hIi8=",
"comment": "v1.1.23",
"path": "github.com/aws/aws-sdk-go/service/iam",
"revision": "3b8c171554fc7d4fc53b87e25d4926a9e7495c2e",
"revisionTime": "2016-07-29T00:51:21Z",
"version": "v1.2.10",
"versionExact": "v1.2.10"
"revision": "13d7266e75bd078dd0e904106be68b2e52860fd7",
"revisionTime": "2016-08-06T21:45:34Z"
},
{
"checksumSHA1": "2n5/m0ClE4OyQRNdjfLwg+nSY3o=",
"comment": "v1.1.23",
"path": "github.com/aws/aws-sdk-go/service/kinesis",
"revision": "3b8c171554fc7d4fc53b87e25d4926a9e7495c2e",
"revisionTime": "2016-07-29T00:51:21Z",
"version": "v1.2.10",
"versionExact": "v1.2.10"
"revision": "13d7266e75bd078dd0e904106be68b2e52860fd7",
"revisionTime": "2016-08-06T21:45:34Z"
},
{
"checksumSHA1": "/cFX1/Gr6M+r9232gLIV+4np7Po=",
"comment": "v1.1.23",
"path": "github.com/aws/aws-sdk-go/service/kms",
"revision": "3b8c171554fc7d4fc53b87e25d4926a9e7495c2e",
"revisionTime": "2016-07-29T00:51:21Z",
"version": "v1.2.10",
"versionExact": "v1.2.10"
"revision": "13d7266e75bd078dd0e904106be68b2e52860fd7",
"revisionTime": "2016-08-06T21:45:34Z"
},
{
"checksumSHA1": "jM0EhAIybh0fyLHxrmVSmG3JLmU=",
"comment": "v1.1.23",
"checksumSHA1": "Qpi347xz5FIQISq73dZSdIf47AU=",
"path": "github.com/aws/aws-sdk-go/service/lambda",
"revision": "3b8c171554fc7d4fc53b87e25d4926a9e7495c2e",
"revisionTime": "2016-07-29T00:51:21Z",
"version": "v1.2.10",
"versionExact": "v1.2.10"
"revision": "13d7266e75bd078dd0e904106be68b2e52860fd7",
"revisionTime": "2016-08-06T21:45:34Z"
},
{
"checksumSHA1": "aLwDFgrPzIBidURxso1ujcr2pDs=",
"comment": "v1.1.23",
"path": "github.com/aws/aws-sdk-go/service/opsworks",
"revision": "3b8c171554fc7d4fc53b87e25d4926a9e7495c2e",
"revisionTime": "2016-07-29T00:51:21Z",
"version": "v1.2.10",
"versionExact": "v1.2.10"
"revision": "13d7266e75bd078dd0e904106be68b2e52860fd7",
"revisionTime": "2016-08-06T21:45:34Z"
},
{
"checksumSHA1": "w0aQAtZ42oGeVOqwwG15OBGoU1s=",
"comment": "v1.1.23",
"checksumSHA1": "9JvmBN9zOBFAIMhBUNU81ZTdFQA=",
"path": "github.com/aws/aws-sdk-go/service/rds",
"revision": "3b8c171554fc7d4fc53b87e25d4926a9e7495c2e",
"revisionTime": "2016-07-29T00:51:21Z",
"version": "v1.2.10",
"versionExact": "v1.2.10"
"revision": "13d7266e75bd078dd0e904106be68b2e52860fd7",
"revisionTime": "2016-08-06T21:45:34Z"
},
{
"checksumSHA1": "mgImZ/bluUOY9GpQ/oAnscIXwrA=",
"comment": "v1.1.23",
"path": "github.com/aws/aws-sdk-go/service/redshift",
"revision": "3b8c171554fc7d4fc53b87e25d4926a9e7495c2e",
"revisionTime": "2016-07-29T00:51:21Z",
"version": "v1.2.10",
"versionExact": "v1.2.10"
"revision": "13d7266e75bd078dd0e904106be68b2e52860fd7",
"revisionTime": "2016-08-06T21:45:34Z"
},
{
"checksumSHA1": "y6jKUvrpTJxj5uh6OqQ4FujhCHU=",
"comment": "v1.1.23",
"path": "github.com/aws/aws-sdk-go/service/route53",
"revision": "3b8c171554fc7d4fc53b87e25d4926a9e7495c2e",
"revisionTime": "2016-07-29T00:51:21Z",
"version": "v1.2.10",
"versionExact": "v1.2.10"
"revision": "13d7266e75bd078dd0e904106be68b2e52860fd7",
"revisionTime": "2016-08-06T21:45:34Z"
},
{
"checksumSHA1": "+608jtc5uRpGqGu5ntpKhfWgwGc=",
"comment": "v1.1.23",
"path": "github.com/aws/aws-sdk-go/service/s3",
"revision": "3b8c171554fc7d4fc53b87e25d4926a9e7495c2e",
"revisionTime": "2016-07-29T00:51:21Z",
"version": "v1.2.10",
"versionExact": "v1.2.10"
"revision": "13d7266e75bd078dd0e904106be68b2e52860fd7",
"revisionTime": "2016-08-06T21:45:34Z"
},
{
"checksumSHA1": "o+bjuT6ycywUf+vXY9hYK4Z3okE=",
"path": "github.com/aws/aws-sdk-go/service/ses",
"revision": "3b8c171554fc7d4fc53b87e25d4926a9e7495c2e",
"revisionTime": "2016-07-29T00:51:21Z",
"version": "v1.2.10",
"versionExact": "v1.2.10"
"revision": "13d7266e75bd078dd0e904106be68b2e52860fd7",
"revisionTime": "2016-08-06T21:45:34Z"
},
{
"checksumSHA1": "DW5kDRWLA2yAgYh9vsI+0uVqq/Q=",
"path": "github.com/aws/aws-sdk-go/service/simpledb",
"revision": "3b8c171554fc7d4fc53b87e25d4926a9e7495c2e",
"revisionTime": "2016-07-29T00:51:21Z",
"version": "v1.2.10",
"versionExact": "v1.2.10"
"revision": "13d7266e75bd078dd0e904106be68b2e52860fd7",
"revisionTime": "2016-08-06T21:45:34Z"
},
{
"checksumSHA1": "+ic7vevBfganFLENR29pJaEf4Tw=",
"comment": "v1.1.23",
"path": "github.com/aws/aws-sdk-go/service/sns",
"revision": "3b8c171554fc7d4fc53b87e25d4926a9e7495c2e",
"revisionTime": "2016-07-29T00:51:21Z",
"version": "v1.2.10",
"versionExact": "v1.2.10"
"revision": "13d7266e75bd078dd0e904106be68b2e52860fd7",
"revisionTime": "2016-08-06T21:45:34Z"
},
{
"checksumSHA1": "oLAlquYlQzgYFS9ochS/iQ9+uXY=",
"comment": "v1.1.23",
"path": "github.com/aws/aws-sdk-go/service/sqs",
"revision": "3b8c171554fc7d4fc53b87e25d4926a9e7495c2e",
"revisionTime": "2016-07-29T00:51:21Z",
"version": "v1.2.10",
"versionExact": "v1.2.10"
"revision": "13d7266e75bd078dd0e904106be68b2e52860fd7",
"revisionTime": "2016-08-06T21:45:34Z"
},
{
"checksumSHA1": "nH/itbdeFHpl4ysegdtgww9bFSA=",
"comment": "v1.1.23",
"path": "github.com/aws/aws-sdk-go/service/sts",
"revision": "3b8c171554fc7d4fc53b87e25d4926a9e7495c2e",
"revisionTime": "2016-07-29T00:51:21Z",
"version": "v1.2.10",
"versionExact": "v1.2.10"
"revision": "13d7266e75bd078dd0e904106be68b2e52860fd7",
"revisionTime": "2016-08-06T21:45:34Z"
},
{
"path": "github.com/bgentry/speakeasy",