1 // Code generated by smithy-go-codegen DO NOT EDIT.
2 3 package route53
4 5 import (
6 "context"
7 "fmt"
8 awsmiddleware "github.com/aws/aws-sdk-go-v2/aws/middleware"
9 "github.com/aws/aws-sdk-go-v2/service/route53/types"
10 "github.com/aws/smithy-go/middleware"
11 smithyhttp "github.com/aws/smithy-go/transport/http"
12 )
13 14 // Creates a delegation set (a group of four name servers) that can be reused by
15 // multiple hosted zones that were created by the same Amazon Web Services account.
16 //
17 // You can also create a reusable delegation set that uses the four name servers
18 // that are associated with an existing hosted zone. Specify the hosted zone ID in
19 // the CreateReusableDelegationSet request.
20 //
21 // You can't associate a reusable delegation set with a private hosted zone.
22 //
23 // For information about using a reusable delegation set to configure white label
24 // name servers, see [Configuring White Label Name Servers].
25 //
26 // The process for migrating existing hosted zones to use a reusable delegation
27 // set is comparable to the process for configuring white label name servers. You
28 // need to perform the following steps:
29 //
30 // - Create a reusable delegation set.
31 //
32 // - Recreate hosted zones, and reduce the TTL to 60 seconds or less.
33 //
34 // - Recreate resource record sets in the new hosted zones.
35 //
36 // - Change the registrar's name servers to use the name servers for the new
37 // hosted zones.
38 //
39 // - Monitor traffic for the website or application.
40 //
41 // - Change TTLs back to their original values.
42 //
43 // If you want to migrate existing hosted zones to use a reusable delegation set,
44 // the existing hosted zones can't use any of the name servers that are assigned to
45 // the reusable delegation set. If one or more hosted zones do use one or more name
46 // servers that are assigned to the reusable delegation set, you can do one of the
47 // following:
48 //
49 // - For small numbers of hosted zones—up to a few hundred—it's relatively easy
50 // to create reusable delegation sets until you get one that has four name servers
51 // that don't overlap with any of the name servers in your hosted zones.
52 //
53 // - For larger numbers of hosted zones, the easiest solution is to use more
54 // than one reusable delegation set.
55 //
56 // - For larger numbers of hosted zones, you can also migrate hosted zones that
57 // have overlapping name servers to hosted zones that don't have overlapping name
58 // servers, then migrate the hosted zones again to use the reusable delegation set.
59 //
60 // [Configuring White Label Name Servers]: https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/white-label-name-servers.html
61 func (c *Client) CreateReusableDelegationSet(ctx context.Context, params *CreateReusableDelegationSetInput, optFns ...func(*Options)) (*CreateReusableDelegationSetOutput, error) {
62 if params == nil {
63 params = &CreateReusableDelegationSetInput{}
64 }
65 66 result, metadata, err := c.invokeOperation(ctx, "CreateReusableDelegationSet", params, optFns, c.addOperationCreateReusableDelegationSetMiddlewares)
67 if err != nil {
68 return nil, err
69 }
70 71 out := result.(*CreateReusableDelegationSetOutput)
72 out.ResultMetadata = metadata
73 return out, nil
74 }
75 76 type CreateReusableDelegationSetInput struct {
77 78 // A unique string that identifies the request, and that allows you to retry
79 // failed CreateReusableDelegationSet requests without the risk of executing the
80 // operation twice. You must use a unique CallerReference string every time you
81 // submit a CreateReusableDelegationSet request. CallerReference can be any unique
82 // string, for example a date/time stamp.
83 //
84 // This member is required.
85 CallerReference *string
86 87 // If you want to mark the delegation set for an existing hosted zone as reusable,
88 // the ID for that hosted zone.
89 HostedZoneId *string
90 91 noSmithyDocumentSerde
92 }
93 94 type CreateReusableDelegationSetOutput struct {
95 96 // A complex type that contains name server information.
97 //
98 // This member is required.
99 DelegationSet *types.DelegationSet
100 101 // The unique URL representing the new reusable delegation set.
102 //
103 // This member is required.
104 Location *string
105 106 // Metadata pertaining to the operation's result.
107 ResultMetadata middleware.Metadata
108 109 noSmithyDocumentSerde
110 }
111 112 func (c *Client) addOperationCreateReusableDelegationSetMiddlewares(stack *middleware.Stack, options Options) (err error) {
113 if err := stack.Serialize.Add(&setOperationInputMiddleware{}, middleware.After); err != nil {
114 return err
115 }
116 err = stack.Serialize.Add(&awsRestxml_serializeOpCreateReusableDelegationSet{}, middleware.After)
117 if err != nil {
118 return err
119 }
120 err = stack.Deserialize.Add(&awsRestxml_deserializeOpCreateReusableDelegationSet{}, middleware.After)
121 if err != nil {
122 return err
123 }
124 if err := addProtocolFinalizerMiddlewares(stack, options, "CreateReusableDelegationSet"); err != nil {
125 return fmt.Errorf("add protocol finalizers: %v", err)
126 }
127 128 if err = addlegacyEndpointContextSetter(stack, options); err != nil {
129 return err
130 }
131 if err = addSetLoggerMiddleware(stack, options); err != nil {
132 return err
133 }
134 if err = addClientRequestID(stack); err != nil {
135 return err
136 }
137 if err = addComputeContentLength(stack); err != nil {
138 return err
139 }
140 if err = addResolveEndpointMiddleware(stack, options); err != nil {
141 return err
142 }
143 if err = addComputePayloadSHA256(stack); err != nil {
144 return err
145 }
146 if err = addRetry(stack, options); err != nil {
147 return err
148 }
149 if err = addRawResponseToMetadata(stack); err != nil {
150 return err
151 }
152 if err = addRecordResponseTiming(stack); err != nil {
153 return err
154 }
155 if err = addSpanRetryLoop(stack, options); err != nil {
156 return err
157 }
158 if err = addClientUserAgent(stack, options); err != nil {
159 return err
160 }
161 if err = smithyhttp.AddErrorCloseResponseBodyMiddleware(stack); err != nil {
162 return err
163 }
164 if err = smithyhttp.AddCloseResponseBodyMiddleware(stack); err != nil {
165 return err
166 }
167 if err = addSetLegacyContextSigningOptionsMiddleware(stack); err != nil {
168 return err
169 }
170 if err = addTimeOffsetBuild(stack, c); err != nil {
171 return err
172 }
173 if err = addUserAgentRetryMode(stack, options); err != nil {
174 return err
175 }
176 if err = addCredentialSource(stack, options); err != nil {
177 return err
178 }
179 if err = addOpCreateReusableDelegationSetValidationMiddleware(stack); err != nil {
180 return err
181 }
182 if err = stack.Initialize.Add(newServiceMetadataMiddleware_opCreateReusableDelegationSet(options.Region), middleware.Before); err != nil {
183 return err
184 }
185 if err = addRecursionDetection(stack); err != nil {
186 return err
187 }
188 if err = addRequestIDRetrieverMiddleware(stack); err != nil {
189 return err
190 }
191 if err = addResponseErrorMiddleware(stack); err != nil {
192 return err
193 }
194 if err = addSanitizeURLMiddleware(stack); err != nil {
195 return err
196 }
197 if err = addRequestResponseLogging(stack, options); err != nil {
198 return err
199 }
200 if err = addDisableHTTPSMiddleware(stack, options); err != nil {
201 return err
202 }
203 if err = addInterceptBeforeRetryLoop(stack, options); err != nil {
204 return err
205 }
206 if err = addInterceptAttempt(stack, options); err != nil {
207 return err
208 }
209 if err = addInterceptors(stack, options); err != nil {
210 return err
211 }
212 return nil
213 }
214 215 func newServiceMetadataMiddleware_opCreateReusableDelegationSet(region string) *awsmiddleware.RegisterServiceMetadata {
216 return &awsmiddleware.RegisterServiceMetadata{
217 Region: region,
218 ServiceID: ServiceID,
219 OperationName: "CreateReusableDelegationSet",
220 }
221 }
222