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