github.com/aavshr/aws-sdk-go@v1.41.3/doc.go (about)

     1  // Package sdk is the official AWS SDK for the Go programming language.
     2  //
     3  // The AWS SDK for Go provides APIs and utilities that developers can use to
     4  // build Go applications that use AWS services, such as Amazon Elastic Compute
     5  // Cloud (Amazon EC2) and Amazon Simple Storage Service (Amazon S3).
     6  //
     7  // The SDK removes the complexity of coding directly against a web service
     8  // interface. It hides a lot of the lower-level plumbing, such as authentication,
     9  // request retries, and error handling.
    10  //
    11  // The SDK also includes helpful utilities on top of the AWS APIs that add additional
    12  // capabilities and functionality. For example, the Amazon S3 Download and Upload
    13  // Manager will automatically split up large objects into multiple parts and
    14  // transfer them concurrently.
    15  //
    16  // See the s3manager package documentation for more information.
    17  // https://docs.aws.amazon.com/sdk-for-go/api/service/s3/s3manager/
    18  //
    19  // Getting More Information
    20  //
    21  // Checkout the Getting Started Guide and API Reference Docs detailed the SDK's
    22  // components and details on each AWS client the SDK supports.
    23  //
    24  // The Getting Started Guide provides examples and detailed description of how
    25  // to get setup with the SDK.
    26  // https://docs.aws.amazon.com/sdk-for-go/v1/developer-guide/welcome.html
    27  //
    28  // The API Reference Docs include a detailed breakdown of the SDK's components
    29  // such as utilities and AWS clients. Use this as a reference of the Go types
    30  // included with the SDK, such as AWS clients, API operations, and API parameters.
    31  // https://docs.aws.amazon.com/sdk-for-go/api/
    32  //
    33  // Overview of SDK's Packages
    34  //
    35  // The SDK is composed of two main components, SDK core, and service clients.
    36  // The SDK core packages are all available under the aws package at the root of
    37  // the SDK. Each client for a supported AWS service is available within its own
    38  // package under the service folder at the root of the SDK.
    39  //
    40  //   * aws - SDK core, provides common shared types such as Config, Logger,
    41  //     and utilities to make working with API parameters easier.
    42  //
    43  //       * awserr - Provides the error interface that the SDK will use for all
    44  //         errors that occur in the SDK's processing. This includes service API
    45  //         response errors as well. The Error type is made up of a code and message.
    46  //         Cast the SDK's returned error type to awserr.Error and call the Code
    47  //         method to compare returned error to specific error codes. See the package's
    48  //         documentation for additional values that can be extracted such as RequestId.
    49  //
    50  //       * credentials - Provides the types and built in credentials providers
    51  //         the SDK will use to retrieve AWS credentials to make API requests with.
    52  //         Nested under this folder are also additional credentials providers such as
    53  //         stscreds for assuming IAM roles, and ec2rolecreds for EC2 Instance roles.
    54  //
    55  //       * endpoints - Provides the AWS Regions and Endpoints metadata for the SDK.
    56  //         Use this to lookup AWS service endpoint information such as which services
    57  //         are in a region, and what regions a service is in. Constants are also provided
    58  //         for all region identifiers, e.g UsWest2RegionID for "us-west-2".
    59  //
    60  //       * session - Provides initial default configuration, and load
    61  //         configuration from external sources such as environment and shared
    62  //         credentials file.
    63  //
    64  //       * request - Provides the API request sending, and retry logic for the SDK.
    65  //         This package also includes utilities for defining your own request
    66  //         retryer, and configuring how the SDK processes the request.
    67  //
    68  //   * service - Clients for AWS services. All services supported by the SDK are
    69  //     available under this folder.
    70  //
    71  // How to Use the SDK's AWS Service Clients
    72  //
    73  // The SDK includes the Go types and utilities you can use to make requests to
    74  // AWS service APIs. Within the service folder at the root of the SDK you'll find
    75  // a package for each AWS service the SDK supports. All service clients follows
    76  // a common pattern of creation and usage.
    77  //
    78  // When creating a client for an AWS service you'll first need to have a Session
    79  // value constructed. The Session provides shared configuration that can be shared
    80  // between your service clients. When service clients are created you can pass
    81  // in additional configuration via the aws.Config type to override configuration
    82  // provided by in the Session to create service client instances with custom
    83  // configuration.
    84  //
    85  // Once the service's client is created you can use it to make API requests the
    86  // AWS service. These clients are safe to use concurrently.
    87  //
    88  // Configuring the SDK
    89  //
    90  // In the AWS SDK for Go, you can configure settings for service clients, such
    91  // as the log level and maximum number of retries. Most settings are optional;
    92  // however, for each service client, you must specify a region and your credentials.
    93  // The SDK uses these values to send requests to the correct AWS region and sign
    94  // requests with the correct credentials. You can specify these values as part
    95  // of a session or as environment variables.
    96  //
    97  // See the SDK's configuration guide for more information.
    98  // https://docs.aws.amazon.com/sdk-for-go/v1/developer-guide/configuring-sdk.html
    99  //
   100  // See the session package documentation for more information on how to use Session
   101  // with the SDK.
   102  // https://docs.aws.amazon.com/sdk-for-go/api/aws/session/
   103  //
   104  // See the Config type in the aws package for more information on configuration
   105  // options.
   106  // https://docs.aws.amazon.com/sdk-for-go/api/aws/#Config
   107  //
   108  // Configuring Credentials
   109  //
   110  // When using the SDK you'll generally need your AWS credentials to authenticate
   111  // with AWS services. The SDK supports multiple methods of supporting these
   112  // credentials. By default the SDK will source credentials automatically from
   113  // its default credential chain. See the session package for more information
   114  // on this chain, and how to configure it. The common items in the credential
   115  // chain are the following:
   116  //
   117  //   * Environment Credentials - Set of environment variables that are useful
   118  //     when sub processes are created for specific roles.
   119  //
   120  //   * Shared Credentials file (~/.aws/credentials) - This file stores your
   121  //     credentials based on a profile name and is useful for local development.
   122  //
   123  //   * EC2 Instance Role Credentials - Use EC2 Instance Role to assign credentials
   124  //     to application running on an EC2 instance. This removes the need to manage
   125  //     credential files in production.
   126  //
   127  // Credentials can be configured in code as well by setting the Config's Credentials
   128  // value to a custom provider or using one of the providers included with the
   129  // SDK to bypass the default credential chain and use a custom one. This is
   130  // helpful when you want to instruct the SDK to only use a specific set of
   131  // credentials or providers.
   132  //
   133  // This example creates a credential provider for assuming an IAM role, "myRoleARN"
   134  // and configures the S3 service client to use that role for API requests.
   135  //
   136  //   // Initial credentials loaded from SDK's default credential chain. Such as
   137  //   // the environment, shared credentials (~/.aws/credentials), or EC2 Instance
   138  //   // Role. These credentials will be used to to make the STS Assume Role API.
   139  //   sess := session.Must(session.NewSession())
   140  //
   141  //   // Create the credentials from AssumeRoleProvider to assume the role
   142  //   // referenced by the "myRoleARN" ARN.
   143  //   creds := stscreds.NewCredentials(sess, "myRoleArn")
   144  //
   145  //   // Create service client value configured for credentials
   146  //   // from assumed role.
   147  //   svc := s3.New(sess, &aws.Config{Credentials: creds})/
   148  //
   149  // See the credentials package documentation for more information on credential
   150  // providers included with the SDK, and how to customize the SDK's usage of
   151  // credentials.
   152  // https://docs.aws.amazon.com/sdk-for-go/api/aws/credentials
   153  //
   154  // The SDK has support for the shared configuration file (~/.aws/config). This
   155  // support can be enabled by setting the environment variable, "AWS_SDK_LOAD_CONFIG=1",
   156  // or enabling the feature in code when creating a Session via the
   157  // Option's SharedConfigState parameter.
   158  //
   159  //   sess := session.Must(session.NewSessionWithOptions(session.Options{
   160  //       SharedConfigState: session.SharedConfigEnable,
   161  //   }))
   162  //
   163  // Configuring AWS Region
   164  //
   165  // In addition to the credentials you'll need to specify the region the SDK
   166  // will use to make AWS API requests to. In the SDK you can specify the region
   167  // either with an environment variable, or directly in code when a Session or
   168  // service client is created. The last value specified in code wins if the region
   169  // is specified multiple ways.
   170  //
   171  // To set the region via the environment variable set the "AWS_REGION" to the
   172  // region you want to the SDK to use. Using this method to set the region will
   173  // allow you to run your application in multiple regions without needing additional
   174  // code in the application to select the region.
   175  //
   176  //   AWS_REGION=us-west-2
   177  //
   178  // The endpoints package includes constants for all regions the SDK knows. The
   179  // values are all suffixed with RegionID. These values are helpful, because they
   180  // reduce the need to type the region string manually.
   181  //
   182  // To set the region on a Session use the aws package's Config struct parameter
   183  // Region to the AWS region you want the service clients created from the session to
   184  // use. This is helpful when you want to create multiple service clients, and
   185  // all of the clients make API requests to the same region.
   186  //
   187  //   sess := session.Must(session.NewSession(&aws.Config{
   188  //       Region: aws.String(endpoints.UsWest2RegionID),
   189  //   }))
   190  //
   191  // See the endpoints package for the AWS Regions and Endpoints metadata.
   192  // https://docs.aws.amazon.com/sdk-for-go/api/aws/endpoints/
   193  //
   194  // In addition to setting the region when creating a Session you can also set
   195  // the region on a per service client bases. This overrides the region of a
   196  // Session. This is helpful when you want to create service clients in specific
   197  // regions different from the Session's region.
   198  //
   199  //   svc := s3.New(sess, &aws.Config{
   200  //       Region: aws.String(endpoints.UsWest2RegionID),
   201  //   })
   202  //
   203  // See the Config type in the aws package for more information and additional
   204  // options such as setting the Endpoint, and other service client configuration options.
   205  // https://docs.aws.amazon.com/sdk-for-go/api/aws/#Config
   206  //
   207  // Making API Requests
   208  //
   209  // Once the client is created you can make an API request to the service.
   210  // Each API method takes a input parameter, and returns the service response
   211  // and an error. The SDK provides methods for making the API call in multiple ways.
   212  //
   213  // In this list we'll use the S3 ListObjects API as an example for the different
   214  // ways of making API requests.
   215  //
   216  //   * ListObjects - Base API operation that will make the API request to the service.
   217  //
   218  //   * ListObjectsRequest - API methods suffixed with Request will construct the
   219  //     API request, but not send it. This is also helpful when you want to get a
   220  //     presigned URL for a request, and share the presigned URL instead of your
   221  //     application making the request directly.
   222  //
   223  //   * ListObjectsPages - Same as the base API operation, but uses a callback to
   224  //     automatically handle pagination of the API's response.
   225  //
   226  //   * ListObjectsWithContext - Same as base API operation, but adds support for
   227  //     the Context pattern. This is helpful for controlling the canceling of in
   228  //     flight requests. See the Go standard library context package for more
   229  //     information. This method also takes request package's Option functional
   230  //     options as the variadic argument for modifying how the request will be
   231  //     made, or extracting information from the raw HTTP response.
   232  //
   233  //   * ListObjectsPagesWithContext - same as ListObjectsPages, but adds support for
   234  //     the Context pattern. Similar to ListObjectsWithContext this method also
   235  //     takes the request package's Option function option types as the variadic
   236  //     argument.
   237  //
   238  // In addition to the API operations the SDK also includes several higher level
   239  // methods that abstract checking for and waiting for an AWS resource to be in
   240  // a desired state. In this list we'll use WaitUntilBucketExists to demonstrate
   241  // the different forms of waiters.
   242  //
   243  //   * WaitUntilBucketExists. - Method to make API request to query an AWS service for
   244  //     a resource's state. Will return successfully when that state is accomplished.
   245  //
   246  //   * WaitUntilBucketExistsWithContext - Same as WaitUntilBucketExists, but adds
   247  //     support for the Context pattern. In addition these methods take request
   248  //     package's WaiterOptions to configure the waiter, and how underlying request
   249  //     will be made by the SDK.
   250  //
   251  // The API method will document which error codes the service might return for
   252  // the operation. These errors will also be available as const strings prefixed
   253  // with "ErrCode" in the service client's package. If there are no errors listed
   254  // in the API's SDK documentation you'll need to consult the AWS service's API
   255  // documentation for the errors that could be returned.
   256  //
   257  //   ctx := context.Background()
   258  //
   259  //   result, err := svc.GetObjectWithContext(ctx, &s3.GetObjectInput{
   260  //       Bucket: aws.String("my-bucket"),
   261  //       Key: aws.String("my-key"),
   262  //   })
   263  //   if err != nil {
   264  //       // Cast err to awserr.Error to handle specific error codes.
   265  //       aerr, ok := err.(awserr.Error)
   266  //       if ok && aerr.Code() == s3.ErrCodeNoSuchKey {
   267  //           // Specific error code handling
   268  //       }
   269  //       return err
   270  //   }
   271  //
   272  //   // Make sure to close the body when done with it for S3 GetObject APIs or
   273  //   // will leak connections.
   274  //   defer result.Body.Close()
   275  //
   276  //   fmt.Println("Object Size:", aws.StringValue(result.ContentLength))
   277  //
   278  // API Request Pagination and Resource Waiters
   279  //
   280  // Pagination helper methods are suffixed with "Pages", and provide the
   281  // functionality needed to round trip API page requests. Pagination methods
   282  // take a callback function that will be called for each page of the API's response.
   283  //
   284  //    objects := []string{}
   285  //    err := svc.ListObjectsPagesWithContext(ctx, &s3.ListObjectsInput{
   286  //        Bucket: aws.String(myBucket),
   287  //    }, func(p *s3.ListObjectsOutput, lastPage bool) bool {
   288  //        for _, o := range p.Contents {
   289  //            objects = append(objects, aws.StringValue(o.Key))
   290  //        }
   291  //        return true // continue paging
   292  //    })
   293  //    if err != nil {
   294  //        panic(fmt.Sprintf("failed to list objects for bucket, %s, %v", myBucket, err))
   295  //    }
   296  //
   297  //    fmt.Println("Objects in bucket:", objects)
   298  //
   299  // Waiter helper methods provide the functionality to wait for an AWS resource
   300  // state. These methods abstract the logic needed to to check the state of an
   301  // AWS resource, and wait until that resource is in a desired state. The waiter
   302  // will block until the resource is in the state that is desired, an error occurs,
   303  // or the waiter times out. If a resource times out the error code returned will
   304  // be request.WaiterResourceNotReadyErrorCode.
   305  //
   306  //   err := svc.WaitUntilBucketExistsWithContext(ctx, &s3.HeadBucketInput{
   307  //       Bucket: aws.String(myBucket),
   308  //   })
   309  //   if err != nil {
   310  //       aerr, ok := err.(awserr.Error)
   311  //       if ok && aerr.Code() == request.WaiterResourceNotReadyErrorCode {
   312  //           fmt.Fprintf(os.Stderr, "timed out while waiting for bucket to exist")
   313  //       }
   314  //       panic(fmt.Errorf("failed to wait for bucket to exist, %v", err))
   315  //   }
   316  //   fmt.Println("Bucket", myBucket, "exists")
   317  //
   318  // Complete SDK Example
   319  //
   320  // This example shows a complete working Go file which will upload a file to S3
   321  // and use the Context pattern to implement timeout logic that will cancel the
   322  // request if it takes too long. This example highlights how to use sessions,
   323  // create a service client, make a request, handle the error, and process the
   324  // response.
   325  //
   326  //   package main
   327  //
   328  //   import (
   329  //   	"context"
   330  //   	"flag"
   331  //   	"fmt"
   332  //   	"os"
   333  //   	"time"
   334  //
   335  //   	"github.com/aavshr/aws-sdk-go/aws"
   336  //   	"github.com/aavshr/aws-sdk-go/aws/awserr"
   337  //   	"github.com/aavshr/aws-sdk-go/aws/request"
   338  //   	"github.com/aavshr/aws-sdk-go/aws/session"
   339  //   	"github.com/aavshr/aws-sdk-go/service/s3"
   340  //   )
   341  //
   342  //   // Uploads a file to S3 given a bucket and object key. Also takes a duration
   343  //   // value to terminate the update if it doesn't complete within that time.
   344  //   //
   345  //   // The AWS Region needs to be provided in the AWS shared config or on the
   346  //   // environment variable as `AWS_REGION`. Credentials also must be provided
   347  //   // Will default to shared config file, but can load from environment if provided.
   348  //   //
   349  //   // Usage:
   350  //   //   # Upload myfile.txt to myBucket/myKey. Must complete within 10 minutes or will fail
   351  //   //   go run withContext.go -b mybucket -k myKey -d 10m < myfile.txt
   352  //   func main() {
   353  //   	var bucket, key string
   354  //   	var timeout time.Duration
   355  //
   356  //   	flag.StringVar(&bucket, "b", "", "Bucket name.")
   357  //   	flag.StringVar(&key, "k", "", "Object key name.")
   358  //   	flag.DurationVar(&timeout, "d", 0, "Upload timeout.")
   359  //   	flag.Parse()
   360  //
   361  //   	// All clients require a Session. The Session provides the client with
   362  //  	// shared configuration such as region, endpoint, and credentials. A
   363  //  	// Session should be shared where possible to take advantage of
   364  //  	// configuration and credential caching. See the session package for
   365  //  	// more information.
   366  //   	sess := session.Must(session.NewSession())
   367  //
   368  //  	// Create a new instance of the service's client with a Session.
   369  //  	// Optional aws.Config values can also be provided as variadic arguments
   370  //  	// to the New function. This option allows you to provide service
   371  //  	// specific configuration.
   372  //   	svc := s3.New(sess)
   373  //
   374  //   	// Create a context with a timeout that will abort the upload if it takes
   375  //   	// more than the passed in timeout.
   376  //   	ctx := context.Background()
   377  //   	var cancelFn func()
   378  //   	if timeout > 0 {
   379  //   		ctx, cancelFn = context.WithTimeout(ctx, timeout)
   380  //   	}
   381  //   	// Ensure the context is canceled to prevent leaking.
   382  //   	// See context package for more information, https://golang.org/pkg/context/
   383  //   	defer cancelFn()
   384  //
   385  //   	// Uploads the object to S3. The Context will interrupt the request if the
   386  //   	// timeout expires.
   387  //   	_, err := svc.PutObjectWithContext(ctx, &s3.PutObjectInput{
   388  //   		Bucket: aws.String(bucket),
   389  //   		Key:    aws.String(key),
   390  //   		Body:   os.Stdin,
   391  //   	})
   392  //   	if err != nil {
   393  //   		if aerr, ok := err.(awserr.Error); ok && aerr.Code() == request.CanceledErrorCode {
   394  //   			// If the SDK can determine the request or retry delay was canceled
   395  //   			// by a context the CanceledErrorCode error code will be returned.
   396  //   			fmt.Fprintf(os.Stderr, "upload canceled due to timeout, %v\n", err)
   397  //   		} else {
   398  //   			fmt.Fprintf(os.Stderr, "failed to upload object, %v\n", err)
   399  //   		}
   400  //   		os.Exit(1)
   401  //   	}
   402  //
   403  //   	fmt.Printf("successfully uploaded file to %s/%s\n", bucket, key)
   404  //   }
   405  package sdk
   406  
   407  import (
   408  	"github.com/jmespath/go-jmespath"
   409  )
   410  
   411  const _ = jmespath.ASTEmpty