Wie verwende ich die Funktion Fn::Sub in AWS CloudFormation mit Fn::FindInMap, Fn::ImportValue oder anderen unterstützten Funktionen?

Lesedauer: 2 Minute
0

Ich möchte die Fn::Sub intrinsic function in AWS CloudFormation with Fn::FindInMap, Fn::ImportValue, oder anderen unterstützten Funktionen verwenden.

Kurzbeschreibung

Sie können die intrinsische Funktion Fn::Sub verwenden, um unterstützte Funktionen zu ersetzen oder Variablen in einer Eingabezeichenfolge durch von Ihnen angegebene Werte zu ersetzen.

Um den Wert aus unterstützten Funktionen zu ersetzen, müssen Sie Variablenmap mit dem Namen und Wert wie unten gezeigt verwenden:

JSON:

{ "Fn::Sub" : [ String, { Var1Name: Var1Value, Var2Name: Var2Value } ] }

YAML:

!Sub
  - String
  - Var1Name: Var1Value
    Var2Name: Var2Value

Behebung

Verwendung von Fn::Sub mit der Ref-Funktion

Im folgenden Beispiel wird ein Mapping verwendet, um die Domain-Variable durch den aus der Ref-Funktion resultierenden Wert zu ersetzen.

JSON:

{
  "Parameters": {
    "RootDomainName": {
      "Type": "String",
      "Default": "example123.com"
    }
  },
  "Resources": {
    "DNS": {
      "Type": "AWS::Route53::HostedZone",
      "Properties": {
        "Name": {
          "Fn::Sub": [
            "www.${Domain}",
            {
              "Domain": {
                "Ref": "RootDomainName"
              }
            }
          ]
        }
      }
    }
  }
}

YAML:

Parameters:
  RootDomainName:
    Type: String
    Default: example123.com
Resources:
  DNS:
    Type: 'AWS::Route53::HostedZone'
    Properties:
      Name: !Sub
        - 'www.${Domain}'
        - Domain: !Ref RootDomainName

Verwendung von Fn::Sub mit der Funktion Fn: :FindInMap

Das folgende Beispiel verwendet ein Mapping, um die Variable log\ _group_name durch den resultierenden Wert der Funktion Fn::findInMap zu ersetzen.

JSON:

{
  "Mappings": {
    "LogGroupMapping": {
      "Test": {
        "Name": "test_log_group"
      },
      "Prod": {
        "Name": "prod_log_group"
      }
    }
  },
  "Resources": {
    "myLogGroup": {
      "Type": "AWS::Logs::LogGroup",
      "Properties": {
        "LogGroupName": {
          "Fn::Sub": [
            "cloud_watch_${log_group_name}",
            {
              "log_group_name": {
                "Fn::FindInMap": [
                  "LogGroupMapping",
                  "Test",
                  "Name"
                ]
              }
            }
          ]
        }
      }
    }
  }
}

YAML:

Mappings:
  LogGroupMapping:
    Test:
      Name: test_log_group
    Prod:
      Name: prod_log_group
Resources:
  myLogGroup:
    Type: 'AWS::Logs::LogGroup'
    Properties:
      LogGroupName: !Sub
        - 'cloud_watch_${log_group_name}'
        - log_group_name: !FindInMap
            - LogGroupMapping
            - Test
            - Name

**Verwendung von Fn::Sub mit der Funktion Fn::ImportValue **

Das folgende Beispiel verwendet ein Mapping, um die Domain-Variable durch den resultierenden Wert der Funktion Fn::ImportValue zu ersetzen.

Hinweis: „DomainName“ ist der Name der Ausgabe, die von einem anderen CloudFormation-Stack exportiert wurde.

JSON:

{
  "Resources": {
    "DNS": {
      "Type": "AWS::Route53::HostedZone",
      "Properties": {
        "Name": {
          "Fn::Sub": [
            "www.${Domain}",
            {
              "Domain": {
                "Fn::ImportValue": "DomainName"
              }
            }
          ]
        }
      }
    }
  }
}

YAML:

Resources:
  DNS:
    Type: 'AWS::Route53::HostedZone'
    Properties:
      Name: !Sub
        - 'www.${Domain}'
        - Domain: !ImportValue DomainName

AWS OFFICIAL
AWS OFFICIALAktualisiert vor 2 Jahren