Marketplace Stack Validation Runbook
v3.0.6 boundary: the only approved retained buyer target is
agentic3.tutelacloud.com.agentic.tutelacloud.comis a protected older-release environment and must not be modified or used for this run. Complete buyer validation and retain the evidence for manual owner review; do not submit or publish to Marketplace without later explicit authorization.
Use this runbook before asking a customer to retest AWS Marketplace launch paths. The goal is to validate the published templates and image tags with the lowest cost path first, then proceed to more expensive shapes only after shared certificate, DNS, entitlement, and routing dependencies pass.
Sequence
- Confirm the target GitHub release and Marketplace artifact prefix exist.
- Run static validation:
bash scripts/marketplace/test-audit-delivery-options.shbash scripts/marketplace/test-estimate-infrastructure-costs.shbash scripts/marketplace/test-render-marketplace-artifacts.shbash scripts/marketplace/test-publish-marketplace-images.shbash scripts/marketplace/test-validate-marketplace-copy.shbash scripts/marketplace/test-submit-marketplace-version.shbash scripts/marketplace/test-update-marketplace-usage-instructions.shbash scripts/marketplace/test-buyer-release-certification.shbash scripts/marketplace/test-marketplace-launch-template.shcfn-lint -i W1011 -t <all eight Marketplace and nested templates>aws cloudformation validate-templatefor all eight templates inus-west-2andus-east-1
- Upgrade
agentic3.tutelacloud.comin buyer account641059604274to the exact immutable release and run the post-SSM runtime convergence gate. - Run the release-candidate browser and extension simulation without skips or flakes, full buyer certification, the 64-case policy-action matrix, and the approved/rejected/expired human-approval lifecycle matrix. Every report must be green and metadata-only.
- Create and accept the hash-bound certificate described in Marketplace Buyer Release Certification (available in the signed-in Help Center).
- Only after buyer acceptance, run the internal Marketplace install smoke
harness against staged versioned S3 template URLs:
SMOKE_OPTION=standard-public-slimSMOKE_OPTION=standard-publicSMOKE_OPTION=standard-privateSMOKE_OPTION=vllm-publicSMOKE_OPTION=vllm-private
- Delete each stack before starting the next run. The harness does this by
default unless
KEEP_STACK=true. - Stop at the first failure, keep the evidence under
artifacts/marketplace-install-smoke/, and fix the template before moving to the next option.
When a stack fails, capture both legacy stack events and CloudFormation operation failed events for the root and nested stack IDs:
aws cloudformation describe-events \
--region <deployment-region> \
--stack-name <root-or-nested-stack-name> \
--filters FailedEvents=true \
--output json
Use the describe-events output first for CloudFormation Early Validation
errors such as NAME_CONFLICT_VALIDATION; it includes validation paths and
identifiers that can be absent from describe-stack-events.
Required Buyer Inputs
Set these variables before running the harness:
export RELEASE_VERSION=vX.Y.Z
export AWS_REGION=us-west-2
export MARKETPLACE_SMOKE_DOMAIN=<customer-owned-domain>
export MARKETPLACE_SMOKE_HOSTED_ZONE_ID=<route53-hosted-zone-id>
export MARKETPLACE_SMOKE_AZ1=us-west-2a
export MARKETPLACE_SMOKE_AZ2=us-west-2b
export MARKETPLACE_SMOKE_DB_PASSWORD=<redacted-strong-password>
Private-network tests also require either MARKETPLACE_SMOKE_PRIVATE_CA_ARN or
MARKETPLACE_SMOKE_CERTIFICATE_MODE=create-private-ca with
MARKETPLACE_SMOKE_PRIVATE_CA_ACK=I_ACKNOWLEDGE_PRIVATE_CA_COSTS_AND_TRUST_BOOTSTRAP.
vLLM tests require
MARKETPLACE_SMOKE_GPU_ACK=I_ACKNOWLEDGE_GPU_AND_MODEL_DOWNLOAD_COSTS.
Notes
-
standard-public-slimuses theTutela Marketplace InstallerwithAccessMode=public,EnableLocalModelRuntime=false, andDeploymentProfile=slim_training. It is the cheapest end-to-end launch path and validates the shared public DNS, public ACM certificate, ALB routing, entitlement, and runtime readiness path before creating managed MSK or NAT. -
The base launcher preflight creates or verifies required service-linked roles for ACM, ELB, and License Manager before expensive nested stacks proceed.
-
The base launcher preflight also reuses a deterministic retained foundation artifacts bucket only when it is same-account, same-region, encrypted, and has full S3 public access block enabled. Other deterministic leftovers fail preflight with the conflicting resource names so nested stacks do not fail generically.
-
The harness validates the actual published Marketplace artifacts. Do not use local templates for final buyer readiness evidence.
-
No
AddDeliveryOptionssubmission is allowed before the exact buyer release has an accepted certification. Marketplace artifact staging is not Catalog publication. -
Marketplace S3 artifacts and Marketplace ECR images can exist even when the Catalog
AddDeliveryOptionssubmission failed. Audit Catalog visibility with audit-delivery-options.sh (available in the signed-in Help Center):scripts/marketplace/audit-delivery-options.sh \--desired-public-count 1 \--version-cap-threshold 100 \--require-version <latest>The desired policy is latest one accepted semver release public and older accepted releases restricted, so AWS Console buyers see only the current public launch path. If the audit reports
catalog_missing_required_versionsafter artifacts and images are verified, submit the missing release when the audit reports available headroom. If the audit instead reportsversion_cap_headroom_blocked, open AWS Marketplace Seller Operations to archive enough old restricted product versions or confirm a new enforced maximum before resubmitting; AWS reports this condition asEXCEEDS_MAX_VERSIONS. Only after Catalog accepts those versions canrestrict-old-delivery-options.sh --visibility public --keep-latest-public-count 1enforce that only the latest accepted release remains public.
Metadata-only usage-copy repair
Correct buyer-facing Usage Instructions on an existing public version with
update-marketplace-usage-instructions.sh. This is distinct from a release:
the generated UpdateDeliveryOptions request contains only the existing
delivery-option ID and its UsageInstructions field. It does not add a version,
change images or deployment resources, change targeting or visibility, or run
the Marketplace publish workflow.
First create and review a preview:
scripts/marketplace/update-marketplace-usage-instructions.sh \
--dry-run \
--release-version <current-public-version> \
--output /tmp/marketplace-usage-copy-repair.json
The preview prints the exact entity revision, delivery-option ID, and SHA-256
of the current Usage Instructions. Confirm the generated JSON contains one
UpdateDeliveryOptions change and only UsageInstructions, then submit with
all three optimistic-lock values:
scripts/marketplace/update-marketplace-usage-instructions.sh \
--submit \
--release-version <current-public-version> \
--expected-entity-identifier <product-id@revision> \
--expected-delivery-option-id <delivery-option-id> \
--expected-current-usage-sha256 <sha256-from-preview> \
--output /tmp/marketplace-usage-copy-repair.json
Stop if any lock changed. After the Catalog change succeeds, describe the product again and confirm that exactly one public delivery option remains, its version and resources are unchanged, and its Usage Instructions match the safe source. Finish with buyer-account UI verification of the Usage tab and subscription dialog. Do not use this repair command to publish a pending release.