diff --git a/.changelog/92814.txt b/.changelog/92814.txt new file mode 100644 index 000000000000..92b8a45d9a01 --- /dev/null +++ b/.changelog/92814.txt @@ -0,0 +1,3 @@ +```release-note:enhancement +resource/aws_amplify_domain_association: Add `enable_auto_sub_domain` argument +``` \ No newline at end of file diff --git a/internal/service/amplify/domain_association.go b/internal/service/amplify/domain_association.go index ed8f17882e02..5a1636449e47 100644 --- a/internal/service/amplify/domain_association.go +++ b/internal/service/amplify/domain_association.go @@ -22,6 +22,7 @@ func ResourceDomainAssociation() *schema.Resource { ReadWithoutTimeout: resourceDomainAssociationRead, UpdateWithoutTimeout: resourceDomainAssociationUpdate, DeleteWithoutTimeout: resourceDomainAssociationDelete, + Importer: &schema.ResourceImporter{ StateContext: schema.ImportStatePassthroughContext, }, @@ -32,24 +33,25 @@ func ResourceDomainAssociation() *schema.Resource { Required: true, ForceNew: true, }, - "arn": { Type: schema.TypeString, Computed: true, }, - "certificate_verification_dns_record": { Type: schema.TypeString, Computed: true, }, - "domain_name": { Type: schema.TypeString, Required: true, ForceNew: true, ValidateFunc: validation.StringLenBetween(1, 255), }, - + "enable_auto_sub_domain": { + Type: schema.TypeBool, + Optional: true, + Default: false, + }, "sub_domain": { Type: schema.TypeSet, Required: true, @@ -76,7 +78,6 @@ func ResourceDomainAssociation() *schema.Resource { }, }, }, - "wait_for_verification": { Type: schema.TypeBool, Optional: true, @@ -93,14 +94,13 @@ func resourceDomainAssociationCreate(ctx context.Context, d *schema.ResourceData appID := d.Get("app_id").(string) domainName := d.Get("domain_name").(string) id := DomainAssociationCreateResourceID(appID, domainName) - input := &lify.CreateDomainAssociationInput{ - AppId: aws.String(appID), - DomainName: aws.String(domainName), - SubDomainSettings: expandSubDomainSettings(d.Get("sub_domain").(*schema.Set).List()), + AppId: aws.String(appID), + DomainName: aws.String(domainName), + EnableAutoSubDomain: aws.Bool(d.Get("enable_auto_sub_domain").(bool)), + SubDomainSettings: expandSubDomainSettings(d.Get("sub_domain").(*schema.Set).List()), } - log.Printf("[DEBUG] Creating Amplify Domain Association: %s", input) _, err := conn.CreateDomainAssociationWithContext(ctx, input) if err != nil { @@ -110,12 +110,12 @@ func resourceDomainAssociationCreate(ctx context.Context, d *schema.ResourceData d.SetId(id) if _, err := waitDomainAssociationCreated(ctx, conn, appID, domainName); err != nil { - return sdkdiag.AppendErrorf(diags, "waiting for Amplify Domain Association (%s) to create: %s", d.Id(), err) + return sdkdiag.AppendErrorf(diags, "waiting for Amplify Domain Association (%s) create: %s", d.Id(), err) } if d.Get("wait_for_verification").(bool) { if _, err := waitDomainAssociationVerified(ctx, conn, appID, domainName); err != nil { - return sdkdiag.AppendErrorf(diags, "waiting for Amplify Domain Association (%s) to verify: %s", d.Id(), err) + return sdkdiag.AppendErrorf(diags, "waiting for Amplify Domain Association (%s) verification: %s", d.Id(), err) } } @@ -148,6 +148,7 @@ func resourceDomainAssociationRead(ctx context.Context, d *schema.ResourceData, d.Set("arn", domainAssociation.DomainAssociationArn) d.Set("certificate_verification_dns_record", domainAssociation.CertificateVerificationDNSRecord) d.Set("domain_name", domainAssociation.DomainName) + d.Set("enable_auto_sub_domain", domainAssociation.EnableAutoSubDomain) if err := d.Set("sub_domain", flattenSubDomains(domainAssociation.SubDomains)); err != nil { return sdkdiag.AppendErrorf(diags, "setting sub_domain: %s", err) } @@ -165,14 +166,20 @@ func resourceDomainAssociationUpdate(ctx context.Context, d *schema.ResourceData return sdkdiag.AppendErrorf(diags, "parsing Amplify Domain Association ID: %s", err) } - if d.HasChange("sub_domain") { + if d.HasChanges("enable_auto_sub_domain", "sub_domain") { input := &lify.UpdateDomainAssociationInput{ - AppId: aws.String(appID), - DomainName: aws.String(domainName), - SubDomainSettings: expandSubDomainSettings(d.Get("sub_domain").(*schema.Set).List()), + AppId: aws.String(appID), + DomainName: aws.String(domainName), + } + + if d.HasChange("enable_auto_sub_domain") { + input.EnableAutoSubDomain = aws.Bool(d.Get("enable_auto_sub_domain").(bool)) + } + + if d.HasChange("sub_domain") { + input.SubDomainSettings = expandSubDomainSettings(d.Get("sub_domain").(*schema.Set).List()) } - log.Printf("[DEBUG] Creating Amplify Domain Association: %s", input) _, err := conn.UpdateDomainAssociationWithContext(ctx, input) if err != nil { @@ -182,7 +189,7 @@ func resourceDomainAssociationUpdate(ctx context.Context, d *schema.ResourceData if d.Get("wait_for_verification").(bool) { if _, err := waitDomainAssociationVerified(ctx, conn, appID, domainName); err != nil { - return sdkdiag.AppendErrorf(diags, "waiting for Amplify Domain Association (%s) to verify: %s", d.Id(), err) + return sdkdiag.AppendErrorf(diags, "waiting for Amplify Domain Association (%s) verification: %s", d.Id(), err) } } diff --git a/internal/service/amplify/domain_association_test.go b/internal/service/amplify/domain_association_test.go index 13e0a1f40403..cd37763f89c9 100644 --- a/internal/service/amplify/domain_association_test.go +++ b/internal/service/amplify/domain_association_test.go @@ -36,11 +36,12 @@ func testAccDomainAssociation_basic(t *testing.T) { CheckDestroy: testAccCheckDomainAssociationDestroy(ctx), Steps: []resource.TestStep{ { - Config: testAccDomainAssociationConfig_basic(rName, domainName, false), + Config: testAccDomainAssociationConfig_basic(rName, domainName, false, false), Check: resource.ComposeTestCheckFunc( testAccCheckDomainAssociationExists(ctx, resourceName, &domain), acctest.MatchResourceAttrRegionalARN(resourceName, "arn", "amplify", regexp.MustCompile(`apps/.+/domains/.+`)), resource.TestCheckResourceAttr(resourceName, "domain_name", domainName), + resource.TestCheckResourceAttr(resourceName, "enable_auto_sub_domain", "false"), resource.TestCheckResourceAttr(resourceName, "sub_domain.#", "1"), resource.TestCheckTypeSetElemNestedAttrs(resourceName, "sub_domain.*", map[string]string{ "branch_name": rName, @@ -78,7 +79,7 @@ func testAccDomainAssociation_disappears(t *testing.T) { CheckDestroy: testAccCheckDomainAssociationDestroy(ctx), Steps: []resource.TestStep{ { - Config: testAccDomainAssociationConfig_basic(rName, domainName, false), + Config: testAccDomainAssociationConfig_basic(rName, domainName, false, false), Check: resource.ComposeTestCheckFunc( testAccCheckDomainAssociationExists(ctx, resourceName, &domain), acctest.CheckResourceDisappears(ctx, acctest.Provider, tfamplify.ResourceDomainAssociation(), resourceName), @@ -108,11 +109,12 @@ func testAccDomainAssociation_update(t *testing.T) { CheckDestroy: testAccCheckDomainAssociationDestroy(ctx), Steps: []resource.TestStep{ { - Config: testAccDomainAssociationConfig_basic(rName, domainName, true), + Config: testAccDomainAssociationConfig_basic(rName, domainName, false, true), Check: resource.ComposeTestCheckFunc( testAccCheckDomainAssociationExists(ctx, resourceName, &domain), acctest.MatchResourceAttrRegionalARN(resourceName, "arn", "amplify", regexp.MustCompile(`apps/.+/domains/.+`)), resource.TestCheckResourceAttr(resourceName, "domain_name", domainName), + resource.TestCheckResourceAttr(resourceName, "enable_auto_sub_domain", "false"), resource.TestCheckResourceAttr(resourceName, "sub_domain.#", "1"), resource.TestCheckTypeSetElemNestedAttrs(resourceName, "sub_domain.*", map[string]string{ "branch_name": rName, @@ -128,11 +130,12 @@ func testAccDomainAssociation_update(t *testing.T) { ImportStateVerifyIgnore: []string{"wait_for_verification"}, }, { - Config: testAccDomainAssociationConfig_updated(rName, domainName, true), + Config: testAccDomainAssociationConfig_updated(rName, domainName, true, true), Check: resource.ComposeTestCheckFunc( testAccCheckDomainAssociationExists(ctx, resourceName, &domain), acctest.MatchResourceAttrRegionalARN(resourceName, "arn", "amplify", regexp.MustCompile(`apps/.+/domains/.+`)), resource.TestCheckResourceAttr(resourceName, "domain_name", domainName), + resource.TestCheckResourceAttr(resourceName, "enable_auto_sub_domain", "true"), resource.TestCheckResourceAttr(resourceName, "sub_domain.#", "2"), resource.TestCheckTypeSetElemNestedAttrs(resourceName, "sub_domain.*", map[string]string{ "branch_name": rName, @@ -212,7 +215,7 @@ func testAccCheckDomainAssociationDestroy(ctx context.Context) resource.TestChec } } -func testAccDomainAssociationConfig_basic(rName, domainName string, waitForVerification bool) string { +func testAccDomainAssociationConfig_basic(rName, domainName string, enableAutoSubDomain bool, waitForVerification bool) string { return fmt.Sprintf(` resource "aws_amplify_app" "test" { name = %[1]q @@ -232,12 +235,13 @@ resource "aws_amplify_domain_association" "test" { prefix = "" } - wait_for_verification = %[3]t + enable_auto_sub_domain = %[3]t + wait_for_verification = %[4]t } -`, rName, domainName, waitForVerification) +`, rName, domainName, enableAutoSubDomain, waitForVerification) } -func testAccDomainAssociationConfig_updated(rName, domainName string, waitForVerification bool) string { +func testAccDomainAssociationConfig_updated(rName, domainName string, enableAutoSubDomain bool, waitForVerification bool) string { return fmt.Sprintf(` resource "aws_amplify_app" "test" { name = %[1]q @@ -267,7 +271,8 @@ resource "aws_amplify_domain_association" "test" { prefix = "www" } - wait_for_verification = %[3]t + enable_auto_sub_domain = %[3]t + wait_for_verification = %[4]t } -`, rName, domainName, waitForVerification) +`, rName, domainName, enableAutoSubDomain, waitForVerification) } diff --git a/website/docs/r/amplify_domain_association.html.markdown b/website/docs/r/amplify_domain_association.html.markdown index 24057309b3e7..9a982a2419d4 100644 --- a/website/docs/r/amplify_domain_association.html.markdown +++ b/website/docs/r/amplify_domain_association.html.markdown @@ -53,6 +53,7 @@ The following arguments are supported: * `app_id` - (Required) Unique ID for an Amplify app. * `domain_name` - (Required) Domain name for the domain association. +* `enable_auto_sub_domain` - (Optional) Enables the automated creation of subdomains for branches. * `sub_domain` - (Required) Setting for the subdomain. Documented below. * `wait_for_verification` - (Optional) If enabled, the resource will wait for the domain association status to change to `PENDING_DEPLOYMENT` or `AVAILABLE`. Setting this to `false` will skip the process. Default: `true`.