AWS SDK for Go v2 with 130+ service clients, Request/Send pattern, and context support.
All 139 AWS service clients follow the same pattern. Each is in its own package under github.com/aws/aws-sdk-go-v2/service/<name>.
// All service clients:
import "github.com/aws/aws-sdk-go-v2/service/<service>"
// Constructor
func New(config aws.Config) *<ServiceName>
// Each API operation:
func (c *<ServiceName>) <OperationName>Request(input *<OperationName>Input) <OperationName>Request
// Typed request
type <OperationName>Request struct {
Input *<OperationName>Input
Copy func(*<OperationName>Input) <OperationName>Request
// unexported aws.Request
}
func (r <OperationName>Request) Send() (*<OperationName>Output, error)
func (r <OperationName>Request) Presign(expireTime time.Duration) (string, error)
// Pager (for paginated operations)
type <OperationName>Pager struct { ... }
func (r <OperationName>Request) Paginate() *<OperationName>Pager
func (p *<OperationName>Pager) Next() bool
func (p *<OperationName>Pager) CurrentPage() *<OperationName>Output
func (p *<OperationName>Pager) Err() error
// Waiters (service-specific)
func (c *<ServiceName>) WaitUntil<State>(ctx aws.Context, input *<Input>, opts ...aws.WaiterOption) errorEach service has a <service>iface sub-package with a <ServiceName>API interface for mocking:
import "github.com/aws/aws-sdk-go-v2/service/s3/s3iface"
// In test code:
type MockS3 struct { s3iface.S3API }
func (m *MockS3) GetObjectRequest(input *s3.GetObjectInput) s3.GetObjectRequest { ... }| Package Import Path | Service Name | Client Type |
|---|---|---|
service/acm | AWS Certificate Manager | ACM |
service/acmpca | ACM Private CA | ACMPCA |
service/alexaforbusiness | Alexa for Business | AlexaForBusiness |
service/apigateway | Amazon API Gateway | APIGateway |
service/applicationautoscaling | Application Auto Scaling | ApplicationAutoScaling |
service/applicationdiscoveryservice | AWS Application Discovery Service | ApplicationDiscoveryService |
service/appstream | Amazon AppStream 2.0 | AppStream |
service/appsync | AWS AppSync | AppSync |
service/athena | Amazon Athena | Athena |
service/autoscaling | Auto Scaling | AutoScaling |
service/autoscalingplans | AWS Auto Scaling Plans | AutoScalingPlans |
service/batch | AWS Batch | Batch |
service/budgets | AWS Budgets | Budgets |
service/cloud9 | AWS Cloud9 | Cloud9 |
service/clouddirectory | Amazon Cloud Directory | CloudDirectory |
service/cloudformation | AWS CloudFormation | CloudFormation |
service/cloudfront | Amazon CloudFront | CloudFront |
service/cloudhsm | AWS CloudHSM | CloudHSM |
service/cloudhsmv2 | AWS CloudHSM v2 | CloudHSMV2 |
service/cloudsearch | Amazon CloudSearch | CloudSearch |
service/cloudsearchdomain | Amazon CloudSearch Domain | CloudSearchDomain |
service/cloudtrail | AWS CloudTrail | CloudTrail |
service/cloudwatch | Amazon CloudWatch | CloudWatch |
service/cloudwatchevents | Amazon CloudWatch Events | CloudWatchEvents |
service/cloudwatchlogs | Amazon CloudWatch Logs | CloudWatchLogs |
service/codebuild | AWS CodeBuild | CodeBuild |
service/codecommit | AWS CodeCommit | CodeCommit |
service/codedeploy | AWS CodeDeploy | CodeDeploy |
service/codepipeline | AWS CodePipeline | CodePipeline |
service/codestar | AWS CodeStar | CodeStar |
service/cognitoidentity | Amazon Cognito Identity | CognitoIdentity |
service/cognitoidentityprovider | Amazon Cognito Identity Provider | CognitoIdentityProvider |
service/cognitosync | Amazon Cognito Sync | CognitoSync |
service/comprehend | Amazon Comprehend | Comprehend |
service/configservice | AWS Config | ConfigService |
service/connect | Amazon Connect | Connect |
service/costandusagereportservice | Cost and Usage Report | CostandUsageReportService |
service/costexplorer | AWS Cost Explorer | CostExplorer |
service/databasemigrationservice | AWS Database Migration Service | DatabaseMigrationService |
service/datapipeline | AWS Data Pipeline | DataPipeline |
service/dax | Amazon DynamoDB Accelerator | DAX |
service/devicefarm | AWS Device Farm | DeviceFarm |
service/directconnect | AWS Direct Connect | DirectConnect |
service/directoryservice | AWS Directory Service | DirectoryService |
service/dynamodb | Amazon DynamoDB | DynamoDB |
service/dynamodbstreams | Amazon DynamoDB Streams | DynamoDBStreams |
service/ec2 | Amazon EC2 | EC2 |
service/ecr | Amazon ECR | ECR |
service/ecs | Amazon ECS | ECS |
service/efs | Amazon EFS | EFS |
service/elasticache | Amazon ElastiCache | ElastiCache |
service/elasticbeanstalk | AWS Elastic Beanstalk | ElasticBeanstalk |
service/elasticsearchservice | Amazon Elasticsearch Service | ElasticsearchService |
service/elastictranscoder | Amazon Elastic Transcoder | ElasticTranscoder |
service/elb | Elastic Load Balancing (Classic) | ELB |
service/elbv2 | Elastic Load Balancing v2 | ELBV2 |
service/emr | Amazon EMR | EMR |
service/firehose | Amazon Kinesis Data Firehose | Firehose |
service/fms | AWS Firewall Manager | FMS |
service/gamelift | Amazon GameLift | GameLift |
service/glacier | Amazon S3 Glacier | Glacier |
service/glue | AWS Glue | Glue |
service/greengrass | AWS IoT Greengrass | Greengrass |
service/guardduty | Amazon GuardDuty | GuardDuty |
service/health | AWS Health | Health |
service/iam | AWS IAM | IAM |
service/inspector | Amazon Inspector | Inspector |
service/iot | AWS IoT Core | IoT |
service/iot1clickdevicesservice | AWS IoT 1-Click Devices | IoT1ClickDevicesService |
service/iot1clickprojects | AWS IoT 1-Click Projects | IoT1ClickProjects |
service/iotanalytics | AWS IoT Analytics | IoTAnalytics |
service/iotdataplane | AWS IoT Data Plane | IoTDataPlane |
service/iotjobsdataplane | AWS IoT Jobs Data Plane | IoTJobsDataPlane |
service/kinesis | Amazon Kinesis Data Streams | Kinesis |
service/kinesisanalytics | Amazon Kinesis Data Analytics | KinesisAnalytics |
service/kinesisvideo | Amazon Kinesis Video Streams | KinesisVideo |
service/kinesisvideoarchivedmedia | Amazon Kinesis Video Archived Media | KinesisVideoArchivedMedia |
service/kinesisvideomedia | Amazon Kinesis Video Media | KinesisVideoMedia |
service/kms | AWS Key Management Service | KMS |
service/lambda | AWS Lambda | Lambda |
service/lexmodelbuildingservice | Amazon Lex Model Building | LexModelBuildingService |
service/lexruntimeservice | Amazon Lex Runtime | LexRuntimeService |
service/lightsail | Amazon Lightsail | Lightsail |
service/machinelearning | Amazon Machine Learning | MachineLearning |
service/marketplacecommerceanalytics | AWS Marketplace Commerce Analytics | MarketplaceCommerceAnalytics |
service/marketplaceentitlementservice | AWS Marketplace Entitlement | MarketplaceEntitlementService |
service/marketplacemetering | AWS Marketplace Metering | MarketplaceMetering |
service/mediaconvert | AWS Elemental MediaConvert | MediaConvert |
service/medialive | AWS Elemental MediaLive | MediaLive |
service/mediapackage | AWS Elemental MediaPackage | MediaPackage |
service/mediastore | AWS Elemental MediaStore | MediaStore |
service/mediastoredata | AWS Elemental MediaStore Data | MediaStoreData |
service/migrationhub | AWS Migration Hub | MigrationHub |
service/mobile | AWS Mobile | Mobile |
service/mobileanalytics | Amazon Mobile Analytics | MobileAnalytics |
service/mq | Amazon MQ | MQ |
service/mturk | Amazon Mechanical Turk | MTurk |
service/opsworks | AWS OpsWorks | OpsWorks |
service/opsworkscm | AWS OpsWorks CM | OpsWorksCM |
service/organizations | AWS Organizations | Organizations |
service/pinpoint | Amazon Pinpoint | Pinpoint |
service/polly | Amazon Polly | Polly |
service/pricing | AWS Price List | Pricing |
service/rds | Amazon RDS | RDS |
service/redshift | Amazon Redshift | Redshift |
service/rekognition | Amazon Rekognition | Rekognition |
service/resourcegroups | AWS Resource Groups | ResourceGroups |
service/resourcegroupstaggingapi | AWS Resource Groups Tagging API | ResourceGroupsTaggingAPI |
service/route53 | Amazon Route 53 | Route53 |
service/route53domains | Amazon Route 53 Domains | Route53Domains |
service/s3 | Amazon S3 | S3 |
service/sagemaker | Amazon SageMaker | SageMaker |
service/sagemakerruntime | Amazon SageMaker Runtime | SageMakerRuntime |
service/secretsmanager | AWS Secrets Manager | SecretsManager |
service/serverlessapplicationrepository | AWS Serverless Application Repository | ServerlessApplicationRepository |
service/servicecatalog | AWS Service Catalog | ServiceCatalog |
service/servicediscovery | AWS Cloud Map | ServiceDiscovery |
service/ses | Amazon SES | SES |
service/sfn | AWS Step Functions | SFN |
service/shield | AWS Shield | Shield |
service/simpledb | Amazon SimpleDB | SimpleDB |
service/sms | AWS Server Migration Service | SMS |
service/snowball | AWS Snowball | Snowball |
service/sns | Amazon SNS | SNS |
service/sqs | Amazon SQS | SQS |
service/ssm | AWS Systems Manager | SSM |
service/storagegateway | AWS Storage Gateway | StorageGateway |
service/sts | AWS Security Token Service | STS |
service/support | AWS Support | Support |
service/swf | Amazon Simple Workflow Service | SWF |
service/transcribeservice | Amazon Transcribe | TranscribeService |
service/translate | Amazon Translate | Translate |
service/waf | AWS WAF (Global) | WAF |
service/wafregional | AWS WAF Regional | WAFRegional |
service/workdocs | Amazon WorkDocs | WorkDocs |
service/workmail | Amazon WorkMail | WorkMail |
service/workspaces | Amazon WorkSpaces | WorkSpaces |
service/xray | AWS X-Ray | XRay |
import (
"github.com/aws/aws-sdk-go-v2/aws"
"github.com/aws/aws-sdk-go-v2/aws/external"
"github.com/aws/aws-sdk-go-v2/service/dynamodb"
)
cfg, _ := external.LoadDefaultAWSConfig()
cfg.Region = "us-east-1"
svc := dynamodb.New(cfg)
// PutItem
req := svc.PutItemRequest(&dynamodb.PutItemInput{
TableName: aws.String("my-table"),
Item: map[string]dynamodb.AttributeValue{
"id": {S: aws.String("123")},
"name": {S: aws.String("example")},
},
})
resp, err := req.Send()
// GetItem
getReq := svc.GetItemRequest(&dynamodb.GetItemInput{
TableName: aws.String("my-table"),
Key: map[string]dynamodb.AttributeValue{
"id": {S: aws.String("123")},
},
})
getResp, err := getReq.Send()
if name, ok := getResp.Item["name"]; ok {
fmt.Println(*name.S)
}
// Paginate Scan
scanReq := svc.ScanRequest(&dynamodb.ScanInput{
TableName: aws.String("my-table"),
})
p := scanReq.Paginate()
for p.Next() {
page := p.CurrentPage()
for _, item := range page.Items {
fmt.Println(item)
}
}import (
"github.com/aws/aws-sdk-go-v2/aws"
"github.com/aws/aws-sdk-go-v2/aws/external"
"github.com/aws/aws-sdk-go-v2/service/lambda"
)
cfg, _ := external.LoadDefaultAWSConfig()
cfg.Region = "us-east-1"
svc := lambda.New(cfg)
req := svc.InvokeRequest(&lambda.InvokeInput{
FunctionName: aws.String("my-function"),
Payload: []byte(`{"key": "value"}`),
InvocationType: lambda.InvocationTypeRequestResponse,
})
resp, err := req.Send()
if err != nil { panic(err) }
fmt.Println("Status:", *resp.StatusCode)
fmt.Println("Response:", string(resp.Payload))import (
"github.com/aws/aws-sdk-go-v2/aws"
"github.com/aws/aws-sdk-go-v2/aws/external"
"github.com/aws/aws-sdk-go-v2/service/sqs"
)
cfg, _ := external.LoadDefaultAWSConfig()
cfg.Region = "us-east-1"
svc := sqs.New(cfg)
// Send message
sendReq := svc.SendMessageRequest(&sqs.SendMessageInput{
QueueUrl: aws.String("https://sqs.us-east-1.amazonaws.com/123456789012/my-queue"),
MessageBody: aws.String("Hello, SQS!"),
})
sendResp, err := sendReq.Send()
// Receive messages
recvReq := svc.ReceiveMessageRequest(&sqs.ReceiveMessageInput{
QueueUrl: aws.String("https://sqs.us-east-1.amazonaws.com/123456789012/my-queue"),
MaxNumberOfMessages: aws.Int64(10),
WaitTimeSeconds: aws.Int64(20), // long polling
})
recvResp, err := recvReq.Send()
for _, msg := range recvResp.Messages {
fmt.Println(*msg.Body)
// Delete message after processing
delReq := svc.DeleteMessageRequest(&sqs.DeleteMessageInput{
QueueUrl: aws.String("..."),
ReceiptHandle: msg.ReceiptHandle,
})
delReq.Send()
}import (
"github.com/aws/aws-sdk-go-v2/aws"
"github.com/aws/aws-sdk-go-v2/aws/external"
"github.com/aws/aws-sdk-go-v2/service/ec2"
)
cfg, _ := external.LoadDefaultAWSConfig()
cfg.Region = "us-east-1"
svc := ec2.New(cfg)
// Describe instances with pagination
req := svc.DescribeInstancesRequest(&ec2.DescribeInstancesInput{})
p := req.Paginate()
for p.Next() {
page := p.CurrentPage()
for _, r := range page.Reservations {
for _, i := range r.Instances {
fmt.Println(*i.InstanceId, i.State.Name)
}
}
}
// Wait until instance is running
err := svc.WaitUntilInstanceRunning(aws.BackgroundContext(), &ec2.DescribeInstancesInput{
InstanceIds: []string{"i-1234567890abcdef0"},
})Each service package exports a ServiceName constant:
// Example service name constants (each in its respective package)
const ServiceName = "s3" // service/s3
const ServiceName = "ec2" // service/ec2
const ServiceName = "dynamodb" // service/dynamodb
const ServiceName = "iam" // service/iam
// etc.Install with Tessl CLI
npx tessl i tessl/golang-github-com--aws--aws-sdk-go-v2