Skip to content

feat(appsync): AWS AppSync GraphQL APIs + data sources + api keys - #1230

Merged
NitinKumar004 merged 2 commits into
developmentfrom
feat/aws-appsync
Sep 6, 2026
Merged

feat(appsync): AWS AppSync GraphQL APIs + data sources + api keys#1230
NitinKumar004 merged 2 commits into
developmentfrom
feat/aws-appsync

Conversation

@NitinKumar004

Copy link
Copy Markdown
Collaborator

Summary

Adds the AWS AppSync control plane (Track 1, control-plane only — no GraphQL execution). AppSync speaks awsRestjson1 with verb+path routing under the /v1/ prefix (no X-Amz-Target), modeled on the existing OpenSearch/API Gateway restJson1 handlers.

Surface (17 operations)

  • GraphQL APIs: CreateGraphqlApi / GetGraphqlApi / UpdateGraphqlApi / DeleteGraphqlApi / ListGraphqlApis
  • Data sources: CreateDataSource / GetDataSource / UpdateDataSource / DeleteDataSource / ListDataSources
  • API keys: CreateApiKey / ListApiKeys / UpdateApiKey / DeleteApiKey
  • Tags: TagResource / UntagResource / ListTagsForResource (/v1/tags/{resourceArn})

Correct cloud semantics

  • apiId generated once at create and never regenerated — arn and the two-key uris map (GRAPHQL + REALTIME) derive from it, so repeated GETs never drift.
  • dataSourceArn computed once, immutable across updates.
  • API-key expires computed once via the configured clock, floored to the hour, with 1..365-day validity bounds enforced (ApiKeyValidityOutOfBoundsException); never recomputed on List/Get.
  • xrayEnabled explicit-false round-trips; visibility defaults GLOBAL, apiType defaults GRAPHQL.
  • Unmodeled config blocks (logConfig, userPoolConfig, additionalAuthenticationProviders, per-data-source config, ...) carried verbatim so round-trips are lossless.
  • restJson1 X-Amzn-Errortype error envelope with the precise exception names.

Architecture

  • Driver services/appsync/driver, provider providers/aws/appsync (memstore + Snapshottable), wire server/aws/appsync — no cloud-prefixed dirs.
  • Registered before the MSK handler so /v1/tags for AppSync ARNs is claimed (MSK claims /v1/tags unconditionally); disjoint from Batch.
  • Coverage docs regenerated (appsync-only).

Verification

  • go build/vet, gofmt, golangci-lint (0 issues), -race tests (provider 88.9%, SDK round-trip through the wire server), persist completeness + wiring parity all green.
  • Live serve on a temp port with the real hashicorp/aws Terraform provider (aws_appsync_graphql_api + aws_appsync_datasource + aws_appsync_api_key): apply → no-drift plan → in-place update → destroy, plus aws-cli and aws-sdk-go-v2 round-trips proving apiId stable, uris two-key, dataSourceArn, and api-key expires computed-once.

Deferred (control-plane scope): real GraphQL schema/resolvers/execution, functions, types, resolver caching, introspection, domain names, merged APIs, event APIs.

Control-plane surface (restJson1 verb+path under /v1/): GraphQL APIs with
stable apiId, two-key uris, and arn; data sources with dataSourceArn; API keys
with clock-computed hour-floored expiry and validity-bounds enforcement; plus
resource tagging. Wired into the AWS provider and wire server, registered before
the MSK handler so /v1/tags for AppSync ARNs is not shadowed.
@NitinKumar004
NitinKumar004 merged commit e0243c2 into development Sep 6, 2026
23 checks passed
@NitinKumar004
NitinKumar004 deleted the feat/aws-appsync branch September 6, 2026 19:09
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant