# Amazon EVS CloudFormation Reference

> CloudFormation reference for Amazon EVS. Resource and property docs for environment-creation parameters, written for template authors.

Rendered version: https://codyanthony.dev/case-studies/api-documentation/evs-cloudformation/
Author: Cody Anthony (https://codyanthony.dev/about/)

---

This is the AWS CloudFormation reference for Amazon Elastic VMware Service, the infrastructure-as-code path for provisioning an EVS environment. I owned this reference alongside the [EVS API reference](/case-studies/api-documentation/evs-createenvironment/) and the [user guide](/case-studies/architecture-guides/evs-getting-started/), documenting the same complex networking, licensing, and host configuration as a declarative CloudFormation resource for template authors.

## Project context

EVS deploys VMware Cloud Foundation onto AWS infrastructure, and many customers provision that infrastructure as code rather than through the console or API directly. CloudFormation is the AWS-native way to declare that deployment in a repeatable template.

The `AWS::EVS::Environment` resource exposes the full environment-creation surface — VLAN subnets, host details, connectivity, licenses, service access, VCF hostnames, version, and VPC configuration — as typed template properties. Each property needs clear required/optional status, constraints, update behavior, and relationship guidance for template authors.

## My role and ownership

I authored the EVS CloudFormation reference for public preview, general availability, and the HCX public-connectivity launch, in parallel with the EVS API reference and user guide.

Because I also participated in API design and authored the API reference, I kept the CloudFormation property documentation consistent with the API surface while adapting it for a declarative template model. A customer reading the API reference and a customer writing a CloudFormation template should see the same constraints described in the language of the surface they are using.

## What the work solved

**Declarative provisioning.** Template authors got a complete property reference for provisioning EVS environments through CloudFormation instead of reverse-engineering the resource shape from API behavior.
**Cross-surface consistency.** The same validation rules, constraints, and resource relationships were documented consistently across the API reference, CloudFormation reference, and user guide.
**Template-author clarity.** The reference made required properties, patterns, allowed values, and update behavior explicit so customers could understand what had to be set at creation time and what could not be changed later.

## What this sample demonstrates

- Infrastructure-as-code reference documentation for a complex CloudFormation resource
- Translating API operation inputs into declarative template properties for template authors
- Cross-surface consistency between API, CloudFormation, and user-guide documentation
- Clear documentation of typed properties, constraints, patterns, allowed values, and update behavior
- Resource-lifecycle guidance that helps customers understand what must be configured at creation time

## Live documentation

- [Amazon EVS resource type reference (CloudFormation Template Reference)](https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/AWS_EVS.html)
- [`AWS::EVS::Environment` resource specification](https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/aws-resource-evs-environment.html) — [archived snapshot](https://web.archive.org/web/20250720140448/https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/aws-resource-evs-environment.html)
- [Create Amazon EVS resources with AWS CloudFormation (user guide)](https://docs.aws.amazon.com/evs/latest/userguide/creating-resources-with-cloudformation.html)

---

**Note on authorship and excerpt selection:**

This curated excerpt shows the `AWS::EVS::Environment` resource definition, a trimmed syntax skeleton, and selected property definitions from the live reference. I narrowed the full property list to the service-specific networking, licensing, and version inputs so the sample highlights the template-author constraints that matter most for environment creation.

---

## Documentation excerpt (curated)

## AWS::EVS::Environment

Creates an Amazon EVS environment that runs VCF software, such as SDDC Manager, NSX Manager, and vCenter Server.

During environment creation, Amazon EVS performs validations on DNS settings, provisions VLAN subnets and hosts, and deploys the supplied version of VCF.

**Note:**

You cannot use the `dedicatedHostId` and `placementGroupId` parameters together in the same `CreateEnvironment` action. This results in a `ValidationException` response.

### Syntax (JSON, trimmed to selected properties)

```json
{
  "Type": "AWS::EVS::Environment",
  "Properties": {
    "ConnectivityInfo": ConnectivityInfo,
    "Hosts": [ HostInfoForCreate, ... ],
    "InitialVlans": InitialVlans,
    "LicenseInfo": LicenseInfo,
    "ServiceAccessSubnetId": String,
    "VcfHostnames": VcfHostnames,
    "VcfVersion": String,
    "VpcId": String
  }
}
```

### Properties (selected)

**`InitialVlans`**

The initial VLAN subnets for the environment. Amazon EVS VLAN subnets have a minimum CIDR block size of /28 and a maximum size of /24. Amazon EVS VLAN subnet CIDR blocks must not overlap with other subnets in the VPC.

Required for environment resource creation.

- **Required:** Conditional
- **Type:** InitialVlans
- **Update requires:** Updates are not supported.

**`ServiceAccessSubnetId`**

The subnet that is used to establish connectivity between the Amazon EVS control plane and VPC. Amazon EVS uses this subnet to perform validations and create the environment.

- **Required:** Yes
- **Type:** String
- **Pattern:** `^subnet-[a-f0-9]{8}([a-f0-9]{9})?$`
- **Minimum:** 15
- **Maximum:** 24
- **Update requires:** Updates are not supported.

**`VcfVersion`**

The VCF version of the environment.

- **Required:** Yes
- **Type:** String
- **Allowed values:** `VCF-5.2.1 | VCF-5.2.2`
- **Update requires:** Updates are not supported.
