Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

API Gateway REST API Race Conditions #26051

Merged

Conversation

AdamTylerLynch
Copy link
Collaborator

@AdamTylerLynch AdamTylerLynch commented Jul 29, 2022

Community Note

  • Please vote on this pull request by adding a 👍 reaction to the original pull request comment to help the community and maintainers prioritize this request
  • Please do not leave "+1" or other comments that do not add relevant new information or questions, they generate extra noise for pull request followers and do not help prioritize the request

This PR is to resolve a subtle race condition that occurs when a user is importing (create or update) OpenAPI Specifications and has one or more Private Endpoints associated with the API Gateway. The private endpoints can be defined as Terraform configuration or in the x-amazon-apigateway-endpoint-configuration extensions of OpenAPI.

Terraform by default uses the put_rest_api_mode of overwrite when importing the OpenAPI Specification (create or update). This causes the AWS control plane to delete existing literal properties if they are not explicitly set in the OpenAPI definition. Terraform attempts to compensate for this by creating (or deleting and then creating) impacted properties (Impacted properties: ApiKeySourceType, BinaryMediaTypes, Description, EndpointConfiguration, MinimumCompressionSize, Name, Policy).

Unfortunately, this deletion by the importing of an OpenAPI specification, and then immediate recreation can introduce a race condition for private endpoints and their associated Route53 records.

Changes in this PR:

  • Reorder all attributes alphabetically.
  • Instead of deleting and then recreating endpoints, compare them and only delete unused ones and only create new ones (manual merge).
  • Added virtual attribute put_rest_api_mode that will specify the mode of operations when importing an OpenAPI specification (create or update), this can be set to merge to prevent the OpenAPI spec from deleting existing endpoints which has been the root cause of a race condition.

Closes #25640

For Community Discussion

Currently debating the need for a CustomDiff to suppress the new virtual attribute put_rest_api_mode as it defaults too overwrite. As written, when a user updates to this version of the provider and operates a plan or apply, Terraform will report a difference even though no HCL changes have been made:

Terraform will perform the following actions:

  # aws_api_gateway_rest_api.test will be updated in-place
  ~ resource "aws_api_gateway_rest_api" "test" {
        id                           = "dh48ute7r7"
        name                         = "tf-test-api-gateway-foo"
      + put_rest_api_mode            = "overwrite"
        tags                         = {}
        # (10 unchanged attributes hidden)

        # (1 unchanged block hidden)
    }
  • Should the CustomDiff suppress the change in state even though the user made no changes to the HCL?

Decision

  • Decided to suppress the state diff mentioned above as to not impact provider upgrades.

Output from acceptance testing: TBD

