x-acm

x-acm:
  certificate:
    Properties: {}
    MacroParameters: {}
    Lookup: {}

Define new ACM Certificates (with DNS Validation) or import existing ones that you wish to use with supported AWS services and resources.

Properties

Full support of AWS ACM native properties. Refer to AWS ACM Properties

Hint

If you defined multiple SubjectAlternativeNames names, they will be auto-added to the validation list and use the same ZoneId, so you do not need to list them all in DomainValidationOptions

MacroParameters

This automatically creates the full ACM Certificate definition, and uses DNS validation with AWS CloudFormation. All you have to do is list the domain names that you wish to have in the certificate and the x-route53 or HostedZoneID that you will allow for DNS validation to succeed.

example using macro parameters and x-route53
x-acm:
  PublicELBCert:
    MacroParameters:
        DomainNames:
          - domain.tld
          - sub.domain.tld
        HostedZoneId: x-route53::public-domain # Alternatively, you can set the hosted zone ID directly.

x-route53:
  public-domain:
    ZoneName: domain.tld
    Lookup: true

DomainNames

List of the domain names you want to create the ACM Certificate for.

Hint

The first domain name will be used for the CN, and the following ones will be used for SubjectAlternative names

HostedZoneId

The pointer to the x-route53 domain that will allow for DNS Validation. If however you prefer to enter the HostedZoneID directly, you can (or use environment variable).

Attention

That HostedZone ID will be used for all of the Domain Validation.

Services

No need to indicate services to assign the ACM certificate to. Refer to x-elbv2 for mapping to ALB/NLB.

Example

Using CFN Properties
x-acm:
  public-acm-01:
    Properties:
      DomainName: test.lambda-my-aws.io
      DomainValidationOptions:
        - HostedZoneId: ZABCDEFGHIS0123
          DomainName: test.lambda-my-aws.io
      SubjectAlternativeNames:
        - anothertest.lambda-my-aws.io
        - yet.another.test.lambda-my-aws.io
      ValidationMethod: DNS

Hint

If you need to specify x-dns in the template and provide the HostedZoneId which will be used there. DNS Reference: dns_reference_syntax

JSON Schema

Model

x-acm

x-acm.spec.json

x-acm specification for ECS Cluster

type

object

properties

  • Lookup

x-resources.common.spec.json#/definitions/Lookup

  • Use

type

string

  • Properties

https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-certificatemanager-certificate.html

type

object

  • Settings

x-resources.common.spec.json#/definitions/Settings

  • MacroParameters

type

object

properties

  • DomainNames

List domain names to generate the certificate for. First in list will be CN

type

array

items

type

string

format

hostname

  • HostedZoneId

The ZoneID or x-route53:: pointer to public zone.

type

string

format

Z[A-Z0-9]+$|x-route53::[a-zA-Z0-9-_.]+$

additionalProperties

False

definitions

Definition

{
  "$schema": "http://json-schema.org/draft-07/schema#",
  "id": "x-acm.spec.json",
  "$id": "x-acm.spec.json",
  "title": "x-acm",
  "description": "x-acm specification for ECS Cluster",
  "type": "object",
  "properties": {
    "Lookup": {
      "$ref": "x-resources.common.spec.json#/definitions/Lookup"
    },
    "Use": {
      "type": "string"
    },
    "Properties": {
      "type": "object",
      "description": "https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-certificatemanager-certificate.html"
    },
    "Settings": {
      "$ref": "x-resources.common.spec.json#/definitions/Settings"
    },
    "MacroParameters": {
      "type": "object",
      "additionalProperties": false,
      "required": [
        "DomainNames",
        "HostedZoneId"
      ],
      "properties": {
        "DomainNames": {
          "type": "array",
          "description": "List domain names to generate the certificate for. First in list will be CN",
          "items": {
            "type": "string",
            "format": "hostname"
          }
        },
        "HostedZoneId": {
          "type": "string",
          "description": "The ZoneID or x-route53:: pointer to public zone.",
          "format": "Z[A-Z0-9]+$|x-route53::[a-zA-Z0-9-_.]+$"
        }
      }
    }
  },
  "definitions": {}
}

Test files

You can find the test files here to use as reference for your use-case.