2021-10-17 17:15:44 +00:00
|
|
|
// Code generated by smithy-go-codegen DO NOT EDIT.
|
|
|
|
|
|
|
|
package sagemaker
|
|
|
|
|
|
|
|
import (
|
|
|
|
"context"
|
|
|
|
cryptorand "crypto/rand"
|
|
|
|
"github.com/aws/aws-sdk-go-v2/aws"
|
|
|
|
awsmiddleware "github.com/aws/aws-sdk-go-v2/aws/middleware"
|
|
|
|
"github.com/aws/aws-sdk-go-v2/aws/retry"
|
|
|
|
"github.com/aws/aws-sdk-go-v2/aws/signer/v4"
|
|
|
|
awshttp "github.com/aws/aws-sdk-go-v2/aws/transport/http"
|
2021-11-24 18:10:52 +00:00
|
|
|
internalConfig "github.com/aws/aws-sdk-go-v2/internal/configsources"
|
2021-10-17 17:15:44 +00:00
|
|
|
smithy "github.com/aws/smithy-go"
|
|
|
|
smithydocument "github.com/aws/smithy-go/document"
|
|
|
|
"github.com/aws/smithy-go/logging"
|
|
|
|
"github.com/aws/smithy-go/middleware"
|
|
|
|
smithyrand "github.com/aws/smithy-go/rand"
|
|
|
|
smithyhttp "github.com/aws/smithy-go/transport/http"
|
|
|
|
"net/http"
|
|
|
|
"time"
|
|
|
|
)
|
|
|
|
|
|
|
|
const ServiceID = "SageMaker"
|
|
|
|
const ServiceAPIVersion = "2017-07-24"
|
|
|
|
|
|
|
|
// Client provides the API client to make operations call for Amazon SageMaker
|
|
|
|
// Service.
|
|
|
|
type Client struct {
|
|
|
|
options Options
|
|
|
|
}
|
|
|
|
|
|
|
|
// New returns an initialized Client based on the functional options. Provide
|
|
|
|
// additional functional options to further configure the behavior of the client,
|
|
|
|
// such as changing the client's endpoint or adding custom middleware behavior.
|
|
|
|
func New(options Options, optFns ...func(*Options)) *Client {
|
|
|
|
options = options.Copy()
|
|
|
|
|
|
|
|
resolveDefaultLogger(&options)
|
|
|
|
|
|
|
|
resolveRetryer(&options)
|
|
|
|
|
|
|
|
resolveHTTPClient(&options)
|
|
|
|
|
|
|
|
resolveHTTPSignerV4(&options)
|
|
|
|
|
|
|
|
resolveDefaultEndpointConfiguration(&options)
|
|
|
|
|
|
|
|
resolveIdempotencyTokenProvider(&options)
|
|
|
|
|
|
|
|
for _, fn := range optFns {
|
|
|
|
fn(&options)
|
|
|
|
}
|
|
|
|
|
|
|
|
client := &Client{
|
|
|
|
options: options,
|
|
|
|
}
|
|
|
|
|
|
|
|
return client
|
|
|
|
}
|
|
|
|
|
|
|
|
type Options struct {
|
|
|
|
// Set of options to modify how an operation is invoked. These apply to all
|
|
|
|
// operations invoked for this client. Use functional options on operation call to
|
|
|
|
// modify this list for per operation behavior.
|
|
|
|
APIOptions []func(*middleware.Stack) error
|
|
|
|
|
|
|
|
// Configures the events that will be sent to the configured logger.
|
|
|
|
ClientLogMode aws.ClientLogMode
|
|
|
|
|
|
|
|
// The credentials object to use when signing requests.
|
|
|
|
Credentials aws.CredentialsProvider
|
|
|
|
|
|
|
|
// The endpoint options to be used when attempting to resolve an endpoint.
|
|
|
|
EndpointOptions EndpointResolverOptions
|
|
|
|
|
|
|
|
// The service endpoint resolver.
|
|
|
|
EndpointResolver EndpointResolver
|
|
|
|
|
|
|
|
// Signature Version 4 (SigV4) Signer
|
|
|
|
HTTPSignerV4 HTTPSignerV4
|
|
|
|
|
|
|
|
// Provides idempotency tokens values that will be automatically populated into
|
|
|
|
// idempotent API operations.
|
|
|
|
IdempotencyTokenProvider IdempotencyTokenProvider
|
|
|
|
|
|
|
|
// The logger writer interface to write logging messages to.
|
|
|
|
Logger logging.Logger
|
|
|
|
|
|
|
|
// The region to send requests to. (Required)
|
|
|
|
Region string
|
|
|
|
|
|
|
|
// Retryer guides how HTTP requests should be retried in case of recoverable
|
|
|
|
// failures. When nil the API client will use a default retryer.
|
|
|
|
Retryer aws.Retryer
|
|
|
|
|
|
|
|
// The HTTP client to invoke API calls with. Defaults to client's default HTTP
|
|
|
|
// implementation if nil.
|
|
|
|
HTTPClient HTTPClient
|
|
|
|
}
|
|
|
|
|
|
|
|
// WithAPIOptions returns a functional option for setting the Client's APIOptions
|
|
|
|
// option.
|
|
|
|
func WithAPIOptions(optFns ...func(*middleware.Stack) error) func(*Options) {
|
|
|
|
return func(o *Options) {
|
|
|
|
o.APIOptions = append(o.APIOptions, optFns...)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
// WithEndpointResolver returns a functional option for setting the Client's
|
|
|
|
// EndpointResolver option.
|
|
|
|
func WithEndpointResolver(v EndpointResolver) func(*Options) {
|
|
|
|
return func(o *Options) {
|
|
|
|
o.EndpointResolver = v
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
type HTTPClient interface {
|
|
|
|
Do(*http.Request) (*http.Response, error)
|
|
|
|
}
|
|
|
|
|
|
|
|
// Copy creates a clone where the APIOptions list is deep copied.
|
|
|
|
func (o Options) Copy() Options {
|
|
|
|
to := o
|
|
|
|
to.APIOptions = make([]func(*middleware.Stack) error, len(o.APIOptions))
|
|
|
|
copy(to.APIOptions, o.APIOptions)
|
|
|
|
return to
|
|
|
|
}
|
|
|
|
func (c *Client) invokeOperation(ctx context.Context, opID string, params interface{}, optFns []func(*Options), stackFns ...func(*middleware.Stack, Options) error) (result interface{}, metadata middleware.Metadata, err error) {
|
|
|
|
ctx = middleware.ClearStackValues(ctx)
|
|
|
|
stack := middleware.NewStack(opID, smithyhttp.NewStackRequest)
|
|
|
|
options := c.options.Copy()
|
|
|
|
for _, fn := range optFns {
|
|
|
|
fn(&options)
|
|
|
|
}
|
|
|
|
|
2021-11-24 18:10:52 +00:00
|
|
|
finalizeClientEndpointResolverOptions(&options)
|
|
|
|
|
2021-10-17 17:15:44 +00:00
|
|
|
for _, fn := range stackFns {
|
|
|
|
if err := fn(stack, options); err != nil {
|
|
|
|
return nil, metadata, err
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
for _, fn := range options.APIOptions {
|
|
|
|
if err := fn(stack); err != nil {
|
|
|
|
return nil, metadata, err
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
handler := middleware.DecorateHandler(smithyhttp.NewClientHandler(options.HTTPClient), stack)
|
|
|
|
result, metadata, err = handler.Handle(ctx, params)
|
|
|
|
if err != nil {
|
|
|
|
err = &smithy.OperationError{
|
|
|
|
ServiceID: ServiceID,
|
|
|
|
OperationName: opID,
|
|
|
|
Err: err,
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return result, metadata, err
|
|
|
|
}
|
|
|
|
|
|
|
|
type noSmithyDocumentSerde = smithydocument.NoSerde
|
|
|
|
|
|
|
|
func resolveDefaultLogger(o *Options) {
|
|
|
|
if o.Logger != nil {
|
|
|
|
return
|
|
|
|
}
|
|
|
|
o.Logger = logging.Nop{}
|
|
|
|
}
|
|
|
|
|
|
|
|
func addSetLoggerMiddleware(stack *middleware.Stack, o Options) error {
|
|
|
|
return middleware.AddSetLoggerMiddleware(stack, o.Logger)
|
|
|
|
}
|
|
|
|
|
|
|
|
// NewFromConfig returns a new client from the provided config.
|
|
|
|
func NewFromConfig(cfg aws.Config, optFns ...func(*Options)) *Client {
|
|
|
|
opts := Options{
|
|
|
|
Region: cfg.Region,
|
|
|
|
HTTPClient: cfg.HTTPClient,
|
|
|
|
Credentials: cfg.Credentials,
|
|
|
|
APIOptions: cfg.APIOptions,
|
|
|
|
Logger: cfg.Logger,
|
|
|
|
ClientLogMode: cfg.ClientLogMode,
|
|
|
|
}
|
|
|
|
resolveAWSRetryerProvider(cfg, &opts)
|
|
|
|
resolveAWSEndpointResolver(cfg, &opts)
|
2021-11-24 18:10:52 +00:00
|
|
|
resolveUseDualStackEndpoint(cfg, &opts)
|
|
|
|
resolveUseFIPSEndpoint(cfg, &opts)
|
2021-10-17 17:15:44 +00:00
|
|
|
return New(opts, optFns...)
|
|
|
|
}
|
|
|
|
|
|
|
|
func resolveHTTPClient(o *Options) {
|
|
|
|
if o.HTTPClient != nil {
|
|
|
|
return
|
|
|
|
}
|
|
|
|
o.HTTPClient = awshttp.NewBuildableClient()
|
|
|
|
}
|
|
|
|
|
|
|
|
func resolveRetryer(o *Options) {
|
|
|
|
if o.Retryer != nil {
|
|
|
|
return
|
|
|
|
}
|
|
|
|
o.Retryer = retry.NewStandard()
|
|
|
|
}
|
|
|
|
|
|
|
|
func resolveAWSRetryerProvider(cfg aws.Config, o *Options) {
|
|
|
|
if cfg.Retryer == nil {
|
|
|
|
return
|
|
|
|
}
|
|
|
|
o.Retryer = cfg.Retryer()
|
|
|
|
}
|
|
|
|
|
|
|
|
func resolveAWSEndpointResolver(cfg aws.Config, o *Options) {
|
|
|
|
if cfg.EndpointResolver == nil {
|
|
|
|
return
|
|
|
|
}
|
2021-11-24 18:10:52 +00:00
|
|
|
o.EndpointResolver = withEndpointResolver(cfg.EndpointResolver, cfg.EndpointResolverWithOptions, NewDefaultEndpointResolver())
|
2021-10-17 17:15:44 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
func addClientUserAgent(stack *middleware.Stack) error {
|
|
|
|
return awsmiddleware.AddSDKAgentKeyValue(awsmiddleware.APIMetadata, "sagemaker", goModuleVersion)(stack)
|
|
|
|
}
|
|
|
|
|
|
|
|
func addHTTPSignerV4Middleware(stack *middleware.Stack, o Options) error {
|
|
|
|
mw := v4.NewSignHTTPRequestMiddleware(v4.SignHTTPRequestMiddlewareOptions{
|
|
|
|
CredentialsProvider: o.Credentials,
|
|
|
|
Signer: o.HTTPSignerV4,
|
|
|
|
LogSigning: o.ClientLogMode.IsSigning(),
|
|
|
|
})
|
|
|
|
return stack.Finalize.Add(mw, middleware.After)
|
|
|
|
}
|
|
|
|
|
|
|
|
type HTTPSignerV4 interface {
|
|
|
|
SignHTTP(ctx context.Context, credentials aws.Credentials, r *http.Request, payloadHash string, service string, region string, signingTime time.Time, optFns ...func(*v4.SignerOptions)) error
|
|
|
|
}
|
|
|
|
|
|
|
|
func resolveHTTPSignerV4(o *Options) {
|
|
|
|
if o.HTTPSignerV4 != nil {
|
|
|
|
return
|
|
|
|
}
|
|
|
|
o.HTTPSignerV4 = newDefaultV4Signer(*o)
|
|
|
|
}
|
|
|
|
|
|
|
|
func newDefaultV4Signer(o Options) *v4.Signer {
|
|
|
|
return v4.NewSigner(func(so *v4.SignerOptions) {
|
|
|
|
so.Logger = o.Logger
|
|
|
|
so.LogSigning = o.ClientLogMode.IsSigning()
|
|
|
|
})
|
|
|
|
}
|
|
|
|
|
|
|
|
func resolveIdempotencyTokenProvider(o *Options) {
|
|
|
|
if o.IdempotencyTokenProvider != nil {
|
|
|
|
return
|
|
|
|
}
|
|
|
|
o.IdempotencyTokenProvider = smithyrand.NewUUIDIdempotencyToken(cryptorand.Reader)
|
|
|
|
}
|
|
|
|
|
|
|
|
func addRetryMiddlewares(stack *middleware.Stack, o Options) error {
|
|
|
|
mo := retry.AddRetryMiddlewaresOptions{
|
|
|
|
Retryer: o.Retryer,
|
|
|
|
LogRetryAttempts: o.ClientLogMode.IsRetries(),
|
|
|
|
}
|
|
|
|
return retry.AddRetryMiddlewares(stack, mo)
|
|
|
|
}
|
|
|
|
|
2021-11-24 18:10:52 +00:00
|
|
|
// resolves dual-stack endpoint configuration
|
|
|
|
func resolveUseDualStackEndpoint(cfg aws.Config, o *Options) error {
|
|
|
|
if len(cfg.ConfigSources) == 0 {
|
|
|
|
return nil
|
|
|
|
}
|
|
|
|
value, found, err := internalConfig.ResolveUseDualStackEndpoint(context.Background(), cfg.ConfigSources)
|
|
|
|
if err != nil {
|
|
|
|
return err
|
|
|
|
}
|
|
|
|
if found {
|
|
|
|
o.EndpointOptions.UseDualStackEndpoint = value
|
|
|
|
}
|
|
|
|
return nil
|
|
|
|
}
|
|
|
|
|
|
|
|
// resolves FIPS endpoint configuration
|
|
|
|
func resolveUseFIPSEndpoint(cfg aws.Config, o *Options) error {
|
|
|
|
if len(cfg.ConfigSources) == 0 {
|
|
|
|
return nil
|
|
|
|
}
|
|
|
|
value, found, err := internalConfig.ResolveUseFIPSEndpoint(context.Background(), cfg.ConfigSources)
|
|
|
|
if err != nil {
|
|
|
|
return err
|
|
|
|
}
|
|
|
|
if found {
|
|
|
|
o.EndpointOptions.UseFIPSEndpoint = value
|
|
|
|
}
|
|
|
|
return nil
|
|
|
|
}
|
|
|
|
|
2021-10-17 17:15:44 +00:00
|
|
|
// IdempotencyTokenProvider interface for providing idempotency token
|
|
|
|
type IdempotencyTokenProvider interface {
|
|
|
|
GetIdempotencyToken() (string, error)
|
|
|
|
}
|
|
|
|
|
|
|
|
func addRequestIDRetrieverMiddleware(stack *middleware.Stack) error {
|
|
|
|
return awsmiddleware.AddRequestIDRetrieverMiddleware(stack)
|
|
|
|
}
|
|
|
|
|
|
|
|
func addResponseErrorMiddleware(stack *middleware.Stack) error {
|
|
|
|
return awshttp.AddResponseErrorMiddleware(stack)
|
|
|
|
}
|
|
|
|
|
|
|
|
func addRequestResponseLogging(stack *middleware.Stack, o Options) error {
|
|
|
|
return stack.Deserialize.Add(&smithyhttp.RequestResponseLogger{
|
|
|
|
LogRequest: o.ClientLogMode.IsRequest(),
|
|
|
|
LogRequestWithBody: o.ClientLogMode.IsRequestWithBody(),
|
|
|
|
LogResponse: o.ClientLogMode.IsResponse(),
|
|
|
|
LogResponseWithBody: o.ClientLogMode.IsResponseWithBody(),
|
|
|
|
}, middleware.After)
|
|
|
|
}
|