$ make testacc TESTARGS='-run=TestAccAPIGatewayRestAPI' PKG=apigateway ACCTEST_PARALLELISM=5 
==> Checking that code complies with gofmt requirements...
TF_ACC=1 go test ./internal/service/apigateway/... -v -count 1 -parallel 5  -run=TestAccAPIGatewayRestAPI -timeout 180m
=== RUN   TestAccAPIGatewayRestAPIDataSource_basic
=== PAUSE TestAccAPIGatewayRestAPIDataSource_basic
=== RUN   TestAccAPIGatewayRestAPIDataSource_Endpoint_vpcEndpointIDs
=== PAUSE TestAccAPIGatewayRestAPIDataSource_Endpoint_vpcEndpointIDs
=== RUN   TestAccAPIGatewayRestAPIPolicy_basic
=== PAUSE TestAccAPIGatewayRestAPIPolicy_basic
=== RUN   TestAccAPIGatewayRestAPIPolicy_disappears
=== PAUSE TestAccAPIGatewayRestAPIPolicy_disappears
=== RUN   TestAccAPIGatewayRestAPIPolicy_Disappears_restAPI
=== PAUSE TestAccAPIGatewayRestAPIPolicy_Disappears_restAPI
=== RUN   TestAccAPIGatewayRestAPI_basic
=== PAUSE TestAccAPIGatewayRestAPI_basic
=== RUN   TestAccAPIGatewayRestAPI_tags
=== PAUSE TestAccAPIGatewayRestAPI_tags
=== RUN   TestAccAPIGatewayRestAPI_disappears
=== PAUSE TestAccAPIGatewayRestAPI_disappears
=== RUN   TestAccAPIGatewayRestAPI_endpoint
=== PAUSE TestAccAPIGatewayRestAPI_endpoint
=== RUN   TestAccAPIGatewayRestAPI_Endpoint_private
=== PAUSE TestAccAPIGatewayRestAPI_Endpoint_private
=== RUN   TestAccAPIGatewayRestAPI_apiKeySource
=== PAUSE TestAccAPIGatewayRestAPI_apiKeySource
=== RUN   TestAccAPIGatewayRestAPI_APIKeySource_overrideBody
=== PAUSE TestAccAPIGatewayRestAPI_APIKeySource_overrideBody
=== RUN   TestAccAPIGatewayRestAPI_APIKeySource_setByBody
=== PAUSE TestAccAPIGatewayRestAPI_APIKeySource_setByBody
=== RUN   TestAccAPIGatewayRestAPI_binaryMediaTypes
=== PAUSE TestAccAPIGatewayRestAPI_binaryMediaTypes
=== RUN   TestAccAPIGatewayRestAPI_BinaryMediaTypes_overrideBody
=== PAUSE TestAccAPIGatewayRestAPI_BinaryMediaTypes_overrideBody
=== RUN   TestAccAPIGatewayRestAPI_BinaryMediaTypes_setByBody
=== PAUSE TestAccAPIGatewayRestAPI_BinaryMediaTypes_setByBody
=== RUN   TestAccAPIGatewayRestAPI_body
=== PAUSE TestAccAPIGatewayRestAPI_body
=== RUN   TestAccAPIGatewayRestAPI_description
=== PAUSE TestAccAPIGatewayRestAPI_description
=== RUN   TestAccAPIGatewayRestAPI_Description_overrideBody
=== PAUSE TestAccAPIGatewayRestAPI_Description_overrideBody
=== RUN   TestAccAPIGatewayRestAPI_Description_setByBody
=== PAUSE TestAccAPIGatewayRestAPI_Description_setByBody
=== RUN   TestAccAPIGatewayRestAPI_disableExecuteAPIEndpoint
=== PAUSE TestAccAPIGatewayRestAPI_disableExecuteAPIEndpoint
=== RUN   TestAccAPIGatewayRestAPI_DisableExecuteAPIEndpoint_overrideBody
=== PAUSE TestAccAPIGatewayRestAPI_DisableExecuteAPIEndpoint_overrideBody
=== RUN   TestAccAPIGatewayRestAPI_DisableExecuteAPIEndpoint_setByBody
=== PAUSE TestAccAPIGatewayRestAPI_DisableExecuteAPIEndpoint_setByBody
=== RUN   TestAccAPIGatewayRestAPI_Endpoint_vpcEndpointIDs
=== PAUSE TestAccAPIGatewayRestAPI_Endpoint_vpcEndpointIDs
=== RUN   TestAccAPIGatewayRestAPI_EndpointVPCEndpointIDs_overrideBody
=== PAUSE TestAccAPIGatewayRestAPI_EndpointVPCEndpointIDs_overrideBody
=== RUN   TestAccAPIGatewayRestAPI_EndpointVPCEndpointIDs_mergeBody
=== PAUSE TestAccAPIGatewayRestAPI_EndpointVPCEndpointIDs_mergeBody
=== RUN   TestAccAPIGatewayRestAPI_EndpointVPCEndpointIDs_overrideToMergeBody
=== PAUSE TestAccAPIGatewayRestAPI_EndpointVPCEndpointIDs_overrideToMergeBody
=== RUN   TestAccAPIGatewayRestAPI_EndpointVPCEndpointIDs_setByBody
=== PAUSE TestAccAPIGatewayRestAPI_EndpointVPCEndpointIDs_setByBody
=== RUN   TestAccAPIGatewayRestAPI_minimumCompressionSize
=== PAUSE TestAccAPIGatewayRestAPI_minimumCompressionSize
=== RUN   TestAccAPIGatewayRestAPI_MinimumCompressionSize_overrideBody
=== PAUSE TestAccAPIGatewayRestAPI_MinimumCompressionSize_overrideBody
=== RUN   TestAccAPIGatewayRestAPI_MinimumCompressionSize_setByBody
=== PAUSE TestAccAPIGatewayRestAPI_MinimumCompressionSize_setByBody
=== RUN   TestAccAPIGatewayRestAPI_Name_overrideBody
=== PAUSE TestAccAPIGatewayRestAPI_Name_overrideBody
=== RUN   TestAccAPIGatewayRestAPI_parameters
=== PAUSE TestAccAPIGatewayRestAPI_parameters
=== RUN   TestAccAPIGatewayRestAPI_Policy_basic
=== PAUSE TestAccAPIGatewayRestAPI_Policy_basic
=== RUN   TestAccAPIGatewayRestAPI_Policy_order
=== PAUSE TestAccAPIGatewayRestAPI_Policy_order
=== RUN   TestAccAPIGatewayRestAPI_Policy_overrideBody
=== PAUSE TestAccAPIGatewayRestAPI_Policy_overrideBody
=== RUN   TestAccAPIGatewayRestAPI_Policy_setByBody
=== PAUSE TestAccAPIGatewayRestAPI_Policy_setByBody
=== CONT  TestAccAPIGatewayRestAPIDataSource_basic
=== CONT  TestAccAPIGatewayRestAPI_Description_setByBody
=== CONT  TestAccAPIGatewayRestAPI_minimumCompressionSize
=== CONT  TestAccAPIGatewayRestAPI_BinaryMediaTypes_setByBody
=== CONT  TestAccAPIGatewayRestAPI_apiKeySource
--- PASS: TestAccAPIGatewayRestAPIDataSource_basic (21.88s)
=== CONT  TestAccAPIGatewayRestAPI_BinaryMediaTypes_overrideBody
--- PASS: TestAccAPIGatewayRestAPI_minimumCompressionSize (54.62s)
=== CONT  TestAccAPIGatewayRestAPI_binaryMediaTypes
--- PASS: TestAccAPIGatewayRestAPI_BinaryMediaTypes_overrideBody (66.26s)
=== CONT  TestAccAPIGatewayRestAPI_APIKeySource_setByBody
--- PASS: TestAccAPIGatewayRestAPI_APIKeySource_setByBody (33.37s)
=== CONT  TestAccAPIGatewayRestAPI_APIKeySource_overrideBody
--- PASS: TestAccAPIGatewayRestAPI_BinaryMediaTypes_setByBody (121.73s)
=== CONT  TestAccAPIGatewayRestAPI_basic
--- PASS: TestAccAPIGatewayRestAPI_APIKeySource_overrideBody (48.50s)
=== CONT  TestAccAPIGatewayRestAPI_Endpoint_private
--- PASS: TestAccAPIGatewayRestAPI_Endpoint_private (20.32s)
=== CONT  TestAccAPIGatewayRestAPI_endpoint
--- PASS: TestAccAPIGatewayRestAPI_Description_setByBody (212.55s)
=== CONT  TestAccAPIGatewayRestAPI_disappears
--- PASS: TestAccAPIGatewayRestAPI_disappears (58.74s)
=== CONT  TestAccAPIGatewayRestAPI_tags
--- PASS: TestAccAPIGatewayRestAPI_binaryMediaTypes (229.13s)
=== CONT  TestAccAPIGatewayRestAPIPolicy_disappears
--- PASS: TestAccAPIGatewayRestAPIPolicy_disappears (28.71s)
=== CONT  TestAccAPIGatewayRestAPIPolicy_Disappears_restAPI
=== CONT  TestAccAPIGatewayRestAPI_EndpointVPCEndpointIDs_overrideBody
--- PASS: TestAccAPIGatewayRestAPIPolicy_Disappears_restAPI (35.99s)
--- PASS: TestAccAPIGatewayRestAPI_tags (157.13s)
=== CONT  TestAccAPIGatewayRestAPI_EndpointVPCEndpointIDs_setByBody
--- PASS: TestAccAPIGatewayRestAPI_apiKeySource (488.48s)
=== CONT  TestAccAPIGatewayRestAPI_EndpointVPCEndpointIDs_overrideToMergeBody
--- PASS: TestAccAPIGatewayRestAPI_basic (428.28s)
=== CONT  TestAccAPIGatewayRestAPI_EndpointVPCEndpointIDs_mergeBody
--- PASS: TestAccAPIGatewayRestAPI_EndpointVPCEndpointIDs_overrideBody (218.49s)
=== CONT  TestAccAPIGatewayRestAPI_description
--- PASS: TestAccAPIGatewayRestAPI_EndpointVPCEndpointIDs_setByBody (160.97s)
=== CONT  TestAccAPIGatewayRestAPI_Description_overrideBody
--- PASS: TestAccAPIGatewayRestAPI_description (33.42s)
=== CONT  TestAccAPIGatewayRestAPI_body
--- PASS: TestAccAPIGatewayRestAPI_body (35.87s)
=== CONT  TestAccAPIGatewayRestAPI_DisableExecuteAPIEndpoint_setByBody
--- PASS: TestAccAPIGatewayRestAPI_DisableExecuteAPIEndpoint_setByBody (19.94s)
=== CONT  TestAccAPIGatewayRestAPI_Policy_basic
--- PASS: TestAccAPIGatewayRestAPI_Policy_basic (33.03s)
=== CONT  TestAccAPIGatewayRestAPI_Endpoint_vpcEndpointIDs
--- PASS: TestAccAPIGatewayRestAPI_EndpointVPCEndpointIDs_overrideToMergeBody (252.85s)
=== CONT  TestAccAPIGatewayRestAPI_Policy_setByBody
--- PASS: TestAccAPIGatewayRestAPI_Description_overrideBody (157.99s)
=== CONT  TestAccAPIGatewayRestAPI_Policy_overrideBody
=== CONT  TestAccAPIGatewayRestAPI_Name_overrideBody
--- PASS: TestAccAPIGatewayRestAPI_Policy_setByBody (20.40s)
--- PASS: TestAccAPIGatewayRestAPI_Policy_overrideBody (49.82s)
=== CONT  TestAccAPIGatewayRestAPI_parameters
--- PASS: TestAccAPIGatewayRestAPI_EndpointVPCEndpointIDs_mergeBody (258.57s)
=== CONT  TestAccAPIGatewayRestAPIPolicy_basic
--- PASS: TestAccAPIGatewayRestAPI_Name_overrideBody (67.96s)
=== CONT  TestAccAPIGatewayRestAPI_DisableExecuteAPIEndpoint_overrideBody
--- PASS: TestAccAPIGatewayRestAPI_endpoint (639.45s)
=== CONT  TestAccAPIGatewayRestAPIDataSource_Endpoint_vpcEndpointIDs
--- PASS: TestAccAPIGatewayRestAPI_DisableExecuteAPIEndpoint_overrideBody (61.60s)
=== CONT  TestAccAPIGatewayRestAPI_Policy_order
--- PASS: TestAccAPIGatewayRestAPI_parameters (116.64s)
=== CONT  TestAccAPIGatewayRestAPI_MinimumCompressionSize_setByBody
--- PASS: TestAccAPIGatewayRestAPI_MinimumCompressionSize_setByBody (45.88s)
=== CONT  TestAccAPIGatewayRestAPI_MinimumCompressionSize_overrideBody
--- PASS: TestAccAPIGatewayRestAPIDataSource_Endpoint_vpcEndpointIDs (170.04s)
=== CONT  TestAccAPIGatewayRestAPI_disableExecuteAPIEndpoint
--- PASS: TestAccAPIGatewayRestAPI_MinimumCompressionSize_overrideBody (48.14s)
--- PASS: TestAccAPIGatewayRestAPIPolicy_basic (221.36s)
--- PASS: TestAccAPIGatewayRestAPI_disableExecuteAPIEndpoint (46.93s)
--- PASS: TestAccAPIGatewayRestAPI_Endpoint_vpcEndpointIDs (362.24s)
--- PASS: TestAccAPIGatewayRestAPI_Policy_order (196.43s)
PASS
ok  	github.com/hashicorp/terraform-provider-aws/internal/service/apigateway	1091.549s

