diff --git a/builtin/providers/aws/config.go b/builtin/providers/aws/config.go index 72ffec0fa..f3c721c97 100644 --- a/builtin/providers/aws/config.go +++ b/builtin/providers/aws/config.go @@ -26,6 +26,7 @@ import ( "github.com/aws/aws-sdk-go/service/cloudwatchlogs" "github.com/aws/aws-sdk-go/service/codecommit" "github.com/aws/aws-sdk-go/service/codedeploy" + "github.com/aws/aws-sdk-go/service/databasemigrationservice" "github.com/aws/aws-sdk-go/service/directoryservice" "github.com/aws/aws-sdk-go/service/dynamodb" "github.com/aws/aws-sdk-go/service/ec2" @@ -106,6 +107,7 @@ type AWSClient struct { cloudwatchconn *cloudwatch.CloudWatch cloudwatchlogsconn *cloudwatchlogs.CloudWatchLogs cloudwatcheventsconn *cloudwatchevents.CloudWatchEvents + dmsconn *databasemigrationservice.DatabaseMigrationService dsconn *directoryservice.DirectoryService dynamodbconn *dynamodb.DynamoDB ec2conn *ec2.EC2 @@ -276,6 +278,7 @@ func (c *Config) Client() (interface{}, error) { client.cloudwatchlogsconn = cloudwatchlogs.New(sess) client.codecommitconn = codecommit.New(sess) client.codedeployconn = codedeploy.New(sess) + client.dmsconn = databasemigrationservice.New(sess) client.dsconn = directoryservice.New(sess) client.dynamodbconn = dynamodb.New(dynamoSess) client.ec2conn = ec2.New(awsEc2Sess) diff --git a/builtin/providers/aws/provider.go b/builtin/providers/aws/provider.go index 4d56565e0..429fc3a90 100644 --- a/builtin/providers/aws/provider.go +++ b/builtin/providers/aws/provider.go @@ -246,6 +246,11 @@ func Provider() terraform.ResourceProvider { "aws_db_security_group": resourceAwsDbSecurityGroup(), "aws_db_subnet_group": resourceAwsDbSubnetGroup(), "aws_directory_service_directory": resourceAwsDirectoryServiceDirectory(), + "aws_dms_certificate": resourceAwsDmsCertificate(), + "aws_dms_endpoint": resourceAwsDmsEndpoint(), + "aws_dms_replication_instance": resourceAwsDmsReplicationInstance(), + "aws_dms_replication_subnet_group": resourceAwsDmsReplicationSubnetGroup(), + "aws_dms_replication_task": resourceAwsDmsReplicationTask(), "aws_dynamodb_table": resourceAwsDynamoDbTable(), "aws_ebs_snapshot": resourceAwsEbsSnapshot(), "aws_ebs_volume": resourceAwsEbsVolume(), diff --git a/builtin/providers/aws/resource_aws_dms_certificate.go b/builtin/providers/aws/resource_aws_dms_certificate.go new file mode 100644 index 000000000..8fd3f9f88 --- /dev/null +++ b/builtin/providers/aws/resource_aws_dms_certificate.go @@ -0,0 +1,138 @@ +package aws + +import ( + "fmt" + "log" + + "github.com/aws/aws-sdk-go/aws" + "github.com/aws/aws-sdk-go/aws/awserr" + dms "github.com/aws/aws-sdk-go/service/databasemigrationservice" + "github.com/hashicorp/terraform/helper/schema" +) + +func resourceAwsDmsCertificate() *schema.Resource { + return &schema.Resource{ + Create: resourceAwsDmsCertificateCreate, + Read: resourceAwsDmsCertificateRead, + Delete: resourceAwsDmsCertificateDelete, + + Importer: &schema.ResourceImporter{ + State: schema.ImportStatePassthrough, + }, + + Schema: map[string]*schema.Schema{ + "certificate_arn": { + Type: schema.TypeString, + Computed: true, + }, + "certificate_id": { + Type: schema.TypeString, + Required: true, + ForceNew: true, + ValidateFunc: validateDmsCertificateId, + }, + "certificate_pem": { + Type: schema.TypeString, + Optional: true, + ForceNew: true, + Sensitive: true, + }, + "certificate_wallet": { + Type: schema.TypeString, + Optional: true, + ForceNew: true, + Sensitive: true, + }, + }, + } +} + +func resourceAwsDmsCertificateCreate(d *schema.ResourceData, meta interface{}) error { + conn := meta.(*AWSClient).dmsconn + + request := &dms.ImportCertificateInput{ + CertificateIdentifier: aws.String(d.Get("certificate_id").(string)), + } + + pem, pemSet := d.GetOk("certificate_pem") + wallet, walletSet := d.GetOk("certificate_wallet") + + if !pemSet && !walletSet { + return fmt.Errorf("Must set either certificate_pem and certificate_wallet.") + } + if pemSet && walletSet { + return fmt.Errorf("Cannot set both certificate_pem and certificate_wallet.") + } + + if pemSet { + request.CertificatePem = aws.String(pem.(string)) + } + if walletSet { + request.CertificateWallet = []byte(wallet.(string)) + } + + log.Println("[DEBUG] DMS import certificate:", request) + + _, err := conn.ImportCertificate(request) + if err != nil { + return err + } + + d.SetId(d.Get("certificate_id").(string)) + return resourceAwsDmsCertificateRead(d, meta) +} + +func resourceAwsDmsCertificateRead(d *schema.ResourceData, meta interface{}) error { + conn := meta.(*AWSClient).dmsconn + + response, err := conn.DescribeCertificates(&dms.DescribeCertificatesInput{ + Filters: []*dms.Filter{ + { + Name: aws.String("certificate-id"), + Values: []*string{aws.String(d.Id())}, // Must use d.Id() to work with import. + }, + }, + }) + if err != nil { + if dmserr, ok := err.(awserr.Error); ok && dmserr.Code() == "ResourceNotFoundFault" { + d.SetId("") + return nil + } + return err + } + + return resourceAwsDmsCertificateSetState(d, response.Certificates[0]) +} + +func resourceAwsDmsCertificateDelete(d *schema.ResourceData, meta interface{}) error { + conn := meta.(*AWSClient).dmsconn + + request := &dms.DeleteCertificateInput{ + CertificateArn: aws.String(d.Get("certificate_arn").(string)), + } + + log.Printf("[DEBUG] DMS delete certificate: %#v", request) + + _, err := conn.DeleteCertificate(request) + if err != nil { + return err + } + + return nil +} + +func resourceAwsDmsCertificateSetState(d *schema.ResourceData, cert *dms.Certificate) error { + d.SetId(*cert.CertificateIdentifier) + + d.Set("certificate_id", cert.CertificateIdentifier) + d.Set("certificate_arn", cert.CertificateArn) + + if cert.CertificatePem != nil && *cert.CertificatePem != "" { + d.Set("certificate_pem", cert.CertificatePem) + } + if cert.CertificateWallet != nil && len(cert.CertificateWallet) == 0 { + d.Set("certificate_wallet", cert.CertificateWallet) + } + + return nil +} diff --git a/builtin/providers/aws/resource_aws_dms_certificate_test.go b/builtin/providers/aws/resource_aws_dms_certificate_test.go new file mode 100644 index 000000000..52cfa1c0c --- /dev/null +++ b/builtin/providers/aws/resource_aws_dms_certificate_test.go @@ -0,0 +1,103 @@ +package aws + +import ( + "fmt" + "testing" + + "github.com/aws/aws-sdk-go/aws" + dms "github.com/aws/aws-sdk-go/service/databasemigrationservice" + "github.com/hashicorp/terraform/helper/acctest" + "github.com/hashicorp/terraform/helper/resource" + "github.com/hashicorp/terraform/helper/schema" + "github.com/hashicorp/terraform/terraform" +) + +func TestAccAwsDmsCertificateBasic(t *testing.T) { + resourceName := "aws_dms_certificate.dms_certificate" + randId := acctest.RandString(8) + + resource.Test(t, resource.TestCase{ + PreCheck: func() { testAccPreCheck(t) }, + Providers: testAccProviders, + CheckDestroy: dmsCertificateDestroy, + Steps: []resource.TestStep{ + { + Config: dmsCertificateConfig(randId), + Check: resource.ComposeTestCheckFunc( + checkDmsCertificateExists(resourceName), + resource.TestCheckResourceAttrSet(resourceName, "certificate_arn"), + ), + }, + { + ResourceName: resourceName, + ImportState: true, + ImportStateVerify: true, + }, + }, + }) +} + +func dmsCertificateDestroy(s *terraform.State) error { + for _, rs := range s.RootModule().Resources { + if rs.Type != "aws_dms_certificate" { + continue + } + + err := checkDmsCertificateExists(rs.Primary.ID) + if err == nil { + return fmt.Errorf("Found a certificate that was not destroyed: %s", rs.Primary.ID) + } + } + + return nil +} + +func checkDmsCertificateExists(n string) resource.TestCheckFunc { + providers := []*schema.Provider{testAccProvider} + return checkDmsCertificateExistsWithProviders(n, &providers) +} + +func checkDmsCertificateExistsWithProviders(n string, providers *[]*schema.Provider) resource.TestCheckFunc { + return func(s *terraform.State) error { + rs, ok := s.RootModule().Resources[n] + if !ok { + return fmt.Errorf("Not found: %s", n) + } + + if rs.Primary.ID == "" { + return fmt.Errorf("No ID is set") + } + for _, provider := range *providers { + // Ignore if Meta is empty, this can happen for validation providers + if provider.Meta() == nil { + continue + } + + conn := provider.Meta().(*AWSClient).dmsconn + _, err := conn.DescribeCertificates(&dms.DescribeCertificatesInput{ + Filters: []*dms.Filter{ + { + Name: aws.String("certificate-id"), + Values: []*string{aws.String(rs.Primary.ID)}, + }, + }, + }) + + if err != nil { + return fmt.Errorf("DMS certificate error: %v", err) + } + return nil + } + + return fmt.Errorf("DMS certificate not found") + } +} + +func dmsCertificateConfig(randId string) string { + return fmt.Sprintf(` +resource "aws_dms_certificate" "dms_certificate" { + certificate_id = "tf-test-dms-certificate-%[1]s" + certificate_pem = "-----BEGIN CERTIFICATE-----\nMIID2jCCAsKgAwIBAgIJAJ58TJVjU7G1MA0GCSqGSIb3DQEBBQUAMFExCzAJBgNV\nBAYTAlVTMREwDwYDVQQIEwhDb2xvcmFkbzEPMA0GA1UEBxMGRGVudmVyMRAwDgYD\nVQQKEwdDaGFydGVyMQwwCgYDVQQLEwNDU0UwHhcNMTcwMTMwMTkyMDA4WhcNMjYx\nMjA5MTkyMDA4WjBRMQswCQYDVQQGEwJVUzERMA8GA1UECBMIQ29sb3JhZG8xDzAN\nBgNVBAcTBkRlbnZlcjEQMA4GA1UEChMHQ2hhcnRlcjEMMAoGA1UECxMDQ1NFMIIB\nIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAv6dq6VLIImlAaTrckb5w3X6J\nWP7EGz2ChGAXlkEYto6dPCba0v5+f+8UlMOpeB25XGoai7gdItqNWVFpYsgmndx3\nvTad3ukO1zeElKtw5oHPH2plOaiv/gVJaDa9NTeINj0EtGZs74fCOclAzGFX5vBc\nb08ESWBceRgGjGv3nlij4JzHfqTkCKQz6P6pBivQBfk62rcOkkH5rKoaGltRHROS\nMbkwOhu2hN0KmSYTXRvts0LXnZU4N0l2ms39gmr7UNNNlKYINL2JoTs9dNBc7APD\ndZvlEHd+/FjcLCI8hC3t4g4AbfW0okIBCNG0+oVjqGb2DeONSJKsThahXt89MQID\nAQABo4G0MIGxMB0GA1UdDgQWBBQKq8JxjY1GmeZXJjfOMfW0kBIzPDCBgQYDVR0j\nBHoweIAUCqvCcY2NRpnmVyY3zjH1tJASMzyhVaRTMFExCzAJBgNVBAYTAlVTMREw\nDwYDVQQIEwhDb2xvcmFkbzEPMA0GA1UEBxMGRGVudmVyMRAwDgYDVQQKEwdDaGFy\ndGVyMQwwCgYDVQQLEwNDU0WCCQCefEyVY1OxtTAMBgNVHRMEBTADAQH/MA0GCSqG\nSIb3DQEBBQUAA4IBAQAWifoMk5kbv+yuWXvFwHiB4dWUUmMlUlPU/E300yVTRl58\np6DfOgJs7MMftd1KeWqTO+uW134QlTt7+jwI8Jq0uyKCu/O2kJhVtH/Ryog14tGl\n+wLcuIPLbwJI9CwZX4WMBrq4DnYss+6F47i8NCc+Z3MAiG4vtq9ytBmaod0dj2bI\ng4/Lac0e00dql9RnqENh1+dF0V+QgTJCoPkMqDNAlSB8vOodBW81UAb2z12t+IFi\n3X9J3WtCK2+T5brXL6itzewWJ2ALvX3QpmZx7fMHJ3tE+SjjyivE1BbOlzYHx83t\nTeYnm7pS9un7A/UzTDHbs7hPUezLek+H3xTPAnnq\n-----END CERTIFICATE-----\n" +} +`, randId) +} diff --git a/builtin/providers/aws/resource_aws_dms_endpoint.go b/builtin/providers/aws/resource_aws_dms_endpoint.go new file mode 100644 index 000000000..ae735f4d5 --- /dev/null +++ b/builtin/providers/aws/resource_aws_dms_endpoint.go @@ -0,0 +1,343 @@ +package aws + +import ( + "log" + "strings" + + "github.com/aws/aws-sdk-go/aws" + "github.com/aws/aws-sdk-go/aws/awserr" + "github.com/aws/aws-sdk-go/private/waiter" + dms "github.com/aws/aws-sdk-go/service/databasemigrationservice" + "github.com/hashicorp/terraform/helper/schema" + "github.com/hashicorp/terraform/helper/validation" +) + +func resourceAwsDmsEndpoint() *schema.Resource { + return &schema.Resource{ + Create: resourceAwsDmsEndpointCreate, + Read: resourceAwsDmsEndpointRead, + Update: resourceAwsDmsEndpointUpdate, + Delete: resourceAwsDmsEndpointDelete, + + Importer: &schema.ResourceImporter{ + State: schema.ImportStatePassthrough, + }, + + Schema: map[string]*schema.Schema{ + "certificate_arn": { + Type: schema.TypeString, + Computed: true, + Optional: true, + ValidateFunc: validateArn, + }, + "database_name": { + Type: schema.TypeString, + Required: true, + }, + "endpoint_arn": { + Type: schema.TypeString, + Computed: true, + }, + "endpoint_id": { + Type: schema.TypeString, + Required: true, + ForceNew: true, + ValidateFunc: validateDmsEndpointId, + }, + "endpoint_type": { + Type: schema.TypeString, + Required: true, + ValidateFunc: validation.StringInSlice([]string{ + "source", + "target", + }, false), + }, + "engine_name": { + Type: schema.TypeString, + Required: true, + ValidateFunc: validation.StringInSlice([]string{ + "mysql", + "oracle", + "postgres", + "mariadb", + "aurora", + "redshift", + "sybase", + "sqlserver", + }, false), + }, + "extra_connection_attributes": { + Type: schema.TypeString, + Computed: true, + Optional: true, + }, + "kms_key_arn": { + Type: schema.TypeString, + Computed: true, + Optional: true, + ForceNew: true, + ValidateFunc: validateArn, + }, + "password": { + Type: schema.TypeString, + Required: true, + Sensitive: true, + }, + "port": { + Type: schema.TypeInt, + Required: true, + }, + "server_name": { + Type: schema.TypeString, + Required: true, + }, + "ssl_mode": { + Type: schema.TypeString, + Computed: true, + Optional: true, + ValidateFunc: validation.StringInSlice([]string{ + "none", + "require", + "verify-ca", + "verify-full", + }, false), + }, + "tags": { + Type: schema.TypeMap, + Optional: true, + }, + "username": { + Type: schema.TypeString, + Required: true, + }, + }, + } +} + +func resourceAwsDmsEndpointCreate(d *schema.ResourceData, meta interface{}) error { + conn := meta.(*AWSClient).dmsconn + + request := &dms.CreateEndpointInput{ + DatabaseName: aws.String(d.Get("database_name").(string)), + EndpointIdentifier: aws.String(d.Get("endpoint_id").(string)), + EndpointType: aws.String(d.Get("endpoint_type").(string)), + EngineName: aws.String(d.Get("engine_name").(string)), + Password: aws.String(d.Get("password").(string)), + Port: aws.Int64(int64(d.Get("port").(int))), + ServerName: aws.String(d.Get("server_name").(string)), + Tags: dmsTagsFromMap(d.Get("tags").(map[string]interface{})), + Username: aws.String(d.Get("username").(string)), + } + + if v, ok := d.GetOk("certificate_arn"); ok { + request.CertificateArn = aws.String(v.(string)) + } + if v, ok := d.GetOk("extra_connection_attributes"); ok { + request.ExtraConnectionAttributes = aws.String(v.(string)) + } + if v, ok := d.GetOk("kms_key_arn"); ok { + request.KmsKeyId = aws.String(v.(string)) + } + if v, ok := d.GetOk("ssl_mode"); ok { + request.SslMode = aws.String(v.(string)) + } + + log.Println("[DEBUG] DMS create endpoint:", request) + + _, err := conn.CreateEndpoint(request) + if err != nil { + return err + } + + d.SetId(d.Get("endpoint_id").(string)) + return resourceAwsDmsEndpointRead(d, meta) +} + +func resourceAwsDmsEndpointRead(d *schema.ResourceData, meta interface{}) error { + conn := meta.(*AWSClient).dmsconn + + response, err := conn.DescribeEndpoints(&dms.DescribeEndpointsInput{ + Filters: []*dms.Filter{ + { + Name: aws.String("endpoint-id"), + Values: []*string{aws.String(d.Id())}, // Must use d.Id() to work with import. + }, + }, + }) + if err != nil { + if dmserr, ok := err.(awserr.Error); ok && dmserr.Code() == "ResourceNotFoundFault" { + d.SetId("") + return nil + } + return err + } + + err = resourceAwsDmsEndpointSetState(d, response.Endpoints[0]) + if err != nil { + return err + } + + tagsResp, err := conn.ListTagsForResource(&dms.ListTagsForResourceInput{ + ResourceArn: aws.String(d.Get("endpoint_arn").(string)), + }) + if err != nil { + return err + } + d.Set("tags", dmsTagsToMap(tagsResp.TagList)) + + return nil +} + +func resourceAwsDmsEndpointUpdate(d *schema.ResourceData, meta interface{}) error { + conn := meta.(*AWSClient).dmsconn + + request := &dms.ModifyEndpointInput{ + EndpointArn: aws.String(d.Get("endpoint_arn").(string)), + } + hasChanges := false + + if d.HasChange("certificate_arn") { + request.CertificateArn = aws.String(d.Get("certificate_arn").(string)) + hasChanges = true + } + + if d.HasChange("database_name") { + request.DatabaseName = aws.String(d.Get("database_name").(string)) + hasChanges = true + } + + if d.HasChange("endpoint_type") { + request.EndpointType = aws.String(d.Get("endpoint_type").(string)) + hasChanges = true + } + + if d.HasChange("engine_name") { + request.EngineName = aws.String(d.Get("engine_name").(string)) + hasChanges = true + } + + if d.HasChange("extra_connection_attributes") { + request.ExtraConnectionAttributes = aws.String(d.Get("extra_connection_attributes").(string)) + hasChanges = true + } + + if d.HasChange("password") { + request.Password = aws.String(d.Get("password").(string)) + hasChanges = true + } + + if d.HasChange("port") { + request.Port = aws.Int64(int64(d.Get("port").(int))) + hasChanges = true + } + + if d.HasChange("server_name") { + request.ServerName = aws.String(d.Get("server_name").(string)) + hasChanges = true + } + + if d.HasChange("ssl_mode") { + request.SslMode = aws.String(d.Get("ssl_mode").(string)) + hasChanges = true + } + + if d.HasChange("username") { + request.Username = aws.String(d.Get("username").(string)) + hasChanges = true + } + + if d.HasChange("tags") { + err := dmsSetTags(d.Get("endpoint_arn").(string), d, meta) + if err != nil { + return err + } + } + + if hasChanges { + log.Println("[DEBUG] DMS update endpoint:", request) + + _, err := conn.ModifyEndpoint(request) + if err != nil { + return err + } + + return resourceAwsDmsEndpointRead(d, meta) + } + + return nil +} + +func resourceAwsDmsEndpointDelete(d *schema.ResourceData, meta interface{}) error { + conn := meta.(*AWSClient).dmsconn + + request := &dms.DeleteEndpointInput{ + EndpointArn: aws.String(d.Get("endpoint_arn").(string)), + } + + log.Printf("[DEBUG] DMS delete endpoint: %#v", request) + + _, err := conn.DeleteEndpoint(request) + if err != nil { + return err + } + + waitErr := waitForEndpointDelete(conn, d.Get("endpoint_id").(string), 30, 20) + if waitErr != nil { + return waitErr + } + + return nil +} + +func resourceAwsDmsEndpointSetState(d *schema.ResourceData, endpoint *dms.Endpoint) error { + d.SetId(*endpoint.EndpointIdentifier) + + d.Set("certificate_arn", endpoint.CertificateArn) + d.Set("database_name", endpoint.DatabaseName) + d.Set("endpoint_arn", endpoint.EndpointArn) + d.Set("endpoint_id", endpoint.EndpointIdentifier) + // For some reason the AWS API only accepts lowercase type but returns it as uppercase + d.Set("endpoint_type", strings.ToLower(*endpoint.EndpointType)) + d.Set("engine_name", endpoint.EngineName) + d.Set("extra_connection_attributes", endpoint.ExtraConnectionAttributes) + d.Set("kms_key_arn", endpoint.KmsKeyId) + d.Set("port", endpoint.Port) + d.Set("server_name", endpoint.ServerName) + d.Set("ssl_mode", endpoint.SslMode) + d.Set("username", endpoint.Username) + + return nil +} + +func waitForEndpointDelete(client *dms.DatabaseMigrationService, endpointId string, delay int, maxAttempts int) error { + input := &dms.DescribeEndpointsInput{ + Filters: []*dms.Filter{ + { + Name: aws.String("endpoint-id"), + Values: []*string{aws.String(endpointId)}, + }, + }, + } + + config := waiter.Config{ + Operation: "DescribeEndpoints", + Delay: delay, + MaxAttempts: maxAttempts, + Acceptors: []waiter.WaitAcceptor{ + { + State: "success", + Matcher: "path", + Argument: "length(Endpoints[]) > `0`", + Expected: false, + }, + }, + } + + w := waiter.Waiter{ + Client: client, + Input: input, + Config: config, + } + + return w.Wait() +} diff --git a/builtin/providers/aws/resource_aws_dms_endpoint_test.go b/builtin/providers/aws/resource_aws_dms_endpoint_test.go new file mode 100644 index 000000000..6f8662283 --- /dev/null +++ b/builtin/providers/aws/resource_aws_dms_endpoint_test.go @@ -0,0 +1,152 @@ +package aws + +import ( + "fmt" + "testing" + + "github.com/aws/aws-sdk-go/aws" + dms "github.com/aws/aws-sdk-go/service/databasemigrationservice" + "github.com/hashicorp/terraform/helper/acctest" + "github.com/hashicorp/terraform/helper/resource" + "github.com/hashicorp/terraform/helper/schema" + "github.com/hashicorp/terraform/terraform" +) + +func TestAccAwsDmsEndpointBasic(t *testing.T) { + resourceName := "aws_dms_endpoint.dms_endpoint" + randId := acctest.RandString(8) + + resource.Test(t, resource.TestCase{ + PreCheck: func() { testAccPreCheck(t) }, + Providers: testAccProviders, + CheckDestroy: dmsEndpointDestroy, + Steps: []resource.TestStep{ + { + Config: dmsEndpointConfig(randId), + Check: resource.ComposeTestCheckFunc( + checkDmsEndpointExists(resourceName), + resource.TestCheckResourceAttrSet(resourceName, "endpoint_arn"), + ), + }, + { + ResourceName: resourceName, + ImportState: true, + ImportStateVerify: true, + ImportStateVerifyIgnore: []string{"password"}, + }, + { + Config: dmsEndpointConfigUpdate(randId), + Check: resource.ComposeTestCheckFunc( + checkDmsEndpointExists(resourceName), + resource.TestCheckResourceAttr(resourceName, "database_name", "tf-test-dms-db-updated"), + resource.TestCheckResourceAttr(resourceName, "extra_connection_attributes", "extra"), + resource.TestCheckResourceAttr(resourceName, "password", "tftestupdate"), + resource.TestCheckResourceAttr(resourceName, "port", "3303"), + resource.TestCheckResourceAttr(resourceName, "ssl_mode", "none"), + resource.TestCheckResourceAttr(resourceName, "server_name", "tftestupdate"), + resource.TestCheckResourceAttr(resourceName, "username", "tftestupdate"), + ), + }, + }, + }) +} + +func dmsEndpointDestroy(s *terraform.State) error { + for _, rs := range s.RootModule().Resources { + if rs.Type != "aws_dms_endpoint" { + continue + } + + err := checkDmsEndpointExists(rs.Primary.ID) + if err == nil { + return fmt.Errorf("Found an endpoint that was not destroyed: %s", rs.Primary.ID) + } + } + + return nil +} + +func checkDmsEndpointExists(n string) resource.TestCheckFunc { + providers := []*schema.Provider{testAccProvider} + return checkDmsEndpointExistsWithProviders(n, &providers) +} + +func checkDmsEndpointExistsWithProviders(n string, providers *[]*schema.Provider) resource.TestCheckFunc { + return func(s *terraform.State) error { + rs, ok := s.RootModule().Resources[n] + if !ok { + return fmt.Errorf("Not found: %s", n) + } + + if rs.Primary.ID == "" { + return fmt.Errorf("No ID is set") + } + for _, provider := range *providers { + // Ignore if Meta is empty, this can happen for validation providers + if provider.Meta() == nil { + continue + } + + conn := provider.Meta().(*AWSClient).dmsconn + _, err := conn.DescribeEndpoints(&dms.DescribeEndpointsInput{ + Filters: []*dms.Filter{ + { + Name: aws.String("endpoint-id"), + Values: []*string{aws.String(rs.Primary.ID)}, + }, + }, + }) + + if err != nil { + return fmt.Errorf("DMS endpoint error: %v", err) + } + return nil + } + + return fmt.Errorf("DMS endpoint not found") + } +} + +func dmsEndpointConfig(randId string) string { + return fmt.Sprintf(` +resource "aws_dms_endpoint" "dms_endpoint" { + database_name = "tf-test-dms-db" + endpoint_id = "tf-test-dms-endpoint-%[1]s" + endpoint_type = "source" + engine_name = "aurora" + extra_connection_attributes = "" + password = "tftest" + port = 3306 + server_name = "tftest" + ssl_mode = "none" + tags { + Name = "tf-test-dms-endpoint-%[1]s" + Update = "to-update" + Remove = "to-remove" + } + username = "tftest" +} +`, randId) +} + +func dmsEndpointConfigUpdate(randId string) string { + return fmt.Sprintf(` +resource "aws_dms_endpoint" "dms_endpoint" { + database_name = "tf-test-dms-db-updated" + endpoint_id = "tf-test-dms-endpoint-%[1]s" + endpoint_type = "source" + engine_name = "aurora" + extra_connection_attributes = "extra" + password = "tftestupdate" + port = 3303 + server_name = "tftestupdate" + ssl_mode = "none" + tags { + Name = "tf-test-dms-endpoint-%[1]s" + Update = "updated" + Add = "added" + } + username = "tftestupdate" +} +`, randId) +} diff --git a/builtin/providers/aws/resource_aws_dms_replication_instance.go b/builtin/providers/aws/resource_aws_dms_replication_instance.go new file mode 100644 index 000000000..63552d28e --- /dev/null +++ b/builtin/providers/aws/resource_aws_dms_replication_instance.go @@ -0,0 +1,422 @@ +package aws + +import ( + "fmt" + "log" + + "github.com/aws/aws-sdk-go/aws" + "github.com/aws/aws-sdk-go/aws/awserr" + "github.com/aws/aws-sdk-go/private/waiter" + dms "github.com/aws/aws-sdk-go/service/databasemigrationservice" + "github.com/hashicorp/terraform/helper/schema" +) + +func resourceAwsDmsReplicationInstance() *schema.Resource { + return &schema.Resource{ + Create: resourceAwsDmsReplicationInstanceCreate, + Read: resourceAwsDmsReplicationInstanceRead, + Update: resourceAwsDmsReplicationInstanceUpdate, + Delete: resourceAwsDmsReplicationInstanceDelete, + + Importer: &schema.ResourceImporter{ + State: schema.ImportStatePassthrough, + }, + + Schema: map[string]*schema.Schema{ + "allocated_storage": { + Type: schema.TypeInt, + Computed: true, + Optional: true, + ValidateFunc: validateIntegerInRange(5, 6144), + }, + "apply_immediately": { + Type: schema.TypeBool, + Optional: true, + }, + "auto_minor_version_upgrade": { + Type: schema.TypeBool, + Computed: true, + Optional: true, + }, + "availability_zone": { + Type: schema.TypeString, + Computed: true, + Optional: true, + ForceNew: true, + }, + "engine_version": { + Type: schema.TypeString, + Computed: true, + Optional: true, + }, + "kms_key_arn": { + Type: schema.TypeString, + Computed: true, + Optional: true, + ForceNew: true, + ValidateFunc: validateArn, + }, + "multi_az": { + Type: schema.TypeBool, + Computed: true, + Optional: true, + }, + "preferred_maintenance_window": { + Type: schema.TypeString, + Computed: true, + Optional: true, + ValidateFunc: validateOnceAWeekWindowFormat, + }, + "publicly_accessible": { + Type: schema.TypeBool, + Computed: true, + Optional: true, + ForceNew: true, + }, + "replication_instance_arn": { + Type: schema.TypeString, + Computed: true, + }, + "replication_instance_class": { + Type: schema.TypeString, + Required: true, + // Valid Values: dms.t2.micro | dms.t2.small | dms.t2.medium | dms.t2.large | dms.c4.large | + // dms.c4.xlarge | dms.c4.2xlarge | dms.c4.4xlarge + }, + "replication_instance_id": { + Type: schema.TypeString, + Required: true, + ForceNew: true, + ValidateFunc: validateDmsReplicationInstanceId, + }, + "replication_instance_private_ips": { + Type: schema.TypeList, + Elem: &schema.Schema{Type: schema.TypeString}, + Computed: true, + }, + "replication_instance_public_ips": { + Type: schema.TypeList, + Elem: &schema.Schema{Type: schema.TypeString}, + Computed: true, + }, + "replication_subnet_group_id": { + Type: schema.TypeString, + Computed: true, + Optional: true, + ForceNew: true, + }, + "tags": { + Type: schema.TypeMap, + Optional: true, + }, + "vpc_security_group_ids": { + Type: schema.TypeSet, + Elem: &schema.Schema{Type: schema.TypeString}, + Set: schema.HashString, + Computed: true, + Optional: true, + }, + }, + } +} + +func resourceAwsDmsReplicationInstanceCreate(d *schema.ResourceData, meta interface{}) error { + conn := meta.(*AWSClient).dmsconn + + request := &dms.CreateReplicationInstanceInput{ + AutoMinorVersionUpgrade: aws.Bool(d.Get("auto_minor_version_upgrade").(bool)), + PubliclyAccessible: aws.Bool(d.Get("publicly_accessible").(bool)), + ReplicationInstanceClass: aws.String(d.Get("replication_instance_class").(string)), + ReplicationInstanceIdentifier: aws.String(d.Get("replication_instance_id").(string)), + Tags: dmsTagsFromMap(d.Get("tags").(map[string]interface{})), + } + + // WARNING: GetOk returns the zero value for the type if the key is omitted in config. This means for optional + // keys that the zero value is valid we cannot know if the zero value was in the config and cannot allow the API + // to set the default value. See GitHub Issue #5694 https://github.com/hashicorp/terraform/issues/5694 + + if v, ok := d.GetOk("allocated_storage"); ok { + request.AllocatedStorage = aws.Int64(int64(v.(int))) + } + if v, ok := d.GetOk("engine_version"); ok { + request.EngineVersion = aws.String(v.(string)) + } + if v, ok := d.GetOk("kms_key_arn"); ok { + request.KmsKeyId = aws.String(v.(string)) + } + if v, ok := d.GetOk("preferred_maintenance_window"); ok { + request.PreferredMaintenanceWindow = aws.String(v.(string)) + } + if v, ok := d.GetOk("replication_subnet_group_id"); ok { + request.ReplicationSubnetGroupIdentifier = aws.String(v.(string)) + } + if v, ok := d.GetOk("vpc_security_group_ids"); ok { + request.VpcSecurityGroupIds = expandStringList(v.(*schema.Set).List()) + } + + az, azSet := d.GetOk("availability_zone") + if azSet { + request.AvailabilityZone = aws.String(az.(string)) + } + + if multiAz, ok := d.GetOk("multi_az"); ok { + request.MultiAZ = aws.Bool(multiAz.(bool)) + + if multiAz.(bool) && azSet { + return fmt.Errorf("Cannot set availability_zone if multi_az is set to true") + } + } + + log.Println("[DEBUG] DMS create replication instance:", request) + + _, err := conn.CreateReplicationInstance(request) + if err != nil { + return err + } + + err = waitForInstanceCreated(conn, d.Get("replication_instance_id").(string), 30, 20) + if err != nil { + return err + } + + d.SetId(d.Get("replication_instance_id").(string)) + return resourceAwsDmsReplicationInstanceRead(d, meta) +} + +func resourceAwsDmsReplicationInstanceRead(d *schema.ResourceData, meta interface{}) error { + conn := meta.(*AWSClient).dmsconn + + response, err := conn.DescribeReplicationInstances(&dms.DescribeReplicationInstancesInput{ + Filters: []*dms.Filter{ + { + Name: aws.String("replication-instance-id"), + Values: []*string{aws.String(d.Id())}, // Must use d.Id() to work with import. + }, + }, + }) + if err != nil { + if dmserr, ok := err.(awserr.Error); ok && dmserr.Code() == "ResourceNotFoundFault" { + d.SetId("") + return nil + } + return err + } + + err = resourceAwsDmsReplicationInstanceSetState(d, response.ReplicationInstances[0]) + if err != nil { + return err + } + + tagsResp, err := conn.ListTagsForResource(&dms.ListTagsForResourceInput{ + ResourceArn: aws.String(d.Get("replication_instance_arn").(string)), + }) + if err != nil { + return err + } + d.Set("tags", dmsTagsToMap(tagsResp.TagList)) + + return nil +} + +func resourceAwsDmsReplicationInstanceUpdate(d *schema.ResourceData, meta interface{}) error { + request := &dms.ModifyReplicationInstanceInput{ + ApplyImmediately: aws.Bool(d.Get("apply_immediately").(bool)), + ReplicationInstanceArn: aws.String(d.Get("replication_instance_arn").(string)), + } + hasChanges := false + + if d.HasChange("auto_minor_version_upgrade") { + request.AutoMinorVersionUpgrade = aws.Bool(d.Get("auto_minor_version_upgrade").(bool)) + hasChanges = true + } + + if d.HasChange("allocated_storage") { + if v, ok := d.GetOk("allocated_storage"); ok { + request.AllocatedStorage = aws.Int64(int64(v.(int))) + hasChanges = true + } + } + + if d.HasChange("engine_version") { + if v, ok := d.GetOk("engine_version"); ok { + request.ReplicationInstanceClass = aws.String(v.(string)) + hasChanges = true + } + } + + if d.HasChange("multi_az") { + if v, ok := d.GetOk("multi_az"); ok { + request.MultiAZ = aws.Bool(v.(bool)) + hasChanges = true + } + } + + if d.HasChange("preferred_maintenance_window") { + if v, ok := d.GetOk("preferred_maintenance_window"); ok { + request.PreferredMaintenanceWindow = aws.String(v.(string)) + hasChanges = true + } + } + + if d.HasChange("replication_instance_class") { + if v, ok := d.GetOk("replication_instance_class"); ok { + request.ReplicationInstanceClass = aws.String(v.(string)) + hasChanges = true + } + } + + if d.HasChange("vpc_security_group_ids") { + if v, ok := d.GetOk("vpc_security_group_ids"); ok { + request.VpcSecurityGroupIds = expandStringList(v.(*schema.Set).List()) + hasChanges = true + } + } + + if d.HasChange("tags") { + err := dmsSetTags(d.Get("replication_instance_arn").(string), d, meta) + if err != nil { + return err + } + } + + if hasChanges { + conn := meta.(*AWSClient).dmsconn + + _, err := conn.ModifyReplicationInstance(request) + if err != nil { + return err + } + + return resourceAwsDmsReplicationInstanceRead(d, meta) + } + + return nil +} + +func resourceAwsDmsReplicationInstanceDelete(d *schema.ResourceData, meta interface{}) error { + conn := meta.(*AWSClient).dmsconn + + request := &dms.DeleteReplicationInstanceInput{ + ReplicationInstanceArn: aws.String(d.Get("replication_instance_arn").(string)), + } + + log.Printf("[DEBUG] DMS delete replication instance: %#v", request) + + _, err := conn.DeleteReplicationInstance(request) + if err != nil { + return err + } + + waitErr := waitForInstanceDeleted(conn, d.Get("replication_instance_id").(string), 30, 20) + if waitErr != nil { + return waitErr + } + + return nil +} + +func resourceAwsDmsReplicationInstanceSetState(d *schema.ResourceData, instance *dms.ReplicationInstance) error { + d.SetId(*instance.ReplicationInstanceIdentifier) + + d.Set("replication_instance_id", instance.ReplicationInstanceIdentifier) + d.Set("allocated_storage", instance.AllocatedStorage) + d.Set("auto_minor_version_upgrade", instance.AutoMinorVersionUpgrade) + d.Set("availability_zone", instance.AvailabilityZone) + d.Set("engine_version", instance.EngineVersion) + d.Set("kms_key_arn", instance.KmsKeyId) + d.Set("multi_az", instance.MultiAZ) + d.Set("preferred_maintenance_window", instance.PreferredMaintenanceWindow) + d.Set("publicly_accessible", instance.PubliclyAccessible) + d.Set("replication_instance_arn", instance.ReplicationInstanceArn) + d.Set("replication_instance_class", instance.ReplicationInstanceClass) + d.Set("replication_subnet_group_id", instance.ReplicationSubnetGroup.ReplicationSubnetGroupIdentifier) + + vpc_security_group_ids := []string{} + for _, sg := range instance.VpcSecurityGroups { + vpc_security_group_ids = append(vpc_security_group_ids, aws.StringValue(sg.VpcSecurityGroupId)) + } + + d.Set("vpc_security_group_ids", vpc_security_group_ids) + + private_ip_addresses := []string{} + for _, ip := range instance.ReplicationInstancePrivateIpAddresses { + private_ip_addresses = append(private_ip_addresses, aws.StringValue(ip)) + } + + d.Set("replication_instance_private_ips", private_ip_addresses) + + public_ip_addresses := []string{} + for _, ip := range instance.ReplicationInstancePublicIpAddresses { + public_ip_addresses = append(public_ip_addresses, aws.StringValue(ip)) + } + + d.Set("replication_instance_public_ips", public_ip_addresses) + + return nil +} + +func waitForInstanceCreated(client *dms.DatabaseMigrationService, id string, delay int, maxAttempts int) error { + input := &dms.DescribeReplicationInstancesInput{ + Filters: []*dms.Filter{ + { + Name: aws.String("replication-instance-id"), + Values: []*string{aws.String(id)}, + }, + }, + } + + config := waiter.Config{ + Operation: "DescribeReplicationInstances", + Delay: delay, + MaxAttempts: maxAttempts, + Acceptors: []waiter.WaitAcceptor{ + { + State: "success", + Matcher: "pathAll", + Argument: "ReplicationInstances[].ReplicationInstanceStatus", + Expected: "available", + }, + }, + } + + w := waiter.Waiter{ + Client: client, + Input: input, + Config: config, + } + + return w.Wait() +} + +func waitForInstanceDeleted(client *dms.DatabaseMigrationService, id string, delay int, maxAttempts int) error { + input := &dms.DescribeReplicationInstancesInput{ + Filters: []*dms.Filter{ + { + Name: aws.String("replication-instance-id"), + Values: []*string{aws.String(id)}, + }, + }, + } + + config := waiter.Config{ + Operation: "DescribeReplicationInstances", + Delay: delay, + MaxAttempts: maxAttempts, + Acceptors: []waiter.WaitAcceptor{ + { + State: "success", + Matcher: "path", + Argument: "length(ReplicationInstances[]) > `0`", + Expected: false, + }, + }, + } + + w := waiter.Waiter{ + Client: client, + Input: input, + Config: config, + } + + return w.Wait() +} diff --git a/builtin/providers/aws/resource_aws_dms_replication_instance_test.go b/builtin/providers/aws/resource_aws_dms_replication_instance_test.go new file mode 100644 index 000000000..17e7f85c8 --- /dev/null +++ b/builtin/providers/aws/resource_aws_dms_replication_instance_test.go @@ -0,0 +1,232 @@ +package aws + +import ( + "fmt" + "testing" + + "github.com/aws/aws-sdk-go/aws" + dms "github.com/aws/aws-sdk-go/service/databasemigrationservice" + "github.com/hashicorp/terraform/helper/acctest" + "github.com/hashicorp/terraform/helper/resource" + "github.com/hashicorp/terraform/helper/schema" + "github.com/hashicorp/terraform/terraform" +) + +func TestAccAwsDmsReplicationInstanceBasic(t *testing.T) { + resourceName := "aws_dms_replication_instance.dms_replication_instance" + randId := acctest.RandString(8) + + resource.Test(t, resource.TestCase{ + PreCheck: func() { testAccPreCheck(t) }, + Providers: testAccProviders, + CheckDestroy: dmsReplicationInstanceDestroy, + Steps: []resource.TestStep{ + { + Config: dmsReplicationInstanceConfig(randId), + Check: resource.ComposeTestCheckFunc( + checkDmsReplicationInstanceExists(resourceName), + resource.TestCheckResourceAttrSet(resourceName, "replication_instance_arn"), + ), + }, + { + ResourceName: resourceName, + ImportState: true, + ImportStateVerify: true, + }, + { + Config: dmsReplicationInstanceConfigUpdate(randId), + Check: resource.ComposeTestCheckFunc( + checkDmsReplicationInstanceExists(resourceName), + resource.TestCheckResourceAttrSet(resourceName, "apply_immediately"), + resource.TestCheckResourceAttr(resourceName, "auto_minor_version_upgrade", "false"), + resource.TestCheckResourceAttr(resourceName, "preferred_maintenance_window", "mon:00:30-mon:02:30"), + ), + }, + }, + }) +} + +func checkDmsReplicationInstanceExists(n string) resource.TestCheckFunc { + providers := []*schema.Provider{testAccProvider} + return checkDmsReplicationInstanceExistsWithProviders(n, &providers) +} + +func checkDmsReplicationInstanceExistsWithProviders(n string, providers *[]*schema.Provider) resource.TestCheckFunc { + return func(s *terraform.State) error { + rs, ok := s.RootModule().Resources[n] + if !ok { + return fmt.Errorf("Not found: %s", n) + } + + if rs.Primary.ID == "" { + return fmt.Errorf("No ID is set") + } + for _, provider := range *providers { + // Ignore if Meta is empty, this can happen for validation providers + if provider.Meta() == nil { + continue + } + + conn := provider.Meta().(*AWSClient).dmsconn + _, err := conn.DescribeReplicationInstances(&dms.DescribeReplicationInstancesInput{ + Filters: []*dms.Filter{ + { + Name: aws.String("replication-instance-id"), + Values: []*string{aws.String(rs.Primary.ID)}, + }, + }, + }) + + if err != nil { + return fmt.Errorf("DMS replication instance error: %v", err) + } + return nil + } + + return fmt.Errorf("DMS replication instance not found") + } +} + +func dmsReplicationInstanceDestroy(s *terraform.State) error { + for _, rs := range s.RootModule().Resources { + if rs.Type != "aws_dms_replication_instance" { + continue + } + + err := checkDmsReplicationInstanceExists(rs.Primary.ID) + if err == nil { + return fmt.Errorf("Found replication instance that was not destroyed: %s", rs.Primary.ID) + } + } + + return nil +} + +func dmsReplicationInstanceConfig(randId string) string { + return fmt.Sprintf(` +resource "aws_iam_role" "dms_iam_role" { + name = "dms-vpc-role" + assume_role_policy = "{\"Version\":\"2012-10-17\",\"Statement\":[{\"Sid\":\"\",\"Effect\":\"Allow\",\"Principal\":{\"Service\":\"dms.amazonaws.com\"},\"Action\":\"sts:AssumeRole\"}]}" +} + +resource "aws_iam_role_policy_attachment" "dms_iam_role_policy" { + role = "${aws_iam_role.dms_iam_role.name}" + policy_arn = "arn:aws:iam::aws:policy/service-role/AmazonDMSVPCManagementRole" +} + +resource "aws_vpc" "dms_vpc" { + cidr_block = "10.1.0.0/16" + tags { + Name = "tf-test-dms-vpc-%[1]s" + } + depends_on = ["aws_iam_role_policy_attachment.dms_iam_role_policy"] +} + +resource "aws_subnet" "dms_subnet_1" { + cidr_block = "10.1.1.0/24" + availability_zone = "us-west-2a" + vpc_id = "${aws_vpc.dms_vpc.id}" + tags { + Name = "tf-test-dms-subnet-%[1]s" + } + depends_on = ["aws_vpc.dms_vpc"] +} + +resource "aws_subnet" "dms_subnet_2" { + cidr_block = "10.1.2.0/24" + availability_zone = "us-west-2b" + vpc_id = "${aws_vpc.dms_vpc.id}" + tags { + Name = "tf-test-dms-subnet-%[1]s" + } + depends_on = ["aws_vpc.dms_vpc"] +} + +resource "aws_dms_replication_subnet_group" "dms_replication_subnet_group" { + replication_subnet_group_id = "tf-test-dms-replication-subnet-group-%[1]s" + replication_subnet_group_description = "terraform test for replication subnet group" + subnet_ids = ["${aws_subnet.dms_subnet_1.id}", "${aws_subnet.dms_subnet_2.id}"] + depends_on = ["aws_iam_role_policy_attachment.dms_iam_role_policy"] +} + +resource "aws_dms_replication_instance" "dms_replication_instance" { + allocated_storage = 5 + auto_minor_version_upgrade = true + replication_instance_class = "dms.t2.micro" + replication_instance_id = "tf-test-dms-replication-instance-%[1]s" + preferred_maintenance_window = "sun:00:30-sun:02:30" + publicly_accessible = false + replication_subnet_group_id = "${aws_dms_replication_subnet_group.dms_replication_subnet_group.replication_subnet_group_id}" + tags { + Name = "tf-test-dms-replication-instance-%[1]s" + Update = "to-update" + Remove = "to-remove" + } +} +`, randId) +} + +func dmsReplicationInstanceConfigUpdate(randId string) string { + return fmt.Sprintf(` +resource "aws_iam_role" "dms_iam_role" { + name = "dms-vpc-role" + assume_role_policy = "{\"Version\":\"2012-10-17\",\"Statement\":[{\"Sid\":\"\",\"Effect\":\"Allow\",\"Principal\":{\"Service\":\"dms.amazonaws.com\"},\"Action\":\"sts:AssumeRole\"}]}" +} + +resource "aws_iam_role_policy_attachment" "dms_iam_role_policy" { + role = "${aws_iam_role.dms_iam_role.name}" + policy_arn = "arn:aws:iam::aws:policy/service-role/AmazonDMSVPCManagementRole" +} + +resource "aws_vpc" "dms_vpc" { + cidr_block = "10.1.0.0/16" + tags { + Name = "tf-test-dms-vpc-%[1]s" + } + depends_on = ["aws_iam_role_policy_attachment.dms_iam_role_policy"] +} + +resource "aws_subnet" "dms_subnet_1" { + cidr_block = "10.1.1.0/24" + availability_zone = "us-west-2a" + vpc_id = "${aws_vpc.dms_vpc.id}" + tags { + Name = "tf-test-dms-subnet-%[1]s" + } + depends_on = ["aws_vpc.dms_vpc"] +} + +resource "aws_subnet" "dms_subnet_2" { + cidr_block = "10.1.2.0/24" + availability_zone = "us-west-2b" + vpc_id = "${aws_vpc.dms_vpc.id}" + tags { + Name = "tf-test-dms-subnet-%[1]s" + } + depends_on = ["aws_vpc.dms_vpc"] +} + +resource "aws_dms_replication_subnet_group" "dms_replication_subnet_group" { + replication_subnet_group_id = "tf-test-dms-replication-subnet-group-%[1]s" + replication_subnet_group_description = "terraform test for replication subnet group" + subnet_ids = ["${aws_subnet.dms_subnet_1.id}", "${aws_subnet.dms_subnet_2.id}"] + depends_on = ["aws_iam_role_policy_attachment.dms_iam_role_policy"] +} + +resource "aws_dms_replication_instance" "dms_replication_instance" { + allocated_storage = 5 + apply_immediately = true + auto_minor_version_upgrade = false + replication_instance_class = "dms.t2.micro" + replication_instance_id = "tf-test-dms-replication-instance-%[1]s" + preferred_maintenance_window = "mon:00:30-mon:02:30" + publicly_accessible = false + replication_subnet_group_id = "${aws_dms_replication_subnet_group.dms_replication_subnet_group.replication_subnet_group_id}" + tags { + Name = "tf-test-dms-replication-instance-%[1]s" + Update = "updated" + Add = "added" + } +} +`, randId) +} diff --git a/builtin/providers/aws/resource_aws_dms_replication_subnet_group.go b/builtin/providers/aws/resource_aws_dms_replication_subnet_group.go new file mode 100644 index 000000000..b28165308 --- /dev/null +++ b/builtin/providers/aws/resource_aws_dms_replication_subnet_group.go @@ -0,0 +1,179 @@ +package aws + +import ( + "fmt" + "log" + + "github.com/aws/aws-sdk-go/aws" + dms "github.com/aws/aws-sdk-go/service/databasemigrationservice" + "github.com/hashicorp/terraform/helper/schema" +) + +func resourceAwsDmsReplicationSubnetGroup() *schema.Resource { + return &schema.Resource{ + Create: resourceAwsDmsReplicationSubnetGroupCreate, + Read: resourceAwsDmsReplicationSubnetGroupRead, + Update: resourceAwsDmsReplicationSubnetGroupUpdate, + Delete: resourceAwsDmsReplicationSubnetGroupDelete, + + Importer: &schema.ResourceImporter{ + State: schema.ImportStatePassthrough, + }, + + Schema: map[string]*schema.Schema{ + "replication_subnet_group_arn": { + Type: schema.TypeString, + Computed: true, + }, + "replication_subnet_group_description": { + Type: schema.TypeString, + Required: true, + }, + "replication_subnet_group_id": { + Type: schema.TypeString, + Required: true, + ForceNew: true, + ValidateFunc: validateDmsReplicationSubnetGroupId, + }, + "subnet_ids": { + Type: schema.TypeSet, + Elem: &schema.Schema{Type: schema.TypeString}, + Set: schema.HashString, + Required: true, + }, + "tags": { + Type: schema.TypeMap, + Optional: true, + }, + "vpc_id": { + Type: schema.TypeString, + Computed: true, + }, + }, + } +} + +func resourceAwsDmsReplicationSubnetGroupCreate(d *schema.ResourceData, meta interface{}) error { + conn := meta.(*AWSClient).dmsconn + + request := &dms.CreateReplicationSubnetGroupInput{ + ReplicationSubnetGroupIdentifier: aws.String(d.Get("replication_subnet_group_id").(string)), + ReplicationSubnetGroupDescription: aws.String(d.Get("replication_subnet_group_description").(string)), + SubnetIds: expandStringList(d.Get("subnet_ids").(*schema.Set).List()), + Tags: dmsTagsFromMap(d.Get("tags").(map[string]interface{})), + } + + log.Println("[DEBUG] DMS create replication subnet group:", request) + + _, err := conn.CreateReplicationSubnetGroup(request) + if err != nil { + return err + } + + d.SetId(d.Get("replication_subnet_group_id").(string)) + return resourceAwsDmsReplicationSubnetGroupRead(d, meta) +} + +func resourceAwsDmsReplicationSubnetGroupRead(d *schema.ResourceData, meta interface{}) error { + conn := meta.(*AWSClient).dmsconn + + response, err := conn.DescribeReplicationSubnetGroups(&dms.DescribeReplicationSubnetGroupsInput{ + Filters: []*dms.Filter{ + { + Name: aws.String("replication-subnet-group-id"), + Values: []*string{aws.String(d.Id())}, // Must use d.Id() to work with import. + }, + }, + }) + if err != nil { + return err + } + if len(response.ReplicationSubnetGroups) == 0 { + d.SetId("") + return nil + } + + // The AWS API for DMS subnet groups does not return the ARN which is required to + // retrieve tags. This ARN can be built. + d.Set("replication_subnet_group_arn", fmt.Sprintf("arn:aws:dms:%s:%s:subgrp:%s", + meta.(*AWSClient).region, meta.(*AWSClient).accountid, d.Id())) + + err = resourceAwsDmsReplicationSubnetGroupSetState(d, response.ReplicationSubnetGroups[0]) + if err != nil { + return err + } + + tagsResp, err := conn.ListTagsForResource(&dms.ListTagsForResourceInput{ + ResourceArn: aws.String(d.Get("replication_subnet_group_arn").(string)), + }) + if err != nil { + return err + } + d.Set("tags", dmsTagsToMap(tagsResp.TagList)) + + return nil +} + +func resourceAwsDmsReplicationSubnetGroupUpdate(d *schema.ResourceData, meta interface{}) error { + conn := meta.(*AWSClient).dmsconn + + // Updates to subnet groups are only valid when sending SubnetIds even if there are no + // changes to SubnetIds. + request := &dms.ModifyReplicationSubnetGroupInput{ + ReplicationSubnetGroupIdentifier: aws.String(d.Get("replication_subnet_group_id").(string)), + SubnetIds: expandStringList(d.Get("subnet_ids").(*schema.Set).List()), + } + + if d.HasChange("replication_subnet_group_description") { + request.ReplicationSubnetGroupDescription = aws.String(d.Get("replication_subnet_group_description").(string)) + } + + if d.HasChange("tags") { + err := dmsSetTags(d.Get("replication_subnet_group_arn").(string), d, meta) + if err != nil { + return err + } + } + + log.Println("[DEBUG] DMS update replication subnet group:", request) + + _, err := conn.ModifyReplicationSubnetGroup(request) + if err != nil { + return err + } + + return resourceAwsDmsReplicationSubnetGroupRead(d, meta) +} + +func resourceAwsDmsReplicationSubnetGroupDelete(d *schema.ResourceData, meta interface{}) error { + conn := meta.(*AWSClient).dmsconn + + request := &dms.DeleteReplicationSubnetGroupInput{ + ReplicationSubnetGroupIdentifier: aws.String(d.Get("replication_subnet_group_id").(string)), + } + + log.Printf("[DEBUG] DMS delete replication subnet group: %#v", request) + + _, err := conn.DeleteReplicationSubnetGroup(request) + if err != nil { + return err + } + + return nil +} + +func resourceAwsDmsReplicationSubnetGroupSetState(d *schema.ResourceData, group *dms.ReplicationSubnetGroup) error { + d.SetId(*group.ReplicationSubnetGroupIdentifier) + + subnet_ids := []string{} + for _, subnet := range group.Subnets { + subnet_ids = append(subnet_ids, aws.StringValue(subnet.SubnetIdentifier)) + } + + d.Set("replication_subnet_group_description", group.ReplicationSubnetGroupDescription) + d.Set("replication_subnet_group_id", group.ReplicationSubnetGroupIdentifier) + d.Set("subnet_ids", subnet_ids) + d.Set("vpc_id", group.VpcId) + + return nil +} diff --git a/builtin/providers/aws/resource_aws_dms_replication_subnet_group_test.go b/builtin/providers/aws/resource_aws_dms_replication_subnet_group_test.go new file mode 100644 index 000000000..574745f9e --- /dev/null +++ b/builtin/providers/aws/resource_aws_dms_replication_subnet_group_test.go @@ -0,0 +1,226 @@ +package aws + +import ( + "fmt" + "testing" + + "github.com/aws/aws-sdk-go/aws" + dms "github.com/aws/aws-sdk-go/service/databasemigrationservice" + "github.com/hashicorp/terraform/helper/acctest" + "github.com/hashicorp/terraform/helper/resource" + "github.com/hashicorp/terraform/helper/schema" + "github.com/hashicorp/terraform/terraform" +) + +func TestAccAwsDmsReplicationSubnetGroupBasic(t *testing.T) { + resourceName := "aws_dms_replication_subnet_group.dms_replication_subnet_group" + randId := acctest.RandString(8) + + resource.Test(t, resource.TestCase{ + PreCheck: func() { testAccPreCheck(t) }, + Providers: testAccProviders, + CheckDestroy: dmsReplicationSubnetGroupDestroy, + Steps: []resource.TestStep{ + { + Config: dmsReplicationSubnetGroupConfig(randId), + Check: resource.ComposeTestCheckFunc( + checkDmsReplicationSubnetGroupExists(resourceName), + resource.TestCheckResourceAttrSet(resourceName, "vpc_id"), + ), + }, + { + ResourceName: resourceName, + ImportState: true, + ImportStateVerify: true, + }, + { + Config: dmsReplicationSubnetGroupConfigUpdate(randId), + Check: resource.ComposeTestCheckFunc( + checkDmsReplicationSubnetGroupExists(resourceName), + ), + }, + }, + }) +} + +func checkDmsReplicationSubnetGroupExists(n string) resource.TestCheckFunc { + providers := []*schema.Provider{testAccProvider} + return checkDmsReplicationSubnetGroupExistsWithProviders(n, &providers) +} + +func checkDmsReplicationSubnetGroupExistsWithProviders(n string, providers *[]*schema.Provider) resource.TestCheckFunc { + return func(s *terraform.State) error { + rs, ok := s.RootModule().Resources[n] + if !ok { + return fmt.Errorf("Not found: %s", n) + } + + if rs.Primary.ID == "" { + return fmt.Errorf("No ID is set") + } + for _, provider := range *providers { + // Ignore if Meta is empty, this can happen for validation providers + if provider.Meta() == nil { + continue + } + + conn := provider.Meta().(*AWSClient).dmsconn + _, err := conn.DescribeReplicationSubnetGroups(&dms.DescribeReplicationSubnetGroupsInput{ + Filters: []*dms.Filter{ + { + Name: aws.String("replication-subnet-group-id"), + Values: []*string{aws.String(rs.Primary.ID)}, + }, + }, + }) + + if err != nil { + return fmt.Errorf("DMS replication subnet group error: %v", err) + } + return nil + } + + return fmt.Errorf("DMS replication subnet group not found") + } +} + +func dmsReplicationSubnetGroupDestroy(s *terraform.State) error { + for _, rs := range s.RootModule().Resources { + if rs.Type != "aws_dms_replication_subnet_group" { + continue + } + + err := checkDmsReplicationSubnetGroupExists(rs.Primary.ID) + if err == nil { + return fmt.Errorf("Found replication subnet group that was not destroyed: %s", rs.Primary.ID) + } + } + + return nil +} + +func dmsReplicationSubnetGroupConfig(randId string) string { + return fmt.Sprintf(` +resource "aws_iam_role" "dms_iam_role" { + name = "dms-vpc-role" + assume_role_policy = "{\"Version\":\"2012-10-17\",\"Statement\":[{\"Sid\":\"\",\"Effect\":\"Allow\",\"Principal\":{\"Service\":\"dms.amazonaws.com\"},\"Action\":\"sts:AssumeRole\"}]}" +} + +resource "aws_iam_role_policy_attachment" "dms_iam_role_policy" { + role = "${aws_iam_role.dms_iam_role.name}" + policy_arn = "arn:aws:iam::aws:policy/service-role/AmazonDMSVPCManagementRole" +} + +resource "aws_vpc" "dms_vpc" { + cidr_block = "10.1.0.0/16" + tags { + Name = "tf-test-dms-vpc-%[1]s" + } + depends_on = ["aws_iam_role_policy_attachment.dms_iam_role_policy"] +} + +resource "aws_subnet" "dms_subnet_1" { + cidr_block = "10.1.1.0/24" + availability_zone = "us-west-2a" + vpc_id = "${aws_vpc.dms_vpc.id}" + tags { + Name = "tf-test-dms-subnet-%[1]s" + } + depends_on = ["aws_vpc.dms_vpc"] +} + +resource "aws_subnet" "dms_subnet_2" { + cidr_block = "10.1.2.0/24" + availability_zone = "us-west-2b" + vpc_id = "${aws_vpc.dms_vpc.id}" + tags { + Name = "tf-test-dms-subnet-%[1]s" + } + depends_on = ["aws_vpc.dms_vpc"] +} + +resource "aws_subnet" "dms_subnet_3" { + cidr_block = "10.1.3.0/24" + availability_zone = "us-west-2b" + vpc_id = "${aws_vpc.dms_vpc.id}" + tags { + Name = "tf-test-dms-subnet-%[1]s" + } + depends_on = ["aws_vpc.dms_vpc"] +} + +resource "aws_dms_replication_subnet_group" "dms_replication_subnet_group" { + replication_subnet_group_id = "tf-test-dms-replication-subnet-group-%[1]s" + replication_subnet_group_description = "terraform test for replication subnet group" + subnet_ids = ["${aws_subnet.dms_subnet_1.id}", "${aws_subnet.dms_subnet_2.id}"] + tags { + Name = "tf-test-dms-replication-subnet-group-%[1]s" + Update = "to-update" + Remove = "to-remove" + } +} +`, randId) +} + +func dmsReplicationSubnetGroupConfigUpdate(randId string) string { + return fmt.Sprintf(` +resource "aws_iam_role" "dms_iam_role" { + name = "dms-vpc-role" + assume_role_policy = "{\"Version\":\"2012-10-17\",\"Statement\":[{\"Sid\":\"\",\"Effect\":\"Allow\",\"Principal\":{\"Service\":\"dms.amazonaws.com\"},\"Action\":\"sts:AssumeRole\"}]}" +} + +resource "aws_iam_role_policy_attachment" "dms_iam_role_policy" { + role = "${aws_iam_role.dms_iam_role.name}" + policy_arn = "arn:aws:iam::aws:policy/service-role/AmazonDMSVPCManagementRole" +} + +resource "aws_vpc" "dms_vpc" { + cidr_block = "10.1.0.0/16" + tags { + Name = "tf-test-dms-vpc-%[1]s" + } + depends_on = ["aws_iam_role_policy_attachment.dms_iam_role_policy"] +} + +resource "aws_subnet" "dms_subnet_1" { + cidr_block = "10.1.1.0/24" + availability_zone = "us-west-2a" + vpc_id = "${aws_vpc.dms_vpc.id}" + tags { + Name = "tf-test-dms-subnet-%[1]s" + } + depends_on = ["aws_vpc.dms_vpc"] +} + +resource "aws_subnet" "dms_subnet_2" { + cidr_block = "10.1.2.0/24" + availability_zone = "us-west-2b" + vpc_id = "${aws_vpc.dms_vpc.id}" + tags { + Name = "tf-test-dms-subnet-%[1]s" + } + depends_on = ["aws_vpc.dms_vpc"] +} + +resource "aws_subnet" "dms_subnet_3" { + cidr_block = "10.1.3.0/24" + availability_zone = "us-west-2b" + vpc_id = "${aws_vpc.dms_vpc.id}" + tags { + Name = "tf-test-dms-subnet-%[1]s" + } + depends_on = ["aws_vpc.dms_vpc"] +} + +resource "aws_dms_replication_subnet_group" "dms_replication_subnet_group" { + replication_subnet_group_id = "tf-test-dms-replication-subnet-group-%[1]s" + replication_subnet_group_description = "terraform test for replication subnet group" + subnet_ids = ["${aws_subnet.dms_subnet_1.id}", "${aws_subnet.dms_subnet_3.id}"] + tags { + Name = "tf-test-dms-replication-subnet-group-%[1]s" + Update = "updated" + Add = "added" + } +} +`, randId) +} diff --git a/builtin/providers/aws/resource_aws_dms_replication_task.go b/builtin/providers/aws/resource_aws_dms_replication_task.go new file mode 100644 index 000000000..c797b82c5 --- /dev/null +++ b/builtin/providers/aws/resource_aws_dms_replication_task.go @@ -0,0 +1,377 @@ +package aws + +import ( + "fmt" + "log" + "strconv" + "time" + + "github.com/aws/aws-sdk-go/aws" + "github.com/aws/aws-sdk-go/aws/awserr" + "github.com/aws/aws-sdk-go/private/waiter" + dms "github.com/aws/aws-sdk-go/service/databasemigrationservice" + "github.com/hashicorp/terraform/helper/schema" + "github.com/hashicorp/terraform/helper/validation" +) + +func resourceAwsDmsReplicationTask() *schema.Resource { + return &schema.Resource{ + Create: resourceAwsDmsReplicationTaskCreate, + Read: resourceAwsDmsReplicationTaskRead, + Update: resourceAwsDmsReplicationTaskUpdate, + Delete: resourceAwsDmsReplicationTaskDelete, + + Importer: &schema.ResourceImporter{ + State: schema.ImportStatePassthrough, + }, + + Schema: map[string]*schema.Schema{ + "cdc_start_time": { + Type: schema.TypeInt, + Optional: true, + // Requires a Unix timestamp in seconds. Example 1484346880 + }, + "migration_type": { + Type: schema.TypeString, + Required: true, + ValidateFunc: validation.StringInSlice([]string{ + "full-load", + "cdc", + "full-load-and-cdc", + }, false), + }, + "replication_instance_arn": { + Type: schema.TypeString, + Required: true, + ForceNew: true, + ValidateFunc: validateArn, + }, + "replication_task_arn": { + Type: schema.TypeString, + Computed: true, + }, + "replication_task_id": { + Type: schema.TypeString, + Required: true, + ForceNew: true, + ValidateFunc: validateDmsReplicationTaskId, + }, + "replication_task_settings": { + Type: schema.TypeString, + Optional: true, + ValidateFunc: validateJsonString, + }, + "source_endpoint_arn": { + Type: schema.TypeString, + Required: true, + ForceNew: true, + ValidateFunc: validateArn, + }, + "table_mappings": { + Type: schema.TypeString, + Required: true, + ValidateFunc: validateJsonString, + }, + "tags": { + Type: schema.TypeMap, + Optional: true, + }, + "target_endpoint_arn": { + Type: schema.TypeString, + Required: true, + ForceNew: true, + ValidateFunc: validateArn, + }, + }, + } +} + +func resourceAwsDmsReplicationTaskCreate(d *schema.ResourceData, meta interface{}) error { + conn := meta.(*AWSClient).dmsconn + + request := &dms.CreateReplicationTaskInput{ + MigrationType: aws.String(d.Get("migration_type").(string)), + ReplicationInstanceArn: aws.String(d.Get("replication_instance_arn").(string)), + ReplicationTaskIdentifier: aws.String(d.Get("replication_task_id").(string)), + SourceEndpointArn: aws.String(d.Get("source_endpoint_arn").(string)), + TableMappings: aws.String(d.Get("table_mappings").(string)), + Tags: dmsTagsFromMap(d.Get("tags").(map[string]interface{})), + TargetEndpointArn: aws.String(d.Get("target_endpoint_arn").(string)), + } + + if v, ok := d.GetOk("cdc_start_time"); ok { + seconds, err := strconv.ParseInt(v.(string), 10, 64) + if err != nil { + return fmt.Errorf("[ERROR] DMS create replication task. Invalid CDC Unix timestamp: %s", err) + } + request.CdcStartTime = aws.Time(time.Unix(seconds, 0)) + } + + if v, ok := d.GetOk("replication_task_settings"); ok { + request.ReplicationTaskSettings = aws.String(v.(string)) + } + + log.Println("[DEBUG] DMS create replication task:", request) + + _, err := conn.CreateReplicationTask(request) + if err != nil { + return err + } + + taskId := d.Get("replication_task_id").(string) + + err = waitForTaskCreated(conn, taskId, 30, 10) + if err != nil { + return err + } + + d.SetId(taskId) + return resourceAwsDmsReplicationTaskRead(d, meta) +} + +func resourceAwsDmsReplicationTaskRead(d *schema.ResourceData, meta interface{}) error { + conn := meta.(*AWSClient).dmsconn + + response, err := conn.DescribeReplicationTasks(&dms.DescribeReplicationTasksInput{ + Filters: []*dms.Filter{ + { + Name: aws.String("replication-task-id"), + Values: []*string{aws.String(d.Id())}, // Must use d.Id() to work with import. + }, + }, + }) + if err != nil { + if dmserr, ok := err.(awserr.Error); ok && dmserr.Code() == "ResourceNotFoundFault" { + d.SetId("") + return nil + } + return err + } + + err = resourceAwsDmsReplicationTaskSetState(d, response.ReplicationTasks[0]) + if err != nil { + return err + } + + tagsResp, err := conn.ListTagsForResource(&dms.ListTagsForResourceInput{ + ResourceArn: aws.String(d.Get("replication_task_arn").(string)), + }) + if err != nil { + return err + } + d.Set("tags", dmsTagsToMap(tagsResp.TagList)) + + return nil +} + +func resourceAwsDmsReplicationTaskUpdate(d *schema.ResourceData, meta interface{}) error { + conn := meta.(*AWSClient).dmsconn + + request := &dms.ModifyReplicationTaskInput{ + ReplicationTaskArn: aws.String(d.Get("replication_task_arn").(string)), + } + hasChanges := false + + if d.HasChange("cdc_start_time") { + seconds, err := strconv.ParseInt(d.Get("cdc_start_time").(string), 10, 64) + if err != nil { + return fmt.Errorf("[ERROR] DMS update replication task. Invalid CRC Unix timestamp: %s", err) + } + request.CdcStartTime = aws.Time(time.Unix(seconds, 0)) + hasChanges = true + } + + if d.HasChange("migration_type") { + request.MigrationType = aws.String(d.Get("migration_type").(string)) + hasChanges = true + } + + if d.HasChange("replication_task_settings") { + request.ReplicationTaskSettings = aws.String(d.Get("replication_task_settings").(string)) + hasChanges = true + } + + if d.HasChange("table_mappings") { + request.TableMappings = aws.String(d.Get("table_mappings").(string)) + hasChanges = true + } + + if d.HasChange("tags") { + err := dmsSetTags(d.Get("replication_task_arn").(string), d, meta) + if err != nil { + return err + } + } + + if hasChanges { + log.Println("[DEBUG] DMS update replication task:", request) + + _, err := conn.ModifyReplicationTask(request) + if err != nil { + return err + } + + err = waitForTaskUpdated(conn, d.Get("replication_task_id").(string), 30, 10) + if err != nil { + return err + } + + return resourceAwsDmsReplicationTaskRead(d, meta) + } + + return nil +} + +func resourceAwsDmsReplicationTaskDelete(d *schema.ResourceData, meta interface{}) error { + conn := meta.(*AWSClient).dmsconn + + request := &dms.DeleteReplicationTaskInput{ + ReplicationTaskArn: aws.String(d.Get("replication_task_arn").(string)), + } + + log.Printf("[DEBUG] DMS delete replication task: %#v", request) + + _, err := conn.DeleteReplicationTask(request) + if err != nil { + return err + } + + waitErr := waitForTaskDeleted(conn, d.Get("replication_task_id").(string), 30, 10) + if waitErr != nil { + return waitErr + } + + return nil +} + +func resourceAwsDmsReplicationTaskSetState(d *schema.ResourceData, task *dms.ReplicationTask) error { + d.SetId(*task.ReplicationTaskIdentifier) + + d.Set("migration_type", task.MigrationType) + d.Set("replication_instance_arn", task.ReplicationInstanceArn) + d.Set("replication_task_arn", task.ReplicationTaskArn) + d.Set("replication_task_id", task.ReplicationTaskIdentifier) + d.Set("replication_task_settings", task.ReplicationTaskSettings) + d.Set("source_endpoint_arn", task.SourceEndpointArn) + d.Set("table_mappings", task.TableMappings) + d.Set("target_endpoint_arn", task.TargetEndpointArn) + + return nil +} + +func waitForTaskCreated(client *dms.DatabaseMigrationService, id string, delay int, maxAttempts int) error { + input := &dms.DescribeReplicationTasksInput{ + Filters: []*dms.Filter{ + { + Name: aws.String("replication-task-id"), + Values: []*string{aws.String(id)}, + }, + }, + } + + config := waiter.Config{ + Operation: "DescribeReplicationTasks", + Delay: delay, + MaxAttempts: maxAttempts, + Acceptors: []waiter.WaitAcceptor{ + { + State: "retry", + Matcher: "pathAll", + Argument: "ReplicationTasks[].Status", + Expected: "creating", + }, + { + State: "success", + Matcher: "pathAll", + Argument: "ReplicationTasks[].Status", + Expected: "ready", + }, + }, + } + + w := waiter.Waiter{ + Client: client, + Input: input, + Config: config, + } + + return w.Wait() +} + +func waitForTaskUpdated(client *dms.DatabaseMigrationService, id string, delay int, maxAttempts int) error { + input := &dms.DescribeReplicationTasksInput{ + Filters: []*dms.Filter{ + { + Name: aws.String("replication-task-id"), + Values: []*string{aws.String(id)}, + }, + }, + } + + config := waiter.Config{ + Operation: "DescribeReplicationTasks", + Delay: delay, + MaxAttempts: maxAttempts, + Acceptors: []waiter.WaitAcceptor{ + { + State: "retry", + Matcher: "pathAll", + Argument: "ReplicationTasks[].Status", + Expected: "modifying", + }, + { + State: "success", + Matcher: "pathAll", + Argument: "ReplicationTasks[].Status", + Expected: "ready", + }, + }, + } + + w := waiter.Waiter{ + Client: client, + Input: input, + Config: config, + } + + return w.Wait() +} + +func waitForTaskDeleted(client *dms.DatabaseMigrationService, id string, delay int, maxAttempts int) error { + input := &dms.DescribeReplicationTasksInput{ + Filters: []*dms.Filter{ + { + Name: aws.String("replication-task-id"), + Values: []*string{aws.String(id)}, + }, + }, + } + + config := waiter.Config{ + Operation: "DescribeReplicationTasks", + Delay: delay, + MaxAttempts: maxAttempts, + Acceptors: []waiter.WaitAcceptor{ + { + State: "retry", + Matcher: "pathAll", + Argument: "ReplicationTasks[].Status", + Expected: "deleting", + }, + { + State: "success", + Matcher: "path", + Argument: "length(ReplicationTasks[]) > `0`", + Expected: false, + }, + }, + } + + w := waiter.Waiter{ + Client: client, + Input: input, + Config: config, + } + + return w.Wait() +} diff --git a/builtin/providers/aws/resource_aws_dms_replication_task_test.go b/builtin/providers/aws/resource_aws_dms_replication_task_test.go new file mode 100644 index 000000000..07ac7f58f --- /dev/null +++ b/builtin/providers/aws/resource_aws_dms_replication_task_test.go @@ -0,0 +1,296 @@ +package aws + +import ( + "fmt" + "testing" + + "github.com/aws/aws-sdk-go/aws" + dms "github.com/aws/aws-sdk-go/service/databasemigrationservice" + "github.com/hashicorp/terraform/helper/acctest" + "github.com/hashicorp/terraform/helper/resource" + "github.com/hashicorp/terraform/helper/schema" + "github.com/hashicorp/terraform/terraform" +) + +func TestAccAwsDmsReplicationTaskBasic(t *testing.T) { + resourceName := "aws_dms_replication_task.dms_replication_task" + randId := acctest.RandString(8) + + resource.Test(t, resource.TestCase{ + PreCheck: func() { testAccPreCheck(t) }, + Providers: testAccProviders, + CheckDestroy: dmsReplicationTaskDestroy, + Steps: []resource.TestStep{ + { + Config: dmsReplicationTaskConfig(randId), + Check: resource.ComposeTestCheckFunc( + checkDmsReplicationTaskExists(resourceName), + resource.TestCheckResourceAttrSet(resourceName, "replication_task_arn"), + ), + }, + { + ResourceName: resourceName, + ImportState: true, + ImportStateVerify: true, + }, + { + Config: dmsReplicationTaskConfigUpdate(randId), + Check: resource.ComposeTestCheckFunc( + checkDmsReplicationTaskExists(resourceName), + ), + }, + }, + }) +} + +func checkDmsReplicationTaskExists(n string) resource.TestCheckFunc { + providers := []*schema.Provider{testAccProvider} + return checkDmsReplicationTaskExistsWithProviders(n, &providers) +} + +func checkDmsReplicationTaskExistsWithProviders(n string, providers *[]*schema.Provider) resource.TestCheckFunc { + return func(s *terraform.State) error { + rs, ok := s.RootModule().Resources[n] + if !ok { + return fmt.Errorf("Not found: %s", n) + } + + if rs.Primary.ID == "" { + return fmt.Errorf("No ID is set") + } + for _, provider := range *providers { + // Ignore if Meta is empty, this can happen for validation providers + if provider.Meta() == nil { + continue + } + + conn := provider.Meta().(*AWSClient).dmsconn + _, err := conn.DescribeReplicationTasks(&dms.DescribeReplicationTasksInput{ + Filters: []*dms.Filter{ + { + Name: aws.String("replication-task-id"), + Values: []*string{aws.String(rs.Primary.ID)}, + }, + }, + }) + + if err != nil { + return fmt.Errorf("DMS replication subnet group error: %v", err) + } + return nil + } + + return fmt.Errorf("DMS replication subnet group not found") + } +} + +func dmsReplicationTaskDestroy(s *terraform.State) error { + for _, rs := range s.RootModule().Resources { + if rs.Type != "aws_dms_replication_task" { + continue + } + + err := checkDmsReplicationTaskExists(rs.Primary.ID) + if err == nil { + return fmt.Errorf("Found replication subnet group that was not destroyed: %s", rs.Primary.ID) + } + } + + return nil +} + +func dmsReplicationTaskConfig(randId string) string { + return fmt.Sprintf(` +resource "aws_iam_role" "dms_iam_role" { + name = "dms-vpc-role" + assume_role_policy = "{\"Version\":\"2012-10-17\",\"Statement\":[{\"Sid\":\"\",\"Effect\":\"Allow\",\"Principal\":{\"Service\":\"dms.amazonaws.com\"},\"Action\":\"sts:AssumeRole\"}]}" +} + +resource "aws_iam_role_policy_attachment" "dms_iam_role_policy" { + role = "${aws_iam_role.dms_iam_role.name}" + policy_arn = "arn:aws:iam::aws:policy/service-role/AmazonDMSVPCManagementRole" +} + +resource "aws_vpc" "dms_vpc" { + cidr_block = "10.1.0.0/16" + tags { + Name = "tf-test-dms-vpc-%[1]s" + } + depends_on = ["aws_iam_role_policy_attachment.dms_iam_role_policy"] +} + +resource "aws_subnet" "dms_subnet_1" { + cidr_block = "10.1.1.0/24" + availability_zone = "us-west-2a" + vpc_id = "${aws_vpc.dms_vpc.id}" + tags { + Name = "tf-test-dms-subnet-%[1]s" + } + depends_on = ["aws_vpc.dms_vpc"] +} + +resource "aws_subnet" "dms_subnet_2" { + cidr_block = "10.1.2.0/24" + availability_zone = "us-west-2b" + vpc_id = "${aws_vpc.dms_vpc.id}" + tags { + Name = "tf-test-dms-subnet-%[1]s" + } + depends_on = ["aws_vpc.dms_vpc"] +} + +resource "aws_dms_endpoint" "dms_endpoint_source" { + database_name = "tf-test-dms-db" + endpoint_id = "tf-test-dms-endpoint-source-%[1]s" + endpoint_type = "source" + engine_name = "aurora" + server_name = "tf-test-cluster.cluster-xxxxxxx.us-west-2.rds.amazonaws.com" + port = 3306 + username = "tftest" + password = "tftest" + depends_on = ["aws_iam_role_policy_attachment.dms_iam_role_policy"] +} + +resource "aws_dms_endpoint" "dms_endpoint_target" { + database_name = "tf-test-dms-db" + endpoint_id = "tf-test-dms-endpoint-target-%[1]s" + endpoint_type = "target" + engine_name = "aurora" + server_name = "tf-test-cluster.cluster-xxxxxxx.us-west-2.rds.amazonaws.com" + port = 3306 + username = "tftest" + password = "tftest" + depends_on = ["aws_iam_role_policy_attachment.dms_iam_role_policy"] +} + +resource "aws_dms_replication_subnet_group" "dms_replication_subnet_group" { + replication_subnet_group_id = "tf-test-dms-replication-subnet-group-%[1]s" + replication_subnet_group_description = "terraform test for replication subnet group" + subnet_ids = ["${aws_subnet.dms_subnet_1.id}", "${aws_subnet.dms_subnet_2.id}"] + depends_on = ["aws_iam_role_policy_attachment.dms_iam_role_policy"] +} + +resource "aws_dms_replication_instance" "dms_replication_instance" { + allocated_storage = 5 + auto_minor_version_upgrade = true + replication_instance_class = "dms.t2.micro" + replication_instance_id = "tf-test-dms-replication-instance-%[1]s" + preferred_maintenance_window = "sun:00:30-sun:02:30" + publicly_accessible = false + replication_subnet_group_id = "${aws_dms_replication_subnet_group.dms_replication_subnet_group.replication_subnet_group_id}" +} + +resource "aws_dms_replication_task" "dms_replication_task" { + migration_type = "full-load" + replication_instance_arn = "${aws_dms_replication_instance.dms_replication_instance.replication_instance_arn}" + replication_task_id = "tf-test-dms-replication-task-%[1]s" + replication_task_settings = "{\"TargetMetadata\":{\"TargetSchema\":\"\",\"SupportLobs\":true,\"FullLobMode\":false,\"LobChunkSize\":0,\"LimitedSizeLobMode\":true,\"LobMaxSize\":32,\"LoadMaxFileSize\":0,\"ParallelLoadThreads\":0,\"BatchApplyEnabled\":false},\"FullLoadSettings\":{\"FullLoadEnabled\":true,\"ApplyChangesEnabled\":false,\"TargetTablePrepMode\":\"DROP_AND_CREATE\",\"CreatePkAfterFullLoad\":false,\"StopTaskCachedChangesApplied\":false,\"StopTaskCachedChangesNotApplied\":false,\"ResumeEnabled\":false,\"ResumeMinTableSize\":100000,\"ResumeOnlyClusteredPKTables\":true,\"MaxFullLoadSubTasks\":8,\"TransactionConsistencyTimeout\":600,\"CommitRate\":10000},\"Logging\":{\"EnableLogging\":false,\"LogComponents\":[{\"Id\":\"SOURCE_UNLOAD\",\"Severity\":\"LOGGER_SEVERITY_DEFAULT\"},{\"Id\":\"TARGET_LOAD\",\"Severity\":\"LOGGER_SEVERITY_DEFAULT\"},{\"Id\":\"SOURCE_CAPTURE\",\"Severity\":\"LOGGER_SEVERITY_DEFAULT\"},{\"Id\":\"TARGET_APPLY\",\"Severity\":\"LOGGER_SEVERITY_DEFAULT\"},{\"Id\":\"TASK_MANAGER\",\"Severity\":\"LOGGER_SEVERITY_DEFAULT\"}],\"CloudWatchLogGroup\":null,\"CloudWatchLogStream\":null},\"ControlTablesSettings\":{\"historyTimeslotInMinutes\":5,\"ControlSchema\":\"\",\"HistoryTimeslotInMinutes\":5,\"HistoryTableEnabled\":false,\"SuspendedTablesTableEnabled\":false,\"StatusTableEnabled\":false},\"StreamBufferSettings\":{\"StreamBufferCount\":3,\"StreamBufferSizeInMB\":8,\"CtrlStreamBufferSizeInMB\":5},\"ChangeProcessingDdlHandlingPolicy\":{\"HandleSourceTableDropped\":true,\"HandleSourceTableTruncated\":true,\"HandleSourceTableAltered\":true},\"ErrorBehavior\":{\"DataErrorPolicy\":\"LOG_ERROR\",\"DataTruncationErrorPolicy\":\"LOG_ERROR\",\"DataErrorEscalationPolicy\":\"SUSPEND_TABLE\",\"DataErrorEscalationCount\":0,\"TableErrorPolicy\":\"SUSPEND_TABLE\",\"TableErrorEscalationPolicy\":\"STOP_TASK\",\"TableErrorEscalationCount\":0,\"RecoverableErrorCount\":-1,\"RecoverableErrorInterval\":5,\"RecoverableErrorThrottling\":true,\"RecoverableErrorThrottlingMax\":1800,\"ApplyErrorDeletePolicy\":\"IGNORE_RECORD\",\"ApplyErrorInsertPolicy\":\"LOG_ERROR\",\"ApplyErrorUpdatePolicy\":\"LOG_ERROR\",\"ApplyErrorEscalationPolicy\":\"LOG_ERROR\",\"ApplyErrorEscalationCount\":0,\"FullLoadIgnoreConflicts\":true},\"ChangeProcessingTuning\":{\"BatchApplyPreserveTransaction\":true,\"BatchApplyTimeoutMin\":1,\"BatchApplyTimeoutMax\":30,\"BatchApplyMemoryLimit\":500,\"BatchSplitSize\":0,\"MinTransactionSize\":1000,\"CommitTimeout\":1,\"MemoryLimitTotal\":1024,\"MemoryKeepTime\":60,\"StatementCacheSize\":50}}" + source_endpoint_arn = "${aws_dms_endpoint.dms_endpoint_source.endpoint_arn}" + table_mappings = "{\"rules\":[{\"rule-type\":\"selection\",\"rule-id\":\"1\",\"rule-name\":\"1\",\"object-locator\":{\"schema-name\":\"%%\",\"table-name\":\"%%\"},\"rule-action\":\"include\"}]}" + tags { + Name = "tf-test-dms-replication-task-%[1]s" + Update = "to-update" + Remove = "to-remove" + } + target_endpoint_arn = "${aws_dms_endpoint.dms_endpoint_target.endpoint_arn}" +} +`, randId) +} + +func dmsReplicationTaskConfigUpdate(randId string) string { + return fmt.Sprintf(` +resource "aws_iam_role" "dms_iam_role" { + name = "dms-vpc-role" + assume_role_policy = "{\"Version\":\"2012-10-17\",\"Statement\":[{\"Sid\":\"\",\"Effect\":\"Allow\",\"Principal\":{\"Service\":\"dms.amazonaws.com\"},\"Action\":\"sts:AssumeRole\"}]}" +} + +resource "aws_iam_role_policy_attachment" "dms_iam_role_policy" { + role = "${aws_iam_role.dms_iam_role.name}" + policy_arn = "arn:aws:iam::aws:policy/service-role/AmazonDMSVPCManagementRole" +} + +resource "aws_vpc" "dms_vpc" { + cidr_block = "10.1.0.0/16" + tags { + Name = "tf-test-dms-vpc-%[1]s" + } + depends_on = ["aws_iam_role_policy_attachment.dms_iam_role_policy"] +} + +resource "aws_subnet" "dms_subnet_1" { + cidr_block = "10.1.1.0/24" + availability_zone = "us-west-2a" + vpc_id = "${aws_vpc.dms_vpc.id}" + tags { + Name = "tf-test-dms-subnet-%[1]s" + } + depends_on = ["aws_vpc.dms_vpc"] +} + +resource "aws_subnet" "dms_subnet_2" { + cidr_block = "10.1.2.0/24" + availability_zone = "us-west-2b" + vpc_id = "${aws_vpc.dms_vpc.id}" + tags { + Name = "tf-test-dms-subnet-%[1]s" + } + depends_on = ["aws_vpc.dms_vpc"] +} + +resource "aws_dms_endpoint" "dms_endpoint_source" { + database_name = "tf-test-dms-db" + endpoint_id = "tf-test-dms-endpoint-source-%[1]s" + endpoint_type = "source" + engine_name = "aurora" + server_name = "tf-test-cluster.cluster-xxxxxxx.us-west-2.rds.amazonaws.com" + port = 3306 + username = "tftest" + password = "tftest" + depends_on = ["aws_iam_role_policy_attachment.dms_iam_role_policy"] +} + +resource "aws_dms_endpoint" "dms_endpoint_target" { + database_name = "tf-test-dms-db" + endpoint_id = "tf-test-dms-endpoint-target-%[1]s" + endpoint_type = "target" + engine_name = "aurora" + server_name = "tf-test-cluster.cluster-xxxxxxx.us-west-2.rds.amazonaws.com" + port = 3306 + username = "tftest" + password = "tftest" + depends_on = ["aws_iam_role_policy_attachment.dms_iam_role_policy"] +} + +resource "aws_dms_replication_subnet_group" "dms_replication_subnet_group" { + replication_subnet_group_id = "tf-test-dms-replication-subnet-group-%[1]s" + replication_subnet_group_description = "terraform test for replication subnet group" + subnet_ids = ["${aws_subnet.dms_subnet_1.id}", "${aws_subnet.dms_subnet_2.id}"] + depends_on = ["aws_iam_role_policy_attachment.dms_iam_role_policy"] +} + +resource "aws_dms_replication_instance" "dms_replication_instance" { + allocated_storage = 5 + auto_minor_version_upgrade = true + replication_instance_class = "dms.t2.micro" + replication_instance_id = "tf-test-dms-replication-instance-%[1]s" + preferred_maintenance_window = "sun:00:30-sun:02:30" + publicly_accessible = false + replication_subnet_group_id = "${aws_dms_replication_subnet_group.dms_replication_subnet_group.replication_subnet_group_id}" +} + +resource "aws_dms_replication_task" "dms_replication_task" { + migration_type = "full-load" + replication_instance_arn = "${aws_dms_replication_instance.dms_replication_instance.replication_instance_arn}" + replication_task_id = "tf-test-dms-replication-task-%[1]s" + replication_task_settings = "{\"TargetMetadata\":{\"TargetSchema\":\"\",\"SupportLobs\":true,\"FullLobMode\":false,\"LobChunkSize\":0,\"LimitedSizeLobMode\":true,\"LobMaxSize\":32,\"LoadMaxFileSize\":0,\"ParallelLoadThreads\":0,\"BatchApplyEnabled\":false},\"FullLoadSettings\":{\"FullLoadEnabled\":true,\"ApplyChangesEnabled\":false,\"TargetTablePrepMode\":\"DROP_AND_CREATE\",\"CreatePkAfterFullLoad\":false,\"StopTaskCachedChangesApplied\":false,\"StopTaskCachedChangesNotApplied\":false,\"ResumeEnabled\":false,\"ResumeMinTableSize\":100000,\"ResumeOnlyClusteredPKTables\":true,\"MaxFullLoadSubTasks\":7,\"TransactionConsistencyTimeout\":600,\"CommitRate\":10000},\"Logging\":{\"EnableLogging\":false,\"LogComponents\":[{\"Id\":\"SOURCE_UNLOAD\",\"Severity\":\"LOGGER_SEVERITY_DEFAULT\"},{\"Id\":\"TARGET_LOAD\",\"Severity\":\"LOGGER_SEVERITY_DEFAULT\"},{\"Id\":\"SOURCE_CAPTURE\",\"Severity\":\"LOGGER_SEVERITY_DEFAULT\"},{\"Id\":\"TARGET_APPLY\",\"Severity\":\"LOGGER_SEVERITY_DEFAULT\"},{\"Id\":\"TASK_MANAGER\",\"Severity\":\"LOGGER_SEVERITY_DEFAULT\"}],\"CloudWatchLogGroup\":null,\"CloudWatchLogStream\":null},\"ControlTablesSettings\":{\"historyTimeslotInMinutes\":5,\"ControlSchema\":\"\",\"HistoryTimeslotInMinutes\":5,\"HistoryTableEnabled\":false,\"SuspendedTablesTableEnabled\":false,\"StatusTableEnabled\":false},\"StreamBufferSettings\":{\"StreamBufferCount\":3,\"StreamBufferSizeInMB\":8,\"CtrlStreamBufferSizeInMB\":5},\"ChangeProcessingDdlHandlingPolicy\":{\"HandleSourceTableDropped\":true,\"HandleSourceTableTruncated\":true,\"HandleSourceTableAltered\":true},\"ErrorBehavior\":{\"DataErrorPolicy\":\"LOG_ERROR\",\"DataTruncationErrorPolicy\":\"LOG_ERROR\",\"DataErrorEscalationPolicy\":\"SUSPEND_TABLE\",\"DataErrorEscalationCount\":0,\"TableErrorPolicy\":\"SUSPEND_TABLE\",\"TableErrorEscalationPolicy\":\"STOP_TASK\",\"TableErrorEscalationCount\":0,\"RecoverableErrorCount\":-1,\"RecoverableErrorInterval\":5,\"RecoverableErrorThrottling\":true,\"RecoverableErrorThrottlingMax\":1800,\"ApplyErrorDeletePolicy\":\"IGNORE_RECORD\",\"ApplyErrorInsertPolicy\":\"LOG_ERROR\",\"ApplyErrorUpdatePolicy\":\"LOG_ERROR\",\"ApplyErrorEscalationPolicy\":\"LOG_ERROR\",\"ApplyErrorEscalationCount\":0,\"FullLoadIgnoreConflicts\":true},\"ChangeProcessingTuning\":{\"BatchApplyPreserveTransaction\":true,\"BatchApplyTimeoutMin\":1,\"BatchApplyTimeoutMax\":30,\"BatchApplyMemoryLimit\":500,\"BatchSplitSize\":0,\"MinTransactionSize\":1000,\"CommitTimeout\":1,\"MemoryLimitTotal\":1024,\"MemoryKeepTime\":60,\"StatementCacheSize\":50}}" + source_endpoint_arn = "${aws_dms_endpoint.dms_endpoint_source.endpoint_arn}" + table_mappings = "{\"rules\":[{\"rule-type\":\"selection\",\"rule-id\":\"1\",\"rule-name\":\"1\",\"object-locator\":{\"schema-name\":\"%%\",\"table-name\":\"%%\"},\"rule-action\":\"include\"}]}" + tags { + Name = "tf-test-dms-replication-task-%[1]s" + Update = "updated" + Add = "added" + } + target_endpoint_arn = "${aws_dms_endpoint.dms_endpoint_target.endpoint_arn}" +} +`, randId) +} diff --git a/builtin/providers/aws/tags_dms.go b/builtin/providers/aws/tags_dms.go new file mode 100644 index 000000000..c88050059 --- /dev/null +++ b/builtin/providers/aws/tags_dms.go @@ -0,0 +1,91 @@ +package aws + +import ( + "github.com/aws/aws-sdk-go/aws" + dms "github.com/aws/aws-sdk-go/service/databasemigrationservice" + "github.com/hashicorp/terraform/helper/schema" +) + +func dmsTagsToMap(tags []*dms.Tag) map[string]string { + result := make(map[string]string) + + for _, tag := range tags { + result[*tag.Key] = *tag.Value + } + + return result +} + +func dmsTagsFromMap(m map[string]interface{}) []*dms.Tag { + result := make([]*dms.Tag, 0, len(m)) + + for k, v := range m { + result = append(result, &dms.Tag{ + Key: aws.String(k), + Value: aws.String(v.(string)), + }) + } + + return result +} + +func dmsDiffTags(oldTags, newTags []*dms.Tag) ([]*dms.Tag, []*dms.Tag) { + create := make(map[string]interface{}) + for _, t := range newTags { + create[*t.Key] = *t.Value + } + + remove := []*dms.Tag{} + for _, t := range oldTags { + v, ok := create[*t.Key] + if !ok || v != *t.Value { + remove = append(remove, t) + } + } + + return dmsTagsFromMap(create), remove +} + +func dmsGetTagKeys(tags []*dms.Tag) []*string { + keys := []*string{} + + for _, tag := range tags { + keys = append(keys, tag.Key) + } + + return keys +} + +func dmsSetTags(arn string, d *schema.ResourceData, meta interface{}) error { + conn := meta.(*AWSClient).dmsconn + + if d.HasChange("tags") { + oraw, nraw := d.GetChange("tags") + o := oraw.(map[string]interface{}) + n := nraw.(map[string]interface{}) + + add, remove := dmsDiffTags(dmsTagsFromMap(o), dmsTagsFromMap(n)) + + if len(remove) > 0 { + _, err := conn.RemoveTagsFromResource(&dms.RemoveTagsFromResourceInput{ + ResourceArn: aws.String(arn), + TagKeys: dmsGetTagKeys(remove), + }) + if err != nil { + return err + } + } + + if len(add) > 0 { + _, err := conn.AddTagsToResource(&dms.AddTagsToResourceInput{ + ResourceArn: aws.String(arn), + Tags: add, + }) + if err != nil { + return err + } + } + } + + return nil +} diff --git a/builtin/providers/aws/tags_dms_test.go b/builtin/providers/aws/tags_dms_test.go new file mode 100644 index 000000000..630ace372 --- /dev/null +++ b/builtin/providers/aws/tags_dms_test.go @@ -0,0 +1,114 @@ +package aws + +import ( + "testing" + + "github.com/aws/aws-sdk-go/aws" + dms "github.com/aws/aws-sdk-go/service/databasemigrationservice" + "reflect" +) + +func TestDmsTagsToMap(t *testing.T) { + tags := []*dms.Tag{ + { + Key: aws.String("test-key-1"), + Value: aws.String("test-value-1"), + }, + { + Key: aws.String("test-key-2"), + Value: aws.String("test-value-2"), + }, + } + + result := dmsTagsToMap(tags) + + for _, tag := range tags { + if v, ok := result[*tag.Key]; ok { + if v != *tag.Value { + t.Fatalf("Key %s had value of %s. Expected %s.", *tag.Key, v, *tag.Value) + } + } else { + t.Fatalf("Key %s not in map.", *tag.Key) + } + } +} + +func TestDmsTagsFromMap(t *testing.T) { + tagMap := map[string]interface{}{ + "test-key-1": "test-value-1", + "test-key-2": "test-value-2", + } + + result := dmsTagsFromMap(tagMap) + + for k, v := range tagMap { + found := false + for _, tag := range result { + if k == *tag.Key { + if v != *tag.Value { + t.Fatalf("Key %s had value of %s. Expected %s.", k, v, *tag.Value) + } + found = true + break + } + } + if !found { + t.Fatalf("Key %s not in tags.", k) + } + } +} + +func TestDmsDiffTags(t *testing.T) { + cases := []struct { + o, n map[string]interface{} + a, r map[string]string + }{ + // basic add / remove + { + o: map[string]interface{}{"test-key-1": "test-value-1"}, + n: map[string]interface{}{"test-key-2": "test-value-2"}, + a: map[string]string{"test-key-2": "test-value-2"}, + r: map[string]string{"test-key-1": "test-value-1"}, + }, + // modify + { + o: map[string]interface{}{"test-key-1": "test-value-1"}, + n: map[string]interface{}{"test-key-1": "test-value-1-modified"}, + a: map[string]string{"test-key-1": "test-value-1-modified"}, + r: map[string]string{"test-key-1": "test-value-1"}, + }, + } + + for _, c := range cases { + ar, rr := dmsDiffTags(dmsTagsFromMap(c.o), dmsTagsFromMap(c.n)) + a := dmsTagsToMap(ar) + r := dmsTagsToMap(rr) + + if !reflect.DeepEqual(a, c.a) { + t.Fatalf("Add tags mismatch: Actual %#v; Expected %#v", a, c.a) + } + if !reflect.DeepEqual(r, c.r) { + t.Fatalf("Remove tags mismatch: Actual %#v; Expected %#v", r, c.r) + } + } +} + +func TestDmsGetTagKeys(t *testing.T) { + tags := []*dms.Tag{ + { + Key: aws.String("test-key-1"), + Value: aws.String("test-value-1"), + }, + { + Key: aws.String("test-key-2"), + Value: aws.String("test-value-2"), + }, + } + + result := dmsGetTagKeys(tags) + expected := []*string{aws.String("test-key-1"), aws.String("test-key-2")} + + if !reflect.DeepEqual(result, expected) { + t.Fatalf("Actual %s; Expected %s", aws.StringValueSlice(result), aws.StringValueSlice(expected)) + } +} diff --git a/builtin/providers/aws/validators.go b/builtin/providers/aws/validators.go index 14e86e86e..f55c9549d 100644 --- a/builtin/providers/aws/validators.go +++ b/builtin/providers/aws/validators.go @@ -774,6 +774,95 @@ func validateSfnStateMachineName(v interface{}, k string) (ws []string, errors [ return } +func validateDmsCertificateId(v interface{}, k string) (ws []string, es []error) { + val := v.(string) + + if len(val) > 255 { + es = append(es, fmt.Errorf("%q must not be longer than 255 characters", k)) + } + if !regexp.MustCompile("^[a-zA-Z][a-zA-Z0-9-]+$").MatchString(val) { + es = append(es, fmt.Errorf("%q must start with a letter, only contain alphanumeric characters and hyphens", k)) + } + if strings.Contains(val, "--") { + es = append(es, fmt.Errorf("%q must not contain consecutive hyphens", k)) + } + if strings.HasSuffix(val, "-") { + es = append(es, fmt.Errorf("%q must not end in a hyphen", k)) + } + + return +} + +func validateDmsEndpointId(v interface{}, k string) (ws []string, es []error) { + val := v.(string) + + if len(val) > 255 { + es = append(es, fmt.Errorf("%q must not be longer than 255 characters", k)) + } + if !regexp.MustCompile("^[a-zA-Z][a-zA-Z0-9-]+$").MatchString(val) { + es = append(es, fmt.Errorf("%q must start with a letter, only contain alphanumeric characters and hyphens", k)) + } + if strings.Contains(val, "--") { + es = append(es, fmt.Errorf("%q must not contain consecutive hyphens", k)) + } + if strings.HasSuffix(val, "-") { + es = append(es, fmt.Errorf("%q must not end in a hyphen", k)) + } + + return +} + +func validateDmsReplicationInstanceId(v interface{}, k string) (ws []string, es []error) { + val := v.(string) + + if len(val) > 63 { + es = append(es, fmt.Errorf("%q must not be longer than 63 characters", k)) + } + if !regexp.MustCompile("^[a-zA-Z][a-zA-Z0-9-]+$").MatchString(val) { + es = append(es, fmt.Errorf("%q must start with a letter, only contain alphanumeric characters and hyphens", k)) + } + if strings.Contains(val, "--") { + es = append(es, fmt.Errorf("%q must not contain consecutive hyphens", k)) + } + if strings.HasSuffix(val, "-") { + es = append(es, fmt.Errorf("%q must not end in a hyphen", k)) + } + + return +} + +func validateDmsReplicationSubnetGroupId(v interface{}, k string) (ws []string, es []error) { + val := v.(string) + + if val == "default" { + es = append(es, fmt.Errorf("%q must not be default", k)) + } + if len(val) > 255 { + es = append(es, fmt.Errorf("%q must not be longer than 255 characters", k)) + } + if !regexp.MustCompile(`^[a-zA-Z0-9. _-]+$`).MatchString(val) { + es = append(es, fmt.Errorf("%q must only contain alphanumeric characters, periods, spaces, underscores and hyphens", k)) + } + + return +} + +func validateDmsReplicationTaskId(v interface{}, k string) (ws []string, es []error) { + val := v.(string) + + if len(val) > 255 { + es = append(es, fmt.Errorf("%q must not be longer than 255 characters", k)) + } + if !regexp.MustCompile("^[a-zA-Z][a-zA-Z0-9-]+$").MatchString(val) { + es = append(es, fmt.Errorf("%q must start with a letter, only contain alphanumeric characters and hyphens", k)) + } + if strings.Contains(val, "--") { + es = append(es, fmt.Errorf("%q must not contain consecutive hyphens", k)) + } + if strings.HasSuffix(val, "-") { + es = append(es, fmt.Errorf("%q must not end in a hyphen", k)) + } + func validateAppautoscalingScalableDimension(v interface{}, k string) (ws []string, errors []error) { value := v.(string) dimensions := map[string]bool{ diff --git a/builtin/providers/aws/validators_test.go b/builtin/providers/aws/validators_test.go index 92b6fd633..a49bfeeab 100644 --- a/builtin/providers/aws/validators_test.go +++ b/builtin/providers/aws/validators_test.go @@ -1386,3 +1386,157 @@ func TestValidateAppautoscalingServiceNamespace(t *testing.T) { } } } + +func TestValidateDmsEndpointId(t *testing.T) { + validIds := []string{ + "tf-test-endpoint-1", + "tfTestEndpoint", + } + + for _, s := range validIds { + _, errors := validateDmsEndpointId(s, "endpoint_id") + if len(errors) > 0 { + t.Fatalf("%q should be a valid endpoint id: %v", s, errors) + } + } + + invalidIds := []string{ + "tf_test_endpoint_1", + "tf.test.endpoint.1", + "tf test endpoint 1", + "tf-test-endpoint-1!", + "tf-test-endpoint-1-", + "tf-test-endpoint--1", + "tf-test-endpoint-1tf-test-endpoint-1tf-test-endpoint-1tf-test-endpoint-1tf-test-endpoint-1tf-test-endpoint-1tf-test-endpoint-1tf-test-endpoint-1tf-test-endpoint-1tf-test-endpoint-1tf-test-endpoint-1tf-test-endpoint-1tf-test-endpoint-1tf-test-endpoint-1tf-test-endpoint-1", + } + + for _, s := range invalidIds { + _, errors := validateDmsEndpointId(s, "endpoint_id") + if len(errors) == 0 { + t.Fatalf("%q should not be a valid endpoint id: %v", s, errors) + } + } +} + +func TestValidateDmsCertificateId(t *testing.T) { + validIds := []string{ + "tf-test-certificate-1", + "tfTestEndpoint", + } + + for _, s := range validIds { + _, errors := validateDmsCertificateId(s, "certificate_id") + if len(errors) > 0 { + t.Fatalf("%q should be a valid certificate id: %v", s, errors) + } + } + + invalidIds := []string{ + "tf_test_certificate_1", + "tf.test.certificate.1", + "tf test certificate 1", + "tf-test-certificate-1!", + "tf-test-certificate-1-", + "tf-test-certificate--1", + "tf-test-certificate-1tf-test-certificate-1tf-test-certificate-1tf-test-certificate-1tf-test-certificate-1tf-test-certificate-1tf-test-certificate-1tf-test-certificate-1tf-test-certificate-1tf-test-certificate-1tf-test-certificate-1tf-test-certificate-1tf-test-certificate-1tf-test-certificate-1tf-test-certificate-1", + } + + for _, s := range invalidIds { + _, errors := validateDmsEndpointId(s, "certificate_id") + if len(errors) == 0 { + t.Fatalf("%q should not be a valid certificate id: %v", s, errors) + } + } +} + +func TestValidateDmsReplicationInstanceId(t *testing.T) { + validIds := []string{ + "tf-test-replication-instance-1", + "tfTestReplicaitonInstance", + } + + for _, s := range validIds { + _, errors := validateDmsReplicationInstanceId(s, "replicaiton_instance_id") + if len(errors) > 0 { + t.Fatalf("%q should be a valid replication instance id: %v", s, errors) + } + } + + invalidIds := []string{ + "tf_test_replication-instance_1", + "tf.test.replication.instance.1", + "tf test replication instance 1", + "tf-test-replication-instance-1!", + "tf-test-replication-instance-1-", + "tf-test-replication-instance--1", + "tf-test-replication-instance-1tf-test-replication-instance-1tf-test-replication-instance-1", + } + + for _, s := range invalidIds { + _, errors := validateDmsReplicationInstanceId(s, "replication_instance_id") + if len(errors) == 0 { + t.Fatalf("%q should not be a valid replication instance id: %v", s, errors) + } + } +} + +func TestValidateDmsReplicationSubnetGroupId(t *testing.T) { + validIds := []string{ + "tf-test-replication-subnet-group-1", + "tf_test_replication_subnet_group_1", + "tf.test.replication.subnet.group.1", + "tf test replication subnet group 1", + "tfTestReplicationSubnetGroup", + } + + for _, s := range validIds { + _, errors := validateDmsReplicationSubnetGroupId(s, "replication_subnet_group_id") + if len(errors) > 0 { + t.Fatalf("%q should be a valid replication subnet group id: %v", s, errors) + } + } + + invalidIds := []string{ + "default", + "tf-test-replication-subnet-group-1!", + "tf-test-replication-subnet-group-1tf-test-replication-subnet-group-1tf-test-replication-subnet-group-1tf-test-replication-subnet-group-1tf-test-replication-subnet-group-1tf-test-replication-subnet-group-1tf-test-replication-subnet-group-1tf-test-replication-subnet-group-1", + } + + for _, s := range invalidIds { + _, errors := validateDmsReplicationSubnetGroupId(s, "replication_subnet_group_id") + if len(errors) == 0 { + t.Fatalf("%q should not be a valid replication subnet group id: %v", s, errors) + } + } +} + +func TestValidateDmsReplicationTaskId(t *testing.T) { + validIds := []string{ + "tf-test-replication-task-1", + "tfTestReplicationTask", + } + + for _, s := range validIds { + _, errors := validateDmsReplicationTaskId(s, "replication_task_id") + if len(errors) > 0 { + t.Fatalf("%q should be a valid replication task id: %v", s, errors) + } + } + + invalidIds := []string{ + "tf_test_replication_task_1", + "tf.test.replication.task.1", + "tf test replication task 1", + "tf-test-replication-task-1!", + "tf-test-replication-task-1-", + "tf-test-replication-task--1", + "tf-test-replication-task-1tf-test-replication-task-1tf-test-replication-task-1tf-test-replication-task-1tf-test-replication-task-1tf-test-replication-task-1tf-test-replication-task-1tf-test-replication-task-1tf-test-replication-task-1tf-test-replication-task-1", + } + + for _, s := range invalidIds { + _, errors := validateDmsReplicationTaskId(s, "replication_task_id") + if len(errors) == 0 { + t.Fatalf("%q should not be a valid replication task id: %v", s, errors) + } + } +} diff --git a/vendor/github.com/aws/aws-sdk-go/service/databasemigrationservice/api.go b/vendor/github.com/aws/aws-sdk-go/service/databasemigrationservice/api.go new file mode 100644 index 000000000..b2a1c51fe --- /dev/null +++ b/vendor/github.com/aws/aws-sdk-go/service/databasemigrationservice/api.go @@ -0,0 +1,7100 @@ +// THIS FILE IS AUTOMATICALLY GENERATED. DO NOT EDIT. + +// Package databasemigrationservice provides a client for AWS Database Migration Service. +package databasemigrationservice + +import ( + "fmt" + "time" + + "github.com/aws/aws-sdk-go/aws/awsutil" + "github.com/aws/aws-sdk-go/aws/request" +) + +const opAddTagsToResource = "AddTagsToResource" + +// AddTagsToResourceRequest generates a "aws/request.Request" representing the +// client's request for the AddTagsToResource operation. The "output" return +// value can be used to capture response data after the request's "Send" method +// is called. +// +// See AddTagsToResource for usage and error information. +// +// 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 AddTagsToResource 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 AddTagsToResourceRequest method. +// req, resp := client.AddTagsToResourceRequest(params) +// +// err := req.Send() +// if err == nil { // resp is now filled +// fmt.Println(resp) +// } +// +// Please also see https://docs.aws.amazon.com/goto/WebAPI/dms-2016-01-01/AddTagsToResource +func (c *DatabaseMigrationService) AddTagsToResourceRequest(input *AddTagsToResourceInput) (req *request.Request, output *AddTagsToResourceOutput) { + op := &request.Operation{ + Name: opAddTagsToResource, + HTTPMethod: "POST", + HTTPPath: "/", + } + + if input == nil { + input = &AddTagsToResourceInput{} + } + + output = &AddTagsToResourceOutput{} + req = c.newRequest(op, input, output) + return +} + +// AddTagsToResource API operation for AWS Database Migration Service. +// +// Adds metadata tags to a DMS resource, including replication instance, endpoint, +// security group, and migration task. These tags can also be used with cost +// allocation reporting to track cost associated with DMS resources, or used +// in a Condition statement in an IAM policy for DMS. +// +// Returns awserr.Error for service API and SDK errors. Use runtime type assertions +// with awserr.Error's Code and Message methods to get detailed information about +// the error. +// +// See the AWS API reference guide for AWS Database Migration Service's +// API operation AddTagsToResource for usage and error information. +// +// Returned Error Codes: +// * ResourceNotFoundFault +// The resource could not be found. +// +// Please also see https://docs.aws.amazon.com/goto/WebAPI/dms-2016-01-01/AddTagsToResource +func (c *DatabaseMigrationService) AddTagsToResource(input *AddTagsToResourceInput) (*AddTagsToResourceOutput, error) { + req, out := c.AddTagsToResourceRequest(input) + err := req.Send() + return out, err +} + +const opCreateEndpoint = "CreateEndpoint" + +// CreateEndpointRequest generates a "aws/request.Request" representing the +// client's request for the CreateEndpoint operation. The "output" return +// value can be used to capture response data after the request's "Send" method +// is called. +// +// See CreateEndpoint for usage and error information. +// +// 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 CreateEndpoint 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 CreateEndpointRequest method. +// req, resp := client.CreateEndpointRequest(params) +// +// err := req.Send() +// if err == nil { // resp is now filled +// fmt.Println(resp) +// } +// +// Please also see https://docs.aws.amazon.com/goto/WebAPI/dms-2016-01-01/CreateEndpoint +func (c *DatabaseMigrationService) CreateEndpointRequest(input *CreateEndpointInput) (req *request.Request, output *CreateEndpointOutput) { + op := &request.Operation{ + Name: opCreateEndpoint, + HTTPMethod: "POST", + HTTPPath: "/", + } + + if input == nil { + input = &CreateEndpointInput{} + } + + output = &CreateEndpointOutput{} + req = c.newRequest(op, input, output) + return +} + +// CreateEndpoint API operation for AWS Database Migration Service. +// +// Creates an endpoint using the provided settings. +// +// Returns awserr.Error for service API and SDK errors. Use runtime type assertions +// with awserr.Error's Code and Message methods to get detailed information about +// the error. +// +// See the AWS API reference guide for AWS Database Migration Service's +// API operation CreateEndpoint for usage and error information. +// +// Returned Error Codes: +// * KMSKeyNotAccessibleFault +// AWS DMS cannot access the KMS key. +// +// * ResourceAlreadyExistsFault +// The resource you are attempting to create already exists. +// +// * ResourceQuotaExceededFault +// The quota for this resource quota has been exceeded. +// +// * InvalidResourceStateFault +// The resource is in a state that prevents it from being used for database +// migration. +// +// * ResourceNotFoundFault +// The resource could not be found. +// +// * AccessDeniedFault +// AWS DMS was denied access to the endpoint. +// +// Please also see https://docs.aws.amazon.com/goto/WebAPI/dms-2016-01-01/CreateEndpoint +func (c *DatabaseMigrationService) CreateEndpoint(input *CreateEndpointInput) (*CreateEndpointOutput, error) { + req, out := c.CreateEndpointRequest(input) + err := req.Send() + return out, err +} + +const opCreateReplicationInstance = "CreateReplicationInstance" + +// CreateReplicationInstanceRequest generates a "aws/request.Request" representing the +// client's request for the CreateReplicationInstance operation. The "output" return +// value can be used to capture response data after the request's "Send" method +// is called. +// +// See CreateReplicationInstance for usage and error information. +// +// 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 CreateReplicationInstance 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 CreateReplicationInstanceRequest method. +// req, resp := client.CreateReplicationInstanceRequest(params) +// +// err := req.Send() +// if err == nil { // resp is now filled +// fmt.Println(resp) +// } +// +// Please also see https://docs.aws.amazon.com/goto/WebAPI/dms-2016-01-01/CreateReplicationInstance +func (c *DatabaseMigrationService) CreateReplicationInstanceRequest(input *CreateReplicationInstanceInput) (req *request.Request, output *CreateReplicationInstanceOutput) { + op := &request.Operation{ + Name: opCreateReplicationInstance, + HTTPMethod: "POST", + HTTPPath: "/", + } + + if input == nil { + input = &CreateReplicationInstanceInput{} + } + + output = &CreateReplicationInstanceOutput{} + req = c.newRequest(op, input, output) + return +} + +// CreateReplicationInstance API operation for AWS Database Migration Service. +// +// Creates the replication instance using the specified parameters. +// +// Returns awserr.Error for service API and SDK errors. Use runtime type assertions +// with awserr.Error's Code and Message methods to get detailed information about +// the error. +// +// See the AWS API reference guide for AWS Database Migration Service's +// API operation CreateReplicationInstance for usage and error information. +// +// Returned Error Codes: +// * AccessDeniedFault +// AWS DMS was denied access to the endpoint. +// +// * ResourceAlreadyExistsFault +// The resource you are attempting to create already exists. +// +// * InsufficientResourceCapacityFault +// There are not enough resources allocated to the database migration. +// +// * ResourceQuotaExceededFault +// The quota for this resource quota has been exceeded. +// +// * StorageQuotaExceededFault +// The storage quota has been exceeded. +// +// * ResourceNotFoundFault +// The resource could not be found. +// +// * ReplicationSubnetGroupDoesNotCoverEnoughAZs +// The replication subnet group does not cover enough Availability Zones (AZs). +// Edit the replication subnet group and add more AZs. +// +// * InvalidResourceStateFault +// The resource is in a state that prevents it from being used for database +// migration. +// +// * InvalidSubnet +// The subnet provided is invalid. +// +// * KMSKeyNotAccessibleFault +// AWS DMS cannot access the KMS key. +// +// Please also see https://docs.aws.amazon.com/goto/WebAPI/dms-2016-01-01/CreateReplicationInstance +func (c *DatabaseMigrationService) CreateReplicationInstance(input *CreateReplicationInstanceInput) (*CreateReplicationInstanceOutput, error) { + req, out := c.CreateReplicationInstanceRequest(input) + err := req.Send() + return out, err +} + +const opCreateReplicationSubnetGroup = "CreateReplicationSubnetGroup" + +// CreateReplicationSubnetGroupRequest generates a "aws/request.Request" representing the +// client's request for the CreateReplicationSubnetGroup operation. The "output" return +// value can be used to capture response data after the request's "Send" method +// is called. +// +// See CreateReplicationSubnetGroup for usage and error information. +// +// 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 CreateReplicationSubnetGroup 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 CreateReplicationSubnetGroupRequest method. +// req, resp := client.CreateReplicationSubnetGroupRequest(params) +// +// err := req.Send() +// if err == nil { // resp is now filled +// fmt.Println(resp) +// } +// +// Please also see https://docs.aws.amazon.com/goto/WebAPI/dms-2016-01-01/CreateReplicationSubnetGroup +func (c *DatabaseMigrationService) CreateReplicationSubnetGroupRequest(input *CreateReplicationSubnetGroupInput) (req *request.Request, output *CreateReplicationSubnetGroupOutput) { + op := &request.Operation{ + Name: opCreateReplicationSubnetGroup, + HTTPMethod: "POST", + HTTPPath: "/", + } + + if input == nil { + input = &CreateReplicationSubnetGroupInput{} + } + + output = &CreateReplicationSubnetGroupOutput{} + req = c.newRequest(op, input, output) + return +} + +// CreateReplicationSubnetGroup API operation for AWS Database Migration Service. +// +// Creates a replication subnet group given a list of the subnet IDs in a VPC. +// +// Returns awserr.Error for service API and SDK errors. Use runtime type assertions +// with awserr.Error's Code and Message methods to get detailed information about +// the error. +// +// See the AWS API reference guide for AWS Database Migration Service's +// API operation CreateReplicationSubnetGroup for usage and error information. +// +// Returned Error Codes: +// * AccessDeniedFault +// AWS DMS was denied access to the endpoint. +// +// * ResourceAlreadyExistsFault +// The resource you are attempting to create already exists. +// +// * ResourceNotFoundFault +// The resource could not be found. +// +// * ResourceQuotaExceededFault +// The quota for this resource quota has been exceeded. +// +// * ReplicationSubnetGroupDoesNotCoverEnoughAZs +// The replication subnet group does not cover enough Availability Zones (AZs). +// Edit the replication subnet group and add more AZs. +// +// * InvalidSubnet +// The subnet provided is invalid. +// +// Please also see https://docs.aws.amazon.com/goto/WebAPI/dms-2016-01-01/CreateReplicationSubnetGroup +func (c *DatabaseMigrationService) CreateReplicationSubnetGroup(input *CreateReplicationSubnetGroupInput) (*CreateReplicationSubnetGroupOutput, error) { + req, out := c.CreateReplicationSubnetGroupRequest(input) + err := req.Send() + return out, err +} + +const opCreateReplicationTask = "CreateReplicationTask" + +// CreateReplicationTaskRequest generates a "aws/request.Request" representing the +// client's request for the CreateReplicationTask operation. The "output" return +// value can be used to capture response data after the request's "Send" method +// is called. +// +// See CreateReplicationTask for usage and error information. +// +// 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 CreateReplicationTask 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 CreateReplicationTaskRequest method. +// req, resp := client.CreateReplicationTaskRequest(params) +// +// err := req.Send() +// if err == nil { // resp is now filled +// fmt.Println(resp) +// } +// +// Please also see https://docs.aws.amazon.com/goto/WebAPI/dms-2016-01-01/CreateReplicationTask +func (c *DatabaseMigrationService) CreateReplicationTaskRequest(input *CreateReplicationTaskInput) (req *request.Request, output *CreateReplicationTaskOutput) { + op := &request.Operation{ + Name: opCreateReplicationTask, + HTTPMethod: "POST", + HTTPPath: "/", + } + + if input == nil { + input = &CreateReplicationTaskInput{} + } + + output = &CreateReplicationTaskOutput{} + req = c.newRequest(op, input, output) + return +} + +// CreateReplicationTask API operation for AWS Database Migration Service. +// +// Creates a replication task using the specified parameters. +// +// Returns awserr.Error for service API and SDK errors. Use runtime type assertions +// with awserr.Error's Code and Message methods to get detailed information about +// the error. +// +// See the AWS API reference guide for AWS Database Migration Service's +// API operation CreateReplicationTask for usage and error information. +// +// Returned Error Codes: +// * InvalidResourceStateFault +// The resource is in a state that prevents it from being used for database +// migration. +// +// * ResourceAlreadyExistsFault +// The resource you are attempting to create already exists. +// +// * ResourceNotFoundFault +// The resource could not be found. +// +// * KMSKeyNotAccessibleFault +// AWS DMS cannot access the KMS key. +// +// * ResourceQuotaExceededFault +// The quota for this resource quota has been exceeded. +// +// Please also see https://docs.aws.amazon.com/goto/WebAPI/dms-2016-01-01/CreateReplicationTask +func (c *DatabaseMigrationService) CreateReplicationTask(input *CreateReplicationTaskInput) (*CreateReplicationTaskOutput, error) { + req, out := c.CreateReplicationTaskRequest(input) + err := req.Send() + return out, err +} + +const opDeleteCertificate = "DeleteCertificate" + +// DeleteCertificateRequest generates a "aws/request.Request" representing the +// client's request for the DeleteCertificate operation. The "output" return +// value can be used to capture response data after the request's "Send" method +// is called. +// +// See DeleteCertificate for usage and error information. +// +// 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 DeleteCertificate 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 DeleteCertificateRequest method. +// req, resp := client.DeleteCertificateRequest(params) +// +// err := req.Send() +// if err == nil { // resp is now filled +// fmt.Println(resp) +// } +// +// Please also see https://docs.aws.amazon.com/goto/WebAPI/dms-2016-01-01/DeleteCertificate +func (c *DatabaseMigrationService) DeleteCertificateRequest(input *DeleteCertificateInput) (req *request.Request, output *DeleteCertificateOutput) { + op := &request.Operation{ + Name: opDeleteCertificate, + HTTPMethod: "POST", + HTTPPath: "/", + } + + if input == nil { + input = &DeleteCertificateInput{} + } + + output = &DeleteCertificateOutput{} + req = c.newRequest(op, input, output) + return +} + +// DeleteCertificate API operation for AWS Database Migration Service. +// +// Deletes the specified certificate. +// +// Returns awserr.Error for service API and SDK errors. Use runtime type assertions +// with awserr.Error's Code and Message methods to get detailed information about +// the error. +// +// See the AWS API reference guide for AWS Database Migration Service's +// API operation DeleteCertificate for usage and error information. +// +// Returned Error Codes: +// * ResourceNotFoundFault +// The resource could not be found. +// +// * InvalidResourceStateFault +// The resource is in a state that prevents it from being used for database +// migration. +// +// Please also see https://docs.aws.amazon.com/goto/WebAPI/dms-2016-01-01/DeleteCertificate +func (c *DatabaseMigrationService) DeleteCertificate(input *DeleteCertificateInput) (*DeleteCertificateOutput, error) { + req, out := c.DeleteCertificateRequest(input) + err := req.Send() + return out, err +} + +const opDeleteEndpoint = "DeleteEndpoint" + +// DeleteEndpointRequest generates a "aws/request.Request" representing the +// client's request for the DeleteEndpoint operation. The "output" return +// value can be used to capture response data after the request's "Send" method +// is called. +// +// See DeleteEndpoint for usage and error information. +// +// 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 DeleteEndpoint 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 DeleteEndpointRequest method. +// req, resp := client.DeleteEndpointRequest(params) +// +// err := req.Send() +// if err == nil { // resp is now filled +// fmt.Println(resp) +// } +// +// Please also see https://docs.aws.amazon.com/goto/WebAPI/dms-2016-01-01/DeleteEndpoint +func (c *DatabaseMigrationService) DeleteEndpointRequest(input *DeleteEndpointInput) (req *request.Request, output *DeleteEndpointOutput) { + op := &request.Operation{ + Name: opDeleteEndpoint, + HTTPMethod: "POST", + HTTPPath: "/", + } + + if input == nil { + input = &DeleteEndpointInput{} + } + + output = &DeleteEndpointOutput{} + req = c.newRequest(op, input, output) + return +} + +// DeleteEndpoint API operation for AWS Database Migration Service. +// +// Deletes the specified endpoint. +// +// All tasks associated with the endpoint must be deleted before you can delete +// the endpoint. +// +// Returns awserr.Error for service API and SDK errors. Use runtime type assertions +// with awserr.Error's Code and Message methods to get detailed information about +// the error. +// +// See the AWS API reference guide for AWS Database Migration Service's +// API operation DeleteEndpoint for usage and error information. +// +// Returned Error Codes: +// * ResourceNotFoundFault +// The resource could not be found. +// +// * InvalidResourceStateFault +// The resource is in a state that prevents it from being used for database +// migration. +// +// Please also see https://docs.aws.amazon.com/goto/WebAPI/dms-2016-01-01/DeleteEndpoint +func (c *DatabaseMigrationService) DeleteEndpoint(input *DeleteEndpointInput) (*DeleteEndpointOutput, error) { + req, out := c.DeleteEndpointRequest(input) + err := req.Send() + return out, err +} + +const opDeleteReplicationInstance = "DeleteReplicationInstance" + +// DeleteReplicationInstanceRequest generates a "aws/request.Request" representing the +// client's request for the DeleteReplicationInstance operation. The "output" return +// value can be used to capture response data after the request's "Send" method +// is called. +// +// See DeleteReplicationInstance for usage and error information. +// +// 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 DeleteReplicationInstance 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 DeleteReplicationInstanceRequest method. +// req, resp := client.DeleteReplicationInstanceRequest(params) +// +// err := req.Send() +// if err == nil { // resp is now filled +// fmt.Println(resp) +// } +// +// Please also see https://docs.aws.amazon.com/goto/WebAPI/dms-2016-01-01/DeleteReplicationInstance +func (c *DatabaseMigrationService) DeleteReplicationInstanceRequest(input *DeleteReplicationInstanceInput) (req *request.Request, output *DeleteReplicationInstanceOutput) { + op := &request.Operation{ + Name: opDeleteReplicationInstance, + HTTPMethod: "POST", + HTTPPath: "/", + } + + if input == nil { + input = &DeleteReplicationInstanceInput{} + } + + output = &DeleteReplicationInstanceOutput{} + req = c.newRequest(op, input, output) + return +} + +// DeleteReplicationInstance API operation for AWS Database Migration Service. +// +// Deletes the specified replication instance. +// +// You must delete any migration tasks that are associated with the replication +// instance before you can delete it. +// +// Returns awserr.Error for service API and SDK errors. Use runtime type assertions +// with awserr.Error's Code and Message methods to get detailed information about +// the error. +// +// See the AWS API reference guide for AWS Database Migration Service's +// API operation DeleteReplicationInstance for usage and error information. +// +// Returned Error Codes: +// * InvalidResourceStateFault +// The resource is in a state that prevents it from being used for database +// migration. +// +// * ResourceNotFoundFault +// The resource could not be found. +// +// Please also see https://docs.aws.amazon.com/goto/WebAPI/dms-2016-01-01/DeleteReplicationInstance +func (c *DatabaseMigrationService) DeleteReplicationInstance(input *DeleteReplicationInstanceInput) (*DeleteReplicationInstanceOutput, error) { + req, out := c.DeleteReplicationInstanceRequest(input) + err := req.Send() + return out, err +} + +const opDeleteReplicationSubnetGroup = "DeleteReplicationSubnetGroup" + +// DeleteReplicationSubnetGroupRequest generates a "aws/request.Request" representing the +// client's request for the DeleteReplicationSubnetGroup operation. The "output" return +// value can be used to capture response data after the request's "Send" method +// is called. +// +// See DeleteReplicationSubnetGroup for usage and error information. +// +// 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 DeleteReplicationSubnetGroup 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 DeleteReplicationSubnetGroupRequest method. +// req, resp := client.DeleteReplicationSubnetGroupRequest(params) +// +// err := req.Send() +// if err == nil { // resp is now filled +// fmt.Println(resp) +// } +// +// Please also see https://docs.aws.amazon.com/goto/WebAPI/dms-2016-01-01/DeleteReplicationSubnetGroup +func (c *DatabaseMigrationService) DeleteReplicationSubnetGroupRequest(input *DeleteReplicationSubnetGroupInput) (req *request.Request, output *DeleteReplicationSubnetGroupOutput) { + op := &request.Operation{ + Name: opDeleteReplicationSubnetGroup, + HTTPMethod: "POST", + HTTPPath: "/", + } + + if input == nil { + input = &DeleteReplicationSubnetGroupInput{} + } + + output = &DeleteReplicationSubnetGroupOutput{} + req = c.newRequest(op, input, output) + return +} + +// DeleteReplicationSubnetGroup API operation for AWS Database Migration Service. +// +// Deletes a subnet group. +// +// Returns awserr.Error for service API and SDK errors. Use runtime type assertions +// with awserr.Error's Code and Message methods to get detailed information about +// the error. +// +// See the AWS API reference guide for AWS Database Migration Service's +// API operation DeleteReplicationSubnetGroup for usage and error information. +// +// Returned Error Codes: +// * InvalidResourceStateFault +// The resource is in a state that prevents it from being used for database +// migration. +// +// * ResourceNotFoundFault +// The resource could not be found. +// +// Please also see https://docs.aws.amazon.com/goto/WebAPI/dms-2016-01-01/DeleteReplicationSubnetGroup +func (c *DatabaseMigrationService) DeleteReplicationSubnetGroup(input *DeleteReplicationSubnetGroupInput) (*DeleteReplicationSubnetGroupOutput, error) { + req, out := c.DeleteReplicationSubnetGroupRequest(input) + err := req.Send() + return out, err +} + +const opDeleteReplicationTask = "DeleteReplicationTask" + +// DeleteReplicationTaskRequest generates a "aws/request.Request" representing the +// client's request for the DeleteReplicationTask operation. The "output" return +// value can be used to capture response data after the request's "Send" method +// is called. +// +// See DeleteReplicationTask for usage and error information. +// +// 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 DeleteReplicationTask 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 DeleteReplicationTaskRequest method. +// req, resp := client.DeleteReplicationTaskRequest(params) +// +// err := req.Send() +// if err == nil { // resp is now filled +// fmt.Println(resp) +// } +// +// Please also see https://docs.aws.amazon.com/goto/WebAPI/dms-2016-01-01/DeleteReplicationTask +func (c *DatabaseMigrationService) DeleteReplicationTaskRequest(input *DeleteReplicationTaskInput) (req *request.Request, output *DeleteReplicationTaskOutput) { + op := &request.Operation{ + Name: opDeleteReplicationTask, + HTTPMethod: "POST", + HTTPPath: "/", + } + + if input == nil { + input = &DeleteReplicationTaskInput{} + } + + output = &DeleteReplicationTaskOutput{} + req = c.newRequest(op, input, output) + return +} + +// DeleteReplicationTask API operation for AWS Database Migration Service. +// +// Deletes the specified replication task. +// +// Returns awserr.Error for service API and SDK errors. Use runtime type assertions +// with awserr.Error's Code and Message methods to get detailed information about +// the error. +// +// See the AWS API reference guide for AWS Database Migration Service's +// API operation DeleteReplicationTask for usage and error information. +// +// Returned Error Codes: +// * ResourceNotFoundFault +// The resource could not be found. +// +// * InvalidResourceStateFault +// The resource is in a state that prevents it from being used for database +// migration. +// +// Please also see https://docs.aws.amazon.com/goto/WebAPI/dms-2016-01-01/DeleteReplicationTask +func (c *DatabaseMigrationService) DeleteReplicationTask(input *DeleteReplicationTaskInput) (*DeleteReplicationTaskOutput, error) { + req, out := c.DeleteReplicationTaskRequest(input) + err := req.Send() + return out, err +} + +const opDescribeAccountAttributes = "DescribeAccountAttributes" + +// DescribeAccountAttributesRequest generates a "aws/request.Request" representing the +// client's request for the DescribeAccountAttributes operation. The "output" return +// value can be used to capture response data after the request's "Send" method +// is called. +// +// See DescribeAccountAttributes for usage and error information. +// +// 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 DescribeAccountAttributes 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 DescribeAccountAttributesRequest method. +// req, resp := client.DescribeAccountAttributesRequest(params) +// +// err := req.Send() +// if err == nil { // resp is now filled +// fmt.Println(resp) +// } +// +// Please also see https://docs.aws.amazon.com/goto/WebAPI/dms-2016-01-01/DescribeAccountAttributes +func (c *DatabaseMigrationService) DescribeAccountAttributesRequest(input *DescribeAccountAttributesInput) (req *request.Request, output *DescribeAccountAttributesOutput) { + op := &request.Operation{ + Name: opDescribeAccountAttributes, + HTTPMethod: "POST", + HTTPPath: "/", + } + + if input == nil { + input = &DescribeAccountAttributesInput{} + } + + output = &DescribeAccountAttributesOutput{} + req = c.newRequest(op, input, output) + return +} + +// DescribeAccountAttributes API operation for AWS Database Migration Service. +// +// Lists all of the AWS DMS attributes for a customer account. The attributes +// include AWS DMS quotas for the account, such as the number of replication +// instances allowed. The description for a quota includes the quota name, current +// usage toward that quota, and the quota's maximum value. +// +// This command does not take any parameters. +// +// Returns awserr.Error for service API and SDK errors. Use runtime type assertions +// with awserr.Error's Code and Message methods to get detailed information about +// the error. +// +// See the AWS API reference guide for AWS Database Migration Service's +// API operation DescribeAccountAttributes for usage and error information. +// Please also see https://docs.aws.amazon.com/goto/WebAPI/dms-2016-01-01/DescribeAccountAttributes +func (c *DatabaseMigrationService) DescribeAccountAttributes(input *DescribeAccountAttributesInput) (*DescribeAccountAttributesOutput, error) { + req, out := c.DescribeAccountAttributesRequest(input) + err := req.Send() + return out, err +} + +const opDescribeCertificates = "DescribeCertificates" + +// DescribeCertificatesRequest generates a "aws/request.Request" representing the +// client's request for the DescribeCertificates operation. The "output" return +// value can be used to capture response data after the request's "Send" method +// is called. +// +// See DescribeCertificates for usage and error information. +// +// 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 DescribeCertificates 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 DescribeCertificatesRequest method. +// req, resp := client.DescribeCertificatesRequest(params) +// +// err := req.Send() +// if err == nil { // resp is now filled +// fmt.Println(resp) +// } +// +// Please also see https://docs.aws.amazon.com/goto/WebAPI/dms-2016-01-01/DescribeCertificates +func (c *DatabaseMigrationService) DescribeCertificatesRequest(input *DescribeCertificatesInput) (req *request.Request, output *DescribeCertificatesOutput) { + op := &request.Operation{ + Name: opDescribeCertificates, + HTTPMethod: "POST", + HTTPPath: "/", + } + + if input == nil { + input = &DescribeCertificatesInput{} + } + + output = &DescribeCertificatesOutput{} + req = c.newRequest(op, input, output) + return +} + +// DescribeCertificates API operation for AWS Database Migration Service. +// +// Provides a description of the certificate. +// +// Returns awserr.Error for service API and SDK errors. Use runtime type assertions +// with awserr.Error's Code and Message methods to get detailed information about +// the error. +// +// See the AWS API reference guide for AWS Database Migration Service's +// API operation DescribeCertificates for usage and error information. +// +// Returned Error Codes: +// * ResourceNotFoundFault +// The resource could not be found. +// +// Please also see https://docs.aws.amazon.com/goto/WebAPI/dms-2016-01-01/DescribeCertificates +func (c *DatabaseMigrationService) DescribeCertificates(input *DescribeCertificatesInput) (*DescribeCertificatesOutput, error) { + req, out := c.DescribeCertificatesRequest(input) + err := req.Send() + return out, err +} + +const opDescribeConnections = "DescribeConnections" + +// DescribeConnectionsRequest generates a "aws/request.Request" representing the +// client's request for the DescribeConnections operation. The "output" return +// value can be used to capture response data after the request's "Send" method +// is called. +// +// See DescribeConnections for usage and error information. +// +// 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 DescribeConnections 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 DescribeConnectionsRequest method. +// req, resp := client.DescribeConnectionsRequest(params) +// +// err := req.Send() +// if err == nil { // resp is now filled +// fmt.Println(resp) +// } +// +// Please also see https://docs.aws.amazon.com/goto/WebAPI/dms-2016-01-01/DescribeConnections +func (c *DatabaseMigrationService) DescribeConnectionsRequest(input *DescribeConnectionsInput) (req *request.Request, output *DescribeConnectionsOutput) { + op := &request.Operation{ + Name: opDescribeConnections, + HTTPMethod: "POST", + HTTPPath: "/", + } + + if input == nil { + input = &DescribeConnectionsInput{} + } + + output = &DescribeConnectionsOutput{} + req = c.newRequest(op, input, output) + return +} + +// DescribeConnections API operation for AWS Database Migration Service. +// +// Describes the status of the connections that have been made between the replication +// instance and an endpoint. Connections are created when you test an endpoint. +// +// Returns awserr.Error for service API and SDK errors. Use runtime type assertions +// with awserr.Error's Code and Message methods to get detailed information about +// the error. +// +// See the AWS API reference guide for AWS Database Migration Service's +// API operation DescribeConnections for usage and error information. +// +// Returned Error Codes: +// * ResourceNotFoundFault +// The resource could not be found. +// +// Please also see https://docs.aws.amazon.com/goto/WebAPI/dms-2016-01-01/DescribeConnections +func (c *DatabaseMigrationService) DescribeConnections(input *DescribeConnectionsInput) (*DescribeConnectionsOutput, error) { + req, out := c.DescribeConnectionsRequest(input) + err := req.Send() + return out, err +} + +const opDescribeEndpointTypes = "DescribeEndpointTypes" + +// DescribeEndpointTypesRequest generates a "aws/request.Request" representing the +// client's request for the DescribeEndpointTypes operation. The "output" return +// value can be used to capture response data after the request's "Send" method +// is called. +// +// See DescribeEndpointTypes for usage and error information. +// +// 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 DescribeEndpointTypes 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 DescribeEndpointTypesRequest method. +// req, resp := client.DescribeEndpointTypesRequest(params) +// +// err := req.Send() +// if err == nil { // resp is now filled +// fmt.Println(resp) +// } +// +// Please also see https://docs.aws.amazon.com/goto/WebAPI/dms-2016-01-01/DescribeEndpointTypes +func (c *DatabaseMigrationService) DescribeEndpointTypesRequest(input *DescribeEndpointTypesInput) (req *request.Request, output *DescribeEndpointTypesOutput) { + op := &request.Operation{ + Name: opDescribeEndpointTypes, + HTTPMethod: "POST", + HTTPPath: "/", + } + + if input == nil { + input = &DescribeEndpointTypesInput{} + } + + output = &DescribeEndpointTypesOutput{} + req = c.newRequest(op, input, output) + return +} + +// DescribeEndpointTypes API operation for AWS Database Migration Service. +// +// Returns information about the type of endpoints available. +// +// Returns awserr.Error for service API and SDK errors. Use runtime type assertions +// with awserr.Error's Code and Message methods to get detailed information about +// the error. +// +// See the AWS API reference guide for AWS Database Migration Service's +// API operation DescribeEndpointTypes for usage and error information. +// Please also see https://docs.aws.amazon.com/goto/WebAPI/dms-2016-01-01/DescribeEndpointTypes +func (c *DatabaseMigrationService) DescribeEndpointTypes(input *DescribeEndpointTypesInput) (*DescribeEndpointTypesOutput, error) { + req, out := c.DescribeEndpointTypesRequest(input) + err := req.Send() + return out, err +} + +const opDescribeEndpoints = "DescribeEndpoints" + +// DescribeEndpointsRequest generates a "aws/request.Request" representing the +// client's request for the DescribeEndpoints operation. The "output" return +// value can be used to capture response data after the request's "Send" method +// is called. +// +// See DescribeEndpoints for usage and error information. +// +// 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 DescribeEndpoints 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 DescribeEndpointsRequest method. +// req, resp := client.DescribeEndpointsRequest(params) +// +// err := req.Send() +// if err == nil { // resp is now filled +// fmt.Println(resp) +// } +// +// Please also see https://docs.aws.amazon.com/goto/WebAPI/dms-2016-01-01/DescribeEndpoints +func (c *DatabaseMigrationService) DescribeEndpointsRequest(input *DescribeEndpointsInput) (req *request.Request, output *DescribeEndpointsOutput) { + op := &request.Operation{ + Name: opDescribeEndpoints, + HTTPMethod: "POST", + HTTPPath: "/", + } + + if input == nil { + input = &DescribeEndpointsInput{} + } + + output = &DescribeEndpointsOutput{} + req = c.newRequest(op, input, output) + return +} + +// DescribeEndpoints API operation for AWS Database Migration Service. +// +// Returns information about the endpoints for your account in the current region. +// +// Returns awserr.Error for service API and SDK errors. Use runtime type assertions +// with awserr.Error's Code and Message methods to get detailed information about +// the error. +// +// See the AWS API reference guide for AWS Database Migration Service's +// API operation DescribeEndpoints for usage and error information. +// +// Returned Error Codes: +// * ResourceNotFoundFault +// The resource could not be found. +// +// Please also see https://docs.aws.amazon.com/goto/WebAPI/dms-2016-01-01/DescribeEndpoints +func (c *DatabaseMigrationService) DescribeEndpoints(input *DescribeEndpointsInput) (*DescribeEndpointsOutput, error) { + req, out := c.DescribeEndpointsRequest(input) + err := req.Send() + return out, err +} + +const opDescribeOrderableReplicationInstances = "DescribeOrderableReplicationInstances" + +// DescribeOrderableReplicationInstancesRequest generates a "aws/request.Request" representing the +// client's request for the DescribeOrderableReplicationInstances operation. The "output" return +// value can be used to capture response data after the request's "Send" method +// is called. +// +// See DescribeOrderableReplicationInstances for usage and error information. +// +// 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 DescribeOrderableReplicationInstances 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 DescribeOrderableReplicationInstancesRequest method. +// req, resp := client.DescribeOrderableReplicationInstancesRequest(params) +// +// err := req.Send() +// if err == nil { // resp is now filled +// fmt.Println(resp) +// } +// +// Please also see https://docs.aws.amazon.com/goto/WebAPI/dms-2016-01-01/DescribeOrderableReplicationInstances +func (c *DatabaseMigrationService) DescribeOrderableReplicationInstancesRequest(input *DescribeOrderableReplicationInstancesInput) (req *request.Request, output *DescribeOrderableReplicationInstancesOutput) { + op := &request.Operation{ + Name: opDescribeOrderableReplicationInstances, + HTTPMethod: "POST", + HTTPPath: "/", + } + + if input == nil { + input = &DescribeOrderableReplicationInstancesInput{} + } + + output = &DescribeOrderableReplicationInstancesOutput{} + req = c.newRequest(op, input, output) + return +} + +// DescribeOrderableReplicationInstances API operation for AWS Database Migration Service. +// +// Returns information about the replication instance types that can be created +// in the specified region. +// +// Returns awserr.Error for service API and SDK errors. Use runtime type assertions +// with awserr.Error's Code and Message methods to get detailed information about +// the error. +// +// See the AWS API reference guide for AWS Database Migration Service's +// API operation DescribeOrderableReplicationInstances for usage and error information. +// Please also see https://docs.aws.amazon.com/goto/WebAPI/dms-2016-01-01/DescribeOrderableReplicationInstances +func (c *DatabaseMigrationService) DescribeOrderableReplicationInstances(input *DescribeOrderableReplicationInstancesInput) (*DescribeOrderableReplicationInstancesOutput, error) { + req, out := c.DescribeOrderableReplicationInstancesRequest(input) + err := req.Send() + return out, err +} + +const opDescribeRefreshSchemasStatus = "DescribeRefreshSchemasStatus" + +// DescribeRefreshSchemasStatusRequest generates a "aws/request.Request" representing the +// client's request for the DescribeRefreshSchemasStatus operation. The "output" return +// value can be used to capture response data after the request's "Send" method +// is called. +// +// See DescribeRefreshSchemasStatus for usage and error information. +// +// 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 DescribeRefreshSchemasStatus 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 DescribeRefreshSchemasStatusRequest method. +// req, resp := client.DescribeRefreshSchemasStatusRequest(params) +// +// err := req.Send() +// if err == nil { // resp is now filled +// fmt.Println(resp) +// } +// +// Please also see https://docs.aws.amazon.com/goto/WebAPI/dms-2016-01-01/DescribeRefreshSchemasStatus +func (c *DatabaseMigrationService) DescribeRefreshSchemasStatusRequest(input *DescribeRefreshSchemasStatusInput) (req *request.Request, output *DescribeRefreshSchemasStatusOutput) { + op := &request.Operation{ + Name: opDescribeRefreshSchemasStatus, + HTTPMethod: "POST", + HTTPPath: "/", + } + + if input == nil { + input = &DescribeRefreshSchemasStatusInput{} + } + + output = &DescribeRefreshSchemasStatusOutput{} + req = c.newRequest(op, input, output) + return +} + +// DescribeRefreshSchemasStatus API operation for AWS Database Migration Service. +// +// Returns the status of the RefreshSchemas operation. +// +// Returns awserr.Error for service API and SDK errors. Use runtime type assertions +// with awserr.Error's Code and Message methods to get detailed information about +// the error. +// +// See the AWS API reference guide for AWS Database Migration Service's +// API operation DescribeRefreshSchemasStatus for usage and error information. +// +// Returned Error Codes: +// * InvalidResourceStateFault +// The resource is in a state that prevents it from being used for database +// migration. +// +// * ResourceNotFoundFault +// The resource could not be found. +// +// Please also see https://docs.aws.amazon.com/goto/WebAPI/dms-2016-01-01/DescribeRefreshSchemasStatus +func (c *DatabaseMigrationService) DescribeRefreshSchemasStatus(input *DescribeRefreshSchemasStatusInput) (*DescribeRefreshSchemasStatusOutput, error) { + req, out := c.DescribeRefreshSchemasStatusRequest(input) + err := req.Send() + return out, err +} + +const opDescribeReplicationInstances = "DescribeReplicationInstances" + +// DescribeReplicationInstancesRequest generates a "aws/request.Request" representing the +// client's request for the DescribeReplicationInstances operation. The "output" return +// value can be used to capture response data after the request's "Send" method +// is called. +// +// See DescribeReplicationInstances for usage and error information. +// +// 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 DescribeReplicationInstances 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 DescribeReplicationInstancesRequest method. +// req, resp := client.DescribeReplicationInstancesRequest(params) +// +// err := req.Send() +// if err == nil { // resp is now filled +// fmt.Println(resp) +// } +// +// Please also see https://docs.aws.amazon.com/goto/WebAPI/dms-2016-01-01/DescribeReplicationInstances +func (c *DatabaseMigrationService) DescribeReplicationInstancesRequest(input *DescribeReplicationInstancesInput) (req *request.Request, output *DescribeReplicationInstancesOutput) { + op := &request.Operation{ + Name: opDescribeReplicationInstances, + HTTPMethod: "POST", + HTTPPath: "/", + } + + if input == nil { + input = &DescribeReplicationInstancesInput{} + } + + output = &DescribeReplicationInstancesOutput{} + req = c.newRequest(op, input, output) + return +} + +// DescribeReplicationInstances API operation for AWS Database Migration Service. +// +// Returns information about replication instances for your account in the current +// region. +// +// Returns awserr.Error for service API and SDK errors. Use runtime type assertions +// with awserr.Error's Code and Message methods to get detailed information about +// the error. +// +// See the AWS API reference guide for AWS Database Migration Service's +// API operation DescribeReplicationInstances for usage and error information. +// +// Returned Error Codes: +// * ResourceNotFoundFault +// The resource could not be found. +// +// Please also see https://docs.aws.amazon.com/goto/WebAPI/dms-2016-01-01/DescribeReplicationInstances +func (c *DatabaseMigrationService) DescribeReplicationInstances(input *DescribeReplicationInstancesInput) (*DescribeReplicationInstancesOutput, error) { + req, out := c.DescribeReplicationInstancesRequest(input) + err := req.Send() + return out, err +} + +const opDescribeReplicationSubnetGroups = "DescribeReplicationSubnetGroups" + +// DescribeReplicationSubnetGroupsRequest generates a "aws/request.Request" representing the +// client's request for the DescribeReplicationSubnetGroups operation. The "output" return +// value can be used to capture response data after the request's "Send" method +// is called. +// +// See DescribeReplicationSubnetGroups for usage and error information. +// +// 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 DescribeReplicationSubnetGroups 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 DescribeReplicationSubnetGroupsRequest method. +// req, resp := client.DescribeReplicationSubnetGroupsRequest(params) +// +// err := req.Send() +// if err == nil { // resp is now filled +// fmt.Println(resp) +// } +// +// Please also see https://docs.aws.amazon.com/goto/WebAPI/dms-2016-01-01/DescribeReplicationSubnetGroups +func (c *DatabaseMigrationService) DescribeReplicationSubnetGroupsRequest(input *DescribeReplicationSubnetGroupsInput) (req *request.Request, output *DescribeReplicationSubnetGroupsOutput) { + op := &request.Operation{ + Name: opDescribeReplicationSubnetGroups, + HTTPMethod: "POST", + HTTPPath: "/", + } + + if input == nil { + input = &DescribeReplicationSubnetGroupsInput{} + } + + output = &DescribeReplicationSubnetGroupsOutput{} + req = c.newRequest(op, input, output) + return +} + +// DescribeReplicationSubnetGroups API operation for AWS Database Migration Service. +// +// Returns information about the replication subnet groups. +// +// Returns awserr.Error for service API and SDK errors. Use runtime type assertions +// with awserr.Error's Code and Message methods to get detailed information about +// the error. +// +// See the AWS API reference guide for AWS Database Migration Service's +// API operation DescribeReplicationSubnetGroups for usage and error information. +// +// Returned Error Codes: +// * ResourceNotFoundFault +// The resource could not be found. +// +// Please also see https://docs.aws.amazon.com/goto/WebAPI/dms-2016-01-01/DescribeReplicationSubnetGroups +func (c *DatabaseMigrationService) DescribeReplicationSubnetGroups(input *DescribeReplicationSubnetGroupsInput) (*DescribeReplicationSubnetGroupsOutput, error) { + req, out := c.DescribeReplicationSubnetGroupsRequest(input) + err := req.Send() + return out, err +} + +const opDescribeReplicationTasks = "DescribeReplicationTasks" + +// DescribeReplicationTasksRequest generates a "aws/request.Request" representing the +// client's request for the DescribeReplicationTasks operation. The "output" return +// value can be used to capture response data after the request's "Send" method +// is called. +// +// See DescribeReplicationTasks for usage and error information. +// +// 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 DescribeReplicationTasks 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 DescribeReplicationTasksRequest method. +// req, resp := client.DescribeReplicationTasksRequest(params) +// +// err := req.Send() +// if err == nil { // resp is now filled +// fmt.Println(resp) +// } +// +// Please also see https://docs.aws.amazon.com/goto/WebAPI/dms-2016-01-01/DescribeReplicationTasks +func (c *DatabaseMigrationService) DescribeReplicationTasksRequest(input *DescribeReplicationTasksInput) (req *request.Request, output *DescribeReplicationTasksOutput) { + op := &request.Operation{ + Name: opDescribeReplicationTasks, + HTTPMethod: "POST", + HTTPPath: "/", + } + + if input == nil { + input = &DescribeReplicationTasksInput{} + } + + output = &DescribeReplicationTasksOutput{} + req = c.newRequest(op, input, output) + return +} + +// DescribeReplicationTasks API operation for AWS Database Migration Service. +// +// Returns information about replication tasks for your account in the current +// region. +// +// Returns awserr.Error for service API and SDK errors. Use runtime type assertions +// with awserr.Error's Code and Message methods to get detailed information about +// the error. +// +// See the AWS API reference guide for AWS Database Migration Service's +// API operation DescribeReplicationTasks for usage and error information. +// +// Returned Error Codes: +// * ResourceNotFoundFault +// The resource could not be found. +// +// Please also see https://docs.aws.amazon.com/goto/WebAPI/dms-2016-01-01/DescribeReplicationTasks +func (c *DatabaseMigrationService) DescribeReplicationTasks(input *DescribeReplicationTasksInput) (*DescribeReplicationTasksOutput, error) { + req, out := c.DescribeReplicationTasksRequest(input) + err := req.Send() + return out, err +} + +const opDescribeSchemas = "DescribeSchemas" + +// DescribeSchemasRequest generates a "aws/request.Request" representing the +// client's request for the DescribeSchemas operation. The "output" return +// value can be used to capture response data after the request's "Send" method +// is called. +// +// See DescribeSchemas for usage and error information. +// +// 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 DescribeSchemas 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 DescribeSchemasRequest method. +// req, resp := client.DescribeSchemasRequest(params) +// +// err := req.Send() +// if err == nil { // resp is now filled +// fmt.Println(resp) +// } +// +// Please also see https://docs.aws.amazon.com/goto/WebAPI/dms-2016-01-01/DescribeSchemas +func (c *DatabaseMigrationService) DescribeSchemasRequest(input *DescribeSchemasInput) (req *request.Request, output *DescribeSchemasOutput) { + op := &request.Operation{ + Name: opDescribeSchemas, + HTTPMethod: "POST", + HTTPPath: "/", + } + + if input == nil { + input = &DescribeSchemasInput{} + } + + output = &DescribeSchemasOutput{} + req = c.newRequest(op, input, output) + return +} + +// DescribeSchemas API operation for AWS Database Migration Service. +// +// Returns information about the schema for the specified endpoint. +// +// Returns awserr.Error for service API and SDK errors. Use runtime type assertions +// with awserr.Error's Code and Message methods to get detailed information about +// the error. +// +// See the AWS API reference guide for AWS Database Migration Service's +// API operation DescribeSchemas for usage and error information. +// +// Returned Error Codes: +// * InvalidResourceStateFault +// The resource is in a state that prevents it from being used for database +// migration. +// +// * ResourceNotFoundFault +// The resource could not be found. +// +// Please also see https://docs.aws.amazon.com/goto/WebAPI/dms-2016-01-01/DescribeSchemas +func (c *DatabaseMigrationService) DescribeSchemas(input *DescribeSchemasInput) (*DescribeSchemasOutput, error) { + req, out := c.DescribeSchemasRequest(input) + err := req.Send() + return out, err +} + +const opDescribeTableStatistics = "DescribeTableStatistics" + +// DescribeTableStatisticsRequest generates a "aws/request.Request" representing the +// client's request for the DescribeTableStatistics operation. The "output" return +// value can be used to capture response data after the request's "Send" method +// is called. +// +// See DescribeTableStatistics for usage and error information. +// +// 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 DescribeTableStatistics 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 DescribeTableStatisticsRequest method. +// req, resp := client.DescribeTableStatisticsRequest(params) +// +// err := req.Send() +// if err == nil { // resp is now filled +// fmt.Println(resp) +// } +// +// Please also see https://docs.aws.amazon.com/goto/WebAPI/dms-2016-01-01/DescribeTableStatistics +func (c *DatabaseMigrationService) DescribeTableStatisticsRequest(input *DescribeTableStatisticsInput) (req *request.Request, output *DescribeTableStatisticsOutput) { + op := &request.Operation{ + Name: opDescribeTableStatistics, + HTTPMethod: "POST", + HTTPPath: "/", + } + + if input == nil { + input = &DescribeTableStatisticsInput{} + } + + output = &DescribeTableStatisticsOutput{} + req = c.newRequest(op, input, output) + return +} + +// DescribeTableStatistics API operation for AWS Database Migration Service. +// +// Returns table statistics on the database migration task, including table +// name, rows inserted, rows updated, and rows deleted. +// +// Returns awserr.Error for service API and SDK errors. Use runtime type assertions +// with awserr.Error's Code and Message methods to get detailed information about +// the error. +// +// See the AWS API reference guide for AWS Database Migration Service's +// API operation DescribeTableStatistics for usage and error information. +// +// Returned Error Codes: +// * ResourceNotFoundFault +// The resource could not be found. +// +// * InvalidResourceStateFault +// The resource is in a state that prevents it from being used for database +// migration. +// +// Please also see https://docs.aws.amazon.com/goto/WebAPI/dms-2016-01-01/DescribeTableStatistics +func (c *DatabaseMigrationService) DescribeTableStatistics(input *DescribeTableStatisticsInput) (*DescribeTableStatisticsOutput, error) { + req, out := c.DescribeTableStatisticsRequest(input) + err := req.Send() + return out, err +} + +const opImportCertificate = "ImportCertificate" + +// ImportCertificateRequest generates a "aws/request.Request" representing the +// client's request for the ImportCertificate operation. The "output" return +// value can be used to capture response data after the request's "Send" method +// is called. +// +// See ImportCertificate for usage and error information. +// +// 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 ImportCertificate 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 ImportCertificateRequest method. +// req, resp := client.ImportCertificateRequest(params) +// +// err := req.Send() +// if err == nil { // resp is now filled +// fmt.Println(resp) +// } +// +// Please also see https://docs.aws.amazon.com/goto/WebAPI/dms-2016-01-01/ImportCertificate +func (c *DatabaseMigrationService) ImportCertificateRequest(input *ImportCertificateInput) (req *request.Request, output *ImportCertificateOutput) { + op := &request.Operation{ + Name: opImportCertificate, + HTTPMethod: "POST", + HTTPPath: "/", + } + + if input == nil { + input = &ImportCertificateInput{} + } + + output = &ImportCertificateOutput{} + req = c.newRequest(op, input, output) + return +} + +// ImportCertificate API operation for AWS Database Migration Service. +// +// Uploads the specified certificate. +// +// Returns awserr.Error for service API and SDK errors. Use runtime type assertions +// with awserr.Error's Code and Message methods to get detailed information about +// the error. +// +// See the AWS API reference guide for AWS Database Migration Service's +// API operation ImportCertificate for usage and error information. +// +// Returned Error Codes: +// * ResourceAlreadyExistsFault +// The resource you are attempting to create already exists. +// +// * InvalidCertificateFault +// The certificate was not valid. +// +// Please also see https://docs.aws.amazon.com/goto/WebAPI/dms-2016-01-01/ImportCertificate +func (c *DatabaseMigrationService) ImportCertificate(input *ImportCertificateInput) (*ImportCertificateOutput, error) { + req, out := c.ImportCertificateRequest(input) + err := req.Send() + return out, err +} + +const opListTagsForResource = "ListTagsForResource" + +// ListTagsForResourceRequest generates a "aws/request.Request" representing the +// client's request for the ListTagsForResource operation. The "output" return +// value can be used to capture response data after the request's "Send" method +// is called. +// +// See ListTagsForResource for usage and error information. +// +// 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 ListTagsForResource 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 ListTagsForResourceRequest method. +// req, resp := client.ListTagsForResourceRequest(params) +// +// err := req.Send() +// if err == nil { // resp is now filled +// fmt.Println(resp) +// } +// +// Please also see https://docs.aws.amazon.com/goto/WebAPI/dms-2016-01-01/ListTagsForResource +func (c *DatabaseMigrationService) ListTagsForResourceRequest(input *ListTagsForResourceInput) (req *request.Request, output *ListTagsForResourceOutput) { + op := &request.Operation{ + Name: opListTagsForResource, + HTTPMethod: "POST", + HTTPPath: "/", + } + + if input == nil { + input = &ListTagsForResourceInput{} + } + + output = &ListTagsForResourceOutput{} + req = c.newRequest(op, input, output) + return +} + +// ListTagsForResource API operation for AWS Database Migration Service. +// +// Lists all tags for an AWS DMS resource. +// +// Returns awserr.Error for service API and SDK errors. Use runtime type assertions +// with awserr.Error's Code and Message methods to get detailed information about +// the error. +// +// See the AWS API reference guide for AWS Database Migration Service's +// API operation ListTagsForResource for usage and error information. +// +// Returned Error Codes: +// * ResourceNotFoundFault +// The resource could not be found. +// +// Please also see https://docs.aws.amazon.com/goto/WebAPI/dms-2016-01-01/ListTagsForResource +func (c *DatabaseMigrationService) ListTagsForResource(input *ListTagsForResourceInput) (*ListTagsForResourceOutput, error) { + req, out := c.ListTagsForResourceRequest(input) + err := req.Send() + return out, err +} + +const opModifyEndpoint = "ModifyEndpoint" + +// ModifyEndpointRequest generates a "aws/request.Request" representing the +// client's request for the ModifyEndpoint operation. The "output" return +// value can be used to capture response data after the request's "Send" method +// is called. +// +// See ModifyEndpoint for usage and error information. +// +// 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 ModifyEndpoint 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 ModifyEndpointRequest method. +// req, resp := client.ModifyEndpointRequest(params) +// +// err := req.Send() +// if err == nil { // resp is now filled +// fmt.Println(resp) +// } +// +// Please also see https://docs.aws.amazon.com/goto/WebAPI/dms-2016-01-01/ModifyEndpoint +func (c *DatabaseMigrationService) ModifyEndpointRequest(input *ModifyEndpointInput) (req *request.Request, output *ModifyEndpointOutput) { + op := &request.Operation{ + Name: opModifyEndpoint, + HTTPMethod: "POST", + HTTPPath: "/", + } + + if input == nil { + input = &ModifyEndpointInput{} + } + + output = &ModifyEndpointOutput{} + req = c.newRequest(op, input, output) + return +} + +// ModifyEndpoint API operation for AWS Database Migration Service. +// +// Modifies the specified endpoint. +// +// Returns awserr.Error for service API and SDK errors. Use runtime type assertions +// with awserr.Error's Code and Message methods to get detailed information about +// the error. +// +// See the AWS API reference guide for AWS Database Migration Service's +// API operation ModifyEndpoint for usage and error information. +// +// Returned Error Codes: +// * InvalidResourceStateFault +// The resource is in a state that prevents it from being used for database +// migration. +// +// * ResourceNotFoundFault +// The resource could not be found. +// +// * ResourceAlreadyExistsFault +// The resource you are attempting to create already exists. +// +// * KMSKeyNotAccessibleFault +// AWS DMS cannot access the KMS key. +// +// Please also see https://docs.aws.amazon.com/goto/WebAPI/dms-2016-01-01/ModifyEndpoint +func (c *DatabaseMigrationService) ModifyEndpoint(input *ModifyEndpointInput) (*ModifyEndpointOutput, error) { + req, out := c.ModifyEndpointRequest(input) + err := req.Send() + return out, err +} + +const opModifyReplicationInstance = "ModifyReplicationInstance" + +// ModifyReplicationInstanceRequest generates a "aws/request.Request" representing the +// client's request for the ModifyReplicationInstance operation. The "output" return +// value can be used to capture response data after the request's "Send" method +// is called. +// +// See ModifyReplicationInstance for usage and error information. +// +// 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 ModifyReplicationInstance 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 ModifyReplicationInstanceRequest method. +// req, resp := client.ModifyReplicationInstanceRequest(params) +// +// err := req.Send() +// if err == nil { // resp is now filled +// fmt.Println(resp) +// } +// +// Please also see https://docs.aws.amazon.com/goto/WebAPI/dms-2016-01-01/ModifyReplicationInstance +func (c *DatabaseMigrationService) ModifyReplicationInstanceRequest(input *ModifyReplicationInstanceInput) (req *request.Request, output *ModifyReplicationInstanceOutput) { + op := &request.Operation{ + Name: opModifyReplicationInstance, + HTTPMethod: "POST", + HTTPPath: "/", + } + + if input == nil { + input = &ModifyReplicationInstanceInput{} + } + + output = &ModifyReplicationInstanceOutput{} + req = c.newRequest(op, input, output) + return +} + +// ModifyReplicationInstance API operation for AWS Database Migration Service. +// +// Modifies the replication instance to apply new settings. You can change one +// or more parameters by specifying these parameters and the new values in the +// request. +// +// Some settings are applied during the maintenance window. +// +// Returns awserr.Error for service API and SDK errors. Use runtime type assertions +// with awserr.Error's Code and Message methods to get detailed information about +// the error. +// +// See the AWS API reference guide for AWS Database Migration Service's +// API operation ModifyReplicationInstance for usage and error information. +// +// Returned Error Codes: +// * InvalidResourceStateFault +// The resource is in a state that prevents it from being used for database +// migration. +// +// * ResourceAlreadyExistsFault +// The resource you are attempting to create already exists. +// +// * ResourceNotFoundFault +// The resource could not be found. +// +// * InsufficientResourceCapacityFault +// There are not enough resources allocated to the database migration. +// +// * StorageQuotaExceededFault +// The storage quota has been exceeded. +// +// * UpgradeDependencyFailureFault +// An upgrade dependency is preventing the database migration. +// +// Please also see https://docs.aws.amazon.com/goto/WebAPI/dms-2016-01-01/ModifyReplicationInstance +func (c *DatabaseMigrationService) ModifyReplicationInstance(input *ModifyReplicationInstanceInput) (*ModifyReplicationInstanceOutput, error) { + req, out := c.ModifyReplicationInstanceRequest(input) + err := req.Send() + return out, err +} + +const opModifyReplicationSubnetGroup = "ModifyReplicationSubnetGroup" + +// ModifyReplicationSubnetGroupRequest generates a "aws/request.Request" representing the +// client's request for the ModifyReplicationSubnetGroup operation. The "output" return +// value can be used to capture response data after the request's "Send" method +// is called. +// +// See ModifyReplicationSubnetGroup for usage and error information. +// +// 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 ModifyReplicationSubnetGroup 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 ModifyReplicationSubnetGroupRequest method. +// req, resp := client.ModifyReplicationSubnetGroupRequest(params) +// +// err := req.Send() +// if err == nil { // resp is now filled +// fmt.Println(resp) +// } +// +// Please also see https://docs.aws.amazon.com/goto/WebAPI/dms-2016-01-01/ModifyReplicationSubnetGroup +func (c *DatabaseMigrationService) ModifyReplicationSubnetGroupRequest(input *ModifyReplicationSubnetGroupInput) (req *request.Request, output *ModifyReplicationSubnetGroupOutput) { + op := &request.Operation{ + Name: opModifyReplicationSubnetGroup, + HTTPMethod: "POST", + HTTPPath: "/", + } + + if input == nil { + input = &ModifyReplicationSubnetGroupInput{} + } + + output = &ModifyReplicationSubnetGroupOutput{} + req = c.newRequest(op, input, output) + return +} + +// ModifyReplicationSubnetGroup API operation for AWS Database Migration Service. +// +// Modifies the settings for the specified replication subnet group. +// +// Returns awserr.Error for service API and SDK errors. Use runtime type assertions +// with awserr.Error's Code and Message methods to get detailed information about +// the error. +// +// See the AWS API reference guide for AWS Database Migration Service's +// API operation ModifyReplicationSubnetGroup for usage and error information. +// +// Returned Error Codes: +// * AccessDeniedFault +// AWS DMS was denied access to the endpoint. +// +// * ResourceNotFoundFault +// The resource could not be found. +// +// * ResourceQuotaExceededFault +// The quota for this resource quota has been exceeded. +// +// * SubnetAlreadyInUse +// The specified subnet is already in use. +// +// * ReplicationSubnetGroupDoesNotCoverEnoughAZs +// The replication subnet group does not cover enough Availability Zones (AZs). +// Edit the replication subnet group and add more AZs. +// +// * InvalidSubnet +// The subnet provided is invalid. +// +// Please also see https://docs.aws.amazon.com/goto/WebAPI/dms-2016-01-01/ModifyReplicationSubnetGroup +func (c *DatabaseMigrationService) ModifyReplicationSubnetGroup(input *ModifyReplicationSubnetGroupInput) (*ModifyReplicationSubnetGroupOutput, error) { + req, out := c.ModifyReplicationSubnetGroupRequest(input) + err := req.Send() + return out, err +} + +const opModifyReplicationTask = "ModifyReplicationTask" + +// ModifyReplicationTaskRequest generates a "aws/request.Request" representing the +// client's request for the ModifyReplicationTask operation. The "output" return +// value can be used to capture response data after the request's "Send" method +// is called. +// +// See ModifyReplicationTask for usage and error information. +// +// 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 ModifyReplicationTask 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 ModifyReplicationTaskRequest method. +// req, resp := client.ModifyReplicationTaskRequest(params) +// +// err := req.Send() +// if err == nil { // resp is now filled +// fmt.Println(resp) +// } +// +// Please also see https://docs.aws.amazon.com/goto/WebAPI/dms-2016-01-01/ModifyReplicationTask +func (c *DatabaseMigrationService) ModifyReplicationTaskRequest(input *ModifyReplicationTaskInput) (req *request.Request, output *ModifyReplicationTaskOutput) { + op := &request.Operation{ + Name: opModifyReplicationTask, + HTTPMethod: "POST", + HTTPPath: "/", + } + + if input == nil { + input = &ModifyReplicationTaskInput{} + } + + output = &ModifyReplicationTaskOutput{} + req = c.newRequest(op, input, output) + return +} + +// ModifyReplicationTask API operation for AWS Database Migration Service. +// +// Modifies the specified replication task. +// +// You can't modify the task endpoints. The task must be stopped before you +// can modify it. +// +// Returns awserr.Error for service API and SDK errors. Use runtime type assertions +// with awserr.Error's Code and Message methods to get detailed information about +// the error. +// +// See the AWS API reference guide for AWS Database Migration Service's +// API operation ModifyReplicationTask for usage and error information. +// +// Returned Error Codes: +// * InvalidResourceStateFault +// The resource is in a state that prevents it from being used for database +// migration. +// +// * ResourceNotFoundFault +// The resource could not be found. +// +// * ResourceAlreadyExistsFault +// The resource you are attempting to create already exists. +// +// * KMSKeyNotAccessibleFault +// AWS DMS cannot access the KMS key. +// +// Please also see https://docs.aws.amazon.com/goto/WebAPI/dms-2016-01-01/ModifyReplicationTask +func (c *DatabaseMigrationService) ModifyReplicationTask(input *ModifyReplicationTaskInput) (*ModifyReplicationTaskOutput, error) { + req, out := c.ModifyReplicationTaskRequest(input) + err := req.Send() + return out, err +} + +const opRefreshSchemas = "RefreshSchemas" + +// RefreshSchemasRequest generates a "aws/request.Request" representing the +// client's request for the RefreshSchemas operation. The "output" return +// value can be used to capture response data after the request's "Send" method +// is called. +// +// See RefreshSchemas for usage and error information. +// +// 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 RefreshSchemas 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 RefreshSchemasRequest method. +// req, resp := client.RefreshSchemasRequest(params) +// +// err := req.Send() +// if err == nil { // resp is now filled +// fmt.Println(resp) +// } +// +// Please also see https://docs.aws.amazon.com/goto/WebAPI/dms-2016-01-01/RefreshSchemas +func (c *DatabaseMigrationService) RefreshSchemasRequest(input *RefreshSchemasInput) (req *request.Request, output *RefreshSchemasOutput) { + op := &request.Operation{ + Name: opRefreshSchemas, + HTTPMethod: "POST", + HTTPPath: "/", + } + + if input == nil { + input = &RefreshSchemasInput{} + } + + output = &RefreshSchemasOutput{} + req = c.newRequest(op, input, output) + return +} + +// RefreshSchemas API operation for AWS Database Migration Service. +// +// Populates the schema for the specified endpoint. This is an asynchronous +// operation and can take several minutes. You can check the status of this +// operation by calling the DescribeRefreshSchemasStatus operation. +// +// Returns awserr.Error for service API and SDK errors. Use runtime type assertions +// with awserr.Error's Code and Message methods to get detailed information about +// the error. +// +// See the AWS API reference guide for AWS Database Migration Service's +// API operation RefreshSchemas for usage and error information. +// +// Returned Error Codes: +// * InvalidResourceStateFault +// The resource is in a state that prevents it from being used for database +// migration. +// +// * ResourceNotFoundFault +// The resource could not be found. +// +// * KMSKeyNotAccessibleFault +// AWS DMS cannot access the KMS key. +// +// * ResourceQuotaExceededFault +// The quota for this resource quota has been exceeded. +// +// Please also see https://docs.aws.amazon.com/goto/WebAPI/dms-2016-01-01/RefreshSchemas +func (c *DatabaseMigrationService) RefreshSchemas(input *RefreshSchemasInput) (*RefreshSchemasOutput, error) { + req, out := c.RefreshSchemasRequest(input) + err := req.Send() + return out, err +} + +const opRemoveTagsFromResource = "RemoveTagsFromResource" + +// RemoveTagsFromResourceRequest generates a "aws/request.Request" representing the +// client's request for the RemoveTagsFromResource operation. The "output" return +// value can be used to capture response data after the request's "Send" method +// is called. +// +// See RemoveTagsFromResource for usage and error information. +// +// 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 RemoveTagsFromResource 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 RemoveTagsFromResourceRequest method. +// req, resp := client.RemoveTagsFromResourceRequest(params) +// +// err := req.Send() +// if err == nil { // resp is now filled +// fmt.Println(resp) +// } +// +// Please also see https://docs.aws.amazon.com/goto/WebAPI/dms-2016-01-01/RemoveTagsFromResource +func (c *DatabaseMigrationService) RemoveTagsFromResourceRequest(input *RemoveTagsFromResourceInput) (req *request.Request, output *RemoveTagsFromResourceOutput) { + op := &request.Operation{ + Name: opRemoveTagsFromResource, + HTTPMethod: "POST", + HTTPPath: "/", + } + + if input == nil { + input = &RemoveTagsFromResourceInput{} + } + + output = &RemoveTagsFromResourceOutput{} + req = c.newRequest(op, input, output) + return +} + +// RemoveTagsFromResource API operation for AWS Database Migration Service. +// +// Removes metadata tags from a DMS resource. +// +// Returns awserr.Error for service API and SDK errors. Use runtime type assertions +// with awserr.Error's Code and Message methods to get detailed information about +// the error. +// +// See the AWS API reference guide for AWS Database Migration Service's +// API operation RemoveTagsFromResource for usage and error information. +// +// Returned Error Codes: +// * ResourceNotFoundFault +// The resource could not be found. +// +// Please also see https://docs.aws.amazon.com/goto/WebAPI/dms-2016-01-01/RemoveTagsFromResource +func (c *DatabaseMigrationService) RemoveTagsFromResource(input *RemoveTagsFromResourceInput) (*RemoveTagsFromResourceOutput, error) { + req, out := c.RemoveTagsFromResourceRequest(input) + err := req.Send() + return out, err +} + +const opStartReplicationTask = "StartReplicationTask" + +// StartReplicationTaskRequest generates a "aws/request.Request" representing the +// client's request for the StartReplicationTask operation. The "output" return +// value can be used to capture response data after the request's "Send" method +// is called. +// +// See StartReplicationTask for usage and error information. +// +// 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 StartReplicationTask 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 StartReplicationTaskRequest method. +// req, resp := client.StartReplicationTaskRequest(params) +// +// err := req.Send() +// if err == nil { // resp is now filled +// fmt.Println(resp) +// } +// +// Please also see https://docs.aws.amazon.com/goto/WebAPI/dms-2016-01-01/StartReplicationTask +func (c *DatabaseMigrationService) StartReplicationTaskRequest(input *StartReplicationTaskInput) (req *request.Request, output *StartReplicationTaskOutput) { + op := &request.Operation{ + Name: opStartReplicationTask, + HTTPMethod: "POST", + HTTPPath: "/", + } + + if input == nil { + input = &StartReplicationTaskInput{} + } + + output = &StartReplicationTaskOutput{} + req = c.newRequest(op, input, output) + return +} + +// StartReplicationTask API operation for AWS Database Migration Service. +// +// Starts the replication task. +// +// Returns awserr.Error for service API and SDK errors. Use runtime type assertions +// with awserr.Error's Code and Message methods to get detailed information about +// the error. +// +// See the AWS API reference guide for AWS Database Migration Service's +// API operation StartReplicationTask for usage and error information. +// +// Returned Error Codes: +// * ResourceNotFoundFault +// The resource could not be found. +// +// * InvalidResourceStateFault +// The resource is in a state that prevents it from being used for database +// migration. +// +// Please also see https://docs.aws.amazon.com/goto/WebAPI/dms-2016-01-01/StartReplicationTask +func (c *DatabaseMigrationService) StartReplicationTask(input *StartReplicationTaskInput) (*StartReplicationTaskOutput, error) { + req, out := c.StartReplicationTaskRequest(input) + err := req.Send() + return out, err +} + +const opStopReplicationTask = "StopReplicationTask" + +// StopReplicationTaskRequest generates a "aws/request.Request" representing the +// client's request for the StopReplicationTask operation. The "output" return +// value can be used to capture response data after the request's "Send" method +// is called. +// +// See StopReplicationTask for usage and error information. +// +// 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 StopReplicationTask 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 StopReplicationTaskRequest method. +// req, resp := client.StopReplicationTaskRequest(params) +// +// err := req.Send() +// if err == nil { // resp is now filled +// fmt.Println(resp) +// } +// +// Please also see https://docs.aws.amazon.com/goto/WebAPI/dms-2016-01-01/StopReplicationTask +func (c *DatabaseMigrationService) StopReplicationTaskRequest(input *StopReplicationTaskInput) (req *request.Request, output *StopReplicationTaskOutput) { + op := &request.Operation{ + Name: opStopReplicationTask, + HTTPMethod: "POST", + HTTPPath: "/", + } + + if input == nil { + input = &StopReplicationTaskInput{} + } + + output = &StopReplicationTaskOutput{} + req = c.newRequest(op, input, output) + return +} + +// StopReplicationTask API operation for AWS Database Migration Service. +// +// Stops the replication task. +// +// Returns awserr.Error for service API and SDK errors. Use runtime type assertions +// with awserr.Error's Code and Message methods to get detailed information about +// the error. +// +// See the AWS API reference guide for AWS Database Migration Service's +// API operation StopReplicationTask for usage and error information. +// +// Returned Error Codes: +// * ResourceNotFoundFault +// The resource could not be found. +// +// * InvalidResourceStateFault +// The resource is in a state that prevents it from being used for database +// migration. +// +// Please also see https://docs.aws.amazon.com/goto/WebAPI/dms-2016-01-01/StopReplicationTask +func (c *DatabaseMigrationService) StopReplicationTask(input *StopReplicationTaskInput) (*StopReplicationTaskOutput, error) { + req, out := c.StopReplicationTaskRequest(input) + err := req.Send() + return out, err +} + +const opTestConnection = "TestConnection" + +// TestConnectionRequest generates a "aws/request.Request" representing the +// client's request for the TestConnection operation. The "output" return +// value can be used to capture response data after the request's "Send" method +// is called. +// +// See TestConnection for usage and error information. +// +// 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 TestConnection 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 TestConnectionRequest method. +// req, resp := client.TestConnectionRequest(params) +// +// err := req.Send() +// if err == nil { // resp is now filled +// fmt.Println(resp) +// } +// +// Please also see https://docs.aws.amazon.com/goto/WebAPI/dms-2016-01-01/TestConnection +func (c *DatabaseMigrationService) TestConnectionRequest(input *TestConnectionInput) (req *request.Request, output *TestConnectionOutput) { + op := &request.Operation{ + Name: opTestConnection, + HTTPMethod: "POST", + HTTPPath: "/", + } + + if input == nil { + input = &TestConnectionInput{} + } + + output = &TestConnectionOutput{} + req = c.newRequest(op, input, output) + return +} + +// TestConnection API operation for AWS Database Migration Service. +// +// Tests the connection between the replication instance and the endpoint. +// +// Returns awserr.Error for service API and SDK errors. Use runtime type assertions +// with awserr.Error's Code and Message methods to get detailed information about +// the error. +// +// See the AWS API reference guide for AWS Database Migration Service's +// API operation TestConnection for usage and error information. +// +// Returned Error Codes: +// * ResourceNotFoundFault +// The resource could not be found. +// +// * InvalidResourceStateFault +// The resource is in a state that prevents it from being used for database +// migration. +// +// * KMSKeyNotAccessibleFault +// AWS DMS cannot access the KMS key. +// +// * ResourceQuotaExceededFault +// The quota for this resource quota has been exceeded. +// +// Please also see https://docs.aws.amazon.com/goto/WebAPI/dms-2016-01-01/TestConnection +func (c *DatabaseMigrationService) TestConnection(input *TestConnectionInput) (*TestConnectionOutput, error) { + req, out := c.TestConnectionRequest(input) + err := req.Send() + return out, err +} + +// Describes a quota for an AWS account, for example, the number of replication +// instances allowed. +// Please also see https://docs.aws.amazon.com/goto/WebAPI/dms-2016-01-01/AccountQuota +type AccountQuota struct { + _ struct{} `type:"structure"` + + // The name of the AWS DMS quota for this AWS account. + AccountQuotaName *string `type:"string"` + + // The maximum allowed value for the quota. + Max *int64 `type:"long"` + + // The amount currently used toward the quota maximum. + Used *int64 `type:"long"` +} + +// String returns the string representation +func (s AccountQuota) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s AccountQuota) GoString() string { + return s.String() +} + +// SetAccountQuotaName sets the AccountQuotaName field's value. +func (s *AccountQuota) SetAccountQuotaName(v string) *AccountQuota { + s.AccountQuotaName = &v + return s +} + +// SetMax sets the Max field's value. +func (s *AccountQuota) SetMax(v int64) *AccountQuota { + s.Max = &v + return s +} + +// SetUsed sets the Used field's value. +func (s *AccountQuota) SetUsed(v int64) *AccountQuota { + s.Used = &v + return s +} + +// Please also see https://docs.aws.amazon.com/goto/WebAPI/dms-2016-01-01/AddTagsToResourceMessage +type AddTagsToResourceInput struct { + _ struct{} `type:"structure"` + + // The Amazon Resource Name (ARN) of the AWS DMS resource the tag is to be added + // to. AWS DMS resources include a replication instance, endpoint, and a replication + // task. + // + // ResourceArn is a required field + ResourceArn *string `type:"string" required:"true"` + + // The tag to be assigned to the DMS resource. + // + // Tags is a required field + Tags []*Tag `locationNameList:"Tag" type:"list" required:"true"` +} + +// String returns the string representation +func (s AddTagsToResourceInput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s AddTagsToResourceInput) GoString() string { + return s.String() +} + +// Validate inspects the fields of the type to determine if they are valid. +func (s *AddTagsToResourceInput) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "AddTagsToResourceInput"} + if s.ResourceArn == nil { + invalidParams.Add(request.NewErrParamRequired("ResourceArn")) + } + if s.Tags == nil { + invalidParams.Add(request.NewErrParamRequired("Tags")) + } + + if invalidParams.Len() > 0 { + return invalidParams + } + return nil +} + +// SetResourceArn sets the ResourceArn field's value. +func (s *AddTagsToResourceInput) SetResourceArn(v string) *AddTagsToResourceInput { + s.ResourceArn = &v + return s +} + +// SetTags sets the Tags field's value. +func (s *AddTagsToResourceInput) SetTags(v []*Tag) *AddTagsToResourceInput { + s.Tags = v + return s +} + +// Please also see https://docs.aws.amazon.com/goto/WebAPI/dms-2016-01-01/AddTagsToResourceResponse +type AddTagsToResourceOutput struct { + _ struct{} `type:"structure"` +} + +// String returns the string representation +func (s AddTagsToResourceOutput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s AddTagsToResourceOutput) GoString() string { + return s.String() +} + +// Please also see https://docs.aws.amazon.com/goto/WebAPI/dms-2016-01-01/AvailabilityZone +type AvailabilityZone struct { + _ struct{} `type:"structure"` + + // The name of the availability zone. + Name *string `type:"string"` +} + +// String returns the string representation +func (s AvailabilityZone) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s AvailabilityZone) GoString() string { + return s.String() +} + +// SetName sets the Name field's value. +func (s *AvailabilityZone) SetName(v string) *AvailabilityZone { + s.Name = &v + return s +} + +// The SSL certificate that can be used to encrypt connections between the endpoints +// and the replication instance. +// Please also see https://docs.aws.amazon.com/goto/WebAPI/dms-2016-01-01/Certificate +type Certificate struct { + _ struct{} `type:"structure"` + + // The Amazon Resource Name (ARN) for the certificate. + CertificateArn *string `type:"string"` + + // The date that the certificate was created. + CertificateCreationDate *time.Time `type:"timestamp" timestampFormat:"unix"` + + // The customer-assigned name of the certificate. Valid characters are A-z and + // 0-9. + CertificateIdentifier *string `type:"string"` + + // The owner of the certificate. + CertificateOwner *string `type:"string"` + + // The contents of the .pem X.509 certificate file for the certificate. + CertificatePem *string `type:"string"` + + // The location of the imported Oracle Wallet certificate for use with SSL. + // + // CertificateWallet is automatically base64 encoded/decoded by the SDK. + CertificateWallet []byte `type:"blob"` + + // The key length of the cryptographic algorithm being used. + KeyLength *int64 `type:"integer"` + + // The signing algorithm for the certificate. + SigningAlgorithm *string `type:"string"` + + // The beginning date that the certificate is valid. + ValidFromDate *time.Time `type:"timestamp" timestampFormat:"unix"` + + // The final date that the certificate is valid. + ValidToDate *time.Time `type:"timestamp" timestampFormat:"unix"` +} + +// String returns the string representation +func (s Certificate) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s Certificate) GoString() string { + return s.String() +} + +// SetCertificateArn sets the CertificateArn field's value. +func (s *Certificate) SetCertificateArn(v string) *Certificate { + s.CertificateArn = &v + return s +} + +// SetCertificateCreationDate sets the CertificateCreationDate field's value. +func (s *Certificate) SetCertificateCreationDate(v time.Time) *Certificate { + s.CertificateCreationDate = &v + return s +} + +// SetCertificateIdentifier sets the CertificateIdentifier field's value. +func (s *Certificate) SetCertificateIdentifier(v string) *Certificate { + s.CertificateIdentifier = &v + return s +} + +// SetCertificateOwner sets the CertificateOwner field's value. +func (s *Certificate) SetCertificateOwner(v string) *Certificate { + s.CertificateOwner = &v + return s +} + +// SetCertificatePem sets the CertificatePem field's value. +func (s *Certificate) SetCertificatePem(v string) *Certificate { + s.CertificatePem = &v + return s +} + +// SetCertificateWallet sets the CertificateWallet field's value. +func (s *Certificate) SetCertificateWallet(v []byte) *Certificate { + s.CertificateWallet = v + return s +} + +// SetKeyLength sets the KeyLength field's value. +func (s *Certificate) SetKeyLength(v int64) *Certificate { + s.KeyLength = &v + return s +} + +// SetSigningAlgorithm sets the SigningAlgorithm field's value. +func (s *Certificate) SetSigningAlgorithm(v string) *Certificate { + s.SigningAlgorithm = &v + return s +} + +// SetValidFromDate sets the ValidFromDate field's value. +func (s *Certificate) SetValidFromDate(v time.Time) *Certificate { + s.ValidFromDate = &v + return s +} + +// SetValidToDate sets the ValidToDate field's value. +func (s *Certificate) SetValidToDate(v time.Time) *Certificate { + s.ValidToDate = &v + return s +} + +// Please also see https://docs.aws.amazon.com/goto/WebAPI/dms-2016-01-01/Connection +type Connection struct { + _ struct{} `type:"structure"` + + // The Amazon Resource Name (ARN) string that uniquely identifies the endpoint. + EndpointArn *string `type:"string"` + + // The identifier of the endpoint. Identifiers must begin with a letter; must + // contain only ASCII letters, digits, and hyphens; and must not end with a + // hyphen or contain two consecutive hyphens. + EndpointIdentifier *string `type:"string"` + + // The error message when the connection last failed. + LastFailureMessage *string `type:"string"` + + // The Amazon Resource Name (ARN) of the replication instance. + ReplicationInstanceArn *string `type:"string"` + + // The replication instance identifier. This parameter is stored as a lowercase + // string. + ReplicationInstanceIdentifier *string `type:"string"` + + // The connection status. + Status *string `type:"string"` +} + +// String returns the string representation +func (s Connection) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s Connection) GoString() string { + return s.String() +} + +// SetEndpointArn sets the EndpointArn field's value. +func (s *Connection) SetEndpointArn(v string) *Connection { + s.EndpointArn = &v + return s +} + +// SetEndpointIdentifier sets the EndpointIdentifier field's value. +func (s *Connection) SetEndpointIdentifier(v string) *Connection { + s.EndpointIdentifier = &v + return s +} + +// SetLastFailureMessage sets the LastFailureMessage field's value. +func (s *Connection) SetLastFailureMessage(v string) *Connection { + s.LastFailureMessage = &v + return s +} + +// SetReplicationInstanceArn sets the ReplicationInstanceArn field's value. +func (s *Connection) SetReplicationInstanceArn(v string) *Connection { + s.ReplicationInstanceArn = &v + return s +} + +// SetReplicationInstanceIdentifier sets the ReplicationInstanceIdentifier field's value. +func (s *Connection) SetReplicationInstanceIdentifier(v string) *Connection { + s.ReplicationInstanceIdentifier = &v + return s +} + +// SetStatus sets the Status field's value. +func (s *Connection) SetStatus(v string) *Connection { + s.Status = &v + return s +} + +// Please also see https://docs.aws.amazon.com/goto/WebAPI/dms-2016-01-01/CreateEndpointMessage +type CreateEndpointInput struct { + _ struct{} `type:"structure"` + + // The Amazon Resource Number (ARN) for the certificate. + CertificateArn *string `type:"string"` + + // The name of the endpoint database. + DatabaseName *string `type:"string"` + + // The database endpoint identifier. Identifiers must begin with a letter; must + // contain only ASCII letters, digits, and hyphens; and must not end with a + // hyphen or contain two consecutive hyphens. + // + // EndpointIdentifier is a required field + EndpointIdentifier *string `type:"string" required:"true"` + + // The type of endpoint. + // + // EndpointType is a required field + EndpointType *string `type:"string" required:"true" enum:"ReplicationEndpointTypeValue"` + + // The type of engine for the endpoint. Valid values include MYSQL, ORACLE, + // POSTGRES, MARIADB, AURORA, REDSHIFT, SYBASE, and SQLSERVER. + // + // EngineName is a required field + EngineName *string `type:"string" required:"true"` + + // Additional attributes associated with the connection. + ExtraConnectionAttributes *string `type:"string"` + + // The KMS key identifier that will be used to encrypt the connection parameters. + // If you do not specify a value for the KmsKeyId parameter, then AWS DMS 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 to be used to login to the endpoint database. + Password *string `type:"string"` + + // The port used by the endpoint database. + Port *int64 `type:"integer"` + + // The name of the server where the endpoint database resides. + ServerName *string `type:"string"` + + // The SSL mode to use for the SSL connection. + // + // SSL mode can be one of four values: none, require, verify-ca, verify-full. + // + // The default value is none. + SslMode *string `type:"string" enum:"DmsSslModeValue"` + + // Tags to be added to the endpoint. + Tags []*Tag `locationNameList:"Tag" type:"list"` + + // The user name to be used to login to the endpoint database. + Username *string `type:"string"` +} + +// String returns the string representation +func (s CreateEndpointInput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s CreateEndpointInput) GoString() string { + return s.String() +} + +// Validate inspects the fields of the type to determine if they are valid. +func (s *CreateEndpointInput) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "CreateEndpointInput"} + if s.EndpointIdentifier == nil { + invalidParams.Add(request.NewErrParamRequired("EndpointIdentifier")) + } + if s.EndpointType == nil { + invalidParams.Add(request.NewErrParamRequired("EndpointType")) + } + if s.EngineName == nil { + invalidParams.Add(request.NewErrParamRequired("EngineName")) + } + + if invalidParams.Len() > 0 { + return invalidParams + } + return nil +} + +// SetCertificateArn sets the CertificateArn field's value. +func (s *CreateEndpointInput) SetCertificateArn(v string) *CreateEndpointInput { + s.CertificateArn = &v + return s +} + +// SetDatabaseName sets the DatabaseName field's value. +func (s *CreateEndpointInput) SetDatabaseName(v string) *CreateEndpointInput { + s.DatabaseName = &v + return s +} + +// SetEndpointIdentifier sets the EndpointIdentifier field's value. +func (s *CreateEndpointInput) SetEndpointIdentifier(v string) *CreateEndpointInput { + s.EndpointIdentifier = &v + return s +} + +// SetEndpointType sets the EndpointType field's value. +func (s *CreateEndpointInput) SetEndpointType(v string) *CreateEndpointInput { + s.EndpointType = &v + return s +} + +// SetEngineName sets the EngineName field's value. +func (s *CreateEndpointInput) SetEngineName(v string) *CreateEndpointInput { + s.EngineName = &v + return s +} + +// SetExtraConnectionAttributes sets the ExtraConnectionAttributes field's value. +func (s *CreateEndpointInput) SetExtraConnectionAttributes(v string) *CreateEndpointInput { + s.ExtraConnectionAttributes = &v + return s +} + +// SetKmsKeyId sets the KmsKeyId field's value. +func (s *CreateEndpointInput) SetKmsKeyId(v string) *CreateEndpointInput { + s.KmsKeyId = &v + return s +} + +// SetPassword sets the Password field's value. +func (s *CreateEndpointInput) SetPassword(v string) *CreateEndpointInput { + s.Password = &v + return s +} + +// SetPort sets the Port field's value. +func (s *CreateEndpointInput) SetPort(v int64) *CreateEndpointInput { + s.Port = &v + return s +} + +// SetServerName sets the ServerName field's value. +func (s *CreateEndpointInput) SetServerName(v string) *CreateEndpointInput { + s.ServerName = &v + return s +} + +// SetSslMode sets the SslMode field's value. +func (s *CreateEndpointInput) SetSslMode(v string) *CreateEndpointInput { + s.SslMode = &v + return s +} + +// SetTags sets the Tags field's value. +func (s *CreateEndpointInput) SetTags(v []*Tag) *CreateEndpointInput { + s.Tags = v + return s +} + +// SetUsername sets the Username field's value. +func (s *CreateEndpointInput) SetUsername(v string) *CreateEndpointInput { + s.Username = &v + return s +} + +// Please also see https://docs.aws.amazon.com/goto/WebAPI/dms-2016-01-01/CreateEndpointResponse +type CreateEndpointOutput struct { + _ struct{} `type:"structure"` + + // The endpoint that was created. + Endpoint *Endpoint `type:"structure"` +} + +// String returns the string representation +func (s CreateEndpointOutput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s CreateEndpointOutput) GoString() string { + return s.String() +} + +// SetEndpoint sets the Endpoint field's value. +func (s *CreateEndpointOutput) SetEndpoint(v *Endpoint) *CreateEndpointOutput { + s.Endpoint = v + return s +} + +// Please also see https://docs.aws.amazon.com/goto/WebAPI/dms-2016-01-01/CreateReplicationInstanceMessage +type CreateReplicationInstanceInput struct { + _ struct{} `type:"structure"` + + // The amount of storage (in gigabytes) to be initially allocated for the replication + // instance. + AllocatedStorage *int64 `type:"integer"` + + // Indicates that minor engine upgrades will be applied automatically to the + // replication instance during the maintenance window. + // + // Default: true + AutoMinorVersionUpgrade *bool `type:"boolean"` + + // The EC2 Availability Zone that the replication instance will be created in. + // + // Default: A random, system-chosen Availability Zone in the endpoint's region. + // + // Example: us-east-1d + AvailabilityZone *string `type:"string"` + + // The engine version number of the replication instance. + EngineVersion *string `type:"string"` + + // The KMS key identifier that will be used to encrypt the content on the replication + // instance. If you do not specify a value for the KmsKeyId parameter, then + // AWS DMS 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"` + + // Specifies if the replication instance is a Multi-AZ deployment. You cannot + // set the AvailabilityZone parameter if the Multi-AZ parameter is set to true. + MultiAZ *bool `type:"boolean"` + + // 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. + // + // Valid Days: Mon, Tue, Wed, Thu, Fri, Sat, Sun + // + // Constraints: Minimum 30-minute window. + PreferredMaintenanceWindow *string `type:"string"` + + // Specifies the accessibility options for the replication instance. A value + // of true represents an instance with a public IP address. A value of false + // represents an instance with a private IP address. The default value is true. + PubliclyAccessible *bool `type:"boolean"` + + // The compute and memory capacity of the replication instance as specified + // by the replication instance class. + // + // Valid Values: dms.t2.micro | dms.t2.small | dms.t2.medium | dms.t2.large + // | dms.c4.large | dms.c4.xlarge | dms.c4.2xlarge | dms.c4.4xlarge + // + // ReplicationInstanceClass is a required field + ReplicationInstanceClass *string `type:"string" required:"true"` + + // The replication instance identifier. This parameter is stored as a lowercase + // string. + // + // 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: myrepinstance + // + // ReplicationInstanceIdentifier is a required field + ReplicationInstanceIdentifier *string `type:"string" required:"true"` + + // A subnet group to associate with the replication instance. + ReplicationSubnetGroupIdentifier *string `type:"string"` + + // Tags to be associated with the replication instance. + Tags []*Tag `locationNameList:"Tag" type:"list"` + + // Specifies the VPC security group to be used with the replication instance. + // The VPC security group must work with the VPC containing the replication + // instance. + VpcSecurityGroupIds []*string `locationNameList:"VpcSecurityGroupId" type:"list"` +} + +// String returns the string representation +func (s CreateReplicationInstanceInput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s CreateReplicationInstanceInput) GoString() string { + return s.String() +} + +// Validate inspects the fields of the type to determine if they are valid. +func (s *CreateReplicationInstanceInput) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "CreateReplicationInstanceInput"} + if s.ReplicationInstanceClass == nil { + invalidParams.Add(request.NewErrParamRequired("ReplicationInstanceClass")) + } + if s.ReplicationInstanceIdentifier == nil { + invalidParams.Add(request.NewErrParamRequired("ReplicationInstanceIdentifier")) + } + + if invalidParams.Len() > 0 { + return invalidParams + } + return nil +} + +// SetAllocatedStorage sets the AllocatedStorage field's value. +func (s *CreateReplicationInstanceInput) SetAllocatedStorage(v int64) *CreateReplicationInstanceInput { + s.AllocatedStorage = &v + return s +} + +// SetAutoMinorVersionUpgrade sets the AutoMinorVersionUpgrade field's value. +func (s *CreateReplicationInstanceInput) SetAutoMinorVersionUpgrade(v bool) *CreateReplicationInstanceInput { + s.AutoMinorVersionUpgrade = &v + return s +} + +// SetAvailabilityZone sets the AvailabilityZone field's value. +func (s *CreateReplicationInstanceInput) SetAvailabilityZone(v string) *CreateReplicationInstanceInput { + s.AvailabilityZone = &v + return s +} + +// SetEngineVersion sets the EngineVersion field's value. +func (s *CreateReplicationInstanceInput) SetEngineVersion(v string) *CreateReplicationInstanceInput { + s.EngineVersion = &v + return s +} + +// SetKmsKeyId sets the KmsKeyId field's value. +func (s *CreateReplicationInstanceInput) SetKmsKeyId(v string) *CreateReplicationInstanceInput { + s.KmsKeyId = &v + return s +} + +// SetMultiAZ sets the MultiAZ field's value. +func (s *CreateReplicationInstanceInput) SetMultiAZ(v bool) *CreateReplicationInstanceInput { + s.MultiAZ = &v + return s +} + +// SetPreferredMaintenanceWindow sets the PreferredMaintenanceWindow field's value. +func (s *CreateReplicationInstanceInput) SetPreferredMaintenanceWindow(v string) *CreateReplicationInstanceInput { + s.PreferredMaintenanceWindow = &v + return s +} + +// SetPubliclyAccessible sets the PubliclyAccessible field's value. +func (s *CreateReplicationInstanceInput) SetPubliclyAccessible(v bool) *CreateReplicationInstanceInput { + s.PubliclyAccessible = &v + return s +} + +// SetReplicationInstanceClass sets the ReplicationInstanceClass field's value. +func (s *CreateReplicationInstanceInput) SetReplicationInstanceClass(v string) *CreateReplicationInstanceInput { + s.ReplicationInstanceClass = &v + return s +} + +// SetReplicationInstanceIdentifier sets the ReplicationInstanceIdentifier field's value. +func (s *CreateReplicationInstanceInput) SetReplicationInstanceIdentifier(v string) *CreateReplicationInstanceInput { + s.ReplicationInstanceIdentifier = &v + return s +} + +// SetReplicationSubnetGroupIdentifier sets the ReplicationSubnetGroupIdentifier field's value. +func (s *CreateReplicationInstanceInput) SetReplicationSubnetGroupIdentifier(v string) *CreateReplicationInstanceInput { + s.ReplicationSubnetGroupIdentifier = &v + return s +} + +// SetTags sets the Tags field's value. +func (s *CreateReplicationInstanceInput) SetTags(v []*Tag) *CreateReplicationInstanceInput { + s.Tags = v + return s +} + +// SetVpcSecurityGroupIds sets the VpcSecurityGroupIds field's value. +func (s *CreateReplicationInstanceInput) SetVpcSecurityGroupIds(v []*string) *CreateReplicationInstanceInput { + s.VpcSecurityGroupIds = v + return s +} + +// Please also see https://docs.aws.amazon.com/goto/WebAPI/dms-2016-01-01/CreateReplicationInstanceResponse +type CreateReplicationInstanceOutput struct { + _ struct{} `type:"structure"` + + // The replication instance that was created. + ReplicationInstance *ReplicationInstance `type:"structure"` +} + +// String returns the string representation +func (s CreateReplicationInstanceOutput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s CreateReplicationInstanceOutput) GoString() string { + return s.String() +} + +// SetReplicationInstance sets the ReplicationInstance field's value. +func (s *CreateReplicationInstanceOutput) SetReplicationInstance(v *ReplicationInstance) *CreateReplicationInstanceOutput { + s.ReplicationInstance = v + return s +} + +// Please also see https://docs.aws.amazon.com/goto/WebAPI/dms-2016-01-01/CreateReplicationSubnetGroupMessage +type CreateReplicationSubnetGroupInput struct { + _ struct{} `type:"structure"` + + // The description for the subnet group. + // + // ReplicationSubnetGroupDescription is a required field + ReplicationSubnetGroupDescription *string `type:"string" required:"true"` + + // The name for the replication subnet group. This value is stored as a lowercase + // string. + // + // Constraints: Must contain no more than 255 alphanumeric characters, periods, + // spaces, underscores, or hyphens. Must not be "default". + // + // Example: mySubnetgroup + // + // ReplicationSubnetGroupIdentifier is a required field + ReplicationSubnetGroupIdentifier *string `type:"string" required:"true"` + + // The EC2 subnet IDs for the subnet group. + // + // SubnetIds is a required field + SubnetIds []*string `locationNameList:"SubnetIdentifier" type:"list" required:"true"` + + // The tag to be assigned to the subnet group. + Tags []*Tag `locationNameList:"Tag" type:"list"` +} + +// String returns the string representation +func (s CreateReplicationSubnetGroupInput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s CreateReplicationSubnetGroupInput) GoString() string { + return s.String() +} + +// Validate inspects the fields of the type to determine if they are valid. +func (s *CreateReplicationSubnetGroupInput) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "CreateReplicationSubnetGroupInput"} + if s.ReplicationSubnetGroupDescription == nil { + invalidParams.Add(request.NewErrParamRequired("ReplicationSubnetGroupDescription")) + } + if s.ReplicationSubnetGroupIdentifier == nil { + invalidParams.Add(request.NewErrParamRequired("ReplicationSubnetGroupIdentifier")) + } + if s.SubnetIds == nil { + invalidParams.Add(request.NewErrParamRequired("SubnetIds")) + } + + if invalidParams.Len() > 0 { + return invalidParams + } + return nil +} + +// SetReplicationSubnetGroupDescription sets the ReplicationSubnetGroupDescription field's value. +func (s *CreateReplicationSubnetGroupInput) SetReplicationSubnetGroupDescription(v string) *CreateReplicationSubnetGroupInput { + s.ReplicationSubnetGroupDescription = &v + return s +} + +// SetReplicationSubnetGroupIdentifier sets the ReplicationSubnetGroupIdentifier field's value. +func (s *CreateReplicationSubnetGroupInput) SetReplicationSubnetGroupIdentifier(v string) *CreateReplicationSubnetGroupInput { + s.ReplicationSubnetGroupIdentifier = &v + return s +} + +// SetSubnetIds sets the SubnetIds field's value. +func (s *CreateReplicationSubnetGroupInput) SetSubnetIds(v []*string) *CreateReplicationSubnetGroupInput { + s.SubnetIds = v + return s +} + +// SetTags sets the Tags field's value. +func (s *CreateReplicationSubnetGroupInput) SetTags(v []*Tag) *CreateReplicationSubnetGroupInput { + s.Tags = v + return s +} + +// Please also see https://docs.aws.amazon.com/goto/WebAPI/dms-2016-01-01/CreateReplicationSubnetGroupResponse +type CreateReplicationSubnetGroupOutput struct { + _ struct{} `type:"structure"` + + // The replication subnet group that was created. + ReplicationSubnetGroup *ReplicationSubnetGroup `type:"structure"` +} + +// String returns the string representation +func (s CreateReplicationSubnetGroupOutput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s CreateReplicationSubnetGroupOutput) GoString() string { + return s.String() +} + +// SetReplicationSubnetGroup sets the ReplicationSubnetGroup field's value. +func (s *CreateReplicationSubnetGroupOutput) SetReplicationSubnetGroup(v *ReplicationSubnetGroup) *CreateReplicationSubnetGroupOutput { + s.ReplicationSubnetGroup = v + return s +} + +// Please also see https://docs.aws.amazon.com/goto/WebAPI/dms-2016-01-01/CreateReplicationTaskMessage +type CreateReplicationTaskInput struct { + _ struct{} `type:"structure"` + + // The start time for the Change Data Capture (CDC) operation. + CdcStartTime *time.Time `type:"timestamp" timestampFormat:"unix"` + + // The migration type. + // + // MigrationType is a required field + MigrationType *string `type:"string" required:"true" enum:"MigrationTypeValue"` + + // The Amazon Resource Name (ARN) of the replication instance. + // + // ReplicationInstanceArn is a required field + ReplicationInstanceArn *string `type:"string" required:"true"` + + // The replication task identifier. + // + // 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. + // + // ReplicationTaskIdentifier is a required field + ReplicationTaskIdentifier *string `type:"string" required:"true"` + + // Settings for the task, such as target metadata settings. For a complete list + // of task settings, see Task Settings for AWS Database Migration Service Tasks + // (http://docs.aws.amazon.com/dms/latest/userguide/CHAP_Tasks.CustomizingTasks.TaskSettings.html). + ReplicationTaskSettings *string `type:"string"` + + // The Amazon Resource Name (ARN) string that uniquely identifies the endpoint. + // + // SourceEndpointArn is a required field + SourceEndpointArn *string `type:"string" required:"true"` + + // The path of the JSON file that contains the table mappings. Preceed the path + // with "file://". + // + // For example, --table-mappings file://mappingfile.json + // + // TableMappings is a required field + TableMappings *string `type:"string" required:"true"` + + // Tags to be added to the replication instance. + Tags []*Tag `locationNameList:"Tag" type:"list"` + + // The Amazon Resource Name (ARN) string that uniquely identifies the endpoint. + // + // TargetEndpointArn is a required field + TargetEndpointArn *string `type:"string" required:"true"` +} + +// String returns the string representation +func (s CreateReplicationTaskInput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s CreateReplicationTaskInput) GoString() string { + return s.String() +} + +// Validate inspects the fields of the type to determine if they are valid. +func (s *CreateReplicationTaskInput) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "CreateReplicationTaskInput"} + if s.MigrationType == nil { + invalidParams.Add(request.NewErrParamRequired("MigrationType")) + } + if s.ReplicationInstanceArn == nil { + invalidParams.Add(request.NewErrParamRequired("ReplicationInstanceArn")) + } + if s.ReplicationTaskIdentifier == nil { + invalidParams.Add(request.NewErrParamRequired("ReplicationTaskIdentifier")) + } + if s.SourceEndpointArn == nil { + invalidParams.Add(request.NewErrParamRequired("SourceEndpointArn")) + } + if s.TableMappings == nil { + invalidParams.Add(request.NewErrParamRequired("TableMappings")) + } + if s.TargetEndpointArn == nil { + invalidParams.Add(request.NewErrParamRequired("TargetEndpointArn")) + } + + if invalidParams.Len() > 0 { + return invalidParams + } + return nil +} + +// SetCdcStartTime sets the CdcStartTime field's value. +func (s *CreateReplicationTaskInput) SetCdcStartTime(v time.Time) *CreateReplicationTaskInput { + s.CdcStartTime = &v + return s +} + +// SetMigrationType sets the MigrationType field's value. +func (s *CreateReplicationTaskInput) SetMigrationType(v string) *CreateReplicationTaskInput { + s.MigrationType = &v + return s +} + +// SetReplicationInstanceArn sets the ReplicationInstanceArn field's value. +func (s *CreateReplicationTaskInput) SetReplicationInstanceArn(v string) *CreateReplicationTaskInput { + s.ReplicationInstanceArn = &v + return s +} + +// SetReplicationTaskIdentifier sets the ReplicationTaskIdentifier field's value. +func (s *CreateReplicationTaskInput) SetReplicationTaskIdentifier(v string) *CreateReplicationTaskInput { + s.ReplicationTaskIdentifier = &v + return s +} + +// SetReplicationTaskSettings sets the ReplicationTaskSettings field's value. +func (s *CreateReplicationTaskInput) SetReplicationTaskSettings(v string) *CreateReplicationTaskInput { + s.ReplicationTaskSettings = &v + return s +} + +// SetSourceEndpointArn sets the SourceEndpointArn field's value. +func (s *CreateReplicationTaskInput) SetSourceEndpointArn(v string) *CreateReplicationTaskInput { + s.SourceEndpointArn = &v + return s +} + +// SetTableMappings sets the TableMappings field's value. +func (s *CreateReplicationTaskInput) SetTableMappings(v string) *CreateReplicationTaskInput { + s.TableMappings = &v + return s +} + +// SetTags sets the Tags field's value. +func (s *CreateReplicationTaskInput) SetTags(v []*Tag) *CreateReplicationTaskInput { + s.Tags = v + return s +} + +// SetTargetEndpointArn sets the TargetEndpointArn field's value. +func (s *CreateReplicationTaskInput) SetTargetEndpointArn(v string) *CreateReplicationTaskInput { + s.TargetEndpointArn = &v + return s +} + +// Please also see https://docs.aws.amazon.com/goto/WebAPI/dms-2016-01-01/CreateReplicationTaskResponse +type CreateReplicationTaskOutput struct { + _ struct{} `type:"structure"` + + // The replication task that was created. + ReplicationTask *ReplicationTask `type:"structure"` +} + +// String returns the string representation +func (s CreateReplicationTaskOutput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s CreateReplicationTaskOutput) GoString() string { + return s.String() +} + +// SetReplicationTask sets the ReplicationTask field's value. +func (s *CreateReplicationTaskOutput) SetReplicationTask(v *ReplicationTask) *CreateReplicationTaskOutput { + s.ReplicationTask = v + return s +} + +// Please also see https://docs.aws.amazon.com/goto/WebAPI/dms-2016-01-01/DeleteCertificateMessage +type DeleteCertificateInput struct { + _ struct{} `type:"structure"` + + // The Amazon Resource Name (ARN) of the deleted certificate. + // + // CertificateArn is a required field + CertificateArn *string `type:"string" required:"true"` +} + +// String returns the string representation +func (s DeleteCertificateInput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s DeleteCertificateInput) GoString() string { + return s.String() +} + +// Validate inspects the fields of the type to determine if they are valid. +func (s *DeleteCertificateInput) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "DeleteCertificateInput"} + if s.CertificateArn == nil { + invalidParams.Add(request.NewErrParamRequired("CertificateArn")) + } + + if invalidParams.Len() > 0 { + return invalidParams + } + return nil +} + +// SetCertificateArn sets the CertificateArn field's value. +func (s *DeleteCertificateInput) SetCertificateArn(v string) *DeleteCertificateInput { + s.CertificateArn = &v + return s +} + +// Please also see https://docs.aws.amazon.com/goto/WebAPI/dms-2016-01-01/DeleteCertificateResponse +type DeleteCertificateOutput struct { + _ struct{} `type:"structure"` + + // The Secure Sockets Layer (SSL) certificate. + Certificate *Certificate `type:"structure"` +} + +// String returns the string representation +func (s DeleteCertificateOutput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s DeleteCertificateOutput) GoString() string { + return s.String() +} + +// SetCertificate sets the Certificate field's value. +func (s *DeleteCertificateOutput) SetCertificate(v *Certificate) *DeleteCertificateOutput { + s.Certificate = v + return s +} + +// Please also see https://docs.aws.amazon.com/goto/WebAPI/dms-2016-01-01/DeleteEndpointMessage +type DeleteEndpointInput struct { + _ struct{} `type:"structure"` + + // The Amazon Resource Name (ARN) string that uniquely identifies the endpoint. + // + // EndpointArn is a required field + EndpointArn *string `type:"string" required:"true"` +} + +// String returns the string representation +func (s DeleteEndpointInput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s DeleteEndpointInput) GoString() string { + return s.String() +} + +// Validate inspects the fields of the type to determine if they are valid. +func (s *DeleteEndpointInput) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "DeleteEndpointInput"} + if s.EndpointArn == nil { + invalidParams.Add(request.NewErrParamRequired("EndpointArn")) + } + + if invalidParams.Len() > 0 { + return invalidParams + } + return nil +} + +// SetEndpointArn sets the EndpointArn field's value. +func (s *DeleteEndpointInput) SetEndpointArn(v string) *DeleteEndpointInput { + s.EndpointArn = &v + return s +} + +// Please also see https://docs.aws.amazon.com/goto/WebAPI/dms-2016-01-01/DeleteEndpointResponse +type DeleteEndpointOutput struct { + _ struct{} `type:"structure"` + + // The endpoint that was deleted. + Endpoint *Endpoint `type:"structure"` +} + +// String returns the string representation +func (s DeleteEndpointOutput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s DeleteEndpointOutput) GoString() string { + return s.String() +} + +// SetEndpoint sets the Endpoint field's value. +func (s *DeleteEndpointOutput) SetEndpoint(v *Endpoint) *DeleteEndpointOutput { + s.Endpoint = v + return s +} + +// Please also see https://docs.aws.amazon.com/goto/WebAPI/dms-2016-01-01/DeleteReplicationInstanceMessage +type DeleteReplicationInstanceInput struct { + _ struct{} `type:"structure"` + + // The Amazon Resource Name (ARN) of the replication instance to be deleted. + // + // ReplicationInstanceArn is a required field + ReplicationInstanceArn *string `type:"string" required:"true"` +} + +// String returns the string representation +func (s DeleteReplicationInstanceInput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s DeleteReplicationInstanceInput) GoString() string { + return s.String() +} + +// Validate inspects the fields of the type to determine if they are valid. +func (s *DeleteReplicationInstanceInput) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "DeleteReplicationInstanceInput"} + if s.ReplicationInstanceArn == nil { + invalidParams.Add(request.NewErrParamRequired("ReplicationInstanceArn")) + } + + if invalidParams.Len() > 0 { + return invalidParams + } + return nil +} + +// SetReplicationInstanceArn sets the ReplicationInstanceArn field's value. +func (s *DeleteReplicationInstanceInput) SetReplicationInstanceArn(v string) *DeleteReplicationInstanceInput { + s.ReplicationInstanceArn = &v + return s +} + +// Please also see https://docs.aws.amazon.com/goto/WebAPI/dms-2016-01-01/DeleteReplicationInstanceResponse +type DeleteReplicationInstanceOutput struct { + _ struct{} `type:"structure"` + + // The replication instance that was deleted. + ReplicationInstance *ReplicationInstance `type:"structure"` +} + +// String returns the string representation +func (s DeleteReplicationInstanceOutput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s DeleteReplicationInstanceOutput) GoString() string { + return s.String() +} + +// SetReplicationInstance sets the ReplicationInstance field's value. +func (s *DeleteReplicationInstanceOutput) SetReplicationInstance(v *ReplicationInstance) *DeleteReplicationInstanceOutput { + s.ReplicationInstance = v + return s +} + +// Please also see https://docs.aws.amazon.com/goto/WebAPI/dms-2016-01-01/DeleteReplicationSubnetGroupMessage +type DeleteReplicationSubnetGroupInput struct { + _ struct{} `type:"structure"` + + // The subnet group name of the replication instance. + // + // ReplicationSubnetGroupIdentifier is a required field + ReplicationSubnetGroupIdentifier *string `type:"string" required:"true"` +} + +// String returns the string representation +func (s DeleteReplicationSubnetGroupInput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s DeleteReplicationSubnetGroupInput) GoString() string { + return s.String() +} + +// Validate inspects the fields of the type to determine if they are valid. +func (s *DeleteReplicationSubnetGroupInput) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "DeleteReplicationSubnetGroupInput"} + if s.ReplicationSubnetGroupIdentifier == nil { + invalidParams.Add(request.NewErrParamRequired("ReplicationSubnetGroupIdentifier")) + } + + if invalidParams.Len() > 0 { + return invalidParams + } + return nil +} + +// SetReplicationSubnetGroupIdentifier sets the ReplicationSubnetGroupIdentifier field's value. +func (s *DeleteReplicationSubnetGroupInput) SetReplicationSubnetGroupIdentifier(v string) *DeleteReplicationSubnetGroupInput { + s.ReplicationSubnetGroupIdentifier = &v + return s +} + +// Please also see https://docs.aws.amazon.com/goto/WebAPI/dms-2016-01-01/DeleteReplicationSubnetGroupResponse +type DeleteReplicationSubnetGroupOutput struct { + _ struct{} `type:"structure"` +} + +// String returns the string representation +func (s DeleteReplicationSubnetGroupOutput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s DeleteReplicationSubnetGroupOutput) GoString() string { + return s.String() +} + +// Please also see https://docs.aws.amazon.com/goto/WebAPI/dms-2016-01-01/DeleteReplicationTaskMessage +type DeleteReplicationTaskInput struct { + _ struct{} `type:"structure"` + + // The Amazon Resource Name (ARN) of the replication task to be deleted. + // + // ReplicationTaskArn is a required field + ReplicationTaskArn *string `type:"string" required:"true"` +} + +// String returns the string representation +func (s DeleteReplicationTaskInput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s DeleteReplicationTaskInput) GoString() string { + return s.String() +} + +// Validate inspects the fields of the type to determine if they are valid. +func (s *DeleteReplicationTaskInput) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "DeleteReplicationTaskInput"} + if s.ReplicationTaskArn == nil { + invalidParams.Add(request.NewErrParamRequired("ReplicationTaskArn")) + } + + if invalidParams.Len() > 0 { + return invalidParams + } + return nil +} + +// SetReplicationTaskArn sets the ReplicationTaskArn field's value. +func (s *DeleteReplicationTaskInput) SetReplicationTaskArn(v string) *DeleteReplicationTaskInput { + s.ReplicationTaskArn = &v + return s +} + +// Please also see https://docs.aws.amazon.com/goto/WebAPI/dms-2016-01-01/DeleteReplicationTaskResponse +type DeleteReplicationTaskOutput struct { + _ struct{} `type:"structure"` + + // The deleted replication task. + ReplicationTask *ReplicationTask `type:"structure"` +} + +// String returns the string representation +func (s DeleteReplicationTaskOutput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s DeleteReplicationTaskOutput) GoString() string { + return s.String() +} + +// SetReplicationTask sets the ReplicationTask field's value. +func (s *DeleteReplicationTaskOutput) SetReplicationTask(v *ReplicationTask) *DeleteReplicationTaskOutput { + s.ReplicationTask = v + return s +} + +// Please also see https://docs.aws.amazon.com/goto/WebAPI/dms-2016-01-01/DescribeAccountAttributesMessage +type DescribeAccountAttributesInput struct { + _ struct{} `type:"structure"` +} + +// String returns the string representation +func (s DescribeAccountAttributesInput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s DescribeAccountAttributesInput) GoString() string { + return s.String() +} + +// Please also see https://docs.aws.amazon.com/goto/WebAPI/dms-2016-01-01/DescribeAccountAttributesResponse +type DescribeAccountAttributesOutput struct { + _ struct{} `type:"structure"` + + // Account quota information. + AccountQuotas []*AccountQuota `locationNameList:"AccountQuota" type:"list"` +} + +// String returns the string representation +func (s DescribeAccountAttributesOutput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s DescribeAccountAttributesOutput) GoString() string { + return s.String() +} + +// SetAccountQuotas sets the AccountQuotas field's value. +func (s *DescribeAccountAttributesOutput) SetAccountQuotas(v []*AccountQuota) *DescribeAccountAttributesOutput { + s.AccountQuotas = v + return s +} + +// Please also see https://docs.aws.amazon.com/goto/WebAPI/dms-2016-01-01/DescribeCertificatesMessage +type DescribeCertificatesInput struct { + _ struct{} `type:"structure"` + + // Filters applied to the certificate described in the form of key-value pairs. + Filters []*Filter `locationNameList:"Filter" type:"list"` + + // An optional pagination token provided by a previous request. If this parameter + // is specified, the response includes only records beyond the marker, up to + // the value specified by MaxRecords. + Marker *string `type:"string"` + + // The maximum number of records to include in the response. If more records + // exist than the specified MaxRecords value, a pagination token called a marker + // is included in the response so that the remaining results can be retrieved. + // + // Default: 10 + MaxRecords *int64 `type:"integer"` +} + +// String returns the string representation +func (s DescribeCertificatesInput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s DescribeCertificatesInput) GoString() string { + return s.String() +} + +// Validate inspects the fields of the type to determine if they are valid. +func (s *DescribeCertificatesInput) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "DescribeCertificatesInput"} + if s.Filters != nil { + for i, v := range s.Filters { + if v == nil { + continue + } + if err := v.Validate(); err != nil { + invalidParams.AddNested(fmt.Sprintf("%s[%v]", "Filters", i), err.(request.ErrInvalidParams)) + } + } + } + + if invalidParams.Len() > 0 { + return invalidParams + } + return nil +} + +// SetFilters sets the Filters field's value. +func (s *DescribeCertificatesInput) SetFilters(v []*Filter) *DescribeCertificatesInput { + s.Filters = v + return s +} + +// SetMarker sets the Marker field's value. +func (s *DescribeCertificatesInput) SetMarker(v string) *DescribeCertificatesInput { + s.Marker = &v + return s +} + +// SetMaxRecords sets the MaxRecords field's value. +func (s *DescribeCertificatesInput) SetMaxRecords(v int64) *DescribeCertificatesInput { + s.MaxRecords = &v + return s +} + +// Please also see https://docs.aws.amazon.com/goto/WebAPI/dms-2016-01-01/DescribeCertificatesResponse +type DescribeCertificatesOutput struct { + _ struct{} `type:"structure"` + + // The Secure Sockets Layer (SSL) certificates associated with the replication + // instance. + Certificates []*Certificate `locationNameList:"Certificate" type:"list"` + + // The pagination token. + Marker *string `type:"string"` +} + +// String returns the string representation +func (s DescribeCertificatesOutput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s DescribeCertificatesOutput) GoString() string { + return s.String() +} + +// SetCertificates sets the Certificates field's value. +func (s *DescribeCertificatesOutput) SetCertificates(v []*Certificate) *DescribeCertificatesOutput { + s.Certificates = v + return s +} + +// SetMarker sets the Marker field's value. +func (s *DescribeCertificatesOutput) SetMarker(v string) *DescribeCertificatesOutput { + s.Marker = &v + return s +} + +// Please also see https://docs.aws.amazon.com/goto/WebAPI/dms-2016-01-01/DescribeConnectionsMessage +type DescribeConnectionsInput struct { + _ struct{} `type:"structure"` + + // The filters applied to the connection. + // + // Valid filter names: endpoint-arn | replication-instance-arn + Filters []*Filter `locationNameList:"Filter" type:"list"` + + // An optional pagination token provided by a previous request. If this parameter + // is specified, the response includes only records beyond the marker, up to + // the value specified by MaxRecords. + Marker *string `type:"string"` + + // The maximum number of records to include in the response. If more records + // exist than the specified MaxRecords value, a pagination token called a marker + // is included in the response so that the remaining results can be retrieved. + // + // Default: 100 + // + // Constraints: Minimum 20, maximum 100. + MaxRecords *int64 `type:"integer"` +} + +// String returns the string representation +func (s DescribeConnectionsInput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s DescribeConnectionsInput) GoString() string { + return s.String() +} + +// Validate inspects the fields of the type to determine if they are valid. +func (s *DescribeConnectionsInput) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "DescribeConnectionsInput"} + if s.Filters != nil { + for i, v := range s.Filters { + if v == nil { + continue + } + if err := v.Validate(); err != nil { + invalidParams.AddNested(fmt.Sprintf("%s[%v]", "Filters", i), err.(request.ErrInvalidParams)) + } + } + } + + if invalidParams.Len() > 0 { + return invalidParams + } + return nil +} + +// SetFilters sets the Filters field's value. +func (s *DescribeConnectionsInput) SetFilters(v []*Filter) *DescribeConnectionsInput { + s.Filters = v + return s +} + +// SetMarker sets the Marker field's value. +func (s *DescribeConnectionsInput) SetMarker(v string) *DescribeConnectionsInput { + s.Marker = &v + return s +} + +// SetMaxRecords sets the MaxRecords field's value. +func (s *DescribeConnectionsInput) SetMaxRecords(v int64) *DescribeConnectionsInput { + s.MaxRecords = &v + return s +} + +// Please also see https://docs.aws.amazon.com/goto/WebAPI/dms-2016-01-01/DescribeConnectionsResponse +type DescribeConnectionsOutput struct { + _ struct{} `type:"structure"` + + // A description of the connections. + Connections []*Connection `locationNameList:"Connection" type:"list"` + + // An optional pagination token provided by a previous request. If this parameter + // is specified, the response includes only records beyond the marker, up to + // the value specified by MaxRecords. + Marker *string `type:"string"` +} + +// String returns the string representation +func (s DescribeConnectionsOutput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s DescribeConnectionsOutput) GoString() string { + return s.String() +} + +// SetConnections sets the Connections field's value. +func (s *DescribeConnectionsOutput) SetConnections(v []*Connection) *DescribeConnectionsOutput { + s.Connections = v + return s +} + +// SetMarker sets the Marker field's value. +func (s *DescribeConnectionsOutput) SetMarker(v string) *DescribeConnectionsOutput { + s.Marker = &v + return s +} + +// Please also see https://docs.aws.amazon.com/goto/WebAPI/dms-2016-01-01/DescribeEndpointTypesMessage +type DescribeEndpointTypesInput struct { + _ struct{} `type:"structure"` + + // Filters applied to the describe action. + // + // Valid filter names: engine-name | endpoint-type + Filters []*Filter `locationNameList:"Filter" type:"list"` + + // An optional pagination token provided by a previous request. If this parameter + // is specified, the response includes only records beyond the marker, up to + // the value specified by MaxRecords. + Marker *string `type:"string"` + + // The maximum number of records to include in the response. If more records + // exist than the specified MaxRecords value, a pagination token called a marker + // is included in the response so that the remaining results can be retrieved. + // + // Default: 100 + // + // Constraints: Minimum 20, maximum 100. + MaxRecords *int64 `type:"integer"` +} + +// String returns the string representation +func (s DescribeEndpointTypesInput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s DescribeEndpointTypesInput) GoString() string { + return s.String() +} + +// Validate inspects the fields of the type to determine if they are valid. +func (s *DescribeEndpointTypesInput) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "DescribeEndpointTypesInput"} + if s.Filters != nil { + for i, v := range s.Filters { + if v == nil { + continue + } + if err := v.Validate(); err != nil { + invalidParams.AddNested(fmt.Sprintf("%s[%v]", "Filters", i), err.(request.ErrInvalidParams)) + } + } + } + + if invalidParams.Len() > 0 { + return invalidParams + } + return nil +} + +// SetFilters sets the Filters field's value. +func (s *DescribeEndpointTypesInput) SetFilters(v []*Filter) *DescribeEndpointTypesInput { + s.Filters = v + return s +} + +// SetMarker sets the Marker field's value. +func (s *DescribeEndpointTypesInput) SetMarker(v string) *DescribeEndpointTypesInput { + s.Marker = &v + return s +} + +// SetMaxRecords sets the MaxRecords field's value. +func (s *DescribeEndpointTypesInput) SetMaxRecords(v int64) *DescribeEndpointTypesInput { + s.MaxRecords = &v + return s +} + +// Please also see https://docs.aws.amazon.com/goto/WebAPI/dms-2016-01-01/DescribeEndpointTypesResponse +type DescribeEndpointTypesOutput struct { + _ struct{} `type:"structure"` + + // An optional pagination token provided by a previous request. If this parameter + // is specified, the response includes only records beyond the marker, up to + // the value specified by MaxRecords. + Marker *string `type:"string"` + + // The type of endpoints that are supported. + SupportedEndpointTypes []*SupportedEndpointType `locationNameList:"SupportedEndpointType" type:"list"` +} + +// String returns the string representation +func (s DescribeEndpointTypesOutput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s DescribeEndpointTypesOutput) GoString() string { + return s.String() +} + +// SetMarker sets the Marker field's value. +func (s *DescribeEndpointTypesOutput) SetMarker(v string) *DescribeEndpointTypesOutput { + s.Marker = &v + return s +} + +// SetSupportedEndpointTypes sets the SupportedEndpointTypes field's value. +func (s *DescribeEndpointTypesOutput) SetSupportedEndpointTypes(v []*SupportedEndpointType) *DescribeEndpointTypesOutput { + s.SupportedEndpointTypes = v + return s +} + +// Please also see https://docs.aws.amazon.com/goto/WebAPI/dms-2016-01-01/DescribeEndpointsMessage +type DescribeEndpointsInput struct { + _ struct{} `type:"structure"` + + // Filters applied to the describe action. + // + // Valid filter names: endpoint-arn | endpoint-type | endpoint-id | engine-name + Filters []*Filter `locationNameList:"Filter" type:"list"` + + // An optional pagination token provided by a previous request. If this parameter + // is specified, the response includes only records beyond the marker, up to + // the value specified by MaxRecords. + Marker *string `type:"string"` + + // The maximum number of records to include in the response. If more records + // exist than the specified MaxRecords value, a pagination token called a marker + // is included in the response so that the remaining results can be retrieved. + // + // Default: 100 + // + // Constraints: Minimum 20, maximum 100. + MaxRecords *int64 `type:"integer"` +} + +// String returns the string representation +func (s DescribeEndpointsInput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s DescribeEndpointsInput) GoString() string { + return s.String() +} + +// Validate inspects the fields of the type to determine if they are valid. +func (s *DescribeEndpointsInput) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "DescribeEndpointsInput"} + if s.Filters != nil { + for i, v := range s.Filters { + if v == nil { + continue + } + if err := v.Validate(); err != nil { + invalidParams.AddNested(fmt.Sprintf("%s[%v]", "Filters", i), err.(request.ErrInvalidParams)) + } + } + } + + if invalidParams.Len() > 0 { + return invalidParams + } + return nil +} + +// SetFilters sets the Filters field's value. +func (s *DescribeEndpointsInput) SetFilters(v []*Filter) *DescribeEndpointsInput { + s.Filters = v + return s +} + +// SetMarker sets the Marker field's value. +func (s *DescribeEndpointsInput) SetMarker(v string) *DescribeEndpointsInput { + s.Marker = &v + return s +} + +// SetMaxRecords sets the MaxRecords field's value. +func (s *DescribeEndpointsInput) SetMaxRecords(v int64) *DescribeEndpointsInput { + s.MaxRecords = &v + return s +} + +// Please also see https://docs.aws.amazon.com/goto/WebAPI/dms-2016-01-01/DescribeEndpointsResponse +type DescribeEndpointsOutput struct { + _ struct{} `type:"structure"` + + // Endpoint description. + Endpoints []*Endpoint `locationNameList:"Endpoint" type:"list"` + + // An optional pagination token provided by a previous request. If this parameter + // is specified, the response includes only records beyond the marker, up to + // the value specified by MaxRecords. + Marker *string `type:"string"` +} + +// String returns the string representation +func (s DescribeEndpointsOutput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s DescribeEndpointsOutput) GoString() string { + return s.String() +} + +// SetEndpoints sets the Endpoints field's value. +func (s *DescribeEndpointsOutput) SetEndpoints(v []*Endpoint) *DescribeEndpointsOutput { + s.Endpoints = v + return s +} + +// SetMarker sets the Marker field's value. +func (s *DescribeEndpointsOutput) SetMarker(v string) *DescribeEndpointsOutput { + s.Marker = &v + return s +} + +// Please also see https://docs.aws.amazon.com/goto/WebAPI/dms-2016-01-01/DescribeOrderableReplicationInstancesMessage +type DescribeOrderableReplicationInstancesInput struct { + _ struct{} `type:"structure"` + + // An optional pagination token provided by a previous request. If this parameter + // is specified, the response includes only records beyond the marker, up to + // the value specified by MaxRecords. + Marker *string `type:"string"` + + // The maximum number of records to include in the response. If more records + // exist than the specified MaxRecords value, a pagination token called a marker + // is included in the response so that the remaining results can be retrieved. + // + // Default: 100 + // + // Constraints: Minimum 20, maximum 100. + MaxRecords *int64 `type:"integer"` +} + +// String returns the string representation +func (s DescribeOrderableReplicationInstancesInput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s DescribeOrderableReplicationInstancesInput) GoString() string { + return s.String() +} + +// SetMarker sets the Marker field's value. +func (s *DescribeOrderableReplicationInstancesInput) SetMarker(v string) *DescribeOrderableReplicationInstancesInput { + s.Marker = &v + return s +} + +// SetMaxRecords sets the MaxRecords field's value. +func (s *DescribeOrderableReplicationInstancesInput) SetMaxRecords(v int64) *DescribeOrderableReplicationInstancesInput { + s.MaxRecords = &v + return s +} + +// Please also see https://docs.aws.amazon.com/goto/WebAPI/dms-2016-01-01/DescribeOrderableReplicationInstancesResponse +type DescribeOrderableReplicationInstancesOutput struct { + _ struct{} `type:"structure"` + + // An optional pagination token provided by a previous request. If this parameter + // is specified, the response includes only records beyond the marker, up to + // the value specified by MaxRecords. + Marker *string `type:"string"` + + // The order-able replication instances available. + OrderableReplicationInstances []*OrderableReplicationInstance `locationNameList:"OrderableReplicationInstance" type:"list"` +} + +// String returns the string representation +func (s DescribeOrderableReplicationInstancesOutput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s DescribeOrderableReplicationInstancesOutput) GoString() string { + return s.String() +} + +// SetMarker sets the Marker field's value. +func (s *DescribeOrderableReplicationInstancesOutput) SetMarker(v string) *DescribeOrderableReplicationInstancesOutput { + s.Marker = &v + return s +} + +// SetOrderableReplicationInstances sets the OrderableReplicationInstances field's value. +func (s *DescribeOrderableReplicationInstancesOutput) SetOrderableReplicationInstances(v []*OrderableReplicationInstance) *DescribeOrderableReplicationInstancesOutput { + s.OrderableReplicationInstances = v + return s +} + +// Please also see https://docs.aws.amazon.com/goto/WebAPI/dms-2016-01-01/DescribeRefreshSchemasStatusMessage +type DescribeRefreshSchemasStatusInput struct { + _ struct{} `type:"structure"` + + // The Amazon Resource Name (ARN) string that uniquely identifies the endpoint. + // + // EndpointArn is a required field + EndpointArn *string `type:"string" required:"true"` +} + +// String returns the string representation +func (s DescribeRefreshSchemasStatusInput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s DescribeRefreshSchemasStatusInput) GoString() string { + return s.String() +} + +// Validate inspects the fields of the type to determine if they are valid. +func (s *DescribeRefreshSchemasStatusInput) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "DescribeRefreshSchemasStatusInput"} + if s.EndpointArn == nil { + invalidParams.Add(request.NewErrParamRequired("EndpointArn")) + } + + if invalidParams.Len() > 0 { + return invalidParams + } + return nil +} + +// SetEndpointArn sets the EndpointArn field's value. +func (s *DescribeRefreshSchemasStatusInput) SetEndpointArn(v string) *DescribeRefreshSchemasStatusInput { + s.EndpointArn = &v + return s +} + +// Please also see https://docs.aws.amazon.com/goto/WebAPI/dms-2016-01-01/DescribeRefreshSchemasStatusResponse +type DescribeRefreshSchemasStatusOutput struct { + _ struct{} `type:"structure"` + + // The status of the schema. + RefreshSchemasStatus *RefreshSchemasStatus `type:"structure"` +} + +// String returns the string representation +func (s DescribeRefreshSchemasStatusOutput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s DescribeRefreshSchemasStatusOutput) GoString() string { + return s.String() +} + +// SetRefreshSchemasStatus sets the RefreshSchemasStatus field's value. +func (s *DescribeRefreshSchemasStatusOutput) SetRefreshSchemasStatus(v *RefreshSchemasStatus) *DescribeRefreshSchemasStatusOutput { + s.RefreshSchemasStatus = v + return s +} + +// Please also see https://docs.aws.amazon.com/goto/WebAPI/dms-2016-01-01/DescribeReplicationInstancesMessage +type DescribeReplicationInstancesInput struct { + _ struct{} `type:"structure"` + + // Filters applied to the describe action. + // + // Valid filter names: replication-instance-arn | replication-instance-id | + // replication-instance-class | engine-version + Filters []*Filter `locationNameList:"Filter" type:"list"` + + // An optional pagination token provided by a previous request. If this parameter + // is specified, the response includes only records beyond the marker, up to + // the value specified by MaxRecords. + Marker *string `type:"string"` + + // The maximum number of records to include in the response. If more records + // exist than the specified MaxRecords value, a pagination token called a marker + // is included in the response so that the remaining results can be retrieved. + // + // Default: 100 + // + // Constraints: Minimum 20, maximum 100. + MaxRecords *int64 `type:"integer"` +} + +// String returns the string representation +func (s DescribeReplicationInstancesInput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s DescribeReplicationInstancesInput) GoString() string { + return s.String() +} + +// Validate inspects the fields of the type to determine if they are valid. +func (s *DescribeReplicationInstancesInput) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "DescribeReplicationInstancesInput"} + if s.Filters != nil { + for i, v := range s.Filters { + if v == nil { + continue + } + if err := v.Validate(); err != nil { + invalidParams.AddNested(fmt.Sprintf("%s[%v]", "Filters", i), err.(request.ErrInvalidParams)) + } + } + } + + if invalidParams.Len() > 0 { + return invalidParams + } + return nil +} + +// SetFilters sets the Filters field's value. +func (s *DescribeReplicationInstancesInput) SetFilters(v []*Filter) *DescribeReplicationInstancesInput { + s.Filters = v + return s +} + +// SetMarker sets the Marker field's value. +func (s *DescribeReplicationInstancesInput) SetMarker(v string) *DescribeReplicationInstancesInput { + s.Marker = &v + return s +} + +// SetMaxRecords sets the MaxRecords field's value. +func (s *DescribeReplicationInstancesInput) SetMaxRecords(v int64) *DescribeReplicationInstancesInput { + s.MaxRecords = &v + return s +} + +// Please also see https://docs.aws.amazon.com/goto/WebAPI/dms-2016-01-01/DescribeReplicationInstancesResponse +type DescribeReplicationInstancesOutput struct { + _ struct{} `type:"structure"` + + // An optional pagination token provided by a previous request. If this parameter + // is specified, the response includes only records beyond the marker, up to + // the value specified by MaxRecords. + Marker *string `type:"string"` + + // The replication instances described. + ReplicationInstances []*ReplicationInstance `locationNameList:"ReplicationInstance" type:"list"` +} + +// String returns the string representation +func (s DescribeReplicationInstancesOutput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s DescribeReplicationInstancesOutput) GoString() string { + return s.String() +} + +// SetMarker sets the Marker field's value. +func (s *DescribeReplicationInstancesOutput) SetMarker(v string) *DescribeReplicationInstancesOutput { + s.Marker = &v + return s +} + +// SetReplicationInstances sets the ReplicationInstances field's value. +func (s *DescribeReplicationInstancesOutput) SetReplicationInstances(v []*ReplicationInstance) *DescribeReplicationInstancesOutput { + s.ReplicationInstances = v + return s +} + +// Please also see https://docs.aws.amazon.com/goto/WebAPI/dms-2016-01-01/DescribeReplicationSubnetGroupsMessage +type DescribeReplicationSubnetGroupsInput struct { + _ struct{} `type:"structure"` + + // Filters applied to the describe action. + Filters []*Filter `locationNameList:"Filter" type:"list"` + + // An optional pagination token provided by a previous request. If this parameter + // is specified, the response includes only records beyond the marker, up to + // the value specified by MaxRecords. + Marker *string `type:"string"` + + // The maximum number of records to include in the response. If more records + // exist than the specified MaxRecords value, a pagination token called a marker + // is included in the response so that the remaining results can be retrieved. + // + // Default: 100 + // + // Constraints: Minimum 20, maximum 100. + MaxRecords *int64 `type:"integer"` +} + +// String returns the string representation +func (s DescribeReplicationSubnetGroupsInput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s DescribeReplicationSubnetGroupsInput) GoString() string { + return s.String() +} + +// Validate inspects the fields of the type to determine if they are valid. +func (s *DescribeReplicationSubnetGroupsInput) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "DescribeReplicationSubnetGroupsInput"} + if s.Filters != nil { + for i, v := range s.Filters { + if v == nil { + continue + } + if err := v.Validate(); err != nil { + invalidParams.AddNested(fmt.Sprintf("%s[%v]", "Filters", i), err.(request.ErrInvalidParams)) + } + } + } + + if invalidParams.Len() > 0 { + return invalidParams + } + return nil +} + +// SetFilters sets the Filters field's value. +func (s *DescribeReplicationSubnetGroupsInput) SetFilters(v []*Filter) *DescribeReplicationSubnetGroupsInput { + s.Filters = v + return s +} + +// SetMarker sets the Marker field's value. +func (s *DescribeReplicationSubnetGroupsInput) SetMarker(v string) *DescribeReplicationSubnetGroupsInput { + s.Marker = &v + return s +} + +// SetMaxRecords sets the MaxRecords field's value. +func (s *DescribeReplicationSubnetGroupsInput) SetMaxRecords(v int64) *DescribeReplicationSubnetGroupsInput { + s.MaxRecords = &v + return s +} + +// Please also see https://docs.aws.amazon.com/goto/WebAPI/dms-2016-01-01/DescribeReplicationSubnetGroupsResponse +type DescribeReplicationSubnetGroupsOutput struct { + _ struct{} `type:"structure"` + + // An optional pagination token provided by a previous request. If this parameter + // is specified, the response includes only records beyond the marker, up to + // the value specified by MaxRecords. + Marker *string `type:"string"` + + // A description of the replication subnet groups. + ReplicationSubnetGroups []*ReplicationSubnetGroup `locationNameList:"ReplicationSubnetGroup" type:"list"` +} + +// String returns the string representation +func (s DescribeReplicationSubnetGroupsOutput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s DescribeReplicationSubnetGroupsOutput) GoString() string { + return s.String() +} + +// SetMarker sets the Marker field's value. +func (s *DescribeReplicationSubnetGroupsOutput) SetMarker(v string) *DescribeReplicationSubnetGroupsOutput { + s.Marker = &v + return s +} + +// SetReplicationSubnetGroups sets the ReplicationSubnetGroups field's value. +func (s *DescribeReplicationSubnetGroupsOutput) SetReplicationSubnetGroups(v []*ReplicationSubnetGroup) *DescribeReplicationSubnetGroupsOutput { + s.ReplicationSubnetGroups = v + return s +} + +// Please also see https://docs.aws.amazon.com/goto/WebAPI/dms-2016-01-01/DescribeReplicationTasksMessage +type DescribeReplicationTasksInput struct { + _ struct{} `type:"structure"` + + // Filters applied to the describe action. + // + // Valid filter names: replication-task-arn | replication-task-id | migration-type + // | endpoint-arn | replication-instance-arn + Filters []*Filter `locationNameList:"Filter" type:"list"` + + // An optional pagination token provided by a previous request. If this parameter + // is specified, the response includes only records beyond the marker, up to + // the value specified by MaxRecords. + Marker *string `type:"string"` + + // The maximum number of records to include in the response. If more records + // exist than the specified MaxRecords value, a pagination token called a marker + // is included in the response so that the remaining results can be retrieved. + // + // Default: 100 + // + // Constraints: Minimum 20, maximum 100. + MaxRecords *int64 `type:"integer"` +} + +// String returns the string representation +func (s DescribeReplicationTasksInput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s DescribeReplicationTasksInput) GoString() string { + return s.String() +} + +// Validate inspects the fields of the type to determine if they are valid. +func (s *DescribeReplicationTasksInput) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "DescribeReplicationTasksInput"} + if s.Filters != nil { + for i, v := range s.Filters { + if v == nil { + continue + } + if err := v.Validate(); err != nil { + invalidParams.AddNested(fmt.Sprintf("%s[%v]", "Filters", i), err.(request.ErrInvalidParams)) + } + } + } + + if invalidParams.Len() > 0 { + return invalidParams + } + return nil +} + +// SetFilters sets the Filters field's value. +func (s *DescribeReplicationTasksInput) SetFilters(v []*Filter) *DescribeReplicationTasksInput { + s.Filters = v + return s +} + +// SetMarker sets the Marker field's value. +func (s *DescribeReplicationTasksInput) SetMarker(v string) *DescribeReplicationTasksInput { + s.Marker = &v + return s +} + +// SetMaxRecords sets the MaxRecords field's value. +func (s *DescribeReplicationTasksInput) SetMaxRecords(v int64) *DescribeReplicationTasksInput { + s.MaxRecords = &v + return s +} + +// Please also see https://docs.aws.amazon.com/goto/WebAPI/dms-2016-01-01/DescribeReplicationTasksResponse +type DescribeReplicationTasksOutput struct { + _ struct{} `type:"structure"` + + // An optional pagination token provided by a previous request. If this parameter + // is specified, the response includes only records beyond the marker, up to + // the value specified by MaxRecords. + Marker *string `type:"string"` + + // A description of the replication tasks. + ReplicationTasks []*ReplicationTask `locationNameList:"ReplicationTask" type:"list"` +} + +// String returns the string representation +func (s DescribeReplicationTasksOutput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s DescribeReplicationTasksOutput) GoString() string { + return s.String() +} + +// SetMarker sets the Marker field's value. +func (s *DescribeReplicationTasksOutput) SetMarker(v string) *DescribeReplicationTasksOutput { + s.Marker = &v + return s +} + +// SetReplicationTasks sets the ReplicationTasks field's value. +func (s *DescribeReplicationTasksOutput) SetReplicationTasks(v []*ReplicationTask) *DescribeReplicationTasksOutput { + s.ReplicationTasks = v + return s +} + +// Please also see https://docs.aws.amazon.com/goto/WebAPI/dms-2016-01-01/DescribeSchemasMessage +type DescribeSchemasInput struct { + _ struct{} `type:"structure"` + + // The Amazon Resource Name (ARN) string that uniquely identifies the endpoint. + // + // EndpointArn is a required field + EndpointArn *string `type:"string" required:"true"` + + // An optional pagination token provided by a previous request. If this parameter + // is specified, the response includes only records beyond the marker, up to + // the value specified by MaxRecords. + Marker *string `type:"string"` + + // The maximum number of records to include in the response. If more records + // exist than the specified MaxRecords value, a pagination token called a marker + // is included in the response so that the remaining results can be retrieved. + // + // Default: 100 + // + // Constraints: Minimum 20, maximum 100. + MaxRecords *int64 `type:"integer"` +} + +// String returns the string representation +func (s DescribeSchemasInput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s DescribeSchemasInput) GoString() string { + return s.String() +} + +// Validate inspects the fields of the type to determine if they are valid. +func (s *DescribeSchemasInput) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "DescribeSchemasInput"} + if s.EndpointArn == nil { + invalidParams.Add(request.NewErrParamRequired("EndpointArn")) + } + + if invalidParams.Len() > 0 { + return invalidParams + } + return nil +} + +// SetEndpointArn sets the EndpointArn field's value. +func (s *DescribeSchemasInput) SetEndpointArn(v string) *DescribeSchemasInput { + s.EndpointArn = &v + return s +} + +// SetMarker sets the Marker field's value. +func (s *DescribeSchemasInput) SetMarker(v string) *DescribeSchemasInput { + s.Marker = &v + return s +} + +// SetMaxRecords sets the MaxRecords field's value. +func (s *DescribeSchemasInput) SetMaxRecords(v int64) *DescribeSchemasInput { + s.MaxRecords = &v + return s +} + +// Please also see https://docs.aws.amazon.com/goto/WebAPI/dms-2016-01-01/DescribeSchemasResponse +type DescribeSchemasOutput struct { + _ struct{} `type:"structure"` + + // An optional pagination token provided by a previous request. If this parameter + // is specified, the response includes only records beyond the marker, up to + // the value specified by MaxRecords. + Marker *string `type:"string"` + + // The described schema. + Schemas []*string `type:"list"` +} + +// String returns the string representation +func (s DescribeSchemasOutput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s DescribeSchemasOutput) GoString() string { + return s.String() +} + +// SetMarker sets the Marker field's value. +func (s *DescribeSchemasOutput) SetMarker(v string) *DescribeSchemasOutput { + s.Marker = &v + return s +} + +// SetSchemas sets the Schemas field's value. +func (s *DescribeSchemasOutput) SetSchemas(v []*string) *DescribeSchemasOutput { + s.Schemas = v + return s +} + +// Please also see https://docs.aws.amazon.com/goto/WebAPI/dms-2016-01-01/DescribeTableStatisticsMessage +type DescribeTableStatisticsInput struct { + _ struct{} `type:"structure"` + + // An optional pagination token provided by a previous request. If this parameter + // is specified, the response includes only records beyond the marker, up to + // the value specified by MaxRecords. + Marker *string `type:"string"` + + // The maximum number of records to include in the response. If more records + // exist than the specified MaxRecords value, a pagination token called a marker + // is included in the response so that the remaining results can be retrieved. + // + // Default: 100 + // + // Constraints: Minimum 20, maximum 100. + MaxRecords *int64 `type:"integer"` + + // The Amazon Resource Name (ARN) of the replication task. + // + // ReplicationTaskArn is a required field + ReplicationTaskArn *string `type:"string" required:"true"` +} + +// String returns the string representation +func (s DescribeTableStatisticsInput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s DescribeTableStatisticsInput) GoString() string { + return s.String() +} + +// Validate inspects the fields of the type to determine if they are valid. +func (s *DescribeTableStatisticsInput) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "DescribeTableStatisticsInput"} + if s.ReplicationTaskArn == nil { + invalidParams.Add(request.NewErrParamRequired("ReplicationTaskArn")) + } + + if invalidParams.Len() > 0 { + return invalidParams + } + return nil +} + +// SetMarker sets the Marker field's value. +func (s *DescribeTableStatisticsInput) SetMarker(v string) *DescribeTableStatisticsInput { + s.Marker = &v + return s +} + +// SetMaxRecords sets the MaxRecords field's value. +func (s *DescribeTableStatisticsInput) SetMaxRecords(v int64) *DescribeTableStatisticsInput { + s.MaxRecords = &v + return s +} + +// SetReplicationTaskArn sets the ReplicationTaskArn field's value. +func (s *DescribeTableStatisticsInput) SetReplicationTaskArn(v string) *DescribeTableStatisticsInput { + s.ReplicationTaskArn = &v + return s +} + +// Please also see https://docs.aws.amazon.com/goto/WebAPI/dms-2016-01-01/DescribeTableStatisticsResponse +type DescribeTableStatisticsOutput struct { + _ struct{} `type:"structure"` + + // An optional pagination token provided by a previous request. If this parameter + // is specified, the response includes only records beyond the marker, up to + // the value specified by MaxRecords. + Marker *string `type:"string"` + + // The Amazon Resource Name (ARN) of the replication task. + ReplicationTaskArn *string `type:"string"` + + // The table statistics. + TableStatistics []*TableStatistics `type:"list"` +} + +// String returns the string representation +func (s DescribeTableStatisticsOutput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s DescribeTableStatisticsOutput) GoString() string { + return s.String() +} + +// SetMarker sets the Marker field's value. +func (s *DescribeTableStatisticsOutput) SetMarker(v string) *DescribeTableStatisticsOutput { + s.Marker = &v + return s +} + +// SetReplicationTaskArn sets the ReplicationTaskArn field's value. +func (s *DescribeTableStatisticsOutput) SetReplicationTaskArn(v string) *DescribeTableStatisticsOutput { + s.ReplicationTaskArn = &v + return s +} + +// SetTableStatistics sets the TableStatistics field's value. +func (s *DescribeTableStatisticsOutput) SetTableStatistics(v []*TableStatistics) *DescribeTableStatisticsOutput { + s.TableStatistics = v + return s +} + +// Please also see https://docs.aws.amazon.com/goto/WebAPI/dms-2016-01-01/Endpoint +type Endpoint struct { + _ struct{} `type:"structure"` + + // The Amazon Resource Name (ARN) used for SSL connection to the endpoint. + CertificateArn *string `type:"string"` + + // The name of the database at the endpoint. + DatabaseName *string `type:"string"` + + // The Amazon Resource Name (ARN) string that uniquely identifies the endpoint. + EndpointArn *string `type:"string"` + + // The database endpoint identifier. Identifiers must begin with a letter; must + // contain only ASCII letters, digits, and hyphens; and must not end with a + // hyphen or contain two consecutive hyphens. + EndpointIdentifier *string `type:"string"` + + // The type of endpoint. + EndpointType *string `type:"string" enum:"ReplicationEndpointTypeValue"` + + // The database engine name. Valid values include MYSQL, ORACLE, POSTGRES, MARIADB, + // AURORA, REDSHIFT, SYBASE, and SQLSERVER. + EngineName *string `type:"string"` + + // Additional connection attributes used to connect to the endpoint. + ExtraConnectionAttributes *string `type:"string"` + + // The KMS key identifier that will be used to encrypt the connection parameters. + // If you do not specify a value for the KmsKeyId parameter, then AWS DMS 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 port value used to access the endpoint. + Port *int64 `type:"integer"` + + // The name of the server at the endpoint. + ServerName *string `type:"string"` + + // The SSL mode used to connect to the endpoint. + // + // SSL mode can be one of four values: none, require, verify-ca, verify-full. + // + // The default value is none. + SslMode *string `type:"string" enum:"DmsSslModeValue"` + + // The status of the endpoint. + Status *string `type:"string"` + + // The user name used to connect to the endpoint. + Username *string `type:"string"` +} + +// String returns the string representation +func (s Endpoint) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s Endpoint) GoString() string { + return s.String() +} + +// SetCertificateArn sets the CertificateArn field's value. +func (s *Endpoint) SetCertificateArn(v string) *Endpoint { + s.CertificateArn = &v + return s +} + +// SetDatabaseName sets the DatabaseName field's value. +func (s *Endpoint) SetDatabaseName(v string) *Endpoint { + s.DatabaseName = &v + return s +} + +// SetEndpointArn sets the EndpointArn field's value. +func (s *Endpoint) SetEndpointArn(v string) *Endpoint { + s.EndpointArn = &v + return s +} + +// SetEndpointIdentifier sets the EndpointIdentifier field's value. +func (s *Endpoint) SetEndpointIdentifier(v string) *Endpoint { + s.EndpointIdentifier = &v + return s +} + +// SetEndpointType sets the EndpointType field's value. +func (s *Endpoint) SetEndpointType(v string) *Endpoint { + s.EndpointType = &v + return s +} + +// SetEngineName sets the EngineName field's value. +func (s *Endpoint) SetEngineName(v string) *Endpoint { + s.EngineName = &v + return s +} + +// SetExtraConnectionAttributes sets the ExtraConnectionAttributes field's value. +func (s *Endpoint) SetExtraConnectionAttributes(v string) *Endpoint { + s.ExtraConnectionAttributes = &v + return s +} + +// SetKmsKeyId sets the KmsKeyId field's value. +func (s *Endpoint) SetKmsKeyId(v string) *Endpoint { + s.KmsKeyId = &v + return s +} + +// SetPort sets the Port field's value. +func (s *Endpoint) SetPort(v int64) *Endpoint { + s.Port = &v + return s +} + +// SetServerName sets the ServerName field's value. +func (s *Endpoint) SetServerName(v string) *Endpoint { + s.ServerName = &v + return s +} + +// SetSslMode sets the SslMode field's value. +func (s *Endpoint) SetSslMode(v string) *Endpoint { + s.SslMode = &v + return s +} + +// SetStatus sets the Status field's value. +func (s *Endpoint) SetStatus(v string) *Endpoint { + s.Status = &v + return s +} + +// SetUsername sets the Username field's value. +func (s *Endpoint) SetUsername(v string) *Endpoint { + s.Username = &v + return s +} + +// Please also see https://docs.aws.amazon.com/goto/WebAPI/dms-2016-01-01/Filter +type Filter struct { + _ struct{} `type:"structure"` + + // The name of the filter. + // + // Name is a required field + Name *string `type:"string" required:"true"` + + // The filter value. + // + // Values is a required field + Values []*string `locationNameList:"Value" type:"list" required:"true"` +} + +// String returns the string representation +func (s Filter) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s Filter) GoString() string { + return s.String() +} + +// Validate inspects the fields of the type to determine if they are valid. +func (s *Filter) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "Filter"} + if s.Name == nil { + invalidParams.Add(request.NewErrParamRequired("Name")) + } + if s.Values == nil { + invalidParams.Add(request.NewErrParamRequired("Values")) + } + + if invalidParams.Len() > 0 { + return invalidParams + } + return nil +} + +// SetName sets the Name field's value. +func (s *Filter) SetName(v string) *Filter { + s.Name = &v + return s +} + +// SetValues sets the Values field's value. +func (s *Filter) SetValues(v []*string) *Filter { + s.Values = v + return s +} + +// Please also see https://docs.aws.amazon.com/goto/WebAPI/dms-2016-01-01/ImportCertificateMessage +type ImportCertificateInput struct { + _ struct{} `type:"structure"` + + // The customer-assigned name of the certificate. Valid characters are A-z and + // 0-9. + // + // CertificateIdentifier is a required field + CertificateIdentifier *string `type:"string" required:"true"` + + // The contents of the .pem X.509 certificate file for the certificate. + CertificatePem *string `type:"string"` + + // The location of the imported Oracle Wallet certificate for use with SSL. + // + // CertificateWallet is automatically base64 encoded/decoded by the SDK. + CertificateWallet []byte `type:"blob"` +} + +// String returns the string representation +func (s ImportCertificateInput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s ImportCertificateInput) GoString() string { + return s.String() +} + +// Validate inspects the fields of the type to determine if they are valid. +func (s *ImportCertificateInput) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "ImportCertificateInput"} + if s.CertificateIdentifier == nil { + invalidParams.Add(request.NewErrParamRequired("CertificateIdentifier")) + } + + if invalidParams.Len() > 0 { + return invalidParams + } + return nil +} + +// SetCertificateIdentifier sets the CertificateIdentifier field's value. +func (s *ImportCertificateInput) SetCertificateIdentifier(v string) *ImportCertificateInput { + s.CertificateIdentifier = &v + return s +} + +// SetCertificatePem sets the CertificatePem field's value. +func (s *ImportCertificateInput) SetCertificatePem(v string) *ImportCertificateInput { + s.CertificatePem = &v + return s +} + +// SetCertificateWallet sets the CertificateWallet field's value. +func (s *ImportCertificateInput) SetCertificateWallet(v []byte) *ImportCertificateInput { + s.CertificateWallet = v + return s +} + +// Please also see https://docs.aws.amazon.com/goto/WebAPI/dms-2016-01-01/ImportCertificateResponse +type ImportCertificateOutput struct { + _ struct{} `type:"structure"` + + // The certificate to be uploaded. + Certificate *Certificate `type:"structure"` +} + +// String returns the string representation +func (s ImportCertificateOutput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s ImportCertificateOutput) GoString() string { + return s.String() +} + +// SetCertificate sets the Certificate field's value. +func (s *ImportCertificateOutput) SetCertificate(v *Certificate) *ImportCertificateOutput { + s.Certificate = v + return s +} + +// Please also see https://docs.aws.amazon.com/goto/WebAPI/dms-2016-01-01/ListTagsForResourceMessage +type ListTagsForResourceInput struct { + _ struct{} `type:"structure"` + + // The Amazon Resource Name (ARN) string that uniquely identifies the AWS DMS + // resource. + // + // ResourceArn is a required field + ResourceArn *string `type:"string" required:"true"` +} + +// String returns the string representation +func (s ListTagsForResourceInput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s ListTagsForResourceInput) GoString() string { + return s.String() +} + +// Validate inspects the fields of the type to determine if they are valid. +func (s *ListTagsForResourceInput) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "ListTagsForResourceInput"} + if s.ResourceArn == nil { + invalidParams.Add(request.NewErrParamRequired("ResourceArn")) + } + + if invalidParams.Len() > 0 { + return invalidParams + } + return nil +} + +// SetResourceArn sets the ResourceArn field's value. +func (s *ListTagsForResourceInput) SetResourceArn(v string) *ListTagsForResourceInput { + s.ResourceArn = &v + return s +} + +// Please also see https://docs.aws.amazon.com/goto/WebAPI/dms-2016-01-01/ListTagsForResourceResponse +type ListTagsForResourceOutput struct { + _ struct{} `type:"structure"` + + // A list of tags for the resource. + TagList []*Tag `locationNameList:"Tag" type:"list"` +} + +// String returns the string representation +func (s ListTagsForResourceOutput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s ListTagsForResourceOutput) GoString() string { + return s.String() +} + +// SetTagList sets the TagList field's value. +func (s *ListTagsForResourceOutput) SetTagList(v []*Tag) *ListTagsForResourceOutput { + s.TagList = v + return s +} + +// Please also see https://docs.aws.amazon.com/goto/WebAPI/dms-2016-01-01/ModifyEndpointMessage +type ModifyEndpointInput struct { + _ struct{} `type:"structure"` + + // The Amazon Resource Name (ARN) of the certificate used for SSL connection. + CertificateArn *string `type:"string"` + + // The name of the endpoint database. + DatabaseName *string `type:"string"` + + // The Amazon Resource Name (ARN) string that uniquely identifies the endpoint. + // + // EndpointArn is a required field + EndpointArn *string `type:"string" required:"true"` + + // The database endpoint identifier. Identifiers must begin with a letter; must + // contain only ASCII letters, digits, and hyphens; and must not end with a + // hyphen or contain two consecutive hyphens. + EndpointIdentifier *string `type:"string"` + + // The type of endpoint. + EndpointType *string `type:"string" enum:"ReplicationEndpointTypeValue"` + + // The type of engine for the endpoint. Valid values include MYSQL, ORACLE, + // POSTGRES, MARIADB, AURORA, REDSHIFT, SYBASE, and SQLSERVER. + EngineName *string `type:"string"` + + // Additional attributes associated with the connection. + ExtraConnectionAttributes *string `type:"string"` + + // The password to be used to login to the endpoint database. + Password *string `type:"string"` + + // The port used by the endpoint database. + Port *int64 `type:"integer"` + + // The name of the server where the endpoint database resides. + ServerName *string `type:"string"` + + // The SSL mode to be used. + // + // SSL mode can be one of four values: none, require, verify-ca, verify-full. + // + // The default value is none. + SslMode *string `type:"string" enum:"DmsSslModeValue"` + + // The user name to be used to login to the endpoint database. + Username *string `type:"string"` +} + +// String returns the string representation +func (s ModifyEndpointInput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s ModifyEndpointInput) GoString() string { + return s.String() +} + +// Validate inspects the fields of the type to determine if they are valid. +func (s *ModifyEndpointInput) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "ModifyEndpointInput"} + if s.EndpointArn == nil { + invalidParams.Add(request.NewErrParamRequired("EndpointArn")) + } + + if invalidParams.Len() > 0 { + return invalidParams + } + return nil +} + +// SetCertificateArn sets the CertificateArn field's value. +func (s *ModifyEndpointInput) SetCertificateArn(v string) *ModifyEndpointInput { + s.CertificateArn = &v + return s +} + +// SetDatabaseName sets the DatabaseName field's value. +func (s *ModifyEndpointInput) SetDatabaseName(v string) *ModifyEndpointInput { + s.DatabaseName = &v + return s +} + +// SetEndpointArn sets the EndpointArn field's value. +func (s *ModifyEndpointInput) SetEndpointArn(v string) *ModifyEndpointInput { + s.EndpointArn = &v + return s +} + +// SetEndpointIdentifier sets the EndpointIdentifier field's value. +func (s *ModifyEndpointInput) SetEndpointIdentifier(v string) *ModifyEndpointInput { + s.EndpointIdentifier = &v + return s +} + +// SetEndpointType sets the EndpointType field's value. +func (s *ModifyEndpointInput) SetEndpointType(v string) *ModifyEndpointInput { + s.EndpointType = &v + return s +} + +// SetEngineName sets the EngineName field's value. +func (s *ModifyEndpointInput) SetEngineName(v string) *ModifyEndpointInput { + s.EngineName = &v + return s +} + +// SetExtraConnectionAttributes sets the ExtraConnectionAttributes field's value. +func (s *ModifyEndpointInput) SetExtraConnectionAttributes(v string) *ModifyEndpointInput { + s.ExtraConnectionAttributes = &v + return s +} + +// SetPassword sets the Password field's value. +func (s *ModifyEndpointInput) SetPassword(v string) *ModifyEndpointInput { + s.Password = &v + return s +} + +// SetPort sets the Port field's value. +func (s *ModifyEndpointInput) SetPort(v int64) *ModifyEndpointInput { + s.Port = &v + return s +} + +// SetServerName sets the ServerName field's value. +func (s *ModifyEndpointInput) SetServerName(v string) *ModifyEndpointInput { + s.ServerName = &v + return s +} + +// SetSslMode sets the SslMode field's value. +func (s *ModifyEndpointInput) SetSslMode(v string) *ModifyEndpointInput { + s.SslMode = &v + return s +} + +// SetUsername sets the Username field's value. +func (s *ModifyEndpointInput) SetUsername(v string) *ModifyEndpointInput { + s.Username = &v + return s +} + +// Please also see https://docs.aws.amazon.com/goto/WebAPI/dms-2016-01-01/ModifyEndpointResponse +type ModifyEndpointOutput struct { + _ struct{} `type:"structure"` + + // The modified endpoint. + Endpoint *Endpoint `type:"structure"` +} + +// String returns the string representation +func (s ModifyEndpointOutput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s ModifyEndpointOutput) GoString() string { + return s.String() +} + +// SetEndpoint sets the Endpoint field's value. +func (s *ModifyEndpointOutput) SetEndpoint(v *Endpoint) *ModifyEndpointOutput { + s.Endpoint = v + return s +} + +// Please also see https://docs.aws.amazon.com/goto/WebAPI/dms-2016-01-01/ModifyReplicationInstanceMessage +type ModifyReplicationInstanceInput struct { + _ struct{} `type:"structure"` + + // The amount of storage (in gigabytes) to be allocated for the replication + // instance. + AllocatedStorage *int64 `type:"integer"` + + // Indicates that major version upgrades are allowed. Changing this parameter + // does not result in an outage and the change is asynchronously applied as + // soon as possible. + // + // Constraints: This parameter must be set to true when specifying a value for + // the EngineVersion parameter that is a different major version than the replication + // instance's current version. + AllowMajorVersionUpgrade *bool `type:"boolean"` + + // Indicates whether the changes should be applied immediately or during the + // next maintenance window. + ApplyImmediately *bool `type:"boolean"` + + // Indicates that minor version upgrades will be applied automatically to the + // replication instance during the maintenance window. Changing this parameter + // does not result in an outage except in the following case and the change + // is asynchronously applied as soon as possible. An outage will result if this + // parameter is set to true during the maintenance window, and a newer minor + // version is available, and AWS DMS has enabled auto patching for that engine + // version. + AutoMinorVersionUpgrade *bool `type:"boolean"` + + // The engine version number of the replication instance. + EngineVersion *string `type:"string"` + + // Specifies if the replication instance is a Multi-AZ deployment. You cannot + // set the AvailabilityZone parameter if the Multi-AZ parameter is set to true. + MultiAZ *bool `type:"boolean"` + + // The weekly time range (in UTC) during which system maintenance can occur, + // which might result in an outage. Changing this parameter does not result + // in an outage, except in the following situation, and the change is asynchronously + // applied as soon as possible. If moving this window to the current time, there + // must be at least 30 minutes between the current time and end of the window + // to ensure pending changes are applied. + // + // Default: Uses existing setting + // + // Format: ddd:hh24:mi-ddd:hh24:mi + // + // Valid Days: Mon | Tue | Wed | Thu | Fri | Sat | Sun + // + // Constraints: Must be at least 30 minutes + PreferredMaintenanceWindow *string `type:"string"` + + // The Amazon Resource Name (ARN) of the replication instance. + // + // ReplicationInstanceArn is a required field + ReplicationInstanceArn *string `type:"string" required:"true"` + + // The compute and memory capacity of the replication instance. + // + // Valid Values: dms.t2.micro | dms.t2.small | dms.t2.medium | dms.t2.large + // | dms.c4.large | dms.c4.xlarge | dms.c4.2xlarge | dms.c4.4xlarge + ReplicationInstanceClass *string `type:"string"` + + // The replication instance identifier. This parameter is stored as a lowercase + // string. + ReplicationInstanceIdentifier *string `type:"string"` + + // Specifies the VPC security group to be used with the replication instance. + // The VPC security group must work with the VPC containing the replication + // instance. + VpcSecurityGroupIds []*string `locationNameList:"VpcSecurityGroupId" type:"list"` +} + +// String returns the string representation +func (s ModifyReplicationInstanceInput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s ModifyReplicationInstanceInput) GoString() string { + return s.String() +} + +// Validate inspects the fields of the type to determine if they are valid. +func (s *ModifyReplicationInstanceInput) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "ModifyReplicationInstanceInput"} + if s.ReplicationInstanceArn == nil { + invalidParams.Add(request.NewErrParamRequired("ReplicationInstanceArn")) + } + + if invalidParams.Len() > 0 { + return invalidParams + } + return nil +} + +// SetAllocatedStorage sets the AllocatedStorage field's value. +func (s *ModifyReplicationInstanceInput) SetAllocatedStorage(v int64) *ModifyReplicationInstanceInput { + s.AllocatedStorage = &v + return s +} + +// SetAllowMajorVersionUpgrade sets the AllowMajorVersionUpgrade field's value. +func (s *ModifyReplicationInstanceInput) SetAllowMajorVersionUpgrade(v bool) *ModifyReplicationInstanceInput { + s.AllowMajorVersionUpgrade = &v + return s +} + +// SetApplyImmediately sets the ApplyImmediately field's value. +func (s *ModifyReplicationInstanceInput) SetApplyImmediately(v bool) *ModifyReplicationInstanceInput { + s.ApplyImmediately = &v + return s +} + +// SetAutoMinorVersionUpgrade sets the AutoMinorVersionUpgrade field's value. +func (s *ModifyReplicationInstanceInput) SetAutoMinorVersionUpgrade(v bool) *ModifyReplicationInstanceInput { + s.AutoMinorVersionUpgrade = &v + return s +} + +// SetEngineVersion sets the EngineVersion field's value. +func (s *ModifyReplicationInstanceInput) SetEngineVersion(v string) *ModifyReplicationInstanceInput { + s.EngineVersion = &v + return s +} + +// SetMultiAZ sets the MultiAZ field's value. +func (s *ModifyReplicationInstanceInput) SetMultiAZ(v bool) *ModifyReplicationInstanceInput { + s.MultiAZ = &v + return s +} + +// SetPreferredMaintenanceWindow sets the PreferredMaintenanceWindow field's value. +func (s *ModifyReplicationInstanceInput) SetPreferredMaintenanceWindow(v string) *ModifyReplicationInstanceInput { + s.PreferredMaintenanceWindow = &v + return s +} + +// SetReplicationInstanceArn sets the ReplicationInstanceArn field's value. +func (s *ModifyReplicationInstanceInput) SetReplicationInstanceArn(v string) *ModifyReplicationInstanceInput { + s.ReplicationInstanceArn = &v + return s +} + +// SetReplicationInstanceClass sets the ReplicationInstanceClass field's value. +func (s *ModifyReplicationInstanceInput) SetReplicationInstanceClass(v string) *ModifyReplicationInstanceInput { + s.ReplicationInstanceClass = &v + return s +} + +// SetReplicationInstanceIdentifier sets the ReplicationInstanceIdentifier field's value. +func (s *ModifyReplicationInstanceInput) SetReplicationInstanceIdentifier(v string) *ModifyReplicationInstanceInput { + s.ReplicationInstanceIdentifier = &v + return s +} + +// SetVpcSecurityGroupIds sets the VpcSecurityGroupIds field's value. +func (s *ModifyReplicationInstanceInput) SetVpcSecurityGroupIds(v []*string) *ModifyReplicationInstanceInput { + s.VpcSecurityGroupIds = v + return s +} + +// Please also see https://docs.aws.amazon.com/goto/WebAPI/dms-2016-01-01/ModifyReplicationInstanceResponse +type ModifyReplicationInstanceOutput struct { + _ struct{} `type:"structure"` + + // The modified replication instance. + ReplicationInstance *ReplicationInstance `type:"structure"` +} + +// String returns the string representation +func (s ModifyReplicationInstanceOutput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s ModifyReplicationInstanceOutput) GoString() string { + return s.String() +} + +// SetReplicationInstance sets the ReplicationInstance field's value. +func (s *ModifyReplicationInstanceOutput) SetReplicationInstance(v *ReplicationInstance) *ModifyReplicationInstanceOutput { + s.ReplicationInstance = v + return s +} + +// Please also see https://docs.aws.amazon.com/goto/WebAPI/dms-2016-01-01/ModifyReplicationSubnetGroupMessage +type ModifyReplicationSubnetGroupInput struct { + _ struct{} `type:"structure"` + + // The description of the replication instance subnet group. + ReplicationSubnetGroupDescription *string `type:"string"` + + // The name of the replication instance subnet group. + // + // ReplicationSubnetGroupIdentifier is a required field + ReplicationSubnetGroupIdentifier *string `type:"string" required:"true"` + + // A list of subnet IDs. + // + // SubnetIds is a required field + SubnetIds []*string `locationNameList:"SubnetIdentifier" type:"list" required:"true"` +} + +// String returns the string representation +func (s ModifyReplicationSubnetGroupInput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s ModifyReplicationSubnetGroupInput) GoString() string { + return s.String() +} + +// Validate inspects the fields of the type to determine if they are valid. +func (s *ModifyReplicationSubnetGroupInput) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "ModifyReplicationSubnetGroupInput"} + if s.ReplicationSubnetGroupIdentifier == nil { + invalidParams.Add(request.NewErrParamRequired("ReplicationSubnetGroupIdentifier")) + } + if s.SubnetIds == nil { + invalidParams.Add(request.NewErrParamRequired("SubnetIds")) + } + + if invalidParams.Len() > 0 { + return invalidParams + } + return nil +} + +// SetReplicationSubnetGroupDescription sets the ReplicationSubnetGroupDescription field's value. +func (s *ModifyReplicationSubnetGroupInput) SetReplicationSubnetGroupDescription(v string) *ModifyReplicationSubnetGroupInput { + s.ReplicationSubnetGroupDescription = &v + return s +} + +// SetReplicationSubnetGroupIdentifier sets the ReplicationSubnetGroupIdentifier field's value. +func (s *ModifyReplicationSubnetGroupInput) SetReplicationSubnetGroupIdentifier(v string) *ModifyReplicationSubnetGroupInput { + s.ReplicationSubnetGroupIdentifier = &v + return s +} + +// SetSubnetIds sets the SubnetIds field's value. +func (s *ModifyReplicationSubnetGroupInput) SetSubnetIds(v []*string) *ModifyReplicationSubnetGroupInput { + s.SubnetIds = v + return s +} + +// Please also see https://docs.aws.amazon.com/goto/WebAPI/dms-2016-01-01/ModifyReplicationSubnetGroupResponse +type ModifyReplicationSubnetGroupOutput struct { + _ struct{} `type:"structure"` + + // The modified replication subnet group. + ReplicationSubnetGroup *ReplicationSubnetGroup `type:"structure"` +} + +// String returns the string representation +func (s ModifyReplicationSubnetGroupOutput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s ModifyReplicationSubnetGroupOutput) GoString() string { + return s.String() +} + +// SetReplicationSubnetGroup sets the ReplicationSubnetGroup field's value. +func (s *ModifyReplicationSubnetGroupOutput) SetReplicationSubnetGroup(v *ReplicationSubnetGroup) *ModifyReplicationSubnetGroupOutput { + s.ReplicationSubnetGroup = v + return s +} + +// Please also see https://docs.aws.amazon.com/goto/WebAPI/dms-2016-01-01/ModifyReplicationTaskMessage +type ModifyReplicationTaskInput struct { + _ struct{} `type:"structure"` + + // The start time for the Change Data Capture (CDC) operation. + CdcStartTime *time.Time `type:"timestamp" timestampFormat:"unix"` + + // The migration type. + // + // Valid values: full-load | cdc | full-load-and-cdc + MigrationType *string `type:"string" enum:"MigrationTypeValue"` + + // The Amazon Resource Name (ARN) of the replication task. + // + // ReplicationTaskArn is a required field + ReplicationTaskArn *string `type:"string" required:"true"` + + // The replication task identifier. + // + // 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. + ReplicationTaskIdentifier *string `type:"string"` + + // JSON file that contains settings for the task, such as target metadata settings. + ReplicationTaskSettings *string `type:"string"` + + // The path of the JSON file that contains the table mappings. Preceed the path + // with "file://". + // + // For example, --table-mappings file://mappingfile.json + TableMappings *string `type:"string"` +} + +// String returns the string representation +func (s ModifyReplicationTaskInput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s ModifyReplicationTaskInput) GoString() string { + return s.String() +} + +// Validate inspects the fields of the type to determine if they are valid. +func (s *ModifyReplicationTaskInput) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "ModifyReplicationTaskInput"} + if s.ReplicationTaskArn == nil { + invalidParams.Add(request.NewErrParamRequired("ReplicationTaskArn")) + } + + if invalidParams.Len() > 0 { + return invalidParams + } + return nil +} + +// SetCdcStartTime sets the CdcStartTime field's value. +func (s *ModifyReplicationTaskInput) SetCdcStartTime(v time.Time) *ModifyReplicationTaskInput { + s.CdcStartTime = &v + return s +} + +// SetMigrationType sets the MigrationType field's value. +func (s *ModifyReplicationTaskInput) SetMigrationType(v string) *ModifyReplicationTaskInput { + s.MigrationType = &v + return s +} + +// SetReplicationTaskArn sets the ReplicationTaskArn field's value. +func (s *ModifyReplicationTaskInput) SetReplicationTaskArn(v string) *ModifyReplicationTaskInput { + s.ReplicationTaskArn = &v + return s +} + +// SetReplicationTaskIdentifier sets the ReplicationTaskIdentifier field's value. +func (s *ModifyReplicationTaskInput) SetReplicationTaskIdentifier(v string) *ModifyReplicationTaskInput { + s.ReplicationTaskIdentifier = &v + return s +} + +// SetReplicationTaskSettings sets the ReplicationTaskSettings field's value. +func (s *ModifyReplicationTaskInput) SetReplicationTaskSettings(v string) *ModifyReplicationTaskInput { + s.ReplicationTaskSettings = &v + return s +} + +// SetTableMappings sets the TableMappings field's value. +func (s *ModifyReplicationTaskInput) SetTableMappings(v string) *ModifyReplicationTaskInput { + s.TableMappings = &v + return s +} + +// Please also see https://docs.aws.amazon.com/goto/WebAPI/dms-2016-01-01/ModifyReplicationTaskResponse +type ModifyReplicationTaskOutput struct { + _ struct{} `type:"structure"` + + // The replication task that was modified. + ReplicationTask *ReplicationTask `type:"structure"` +} + +// String returns the string representation +func (s ModifyReplicationTaskOutput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s ModifyReplicationTaskOutput) GoString() string { + return s.String() +} + +// SetReplicationTask sets the ReplicationTask field's value. +func (s *ModifyReplicationTaskOutput) SetReplicationTask(v *ReplicationTask) *ModifyReplicationTaskOutput { + s.ReplicationTask = v + return s +} + +// Please also see https://docs.aws.amazon.com/goto/WebAPI/dms-2016-01-01/OrderableReplicationInstance +type OrderableReplicationInstance struct { + _ struct{} `type:"structure"` + + // The default amount of storage (in gigabytes) that is allocated for the replication + // instance. + DefaultAllocatedStorage *int64 `type:"integer"` + + // The version of the replication engine. + EngineVersion *string `type:"string"` + + // The amount of storage (in gigabytes) that is allocated for the replication + // instance. + IncludedAllocatedStorage *int64 `type:"integer"` + + // The minimum amount of storage (in gigabytes) that can be allocated for the + // replication instance. + MaxAllocatedStorage *int64 `type:"integer"` + + // The minimum amount of storage (in gigabytes) that can be allocated for the + // replication instance. + MinAllocatedStorage *int64 `type:"integer"` + + // The compute and memory capacity of the replication instance. + // + // Valid Values: dms.t2.micro | dms.t2.small | dms.t2.medium | dms.t2.large + // | dms.c4.large | dms.c4.xlarge | dms.c4.2xlarge | dms.c4.4xlarge + ReplicationInstanceClass *string `type:"string"` + + // The type of storage used by the replication instance. + StorageType *string `type:"string"` +} + +// String returns the string representation +func (s OrderableReplicationInstance) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s OrderableReplicationInstance) GoString() string { + return s.String() +} + +// SetDefaultAllocatedStorage sets the DefaultAllocatedStorage field's value. +func (s *OrderableReplicationInstance) SetDefaultAllocatedStorage(v int64) *OrderableReplicationInstance { + s.DefaultAllocatedStorage = &v + return s +} + +// SetEngineVersion sets the EngineVersion field's value. +func (s *OrderableReplicationInstance) SetEngineVersion(v string) *OrderableReplicationInstance { + s.EngineVersion = &v + return s +} + +// SetIncludedAllocatedStorage sets the IncludedAllocatedStorage field's value. +func (s *OrderableReplicationInstance) SetIncludedAllocatedStorage(v int64) *OrderableReplicationInstance { + s.IncludedAllocatedStorage = &v + return s +} + +// SetMaxAllocatedStorage sets the MaxAllocatedStorage field's value. +func (s *OrderableReplicationInstance) SetMaxAllocatedStorage(v int64) *OrderableReplicationInstance { + s.MaxAllocatedStorage = &v + return s +} + +// SetMinAllocatedStorage sets the MinAllocatedStorage field's value. +func (s *OrderableReplicationInstance) SetMinAllocatedStorage(v int64) *OrderableReplicationInstance { + s.MinAllocatedStorage = &v + return s +} + +// SetReplicationInstanceClass sets the ReplicationInstanceClass field's value. +func (s *OrderableReplicationInstance) SetReplicationInstanceClass(v string) *OrderableReplicationInstance { + s.ReplicationInstanceClass = &v + return s +} + +// SetStorageType sets the StorageType field's value. +func (s *OrderableReplicationInstance) SetStorageType(v string) *OrderableReplicationInstance { + s.StorageType = &v + return s +} + +// Please also see https://docs.aws.amazon.com/goto/WebAPI/dms-2016-01-01/RefreshSchemasMessage +type RefreshSchemasInput struct { + _ struct{} `type:"structure"` + + // The Amazon Resource Name (ARN) string that uniquely identifies the endpoint. + // + // EndpointArn is a required field + EndpointArn *string `type:"string" required:"true"` + + // The Amazon Resource Name (ARN) of the replication instance. + // + // ReplicationInstanceArn is a required field + ReplicationInstanceArn *string `type:"string" required:"true"` +} + +// String returns the string representation +func (s RefreshSchemasInput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s RefreshSchemasInput) GoString() string { + return s.String() +} + +// Validate inspects the fields of the type to determine if they are valid. +func (s *RefreshSchemasInput) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "RefreshSchemasInput"} + if s.EndpointArn == nil { + invalidParams.Add(request.NewErrParamRequired("EndpointArn")) + } + if s.ReplicationInstanceArn == nil { + invalidParams.Add(request.NewErrParamRequired("ReplicationInstanceArn")) + } + + if invalidParams.Len() > 0 { + return invalidParams + } + return nil +} + +// SetEndpointArn sets the EndpointArn field's value. +func (s *RefreshSchemasInput) SetEndpointArn(v string) *RefreshSchemasInput { + s.EndpointArn = &v + return s +} + +// SetReplicationInstanceArn sets the ReplicationInstanceArn field's value. +func (s *RefreshSchemasInput) SetReplicationInstanceArn(v string) *RefreshSchemasInput { + s.ReplicationInstanceArn = &v + return s +} + +// Please also see https://docs.aws.amazon.com/goto/WebAPI/dms-2016-01-01/RefreshSchemasResponse +type RefreshSchemasOutput struct { + _ struct{} `type:"structure"` + + // The status of the refreshed schema. + RefreshSchemasStatus *RefreshSchemasStatus `type:"structure"` +} + +// String returns the string representation +func (s RefreshSchemasOutput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s RefreshSchemasOutput) GoString() string { + return s.String() +} + +// SetRefreshSchemasStatus sets the RefreshSchemasStatus field's value. +func (s *RefreshSchemasOutput) SetRefreshSchemasStatus(v *RefreshSchemasStatus) *RefreshSchemasOutput { + s.RefreshSchemasStatus = v + return s +} + +// Please also see https://docs.aws.amazon.com/goto/WebAPI/dms-2016-01-01/RefreshSchemasStatus +type RefreshSchemasStatus struct { + _ struct{} `type:"structure"` + + // The Amazon Resource Name (ARN) string that uniquely identifies the endpoint. + EndpointArn *string `type:"string"` + + // The last failure message for the schema. + LastFailureMessage *string `type:"string"` + + // The date the schema was last refreshed. + LastRefreshDate *time.Time `type:"timestamp" timestampFormat:"unix"` + + // The Amazon Resource Name (ARN) of the replication instance. + ReplicationInstanceArn *string `type:"string"` + + // The status of the schema. + Status *string `type:"string" enum:"RefreshSchemasStatusTypeValue"` +} + +// String returns the string representation +func (s RefreshSchemasStatus) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s RefreshSchemasStatus) GoString() string { + return s.String() +} + +// SetEndpointArn sets the EndpointArn field's value. +func (s *RefreshSchemasStatus) SetEndpointArn(v string) *RefreshSchemasStatus { + s.EndpointArn = &v + return s +} + +// SetLastFailureMessage sets the LastFailureMessage field's value. +func (s *RefreshSchemasStatus) SetLastFailureMessage(v string) *RefreshSchemasStatus { + s.LastFailureMessage = &v + return s +} + +// SetLastRefreshDate sets the LastRefreshDate field's value. +func (s *RefreshSchemasStatus) SetLastRefreshDate(v time.Time) *RefreshSchemasStatus { + s.LastRefreshDate = &v + return s +} + +// SetReplicationInstanceArn sets the ReplicationInstanceArn field's value. +func (s *RefreshSchemasStatus) SetReplicationInstanceArn(v string) *RefreshSchemasStatus { + s.ReplicationInstanceArn = &v + return s +} + +// SetStatus sets the Status field's value. +func (s *RefreshSchemasStatus) SetStatus(v string) *RefreshSchemasStatus { + s.Status = &v + return s +} + +// Please also see https://docs.aws.amazon.com/goto/WebAPI/dms-2016-01-01/RemoveTagsFromResourceMessage +type RemoveTagsFromResourceInput struct { + _ struct{} `type:"structure"` + + // >The Amazon Resource Name (ARN) of the AWS DMS resource the tag is to be + // removed from. + // + // ResourceArn is a required field + ResourceArn *string `type:"string" required:"true"` + + // The tag key (name) of the tag to be removed. + // + // TagKeys is a required field + TagKeys []*string `type:"list" required:"true"` +} + +// String returns the string representation +func (s RemoveTagsFromResourceInput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s RemoveTagsFromResourceInput) GoString() string { + return s.String() +} + +// Validate inspects the fields of the type to determine if they are valid. +func (s *RemoveTagsFromResourceInput) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "RemoveTagsFromResourceInput"} + if s.ResourceArn == nil { + invalidParams.Add(request.NewErrParamRequired("ResourceArn")) + } + if s.TagKeys == nil { + invalidParams.Add(request.NewErrParamRequired("TagKeys")) + } + + if invalidParams.Len() > 0 { + return invalidParams + } + return nil +} + +// SetResourceArn sets the ResourceArn field's value. +func (s *RemoveTagsFromResourceInput) SetResourceArn(v string) *RemoveTagsFromResourceInput { + s.ResourceArn = &v + return s +} + +// SetTagKeys sets the TagKeys field's value. +func (s *RemoveTagsFromResourceInput) SetTagKeys(v []*string) *RemoveTagsFromResourceInput { + s.TagKeys = v + return s +} + +// Please also see https://docs.aws.amazon.com/goto/WebAPI/dms-2016-01-01/RemoveTagsFromResourceResponse +type RemoveTagsFromResourceOutput struct { + _ struct{} `type:"structure"` +} + +// String returns the string representation +func (s RemoveTagsFromResourceOutput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s RemoveTagsFromResourceOutput) GoString() string { + return s.String() +} + +// Please also see https://docs.aws.amazon.com/goto/WebAPI/dms-2016-01-01/ReplicationInstance +type ReplicationInstance struct { + _ struct{} `type:"structure"` + + // The amount of storage (in gigabytes) that is allocated for the replication + // instance. + AllocatedStorage *int64 `type:"integer"` + + // Boolean value indicating if minor version upgrades will be automatically + // applied to the instance. + AutoMinorVersionUpgrade *bool `type:"boolean"` + + // The Availability Zone for the instance. + AvailabilityZone *string `type:"string"` + + // The engine version number of the replication instance. + EngineVersion *string `type:"string"` + + // The time the replication instance was created. + InstanceCreateTime *time.Time `type:"timestamp" timestampFormat:"unix"` + + // The KMS key identifier that is used to encrypt the content on the replication + // instance. If you do not specify a value for the KmsKeyId parameter, then + // AWS DMS 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"` + + // Specifies if the replication instance is a Multi-AZ deployment. You cannot + // set the AvailabilityZone parameter if the Multi-AZ parameter is set to true. + MultiAZ *bool `type:"boolean"` + + // The pending modification values. + PendingModifiedValues *ReplicationPendingModifiedValues `type:"structure"` + + // The maintenance window times for the replication instance. + PreferredMaintenanceWindow *string `type:"string"` + + // Specifies the accessibility options for the replication instance. A value + // of true represents an instance with a public IP address. A value of false + // represents an instance with a private IP address. The default value is true. + PubliclyAccessible *bool `type:"boolean"` + + // The Amazon Resource Name (ARN) of the replication instance. + ReplicationInstanceArn *string `type:"string"` + + // The compute and memory capacity of the replication instance. + // + // Valid Values: dms.t2.micro | dms.t2.small | dms.t2.medium | dms.t2.large + // | dms.c4.large | dms.c4.xlarge | dms.c4.2xlarge | dms.c4.4xlarge + ReplicationInstanceClass *string `type:"string"` + + // The replication instance identifier. This parameter is stored as a lowercase + // string. + // + // 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: myrepinstance + ReplicationInstanceIdentifier *string `type:"string"` + + // The private IP address of the replication instance. + ReplicationInstancePrivateIpAddress *string `deprecated:"true" type:"string"` + + // The private IP address of the replication instance. + ReplicationInstancePrivateIpAddresses []*string `type:"list"` + + // The public IP address of the replication instance. + ReplicationInstancePublicIpAddress *string `deprecated:"true" type:"string"` + + // The public IP address of the replication instance. + ReplicationInstancePublicIpAddresses []*string `type:"list"` + + // The status of the replication instance. + ReplicationInstanceStatus *string `type:"string"` + + // The subnet group for the replication instance. + ReplicationSubnetGroup *ReplicationSubnetGroup `type:"structure"` + + // The availability zone of the standby replication instance in a Multi-AZ deployment. + SecondaryAvailabilityZone *string `type:"string"` + + // The VPC security group for the instance. + VpcSecurityGroups []*VpcSecurityGroupMembership `locationNameList:"VpcSecurityGroupMembership" type:"list"` +} + +// String returns the string representation +func (s ReplicationInstance) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s ReplicationInstance) GoString() string { + return s.String() +} + +// SetAllocatedStorage sets the AllocatedStorage field's value. +func (s *ReplicationInstance) SetAllocatedStorage(v int64) *ReplicationInstance { + s.AllocatedStorage = &v + return s +} + +// SetAutoMinorVersionUpgrade sets the AutoMinorVersionUpgrade field's value. +func (s *ReplicationInstance) SetAutoMinorVersionUpgrade(v bool) *ReplicationInstance { + s.AutoMinorVersionUpgrade = &v + return s +} + +// SetAvailabilityZone sets the AvailabilityZone field's value. +func (s *ReplicationInstance) SetAvailabilityZone(v string) *ReplicationInstance { + s.AvailabilityZone = &v + return s +} + +// SetEngineVersion sets the EngineVersion field's value. +func (s *ReplicationInstance) SetEngineVersion(v string) *ReplicationInstance { + s.EngineVersion = &v + return s +} + +// SetInstanceCreateTime sets the InstanceCreateTime field's value. +func (s *ReplicationInstance) SetInstanceCreateTime(v time.Time) *ReplicationInstance { + s.InstanceCreateTime = &v + return s +} + +// SetKmsKeyId sets the KmsKeyId field's value. +func (s *ReplicationInstance) SetKmsKeyId(v string) *ReplicationInstance { + s.KmsKeyId = &v + return s +} + +// SetMultiAZ sets the MultiAZ field's value. +func (s *ReplicationInstance) SetMultiAZ(v bool) *ReplicationInstance { + s.MultiAZ = &v + return s +} + +// SetPendingModifiedValues sets the PendingModifiedValues field's value. +func (s *ReplicationInstance) SetPendingModifiedValues(v *ReplicationPendingModifiedValues) *ReplicationInstance { + s.PendingModifiedValues = v + return s +} + +// SetPreferredMaintenanceWindow sets the PreferredMaintenanceWindow field's value. +func (s *ReplicationInstance) SetPreferredMaintenanceWindow(v string) *ReplicationInstance { + s.PreferredMaintenanceWindow = &v + return s +} + +// SetPubliclyAccessible sets the PubliclyAccessible field's value. +func (s *ReplicationInstance) SetPubliclyAccessible(v bool) *ReplicationInstance { + s.PubliclyAccessible = &v + return s +} + +// SetReplicationInstanceArn sets the ReplicationInstanceArn field's value. +func (s *ReplicationInstance) SetReplicationInstanceArn(v string) *ReplicationInstance { + s.ReplicationInstanceArn = &v + return s +} + +// SetReplicationInstanceClass sets the ReplicationInstanceClass field's value. +func (s *ReplicationInstance) SetReplicationInstanceClass(v string) *ReplicationInstance { + s.ReplicationInstanceClass = &v + return s +} + +// SetReplicationInstanceIdentifier sets the ReplicationInstanceIdentifier field's value. +func (s *ReplicationInstance) SetReplicationInstanceIdentifier(v string) *ReplicationInstance { + s.ReplicationInstanceIdentifier = &v + return s +} + +// SetReplicationInstancePrivateIpAddress sets the ReplicationInstancePrivateIpAddress field's value. +func (s *ReplicationInstance) SetReplicationInstancePrivateIpAddress(v string) *ReplicationInstance { + s.ReplicationInstancePrivateIpAddress = &v + return s +} + +// SetReplicationInstancePrivateIpAddresses sets the ReplicationInstancePrivateIpAddresses field's value. +func (s *ReplicationInstance) SetReplicationInstancePrivateIpAddresses(v []*string) *ReplicationInstance { + s.ReplicationInstancePrivateIpAddresses = v + return s +} + +// SetReplicationInstancePublicIpAddress sets the ReplicationInstancePublicIpAddress field's value. +func (s *ReplicationInstance) SetReplicationInstancePublicIpAddress(v string) *ReplicationInstance { + s.ReplicationInstancePublicIpAddress = &v + return s +} + +// SetReplicationInstancePublicIpAddresses sets the ReplicationInstancePublicIpAddresses field's value. +func (s *ReplicationInstance) SetReplicationInstancePublicIpAddresses(v []*string) *ReplicationInstance { + s.ReplicationInstancePublicIpAddresses = v + return s +} + +// SetReplicationInstanceStatus sets the ReplicationInstanceStatus field's value. +func (s *ReplicationInstance) SetReplicationInstanceStatus(v string) *ReplicationInstance { + s.ReplicationInstanceStatus = &v + return s +} + +// SetReplicationSubnetGroup sets the ReplicationSubnetGroup field's value. +func (s *ReplicationInstance) SetReplicationSubnetGroup(v *ReplicationSubnetGroup) *ReplicationInstance { + s.ReplicationSubnetGroup = v + return s +} + +// SetSecondaryAvailabilityZone sets the SecondaryAvailabilityZone field's value. +func (s *ReplicationInstance) SetSecondaryAvailabilityZone(v string) *ReplicationInstance { + s.SecondaryAvailabilityZone = &v + return s +} + +// SetVpcSecurityGroups sets the VpcSecurityGroups field's value. +func (s *ReplicationInstance) SetVpcSecurityGroups(v []*VpcSecurityGroupMembership) *ReplicationInstance { + s.VpcSecurityGroups = v + return s +} + +// Please also see https://docs.aws.amazon.com/goto/WebAPI/dms-2016-01-01/ReplicationPendingModifiedValues +type ReplicationPendingModifiedValues struct { + _ struct{} `type:"structure"` + + // The amount of storage (in gigabytes) that is allocated for the replication + // instance. + AllocatedStorage *int64 `type:"integer"` + + // The engine version number of the replication instance. + EngineVersion *string `type:"string"` + + // Specifies if the replication instance is a Multi-AZ deployment. You cannot + // set the AvailabilityZone parameter if the Multi-AZ parameter is set to true. + MultiAZ *bool `type:"boolean"` + + // The compute and memory capacity of the replication instance. + // + // Valid Values: dms.t2.micro | dms.t2.small | dms.t2.medium | dms.t2.large + // | dms.c4.large | dms.c4.xlarge | dms.c4.2xlarge | dms.c4.4xlarge + ReplicationInstanceClass *string `type:"string"` +} + +// String returns the string representation +func (s ReplicationPendingModifiedValues) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s ReplicationPendingModifiedValues) GoString() string { + return s.String() +} + +// SetAllocatedStorage sets the AllocatedStorage field's value. +func (s *ReplicationPendingModifiedValues) SetAllocatedStorage(v int64) *ReplicationPendingModifiedValues { + s.AllocatedStorage = &v + return s +} + +// SetEngineVersion sets the EngineVersion field's value. +func (s *ReplicationPendingModifiedValues) SetEngineVersion(v string) *ReplicationPendingModifiedValues { + s.EngineVersion = &v + return s +} + +// SetMultiAZ sets the MultiAZ field's value. +func (s *ReplicationPendingModifiedValues) SetMultiAZ(v bool) *ReplicationPendingModifiedValues { + s.MultiAZ = &v + return s +} + +// SetReplicationInstanceClass sets the ReplicationInstanceClass field's value. +func (s *ReplicationPendingModifiedValues) SetReplicationInstanceClass(v string) *ReplicationPendingModifiedValues { + s.ReplicationInstanceClass = &v + return s +} + +// Please also see https://docs.aws.amazon.com/goto/WebAPI/dms-2016-01-01/ReplicationSubnetGroup +type ReplicationSubnetGroup struct { + _ struct{} `type:"structure"` + + // The description of the replication subnet group. + ReplicationSubnetGroupDescription *string `type:"string"` + + // The identifier of the replication instance subnet group. + ReplicationSubnetGroupIdentifier *string `type:"string"` + + // The status of the subnet group. + SubnetGroupStatus *string `type:"string"` + + // The subnets that are in the subnet group. + Subnets []*Subnet `locationNameList:"Subnet" type:"list"` + + // The ID of the VPC. + VpcId *string `type:"string"` +} + +// String returns the string representation +func (s ReplicationSubnetGroup) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s ReplicationSubnetGroup) GoString() string { + return s.String() +} + +// SetReplicationSubnetGroupDescription sets the ReplicationSubnetGroupDescription field's value. +func (s *ReplicationSubnetGroup) SetReplicationSubnetGroupDescription(v string) *ReplicationSubnetGroup { + s.ReplicationSubnetGroupDescription = &v + return s +} + +// SetReplicationSubnetGroupIdentifier sets the ReplicationSubnetGroupIdentifier field's value. +func (s *ReplicationSubnetGroup) SetReplicationSubnetGroupIdentifier(v string) *ReplicationSubnetGroup { + s.ReplicationSubnetGroupIdentifier = &v + return s +} + +// SetSubnetGroupStatus sets the SubnetGroupStatus field's value. +func (s *ReplicationSubnetGroup) SetSubnetGroupStatus(v string) *ReplicationSubnetGroup { + s.SubnetGroupStatus = &v + return s +} + +// SetSubnets sets the Subnets field's value. +func (s *ReplicationSubnetGroup) SetSubnets(v []*Subnet) *ReplicationSubnetGroup { + s.Subnets = v + return s +} + +// SetVpcId sets the VpcId field's value. +func (s *ReplicationSubnetGroup) SetVpcId(v string) *ReplicationSubnetGroup { + s.VpcId = &v + return s +} + +// Please also see https://docs.aws.amazon.com/goto/WebAPI/dms-2016-01-01/ReplicationTask +type ReplicationTask struct { + _ struct{} `type:"structure"` + + // The last error (failure) message generated for the replication instance. + LastFailureMessage *string `type:"string"` + + // The type of migration. + MigrationType *string `type:"string" enum:"MigrationTypeValue"` + + // The Amazon Resource Name (ARN) of the replication instance. + ReplicationInstanceArn *string `type:"string"` + + // The Amazon Resource Name (ARN) of the replication task. + ReplicationTaskArn *string `type:"string"` + + // The date the replication task was created. + ReplicationTaskCreationDate *time.Time `type:"timestamp" timestampFormat:"unix"` + + // The replication task identifier. + // + // 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. + ReplicationTaskIdentifier *string `type:"string"` + + // The settings for the replication task. + ReplicationTaskSettings *string `type:"string"` + + // The date the replication task is scheduled to start. + ReplicationTaskStartDate *time.Time `type:"timestamp" timestampFormat:"unix"` + + // The statistics for the task, including elapsed time, tables loaded, and table + // errors. + ReplicationTaskStats *ReplicationTaskStats `type:"structure"` + + // The Amazon Resource Name (ARN) string that uniquely identifies the endpoint. + SourceEndpointArn *string `type:"string"` + + // The status of the replication task. + Status *string `type:"string"` + + // The reason the replication task was stopped. + StopReason *string `type:"string"` + + // Table mappings specified in the task. + TableMappings *string `type:"string"` + + // The Amazon Resource Name (ARN) string that uniquely identifies the endpoint. + TargetEndpointArn *string `type:"string"` +} + +// String returns the string representation +func (s ReplicationTask) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s ReplicationTask) GoString() string { + return s.String() +} + +// SetLastFailureMessage sets the LastFailureMessage field's value. +func (s *ReplicationTask) SetLastFailureMessage(v string) *ReplicationTask { + s.LastFailureMessage = &v + return s +} + +// SetMigrationType sets the MigrationType field's value. +func (s *ReplicationTask) SetMigrationType(v string) *ReplicationTask { + s.MigrationType = &v + return s +} + +// SetReplicationInstanceArn sets the ReplicationInstanceArn field's value. +func (s *ReplicationTask) SetReplicationInstanceArn(v string) *ReplicationTask { + s.ReplicationInstanceArn = &v + return s +} + +// SetReplicationTaskArn sets the ReplicationTaskArn field's value. +func (s *ReplicationTask) SetReplicationTaskArn(v string) *ReplicationTask { + s.ReplicationTaskArn = &v + return s +} + +// SetReplicationTaskCreationDate sets the ReplicationTaskCreationDate field's value. +func (s *ReplicationTask) SetReplicationTaskCreationDate(v time.Time) *ReplicationTask { + s.ReplicationTaskCreationDate = &v + return s +} + +// SetReplicationTaskIdentifier sets the ReplicationTaskIdentifier field's value. +func (s *ReplicationTask) SetReplicationTaskIdentifier(v string) *ReplicationTask { + s.ReplicationTaskIdentifier = &v + return s +} + +// SetReplicationTaskSettings sets the ReplicationTaskSettings field's value. +func (s *ReplicationTask) SetReplicationTaskSettings(v string) *ReplicationTask { + s.ReplicationTaskSettings = &v + return s +} + +// SetReplicationTaskStartDate sets the ReplicationTaskStartDate field's value. +func (s *ReplicationTask) SetReplicationTaskStartDate(v time.Time) *ReplicationTask { + s.ReplicationTaskStartDate = &v + return s +} + +// SetReplicationTaskStats sets the ReplicationTaskStats field's value. +func (s *ReplicationTask) SetReplicationTaskStats(v *ReplicationTaskStats) *ReplicationTask { + s.ReplicationTaskStats = v + return s +} + +// SetSourceEndpointArn sets the SourceEndpointArn field's value. +func (s *ReplicationTask) SetSourceEndpointArn(v string) *ReplicationTask { + s.SourceEndpointArn = &v + return s +} + +// SetStatus sets the Status field's value. +func (s *ReplicationTask) SetStatus(v string) *ReplicationTask { + s.Status = &v + return s +} + +// SetStopReason sets the StopReason field's value. +func (s *ReplicationTask) SetStopReason(v string) *ReplicationTask { + s.StopReason = &v + return s +} + +// SetTableMappings sets the TableMappings field's value. +func (s *ReplicationTask) SetTableMappings(v string) *ReplicationTask { + s.TableMappings = &v + return s +} + +// SetTargetEndpointArn sets the TargetEndpointArn field's value. +func (s *ReplicationTask) SetTargetEndpointArn(v string) *ReplicationTask { + s.TargetEndpointArn = &v + return s +} + +// Please also see https://docs.aws.amazon.com/goto/WebAPI/dms-2016-01-01/ReplicationTaskStats +type ReplicationTaskStats struct { + _ struct{} `type:"structure"` + + // The elapsed time of the task, in milliseconds. + ElapsedTimeMillis *int64 `type:"long"` + + // The percent complete for the full load migration task. + FullLoadProgressPercent *int64 `type:"integer"` + + // The number of errors that have occurred during this task. + TablesErrored *int64 `type:"integer"` + + // The number of tables loaded for this task. + TablesLoaded *int64 `type:"integer"` + + // The number of tables currently loading for this task. + TablesLoading *int64 `type:"integer"` + + // The number of tables queued for this task. + TablesQueued *int64 `type:"integer"` +} + +// String returns the string representation +func (s ReplicationTaskStats) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s ReplicationTaskStats) GoString() string { + return s.String() +} + +// SetElapsedTimeMillis sets the ElapsedTimeMillis field's value. +func (s *ReplicationTaskStats) SetElapsedTimeMillis(v int64) *ReplicationTaskStats { + s.ElapsedTimeMillis = &v + return s +} + +// SetFullLoadProgressPercent sets the FullLoadProgressPercent field's value. +func (s *ReplicationTaskStats) SetFullLoadProgressPercent(v int64) *ReplicationTaskStats { + s.FullLoadProgressPercent = &v + return s +} + +// SetTablesErrored sets the TablesErrored field's value. +func (s *ReplicationTaskStats) SetTablesErrored(v int64) *ReplicationTaskStats { + s.TablesErrored = &v + return s +} + +// SetTablesLoaded sets the TablesLoaded field's value. +func (s *ReplicationTaskStats) SetTablesLoaded(v int64) *ReplicationTaskStats { + s.TablesLoaded = &v + return s +} + +// SetTablesLoading sets the TablesLoading field's value. +func (s *ReplicationTaskStats) SetTablesLoading(v int64) *ReplicationTaskStats { + s.TablesLoading = &v + return s +} + +// SetTablesQueued sets the TablesQueued field's value. +func (s *ReplicationTaskStats) SetTablesQueued(v int64) *ReplicationTaskStats { + s.TablesQueued = &v + return s +} + +// Please also see https://docs.aws.amazon.com/goto/WebAPI/dms-2016-01-01/StartReplicationTaskMessage +type StartReplicationTaskInput struct { + _ struct{} `type:"structure"` + + // The start time for the Change Data Capture (CDC) operation. + CdcStartTime *time.Time `type:"timestamp" timestampFormat:"unix"` + + // The Amazon Resource Number (ARN) of the replication task to be started. + // + // ReplicationTaskArn is a required field + ReplicationTaskArn *string `type:"string" required:"true"` + + // The type of replication task. + // + // StartReplicationTaskType is a required field + StartReplicationTaskType *string `type:"string" required:"true" enum:"StartReplicationTaskTypeValue"` +} + +// String returns the string representation +func (s StartReplicationTaskInput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s StartReplicationTaskInput) GoString() string { + return s.String() +} + +// Validate inspects the fields of the type to determine if they are valid. +func (s *StartReplicationTaskInput) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "StartReplicationTaskInput"} + if s.ReplicationTaskArn == nil { + invalidParams.Add(request.NewErrParamRequired("ReplicationTaskArn")) + } + if s.StartReplicationTaskType == nil { + invalidParams.Add(request.NewErrParamRequired("StartReplicationTaskType")) + } + + if invalidParams.Len() > 0 { + return invalidParams + } + return nil +} + +// SetCdcStartTime sets the CdcStartTime field's value. +func (s *StartReplicationTaskInput) SetCdcStartTime(v time.Time) *StartReplicationTaskInput { + s.CdcStartTime = &v + return s +} + +// SetReplicationTaskArn sets the ReplicationTaskArn field's value. +func (s *StartReplicationTaskInput) SetReplicationTaskArn(v string) *StartReplicationTaskInput { + s.ReplicationTaskArn = &v + return s +} + +// SetStartReplicationTaskType sets the StartReplicationTaskType field's value. +func (s *StartReplicationTaskInput) SetStartReplicationTaskType(v string) *StartReplicationTaskInput { + s.StartReplicationTaskType = &v + return s +} + +// Please also see https://docs.aws.amazon.com/goto/WebAPI/dms-2016-01-01/StartReplicationTaskResponse +type StartReplicationTaskOutput struct { + _ struct{} `type:"structure"` + + // The replication task started. + ReplicationTask *ReplicationTask `type:"structure"` +} + +// String returns the string representation +func (s StartReplicationTaskOutput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s StartReplicationTaskOutput) GoString() string { + return s.String() +} + +// SetReplicationTask sets the ReplicationTask field's value. +func (s *StartReplicationTaskOutput) SetReplicationTask(v *ReplicationTask) *StartReplicationTaskOutput { + s.ReplicationTask = v + return s +} + +// Please also see https://docs.aws.amazon.com/goto/WebAPI/dms-2016-01-01/StopReplicationTaskMessage +type StopReplicationTaskInput struct { + _ struct{} `type:"structure"` + + // The Amazon Resource Number(ARN) of the replication task to be stopped. + // + // ReplicationTaskArn is a required field + ReplicationTaskArn *string `type:"string" required:"true"` +} + +// String returns the string representation +func (s StopReplicationTaskInput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s StopReplicationTaskInput) GoString() string { + return s.String() +} + +// Validate inspects the fields of the type to determine if they are valid. +func (s *StopReplicationTaskInput) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "StopReplicationTaskInput"} + if s.ReplicationTaskArn == nil { + invalidParams.Add(request.NewErrParamRequired("ReplicationTaskArn")) + } + + if invalidParams.Len() > 0 { + return invalidParams + } + return nil +} + +// SetReplicationTaskArn sets the ReplicationTaskArn field's value. +func (s *StopReplicationTaskInput) SetReplicationTaskArn(v string) *StopReplicationTaskInput { + s.ReplicationTaskArn = &v + return s +} + +// Please also see https://docs.aws.amazon.com/goto/WebAPI/dms-2016-01-01/StopReplicationTaskResponse +type StopReplicationTaskOutput struct { + _ struct{} `type:"structure"` + + // The replication task stopped. + ReplicationTask *ReplicationTask `type:"structure"` +} + +// String returns the string representation +func (s StopReplicationTaskOutput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s StopReplicationTaskOutput) GoString() string { + return s.String() +} + +// SetReplicationTask sets the ReplicationTask field's value. +func (s *StopReplicationTaskOutput) SetReplicationTask(v *ReplicationTask) *StopReplicationTaskOutput { + s.ReplicationTask = v + return s +} + +// Please also see https://docs.aws.amazon.com/goto/WebAPI/dms-2016-01-01/Subnet +type Subnet struct { + _ struct{} `type:"structure"` + + // The Availability Zone of the subnet. + SubnetAvailabilityZone *AvailabilityZone `type:"structure"` + + // The subnet identifier. + SubnetIdentifier *string `type:"string"` + + // The status of the subnet. + SubnetStatus *string `type:"string"` +} + +// String returns the string representation +func (s Subnet) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s Subnet) GoString() string { + return s.String() +} + +// SetSubnetAvailabilityZone sets the SubnetAvailabilityZone field's value. +func (s *Subnet) SetSubnetAvailabilityZone(v *AvailabilityZone) *Subnet { + s.SubnetAvailabilityZone = v + return s +} + +// SetSubnetIdentifier sets the SubnetIdentifier field's value. +func (s *Subnet) SetSubnetIdentifier(v string) *Subnet { + s.SubnetIdentifier = &v + return s +} + +// SetSubnetStatus sets the SubnetStatus field's value. +func (s *Subnet) SetSubnetStatus(v string) *Subnet { + s.SubnetStatus = &v + return s +} + +// Please also see https://docs.aws.amazon.com/goto/WebAPI/dms-2016-01-01/SupportedEndpointType +type SupportedEndpointType struct { + _ struct{} `type:"structure"` + + // The type of endpoint. + EndpointType *string `type:"string" enum:"ReplicationEndpointTypeValue"` + + // The database engine name. Valid values include MYSQL, ORACLE, POSTGRES, MARIADB, + // AURORA, REDSHIFT, SYBASE, and SQLSERVER. + EngineName *string `type:"string"` + + // Indicates if Change Data Capture (CDC) is supported. + SupportsCDC *bool `type:"boolean"` +} + +// String returns the string representation +func (s SupportedEndpointType) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s SupportedEndpointType) GoString() string { + return s.String() +} + +// SetEndpointType sets the EndpointType field's value. +func (s *SupportedEndpointType) SetEndpointType(v string) *SupportedEndpointType { + s.EndpointType = &v + return s +} + +// SetEngineName sets the EngineName field's value. +func (s *SupportedEndpointType) SetEngineName(v string) *SupportedEndpointType { + s.EngineName = &v + return s +} + +// SetSupportsCDC sets the SupportsCDC field's value. +func (s *SupportedEndpointType) SetSupportsCDC(v bool) *SupportedEndpointType { + s.SupportsCDC = &v + return s +} + +// Please also see https://docs.aws.amazon.com/goto/WebAPI/dms-2016-01-01/TableStatistics +type TableStatistics struct { + _ struct{} `type:"structure"` + + // The Data Definition Language (DDL) used to build and modify the structure + // of your tables. + Ddls *int64 `type:"long"` + + // The number of delete actions performed on a table. + Deletes *int64 `type:"long"` + + // The number of rows added during the Full Load operation. + FullLoadRows *int64 `type:"long"` + + // The number of insert actions performed on a table. + Inserts *int64 `type:"long"` + + // The last time the table was updated. + LastUpdateTime *time.Time `type:"timestamp" timestampFormat:"unix"` + + // The schema name. + SchemaName *string `type:"string"` + + // The name of the table. + TableName *string `type:"string"` + + // The state of the table. + TableState *string `type:"string"` + + // The number of update actions performed on a table. + Updates *int64 `type:"long"` +} + +// String returns the string representation +func (s TableStatistics) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s TableStatistics) GoString() string { + return s.String() +} + +// SetDdls sets the Ddls field's value. +func (s *TableStatistics) SetDdls(v int64) *TableStatistics { + s.Ddls = &v + return s +} + +// SetDeletes sets the Deletes field's value. +func (s *TableStatistics) SetDeletes(v int64) *TableStatistics { + s.Deletes = &v + return s +} + +// SetFullLoadRows sets the FullLoadRows field's value. +func (s *TableStatistics) SetFullLoadRows(v int64) *TableStatistics { + s.FullLoadRows = &v + return s +} + +// SetInserts sets the Inserts field's value. +func (s *TableStatistics) SetInserts(v int64) *TableStatistics { + s.Inserts = &v + return s +} + +// SetLastUpdateTime sets the LastUpdateTime field's value. +func (s *TableStatistics) SetLastUpdateTime(v time.Time) *TableStatistics { + s.LastUpdateTime = &v + return s +} + +// SetSchemaName sets the SchemaName field's value. +func (s *TableStatistics) SetSchemaName(v string) *TableStatistics { + s.SchemaName = &v + return s +} + +// SetTableName sets the TableName field's value. +func (s *TableStatistics) SetTableName(v string) *TableStatistics { + s.TableName = &v + return s +} + +// SetTableState sets the TableState field's value. +func (s *TableStatistics) SetTableState(v string) *TableStatistics { + s.TableState = &v + return s +} + +// SetUpdates sets the Updates field's value. +func (s *TableStatistics) SetUpdates(v int64) *TableStatistics { + s.Updates = &v + return s +} + +// Please also see https://docs.aws.amazon.com/goto/WebAPI/dms-2016-01-01/Tag +type Tag struct { + _ struct{} `type:"structure"` + + // A key is the required name of the tag. The string value can be from 1 to + // 128 Unicode characters in length and cannot be prefixed with "aws:" or "dms:". + // The string can only contain only the set of Unicode letters, digits, white-space, + // '_', '.', '/', '=', '+', '-' (Java regex: "^([\\p{L}\\p{Z}\\p{N}_.:/=+\\-]*)$"). + Key *string `type:"string"` + + // A value is the optional value of the tag. The string value can be from 1 + // to 256 Unicode characters in length and cannot be prefixed with "aws:" or + // "dms:". The string can only contain only the set of Unicode letters, digits, + // white-space, '_', '.', '/', '=', '+', '-' (Java regex: "^([\\p{L}\\p{Z}\\p{N}_.:/=+\\-]*)$"). + Value *string `type:"string"` +} + +// String returns the string representation +func (s Tag) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s Tag) GoString() string { + return s.String() +} + +// SetKey sets the Key field's value. +func (s *Tag) SetKey(v string) *Tag { + s.Key = &v + return s +} + +// SetValue sets the Value field's value. +func (s *Tag) SetValue(v string) *Tag { + s.Value = &v + return s +} + +// Please also see https://docs.aws.amazon.com/goto/WebAPI/dms-2016-01-01/TestConnectionMessage +type TestConnectionInput struct { + _ struct{} `type:"structure"` + + // The Amazon Resource Name (ARN) string that uniquely identifies the endpoint. + // + // EndpointArn is a required field + EndpointArn *string `type:"string" required:"true"` + + // The Amazon Resource Name (ARN) of the replication instance. + // + // ReplicationInstanceArn is a required field + ReplicationInstanceArn *string `type:"string" required:"true"` +} + +// String returns the string representation +func (s TestConnectionInput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s TestConnectionInput) GoString() string { + return s.String() +} + +// Validate inspects the fields of the type to determine if they are valid. +func (s *TestConnectionInput) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "TestConnectionInput"} + if s.EndpointArn == nil { + invalidParams.Add(request.NewErrParamRequired("EndpointArn")) + } + if s.ReplicationInstanceArn == nil { + invalidParams.Add(request.NewErrParamRequired("ReplicationInstanceArn")) + } + + if invalidParams.Len() > 0 { + return invalidParams + } + return nil +} + +// SetEndpointArn sets the EndpointArn field's value. +func (s *TestConnectionInput) SetEndpointArn(v string) *TestConnectionInput { + s.EndpointArn = &v + return s +} + +// SetReplicationInstanceArn sets the ReplicationInstanceArn field's value. +func (s *TestConnectionInput) SetReplicationInstanceArn(v string) *TestConnectionInput { + s.ReplicationInstanceArn = &v + return s +} + +// Please also see https://docs.aws.amazon.com/goto/WebAPI/dms-2016-01-01/TestConnectionResponse +type TestConnectionOutput struct { + _ struct{} `type:"structure"` + + // The connection tested. + Connection *Connection `type:"structure"` +} + +// String returns the string representation +func (s TestConnectionOutput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s TestConnectionOutput) GoString() string { + return s.String() +} + +// SetConnection sets the Connection field's value. +func (s *TestConnectionOutput) SetConnection(v *Connection) *TestConnectionOutput { + s.Connection = v + return s +} + +// Please also see https://docs.aws.amazon.com/goto/WebAPI/dms-2016-01-01/VpcSecurityGroupMembership +type VpcSecurityGroupMembership struct { + _ struct{} `type:"structure"` + + // The status of the VPC security group. + Status *string `type:"string"` + + // The VPC security group Id. + VpcSecurityGroupId *string `type:"string"` +} + +// String returns the string representation +func (s VpcSecurityGroupMembership) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s VpcSecurityGroupMembership) GoString() string { + return s.String() +} + +// SetStatus sets the Status field's value. +func (s *VpcSecurityGroupMembership) SetStatus(v string) *VpcSecurityGroupMembership { + s.Status = &v + return s +} + +// SetVpcSecurityGroupId sets the VpcSecurityGroupId field's value. +func (s *VpcSecurityGroupMembership) SetVpcSecurityGroupId(v string) *VpcSecurityGroupMembership { + s.VpcSecurityGroupId = &v + return s +} + +const ( + // DmsSslModeValueNone is a DmsSslModeValue enum value + DmsSslModeValueNone = "none" + + // DmsSslModeValueRequire is a DmsSslModeValue enum value + DmsSslModeValueRequire = "require" + + // DmsSslModeValueVerifyCa is a DmsSslModeValue enum value + DmsSslModeValueVerifyCa = "verify-ca" + + // DmsSslModeValueVerifyFull is a DmsSslModeValue enum value + DmsSslModeValueVerifyFull = "verify-full" +) + +const ( + // MigrationTypeValueFullLoad is a MigrationTypeValue enum value + MigrationTypeValueFullLoad = "full-load" + + // MigrationTypeValueCdc is a MigrationTypeValue enum value + MigrationTypeValueCdc = "cdc" + + // MigrationTypeValueFullLoadAndCdc is a MigrationTypeValue enum value + MigrationTypeValueFullLoadAndCdc = "full-load-and-cdc" +) + +const ( + // RefreshSchemasStatusTypeValueSuccessful is a RefreshSchemasStatusTypeValue enum value + RefreshSchemasStatusTypeValueSuccessful = "successful" + + // RefreshSchemasStatusTypeValueFailed is a RefreshSchemasStatusTypeValue enum value + RefreshSchemasStatusTypeValueFailed = "failed" + + // RefreshSchemasStatusTypeValueRefreshing is a RefreshSchemasStatusTypeValue enum value + RefreshSchemasStatusTypeValueRefreshing = "refreshing" +) + +const ( + // ReplicationEndpointTypeValueSource is a ReplicationEndpointTypeValue enum value + ReplicationEndpointTypeValueSource = "source" + + // ReplicationEndpointTypeValueTarget is a ReplicationEndpointTypeValue enum value + ReplicationEndpointTypeValueTarget = "target" +) + +const ( + // StartReplicationTaskTypeValueStartReplication is a StartReplicationTaskTypeValue enum value + StartReplicationTaskTypeValueStartReplication = "start-replication" + + // StartReplicationTaskTypeValueResumeProcessing is a StartReplicationTaskTypeValue enum value + StartReplicationTaskTypeValueResumeProcessing = "resume-processing" + + // StartReplicationTaskTypeValueReloadTarget is a StartReplicationTaskTypeValue enum value + StartReplicationTaskTypeValueReloadTarget = "reload-target" +) diff --git a/vendor/github.com/aws/aws-sdk-go/service/databasemigrationservice/service.go b/vendor/github.com/aws/aws-sdk-go/service/databasemigrationservice/service.go new file mode 100644 index 000000000..cbb36fd34 --- /dev/null +++ b/vendor/github.com/aws/aws-sdk-go/service/databasemigrationservice/service.go @@ -0,0 +1,99 @@ +// THIS FILE IS AUTOMATICALLY GENERATED. DO NOT EDIT. + +package databasemigrationservice + +import ( + "github.com/aws/aws-sdk-go/aws" + "github.com/aws/aws-sdk-go/aws/client" + "github.com/aws/aws-sdk-go/aws/client/metadata" + "github.com/aws/aws-sdk-go/aws/request" + "github.com/aws/aws-sdk-go/aws/signer/v4" + "github.com/aws/aws-sdk-go/private/protocol/jsonrpc" +) + +// AWS Database Migration Service (AWS DMS) can migrate your data to and from +// the most widely used commercial and open-source databases such as Oracle, +// PostgreSQL, Microsoft SQL Server, Amazon Redshift, MariaDB, Amazon Aurora, +// MySQL, and SAP Adaptive Server Enterprise (ASE). The service supports homogeneous +// migrations such as Oracle to Oracle, as well as heterogeneous migrations +// between different database platforms, such as Oracle to MySQL or SQL Server +// to PostgreSQL. +// The service client's operations are safe to be used concurrently. +// It is not safe to mutate any of the client's properties though. +// Please also see https://docs.aws.amazon.com/goto/WebAPI/dms-2016-01-01 +type DatabaseMigrationService struct { + *client.Client +} + +// Used for custom client initialization logic +var initClient func(*client.Client) + +// Used for custom request initialization logic +var initRequest func(*request.Request) + +// Service information constants +const ( + ServiceName = "dms" // Service endpoint prefix API calls made to. + EndpointsID = ServiceName // Service ID for Regions and Endpoints metadata. +) + +// New creates a new instance of the DatabaseMigrationService client with a session. +// If additional configuration is needed for the client instance use the optional +// aws.Config parameter to add your extra config. +// +// Example: +// // Create a DatabaseMigrationService client from just a session. +// svc := databasemigrationservice.New(mySession) +// +// // Create a DatabaseMigrationService client with additional configuration +// svc := databasemigrationservice.New(mySession, aws.NewConfig().WithRegion("us-west-2")) +func New(p client.ConfigProvider, cfgs ...*aws.Config) *DatabaseMigrationService { + c := p.ClientConfig(EndpointsID, cfgs...) + return newClient(*c.Config, c.Handlers, c.Endpoint, c.SigningRegion, c.SigningName) +} + +// newClient creates, initializes and returns a new service client instance. +func newClient(cfg aws.Config, handlers request.Handlers, endpoint, signingRegion, signingName string) *DatabaseMigrationService { + svc := &DatabaseMigrationService{ + Client: client.New( + cfg, + metadata.ClientInfo{ + ServiceName: ServiceName, + SigningName: signingName, + SigningRegion: signingRegion, + Endpoint: endpoint, + APIVersion: "2016-01-01", + JSONVersion: "1.1", + TargetPrefix: "AmazonDMSv20160101", + }, + handlers, + ), + } + + // Handlers + svc.Handlers.Sign.PushBackNamed(v4.SignRequestHandler) + svc.Handlers.Build.PushBackNamed(jsonrpc.BuildHandler) + svc.Handlers.Unmarshal.PushBackNamed(jsonrpc.UnmarshalHandler) + svc.Handlers.UnmarshalMeta.PushBackNamed(jsonrpc.UnmarshalMetaHandler) + svc.Handlers.UnmarshalError.PushBackNamed(jsonrpc.UnmarshalErrorHandler) + + // Run custom client initialization if present + if initClient != nil { + initClient(svc.Client) + } + + return svc +} + +// newRequest creates a new request for a DatabaseMigrationService operation and runs any +// custom request initialization. +func (c *DatabaseMigrationService) newRequest(op *request.Operation, params, data interface{}) *request.Request { + req := c.NewRequest(op, params, data) + + // Run custom request initialization if present + if initRequest != nil { + initRequest(req) + } + + return req +} diff --git a/vendor/vendor.json b/vendor/vendor.json index 79c733493..9eff8e41c 100644 --- a/vendor/vendor.json +++ b/vendor/vendor.json @@ -788,6 +788,14 @@ "version": "v1.6.18", "versionExact": "v1.6.18" }, + { + "checksumSHA1": "xKUp9QOvMJOavwFwnbLcqq1FxOE=", + "path": "github.com/aws/aws-sdk-go/service/databasemigrationservice", + "revision": "f82d132783af109928d89d526ccc8d9fc320639e", + "revisionTime": "2017-01-19T23:36:13Z", + "version": "v1.6.14", + "versionExact": "v1.6.14" + }, { "checksumSHA1": "W29S9x3pVL3xha1nsGqGtSQtGwA=", "path": "github.com/aws/aws-sdk-go/service/directoryservice", diff --git a/website/source/docs/import/importability.html.md b/website/source/docs/import/importability.html.md index 8ce15281d..9349e3ba6 100644 --- a/website/source/docs/import/importability.html.md +++ b/website/source/docs/import/importability.html.md @@ -41,6 +41,11 @@ To make a resource importable, please see the * aws_db_parameter_group * aws_db_security_group * aws_db_subnet_group +* aws_dms_certificate +* aws_dms_endpoint +* aws_dms_replication_instance +* aws_dms_replication_subnet_group +* aws_dms_replication_task * aws_dynamodb_table * aws_ebs_volume * aws_ecr_repository diff --git a/website/source/docs/providers/aws/r/dms_certificate.html.markdown b/website/source/docs/providers/aws/r/dms_certificate.html.markdown new file mode 100644 index 000000000..9f150b805 --- /dev/null +++ b/website/source/docs/providers/aws/r/dms_certificate.html.markdown @@ -0,0 +1,46 @@ +--- +layout: "aws" +page_title: "AWS: aws_dms_certificate" +sidebar_current: "docs-aws-resource-dms-certificate" +description: |- + Provides a DMS (Data Migration Service) certificate resource. +--- + +# aws\_dms\_certificate + +Provides a DMS (Data Migration Service) certificate resource. DMS certificates can be created, deleted, and imported. + +## Example Usage + +``` +# Create a new certificate +resource "aws_dms_certificate" "test" { + certificate_id = "test-dms-certificate-tf" + certificate_pem = "..." +} +``` + +## Argument Reference + +The following arguments are supported: + +* `certificate_id` - (Required) The certificate identifier. + + - Must contain from 1 to 255 alphanumeric characters and hyphens. + +* `certificate_pem` - (Optional) The contents of the .pem X.509 certificate file for the certificate. Either `certificate_pem` or `certificate_wallet` must be set. +* `certificate_wallet` - (Optional) The contents of the Oracle Wallet certificate for use with SSL. Either `certificate_pem` or `certificate_wallet` must be set. + +## Attributes Reference + +The following attributes are exported: + +* `certificate_arn` - The Amazon Resource Name (ARN) for the certificate. + +## Import + +Certificates can be imported using the `certificate_arn`, e.g. + +``` +$ terraform import aws_dms_certificate.test arn:aws:dms:us-west-2:123456789:cert:xxxxxxxxxx +``` diff --git a/website/source/docs/providers/aws/r/dms_endpoint.html.markdown b/website/source/docs/providers/aws/r/dms_endpoint.html.markdown new file mode 100644 index 000000000..72500b9f1 --- /dev/null +++ b/website/source/docs/providers/aws/r/dms_endpoint.html.markdown @@ -0,0 +1,73 @@ +--- +layout: "aws" +page_title: "AWS: aws_dms_endpoint" +sidebar_current: "docs-aws-resource-dms-endpoint" +description: |- + Provides a DMS (Data Migration Service) endpoint resource. +--- + +# aws\_dms\_endpoint + +Provides a DMS (Data Migration Service) endpoint resource. DMS endpoints can be created, updated, deleted, and imported. + +## Example Usage + +``` +# Create a new endpoint +resource "aws_dms_endpoint" "test" { + certificate_arn = "arn:aws:acm:us-east-1:123456789012:certificate/12345678-1234-1234-1234-123456789012" + database_name = "test" + endpoint_id = "test-dms-endpoint-tf" + endpoint_type = "source" + engine_name = "aurora" + extra_connection_attributes = "" + kms_key_arn = "arn:aws:kms:us-east-1:123456789012:key/12345678-1234-1234-1234-123456789012" + password = "test" + port = 3306 + server_name = "test" + ssl_mode = "none" + tags { + Name = "test" + } + username = "test" +} +``` + +## Argument Reference + +The following arguments are supported: + +* `certificate_arn` - (Optional, Default: empty string) The Amazon Resource Name (ARN) for the certificate. +* `database_name` - (Optional, Default: empty string) The name of the endpoint database. +* `endpoint_id` - (Required) The database endpoint identifier. + + - Must contain from 1 to 255 alphanumeric characters or hyphens. + - Must begin with a letter + - Must contain only ASCII letters, digits, and hyphens + - Must not end with a hyphen + - Must not contain two consecutive hyphens + +* `endpoint_type` - (Required) The type of endpoint. Can be one of `source | target`. +* `engine_name` - (Required) The type of engine for the endpoint. Can be one of `mysql | oracle | postgres | mariadb | aurora | redshift | sybase | sqlserver`. +* `extra_connection_attributes` - (Optional) Additional attributes associated with the connection. For available attributes see [Using Extra Connection Attributes with AWS Database Migration Service](http://docs.aws.amazon.com/dms/latest/userguide/CHAP_Introduction.ConnectionAttributes.html). +* `kms_key_arn` - (Optional) The Amazon Resource Name (ARN) for the KMS key that will be used to encrypt the connection parameters. If you do not specify a value for `kms_key_arn`, then AWS DMS 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. +* `password` - (Required) The password to be used to login to the endpoint database. +* `port` - (Required) The port used by the endpoint database. +* `server_name` - (Required) The host name of the server. +* `ssl_mode` - (Optional, Default: none) The SSL mode to use for the connection. Can be one of `none | require | verify-ca | verify-full` +* `tags` - (Optional) A mapping of tags to assign to the resource. +* `username` - (Required) The user name to be used to login to the endpoint database. + +## Attributes Reference + +The following attributes are exported: + +* `endpoint_arn` - The Amazon Resource Name (ARN) for the endpoint. + +## Import + +Endpoints can be imported using the `endpoint_id`, e.g. + +``` +$ terraform import aws_dms_endpoint.test test-dms-endpoint-tf +``` diff --git a/website/source/docs/providers/aws/r/dms_replication_instance.html.markdown b/website/source/docs/providers/aws/r/dms_replication_instance.html.markdown new file mode 100644 index 000000000..2c0ac4d79 --- /dev/null +++ b/website/source/docs/providers/aws/r/dms_replication_instance.html.markdown @@ -0,0 +1,84 @@ +--- +layout: "aws" +page_title: "AWS: aws_dms_replication_instance" +sidebar_current: "docs-aws-resource-dms-replication-instance" +description: |- + Provides a DMS (Data Migration Service) replication instance resource. +--- + +# aws\_dms\_replication\_instance + +Provides a DMS (Data Migration Service) replication instance resource. DMS replication instances can be created, updated, deleted, and imported. + +## Example Usage + +``` +# Create a new replication instance +resource "aws_dms_replication_instance" "test" { + allocated_storage = 20 + apply_immediately = true + auto_minor_version_upgrade = true + availability_zone = "us-west-2c" + engine_version = "1.9.0" + kms_key_arn = "arn:aws:kms:us-east-1:123456789012:key/12345678-1234-1234-1234-123456789012" + multi_az = false + preferred_maintenance_window = "sun:10:30-sun:14:30" + publicly_accessible = true + replication_instance_class = "dms.t2.micro" + replication_instance_id = "test-dms-replication-instance-tf" + replication_subnet_group_id = "${aws_dms_replication_subnet_group.test-dms-replication-subnet-group-tf}" + tags { + Name = "test" + } + vpc_security_group_ids = [ + "sg-12345678", + ] +} +``` + +## Argument Reference + +The following arguments are supported: + +* `allocated_storage` - (Optional, Default: 50, Min: 5, Max: 6144) The amount of storage (in gigabytes) to be initially allocated for the replication instance. +* `apply_immediately` - (Optional, Default: false) Indicates whether the changes should be applied immediately or during the next maintenance window. Only used when updating an existing resource. +* `auto_minor_version_upgrade` - (Optional, Default: false) Indicates that minor engine upgrades will be applied automatically to the replication instance during the maintenance window. +* `availability_zone` - (Optional) The EC2 Availability Zone that the replication instance will be created in. +* `engine_version` - (Optional) The engine version number of the replication instance. +* `kms_key_arn` - (Optional) The Amazon Resource Name (ARN) for the KMS key that will be used to encrypt the connection parameters. If you do not specify a value for `kms_key_arn`, then AWS DMS 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. +* `multi_az` - (Optional) Specifies if the replication instance is a multi-az deployment. You cannot set the `availability_zone` parameter if the `multi_az` parameter is set to `true`. +* `preferred_maintenance_window` - (Optional) The weekly time range during which system maintenance can occur, in Universal Coordinated Time (UTC). + + - 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. + - Format: `ddd:hh24:mi-ddd:hh24:mi` + - Valid Days: `mon, tue, wed, thu, fri, sat, sun` + - Constraints: Minimum 30-minute window. + +* `publicly_accessible` - (Optional, Default: false) Specifies the accessibility options for the replication instance. A value of true represents an instance with a public IP address. A value of false represents an instance with a private IP address. +* `replication_instance_class` - (Required) The compute and memory capacity of the replication instance as specified by the replication instance class. Can be one of `dms.t2.micro | dms.t2.small | dms.t2.medium | dms.t2.large | dms.c4.large | dms.c4.xlarge | dms.c4.2xlarge | dms.c4.4xlarge` +* `replication_instance_id` - (Required) The replication instance identifier. This parameter is stored as a lowercase string. + + - Must contain from 1 to 63 alphanumeric characters or hyphens. + - First character must be a letter. + - Cannot end with a hyphen + - Cannot contain two consecutive hyphens. + +* `replication_subnet_group_id` - (Optional) A subnet group to associate with the replication instance. +* `tags` - (Optional) A mapping of tags to assign to the resource. +* `vpc_security_group_ids` - (Optional) A list of VPC security group IDs to be used with the replication instance. The VPC security groups must work with the VPC containing the replication instance. + +## Attributes Reference + +The following attributes are exported: + +* `replication_instance_arn` - The Amazon Resource Name (ARN) of the replication instance. +* `replication_instance_private_ips` - A list of the private IP addresses of the replication instance. +* `replication_instance_public_ips` - A list of the public IP addresses of the replication instance. + +## Import + +Replication instances can be imported using the `replication_instance_id`, e.g. + +``` +$ terraform import aws_dms_replication_instance.test test-dms-replication-instance-tf +``` diff --git a/website/source/docs/providers/aws/r/dms_replication_subnet_group.html.markdown b/website/source/docs/providers/aws/r/dms_replication_subnet_group.html.markdown new file mode 100644 index 000000000..ce437f71f --- /dev/null +++ b/website/source/docs/providers/aws/r/dms_replication_subnet_group.html.markdown @@ -0,0 +1,50 @@ +--- +layout: "aws" +page_title: "AWS: aws_dms_replication_subnet_group" +sidebar_current: "docs-aws-resource-dms-replication-subnet-group" +description: |- + Provides a DMS (Data Migration Service) subnet group resource. +--- + +# aws\_dms\_replication\_subnet\_group + +Provides a DMS (Data Migration Service) replication subnet group resource. DMS replication subnet groups can be created, updated, deleted, and imported. + +## Example Usage + +``` +# Create a new replication subnet group +resource "aws_dms_replication_subnet_group" "test" { + replication_subnet_group_description = "Test replication subnet group" + replication_subnet_group_id = "test-dms-replication-subnet-group-tf" + subnet_ids = [ + "subnet-12345678", + ] +} +``` + +## Argument Reference + +The following arguments are supported: + +* `replication_subnet_group_description` - (Required) The description for the subnet group. +* `replication_subnet_group_id` - (Required) The name for the replication subnet group. This value is stored as a lowercase string. + + - Must contain no more than 255 alphanumeric characters, periods, spaces, underscores, or hyphens. + - Must not be "default". + +* `subnet_ids` - (Required) A list of the EC2 subnet IDs for the subnet group. + +## Attributes Reference + +The following attributes are exported: + +* `vpc_id` - The ID of the VPC the subnet group is in. + +## Import + +Replication subnet groups can be imported using the `replication_subnet_group_id`, e.g. + +``` +$ terraform import aws_dms_replication_subnet_group.test test-dms-replication-subnet-group-tf +``` diff --git a/website/source/docs/providers/aws/r/dms_replication_task.html.markdown b/website/source/docs/providers/aws/r/dms_replication_task.html.markdown new file mode 100644 index 000000000..aae85cefb --- /dev/null +++ b/website/source/docs/providers/aws/r/dms_replication_task.html.markdown @@ -0,0 +1,64 @@ +--- +layout: "aws" +page_title: "AWS: aws_dms_replication_task" +sidebar_current: "docs-aws-resource-dms-replication-task" +description: |- + Provides a DMS (Data Migration Service) replication task resource. +--- + +# aws\_dms\_replication\_task + +Provides a DMS (Data Migration Service) replication task resource. DMS replication tasks can be created, updated, deleted, and imported. + +## Example Usage + +``` +# Create a new replication task +resource "aws_dms_replication_task" "test" { + cdc_start_time = 1484346880 + migration_type = "full-load" + replication_instance_arn = "${aws_dms_replication_instance.test-dms-replication-instance-tf.replication_instance_arn}" + replication_task_id = "test-dms-replication-task-tf" + replication_task_settings = "..." + source_endpoint_arn = "${aws_dms_endpoint.test-dms-source-endpoint-tf.endpoint_arn}" + table_mappings = "{\"rules\":[{\"rule-type\":\"selection\",\"rule-id\":\"1\",\"rule-name\":\"1\",\"object-locator\":{\"schema-name\":\"%\",\"table-name\":\"%\"},\"rule-action\":\"include\"}]}" + tags { + Name = "test" + } + target_endpoint_arn = "${aws_dms_endpoint.test-dms-target-endpoint-tf.endpoint_arn}" +} +``` + +## Argument Reference + +The following arguments are supported: + +* `cdc_start_time` - (Optional) The Unix timestamp integer for the start of the Change Data Capture (CDC) operation. +* `migration_type` - (Required) The migration type. Can be one of `full-load | cdc | full-load-and-cdc`. +* `replication_instance_arn` - (Required) The Amazon Resource Name (ARN) of the replication instance. +* `replication_task_id` - (Required) The replication task identifier. + + - Must contain from 1 to 255 alphanumeric characters or hyphens. + - First character must be a letter. + - Cannot end with a hyphen. + - Cannot contain two consecutive hyphens. + +* `replication_task_settings` - (Optional) An escaped JSON string that contains the task settings. For a complete list of task settings, see [Task Settings for AWS Database Migration Service Tasks](http://docs.aws.amazon.com/dms/latest/userguide/CHAP_Tasks.CustomizingTasks.TaskSettings.html). +* `source_endpoint_arn` - (Required) The Amazon Resource Name (ARN) string that uniquely identifies the source endpoint. +* `table_mappings` - (Required) An escaped JSON string that contains the table mappings. For information on table mapping see [Using Table Mapping with an AWS Database Migration Service Task to Select and Filter Data](http://docs.aws.amazon.com/dms/latest/userguide/CHAP_Tasks.CustomizingTasks.TableMapping.html) +* `tags` - (Optional) A mapping of tags to assign to the resource. +* `target_endpoint_arn` - (Required) The Amazon Resource Name (ARN) string that uniquely identifies the target endpoint. + +## Attributes Reference + +The following attributes are exported: + +* `replication_task_arn` - The Amazon Resource Name (ARN) for the replication task. + +## Import + +Replication tasks can be imported using the `replication_task_id`, e.g. + +``` +$ terraform import aws_dms_replication_task.test test-dms-replication-task-tf +``` diff --git a/website/source/layouts/aws.erb b/website/source/layouts/aws.erb index a62fe376a..0c01dcc97 100644 --- a/website/source/layouts/aws.erb +++ b/website/source/layouts/aws.erb @@ -278,6 +278,33 @@ + > + Database Migration Service + + + > Directory Service Resources