AWS Filters¶
This document provides guidance on filtering AWS zones using various strategies and flags.
Strategies for Scoping Zones¶
Without specifying these flags, management applies to all zones.
In order to manage specific zones, there is a possibility to combine multiple options
| Argument | Description | Flow Control | 
|---|---|---|
--zone-id-filter | 
Specify multiple times if needed | OR | 
--domain-filter | 
By domain suffix - specify multiple times if needed | OR | 
--regex-domain-filter | 
By domain suffix but as a regex - overrides domain-filter | AND | 
--exclude-domains | 
To exclude a domain or subdomain | OR | 
--regex-domain-exclusion | 
Subtracts its matches from regex-domain-filter’s matches | 
AND | 
--aws-zone-type | 
Only sync zones of this type [public\|private] | 
OR | 
--aws-zone-tags | 
Only sync zones with this tag | AND | 
Minimum required configuration
Filter by Zone Type¶
If this flag is not specified, management applies to both public and private zones.
Filter by Domain¶
Specify multiple times if needed.
Example --domain-filter=example.com will allow for zone example.com and any zones that end in .example.com, including an.example.com, i.e., the subdomains of example.com.
When there are multiple domains, filter --domain-filter=example.com will match domains example.com, ex.par.example.com, par.example.com, x.par.eu-west-1.example.com.
And if the filter is prepended with . e.g., --domain-filter=.example.com it will allow only zones that end in .example.com, i.e., the subdomains of example.com but not the example.com zone itself. Example result: ex.par.eu-west-1.example.com, ex.par.example.com, par.example.com.
Note: if you prepend the filter with “.”, it will not attempt to match parent zones.
Filter by Zone ID¶
Specify multiple times if needed, the flow logic is OR
Filter by Tag¶
Specify multiple times if needed, the flow logic is AND
Keys only
Or specify keys with values
Can’t specify multiple or separate values with commas: key1=val1,key2=val2 at the moment.
Filter only by value --aws-zone-tags==tag-value is not supported.
args:
    --aws-zone-tags=team=k8s,vertical=platform # this is not supported
    --aws-zone-tags==tag-value # this is not supported
Filtering Workflows¶
Filtering Sequence
The diagram describes the sequence for filtering AWS zones.
flowchart TD
    A["zones"] --> B{"Is zonesCache valid?"}
    B -- Yes --> C["Return cached zones"]
    B -- No --> D["Initialize zones map"]
    D --> E["For each profile and client"]
    E --> F["Create paginator"]
    F --> G{"Has more pages?"}
    G -- Yes --> H["Get next page"]
    H --> I["For each zone in page"]
    I --> J{"Match zoneIDFilter?"}
    J -- No --> G
    J -- Yes --> K{"Match zoneTypeFilter?"}
    K -- No --> G
    K -- Yes --> L{"Match domainFilter?"}
    L -- No --> M{"zoneMatchParent?"}
    M -- No --> G
    M -- Yes --> N{"Match domainFilter parent?"}
    N -- No --> G
    N -- Yes --> O{"zoneTagFilter specified?"}
    O -- Yes --> P["Add zone to zonesToValidate"]
    O -- No --> Q["Add zone to zones map"]
    P --> Q
    Q --> G
    G -- No --> R{"zonesToValidate not empty?"}
    R -- Yes --> S["Get tags for zones"]
    S --> T["For each zone and tags"]
    T --> U{"Match zoneTagFilter?"}
    U -- No --> V["Delete zone from zones map"]
    U -- Yes --> W["Keep zone in zones map"]
    V --> W
    W --> R
    R -- No --> X["Update zonesCache"]
    X --> Y["Return zones"]
Filtering Flow
The is a sequence diagram that describes the interaction between external-dns, AWSProvider, and Route53Client
during the filtering process. Here is a high-level description:
sequenceDiagram
    participant external-dns
    participant AWSProvider
    participant Route53Client
    external-dns->>AWSProvider: zones
    alt Cache is valid
        AWSProvider-->>external-dns: return cached zones
    else
        AWSProvider->>Route53Client: ListHostedZonesPaginator
        loop While paginator.HasMorePages
            Route53Client->>AWSProvider: paginator.NextPage
            alt ThrottlingException
                AWSProvider->>external-dns: error
            else
                AWSProvider-->>external-dns: return error
            end
            AWSProvider->>AWSProvider: Filter zones
            alt Tags need validation
                AWSProvider->>Route53Client: ListTagsForResources
                Route53Client->>AWSProvider: return tags
                AWSProvider->>AWSProvider: Validate tags
            end
        end
        alt Cache duration > 0
            AWSProvider->>AWSProvider: Update cache
        end
        AWSProvider-->>external-dns: return zones
    end