...

@github-actions github-actions bot added needs-triage Waiting for first response or review from a maintainer. documentation Introduces or discusses updates to documentation. service/apigateway Issues and PRs that pertain to the apigateway service. tests PRs: expanded test coverage. Issues: expanded coverage, enhancements to test infrastructure. size/XL Managed by automation to categorize the size of a PR. labels Jul 29, 2022
@justinretzolk justinretzolk removed the needs-triage Waiting for first response or review from a maintainer. label Jul 29, 2022
@AdamTylerLynch AdamTylerLynch changed the title [WIP] API Gateway REST API Race Conditions API Gateway REST API Race Conditions Jul 29, 2022
Copy link
Collaborator

@drewmullen drewmullen left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Couple of questions and comments - overall looks good

internal/service/apigateway/rest_api.go Outdated Show resolved Hide resolved
internal/service/apigateway/rest_api.go Show resolved Hide resolved
@ewbankkit ewbankkit added the bug Addresses a defect in current functionality. label Aug 1, 2022
Copy link
Contributor

@ewbankkit ewbankkit left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM 🚀.

% make testacc TESTARGS='-run=TestAccAPIGatewayRestAPI' PKG=apigateway ACCTEST_PARALLELISM=3
==> Checking that code complies with gofmt requirements...
TF_ACC=1 go test ./internal/service/apigateway/... -v -count 1 -parallel 3  -run=TestAccAPIGatewayRestAPI -timeout 180m
=== RUN   TestAccAPIGatewayRestAPIDataSource_basic
=== PAUSE TestAccAPIGatewayRestAPIDataSource_basic
=== RUN   TestAccAPIGatewayRestAPIDataSource_Endpoint_vpcEndpointIDs
=== PAUSE TestAccAPIGatewayRestAPIDataSource_Endpoint_vpcEndpointIDs
=== RUN   TestAccAPIGatewayRestAPIPolicy_basic
=== PAUSE TestAccAPIGatewayRestAPIPolicy_basic
=== RUN   TestAccAPIGatewayRestAPIPolicy_disappears
=== PAUSE TestAccAPIGatewayRestAPIPolicy_disappears
=== RUN   TestAccAPIGatewayRestAPIPolicy_Disappears_restAPI
=== PAUSE TestAccAPIGatewayRestAPIPolicy_Disappears_restAPI
=== RUN   TestAccAPIGatewayRestAPI_basic
=== PAUSE TestAccAPIGatewayRestAPI_basic
=== RUN   TestAccAPIGatewayRestAPI_tags
=== PAUSE TestAccAPIGatewayRestAPI_tags
=== RUN   TestAccAPIGatewayRestAPI_disappears
=== PAUSE TestAccAPIGatewayRestAPI_disappears
=== RUN   TestAccAPIGatewayRestAPI_endpoint
=== PAUSE TestAccAPIGatewayRestAPI_endpoint
=== RUN   TestAccAPIGatewayRestAPI_Endpoint_private
=== PAUSE TestAccAPIGatewayRestAPI_Endpoint_private
=== RUN   TestAccAPIGatewayRestAPI_apiKeySource
=== PAUSE TestAccAPIGatewayRestAPI_apiKeySource
=== RUN   TestAccAPIGatewayRestAPI_APIKeySource_overrideBody
=== PAUSE TestAccAPIGatewayRestAPI_APIKeySource_overrideBody
=== RUN   TestAccAPIGatewayRestAPI_APIKeySource_setByBody
=== PAUSE TestAccAPIGatewayRestAPI_APIKeySource_setByBody
=== RUN   TestAccAPIGatewayRestAPI_binaryMediaTypes
=== PAUSE TestAccAPIGatewayRestAPI_binaryMediaTypes
=== RUN   TestAccAPIGatewayRestAPI_BinaryMediaTypes_overrideBody
=== PAUSE TestAccAPIGatewayRestAPI_BinaryMediaTypes_overrideBody
=== RUN   TestAccAPIGatewayRestAPI_BinaryMediaTypes_setByBody
=== PAUSE TestAccAPIGatewayRestAPI_BinaryMediaTypes_setByBody
=== RUN   TestAccAPIGatewayRestAPI_body
=== PAUSE TestAccAPIGatewayRestAPI_body
=== RUN   TestAccAPIGatewayRestAPI_description
=== PAUSE TestAccAPIGatewayRestAPI_description
=== RUN   TestAccAPIGatewayRestAPI_Description_overrideBody
=== PAUSE TestAccAPIGatewayRestAPI_Description_overrideBody
=== RUN   TestAccAPIGatewayRestAPI_Description_setByBody
=== PAUSE TestAccAPIGatewayRestAPI_Description_setByBody
=== RUN   TestAccAPIGatewayRestAPI_disableExecuteAPIEndpoint
=== PAUSE TestAccAPIGatewayRestAPI_disableExecuteAPIEndpoint
=== RUN   TestAccAPIGatewayRestAPI_DisableExecuteAPIEndpoint_overrideBody
=== PAUSE TestAccAPIGatewayRestAPI_DisableExecuteAPIEndpoint_overrideBody
=== RUN   TestAccAPIGatewayRestAPI_DisableExecuteAPIEndpoint_setByBody
=== PAUSE TestAccAPIGatewayRestAPI_DisableExecuteAPIEndpoint_setByBody
=== RUN   TestAccAPIGatewayRestAPI_Endpoint_vpcEndpointIDs
=== PAUSE TestAccAPIGatewayRestAPI_Endpoint_vpcEndpointIDs
=== RUN   TestAccAPIGatewayRestAPI_EndpointVPCEndpointIDs_overrideBody
=== PAUSE TestAccAPIGatewayRestAPI_EndpointVPCEndpointIDs_overrideBody
=== RUN   TestAccAPIGatewayRestAPI_EndpointVPCEndpointIDs_mergeBody
=== PAUSE TestAccAPIGatewayRestAPI_EndpointVPCEndpointIDs_mergeBody
=== RUN   TestAccAPIGatewayRestAPI_EndpointVPCEndpointIDs_overrideToMergeBody
=== PAUSE TestAccAPIGatewayRestAPI_EndpointVPCEndpointIDs_overrideToMergeBody
=== RUN   TestAccAPIGatewayRestAPI_EndpointVPCEndpointIDs_setByBody
=== PAUSE TestAccAPIGatewayRestAPI_EndpointVPCEndpointIDs_setByBody
=== RUN   TestAccAPIGatewayRestAPI_minimumCompressionSize
=== PAUSE TestAccAPIGatewayRestAPI_minimumCompressionSize
=== RUN   TestAccAPIGatewayRestAPI_MinimumCompressionSize_overrideBody
=== PAUSE TestAccAPIGatewayRestAPI_MinimumCompressionSize_overrideBody
=== RUN   TestAccAPIGatewayRestAPI_MinimumCompressionSize_setByBody
=== PAUSE TestAccAPIGatewayRestAPI_MinimumCompressionSize_setByBody
=== RUN   TestAccAPIGatewayRestAPI_Name_overrideBody
=== PAUSE TestAccAPIGatewayRestAPI_Name_overrideBody
=== RUN   TestAccAPIGatewayRestAPI_parameters
=== PAUSE TestAccAPIGatewayRestAPI_parameters
=== RUN   TestAccAPIGatewayRestAPI_Policy_basic
=== PAUSE TestAccAPIGatewayRestAPI_Policy_basic
=== RUN   TestAccAPIGatewayRestAPI_Policy_order
=== PAUSE TestAccAPIGatewayRestAPI_Policy_order
=== RUN   TestAccAPIGatewayRestAPI_Policy_overrideBody
=== PAUSE TestAccAPIGatewayRestAPI_Policy_overrideBody
=== RUN   TestAccAPIGatewayRestAPI_Policy_setByBody
=== PAUSE TestAccAPIGatewayRestAPI_Policy_setByBody
=== CONT  TestAccAPIGatewayRestAPIDataSource_basic
=== CONT  TestAccAPIGatewayRestAPI_Description_setByBody
=== CONT  TestAccAPIGatewayRestAPI_apiKeySource
--- PASS: TestAccAPIGatewayRestAPIDataSource_basic (22.82s)
=== CONT  TestAccAPIGatewayRestAPI_Description_overrideBody
--- PASS: TestAccAPIGatewayRestAPI_apiKeySource (56.39s)
=== CONT  TestAccAPIGatewayRestAPI_description
--- PASS: TestAccAPIGatewayRestAPI_Description_overrideBody (61.48s)
=== CONT  TestAccAPIGatewayRestAPI_body
--- PASS: TestAccAPIGatewayRestAPI_description (38.93s)
=== CONT  TestAccAPIGatewayRestAPI_BinaryMediaTypes_setByBody
--- PASS: TestAccAPIGatewayRestAPI_BinaryMediaTypes_setByBody (24.96s)
=== CONT  TestAccAPIGatewayRestAPI_BinaryMediaTypes_overrideBody
--- PASS: TestAccAPIGatewayRestAPI_body (84.67s)
=== CONT  TestAccAPIGatewayRestAPI_binaryMediaTypes
--- PASS: TestAccAPIGatewayRestAPI_BinaryMediaTypes_overrideBody (73.04s)
=== CONT  TestAccAPIGatewayRestAPI_APIKeySource_setByBody
--- PASS: TestAccAPIGatewayRestAPI_APIKeySource_setByBody (20.34s)
=== CONT  TestAccAPIGatewayRestAPI_APIKeySource_overrideBody
--- PASS: TestAccAPIGatewayRestAPI_APIKeySource_overrideBody (49.97s)
=== CONT  TestAccAPIGatewayRestAPI_minimumCompressionSize
--- PASS: TestAccAPIGatewayRestAPI_minimumCompressionSize (42.58s)
=== CONT  TestAccAPIGatewayRestAPI_Policy_setByBody
--- PASS: TestAccAPIGatewayRestAPI_Policy_setByBody (20.45s)
=== CONT  TestAccAPIGatewayRestAPI_Policy_overrideBody
--- PASS: TestAccAPIGatewayRestAPI_Policy_overrideBody (42.54s)
=== CONT  TestAccAPIGatewayRestAPI_Policy_order
--- PASS: TestAccAPIGatewayRestAPI_Policy_order (23.97s)
=== CONT  TestAccAPIGatewayRestAPI_Policy_basic
--- PASS: TestAccAPIGatewayRestAPI_Policy_basic (31.86s)
=== CONT  TestAccAPIGatewayRestAPI_parameters
--- PASS: TestAccAPIGatewayRestAPI_parameters (36.24s)
=== CONT  TestAccAPIGatewayRestAPI_Name_overrideBody
--- PASS: TestAccAPIGatewayRestAPI_Name_overrideBody (42.13s)
=== CONT  TestAccAPIGatewayRestAPI_MinimumCompressionSize_setByBody
--- PASS: TestAccAPIGatewayRestAPI_MinimumCompressionSize_setByBody (17.42s)
=== CONT  TestAccAPIGatewayRestAPI_MinimumCompressionSize_overrideBody
--- PASS: TestAccAPIGatewayRestAPI_binaryMediaTypes (379.65s)
=== CONT  TestAccAPIGatewayRestAPI_EndpointVPCEndpointIDs_overrideBody
--- PASS: TestAccAPIGatewayRestAPI_MinimumCompressionSize_overrideBody (74.19s)
=== CONT  TestAccAPIGatewayRestAPI_EndpointVPCEndpointIDs_setByBody
--- PASS: TestAccAPIGatewayRestAPI_Description_setByBody (700.68s)
=== CONT  TestAccAPIGatewayRestAPI_DisableExecuteAPIEndpoint_setByBody
--- PASS: TestAccAPIGatewayRestAPI_DisableExecuteAPIEndpoint_setByBody (31.40s)
=== CONT  TestAccAPIGatewayRestAPI_Endpoint_vpcEndpointIDs
--- PASS: TestAccAPIGatewayRestAPI_EndpointVPCEndpointIDs_overrideBody (196.09s)
=== CONT  TestAccAPIGatewayRestAPI_EndpointVPCEndpointIDs_mergeBody
--- PASS: TestAccAPIGatewayRestAPI_EndpointVPCEndpointIDs_setByBody (222.01s)
=== CONT  TestAccAPIGatewayRestAPI_DisableExecuteAPIEndpoint_overrideBody
--- PASS: TestAccAPIGatewayRestAPI_DisableExecuteAPIEndpoint_overrideBody (42.59s)
=== CONT  TestAccAPIGatewayRestAPI_EndpointVPCEndpointIDs_overrideToMergeBody
--- PASS: TestAccAPIGatewayRestAPI_EndpointVPCEndpointIDs_mergeBody (235.85s)
=== CONT  TestAccAPIGatewayRestAPI_disableExecuteAPIEndpoint
--- PASS: TestAccAPIGatewayRestAPI_disableExecuteAPIEndpoint (42.71s)
=== CONT  TestAccAPIGatewayRestAPI_basic
--- PASS: TestAccAPIGatewayRestAPI_Endpoint_vpcEndpointIDs (297.55s)
=== CONT  TestAccAPIGatewayRestAPIPolicy_disappears
--- PASS: TestAccAPIGatewayRestAPI_EndpointVPCEndpointIDs_overrideToMergeBody (170.65s)
=== CONT  TestAccAPIGatewayRestAPI_Endpoint_private
--- PASS: TestAccAPIGatewayRestAPI_Endpoint_private (18.33s)
=== CONT  TestAccAPIGatewayRestAPIPolicy_Disappears_restAPI
--- PASS: TestAccAPIGatewayRestAPIPolicy_disappears (27.21s)
=== CONT  TestAccAPIGatewayRestAPI_endpoint
--- PASS: TestAccAPIGatewayRestAPI_endpoint (50.81s)
=== CONT  TestAccAPIGatewayRestAPI_disappears
--- PASS: TestAccAPIGatewayRestAPIPolicy_Disappears_restAPI (60.97s)
=== CONT  TestAccAPIGatewayRestAPI_tags
--- PASS: TestAccAPIGatewayRestAPI_disappears (15.72s)
=== CONT  TestAccAPIGatewayRestAPIPolicy_basic
--- PASS: TestAccAPIGatewayRestAPI_tags (45.40s)
=== CONT  TestAccAPIGatewayRestAPIDataSource_Endpoint_vpcEndpointIDs
--- PASS: TestAccAPIGatewayRestAPIPolicy_basic (74.43s)
--- PASS: TestAccAPIGatewayRestAPI_basic (208.82s)
--- PASS: TestAccAPIGatewayRestAPIDataSource_Endpoint_vpcEndpointIDs (137.01s)
PASS
ok  	github.com/hashicorp/terraform-provider-aws/internal/service/apigateway	1299.523s

