Supported Configurations

The following table offers a comprehensive list of such configurations with links to dedicated documentation describing its distinct configuration syntax and other information.

TypeYAML kind ValueDescription
Traffic Filter Rules, including WAFCDNDeclare rules to block malicious traffic
Request TransformationsCDNDeclare rules to transform the shape of the traffic request
Response TransformationsCDNDeclare rules to transform the shape of the response for a given request
Server-side RedirectsCDNDeclare 301/302-style server-side redirects
Origin SelectorsCDNDeclare rules to route traffic to different backends, including non-Adobe applications
CDN error pagesCDNOverride the default error page if AEM origin cannot be reached, referencing the location of self-hosted static content in the configuration file
CDN PurgeCDNDeclare the Purge API keys used to purge the CDN
Customer-managed CDN HTTP tokenCDNDeclare the value of the X-AEM-Edge-Key needed to call the Adobe CDN from a Customer CDN
Basic authenticationCDNDeclare the usernames and passwords for a basic auth dialog protecting certain URLs.
Version Purge Maintenance TaskMaintenanceTasksOptimize the AEM repository by declaring rules around when content versions should be purged
Audit log Purge Maintenance TaskMaintenanceTasksOptimize the AEM audit log for increased performance by declaring rules around when logs should be purged
Log forwardingLogForwardingConfigure the endpoints and credentials for forwarding logs to various destinations, including Azure Blob Storage, Datadog, HTTPS, Elasticsearch, Splunk
Registering a Client IDAPIScope Adobe Developer Console API projects to a specific AEM environments by registering the client ID. This is needed for usage of OpenAPI-based APIs that require authentication

Creating and Managing Config Pipelines

For information on how to create and configure pipelines, see CI/CD Pipelines.

When creating a config pipeline in Cloud Manager, be sure to select a Targeted Deployment rather than Full Stack Code when configuring the pipeline.

As noted earlier, configuration for RDEs is deployed using command line tooling rather than a pipeline.

Common Syntax

Each configuration file begins with properties resembling the following example snippet:

  kind: "LogForwarding"
  version: "1"
  metadata:
    envTypes: ["dev"]
PropertyDescriptionDefault
kindA string that determines which type of configuration, such as log forwarding, traffic filter rules, or request transformationsRequired, no default
versionA string representing the schema versionRequired, no default
envTypesThis array of strings is a child property of the metadata node. Possible values are dev, stage, prod, or any combination, and it determines for which environment types the configuration will be processed. For example, if the array only includes dev, the configuration will not be loaded on stage or prod environments, even if the configuration is deployed there.All environment types (dev, stage, prod)

You can use the yq utility to validate locally the YAML formatting of your configuration file (for example, yq cdn.yaml).

Folder Structure

A folder named /config or similar should be at the top of the tree, with one more YAML files somewhere in a tree below it.

For example:

/config
  cdn.yaml

or

/config
  /dev
    cdn.yaml

The folder names and filenames below /config are arbitrary. The YAML file, however, must include a valid kind property value.

Typically, configurations are deployed to all environments. If all the property values are identical for each environment, a single YAML file will suffice. However, it is common for property values to differ between environments, for example while testing a lower environment.

The following sections illustrate some strategies for structuring your files.

A Single Config File for All Environments

The file structure will resemble the following:

/config
  cdn.yaml
  logForwarding.yaml

Use this structure when the same configuration is sufficient for all environments and for all types of configuration (CDN, log forwarding, and so on). In this scenario, the envTypes array property would include all environment types.

   kind: "cdn"
   version: "1"
   metadata:
     envTypes: ["dev", "stage", "prod"]

Using secret-type environment variables, it is possible for secret properties to vary per environment, as illustrated by the ${{SPLUNK_TOKEN}} reference

kind: "LogForwarding"
version: "1"
metadata:
  envTypes: ["dev"]
data:
  splunk:
    default:
      enabled: true
      host: "splunk-host.example.com"
      token: "${{SPLUNK_TOKEN}}"
      index: "AEMaaCS"

A Separate File Per Environment Type

The file structure will resemble the following:

/config
  cdn-dev.yaml
  cdn-stage.yaml
  cdn-prod.yaml
  logForwarding-dev.yaml
  logForwarding-stage.yaml
  logForwarding-prod.yaml

Use this structure when there may be differences in property values. In the files, one would expect the envTypes array value to correspond with the suffix, for example
cdn-dev.yaml and logForwarding-dev.yaml with a value of ["dev"], cdn-stage.yaml and logForwarding-stage.yaml with a value of ["stage"], and so on.

A Folder Per Environment

In this strategy, there is a separate config folder per environment, with a separate pipeline declared in Cloud Manager for each.

This approach is particularly useful if you have multiple dev environments, where each has unique property values.

The file structure will resemble the following:

/config/dev1
  cdn.yaml
  logForwarding.yaml
/config/dev2
  cdn.yaml
  logForwarding.yaml
/config/prod
  cdn.yaml
  logForwarding.yaml

A variation of this approach is to maintain a separate branch per environment.