Fn::FindInMap, Fn::ImportValue 또는 기타 지원되는 함수를 사용하여 AWS CloudFormation의 Fn::Sub 함수를 사용하려면 어떻게 해야 합니까?

최종 업데이트 날짜: 2022년 4월 1일

Fn::FindInMap, Fn::ImportValue 또는 기타 지원되는 함수와 함께 AWS CloudFormation에서 Fn::Sub 함수를 사용하고 싶습니다.

간략한 설명

Fn::Sub 내장 함수를 사용하여 지원되는 함수를 대체하거나 입력 문자열의 변수를 지정한 값으로 대체할 수 있습니다.

지원되는 함수의 값을 대체하려면 아래와 같이 이름과 값이 있는 변수 맵을 사용해야 합니다.

JSON:

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

YAML:

!Sub
  - String
  - Var1Name: Var1Value
    Var2Name: Var2Value

해결 방법

Ref 함수로 Fn::Sub 사용

다음 예시에서는 매핑을 사용하여 Domain 변수를 Ref 함수의 결과 값으로 대체합니다.

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

Fn::FindInMap 함수로 Fn::Sub 사용

다음 예시에서는 매핑을 사용하여 log_group_name 변수를 Fn::FindInMap 함수의 결과 값으로 대체합니다.

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

Fn::ImportValue 함수로 Fn::Sub 사용

다음 예시에서는 매핑을 사용하여 Domain 변수를 Fn::ImportValue 함수의 결과 값으로 대체합니다.

참고: “DomainName”은 다른 CloudFormation 스택에서 내보낸 출력의 이름입니다.

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

이 문서가 도움이 되었습니까?


Besoin d'aide pour une question technique ou de facturation ?