@ewbankkit
Copy link
Contributor

@AdamTylerLynch Thanks for the contribution 🎉 👏.

@ewbankkit ewbankkit merged commit 6758ce5 into hashicorp:main Aug 1, 2022
@github-actions github-actions bot added this to the v4.25.0 milestone Aug 1, 2022
@github-actions
Copy link

github-actions bot commented Aug 4, 2022

This functionality has been released in v4.25.0 of the Terraform AWS Provider. Please see the Terraform documentation on provider versioning or reach out if you need any assistance upgrading.

For further feature requests or bug reports with this functionality, please create a new GitHub issue following the template. Thank you!

@github-actions
Copy link

github-actions bot commented Sep 4, 2022

I'm going to lock this pull request because it has been closed for 30 days ⏳. This helps our maintainers find and focus on the active issues.
If you have found a problem that seems related to this change, please open a new issue and complete the issue template so we can capture all the details necessary to investigate further.

@github-actions github-actions bot locked as resolved and limited conversation to collaborators Sep 4, 2022
@justinretzolk justinretzolk added the partner Contribution from a partner. label May 16, 2024
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
bug Addresses a defect in current functionality. documentation Introduces or discusses updates to documentation. partner Contribution from a partner. service/apigateway Issues and PRs that pertain to the apigateway service. size/XL Managed by automation to categorize the size of a PR. tests PRs: expanded test coverage. Issues: expanded coverage, enhancements to test infrastructure.
Projects
None yet
Development

Successfully merging this pull request may close these issues.

Private API Gateway DNS Issue
4 participants