Cloudformation의 함수를 정리했습니다. ( 2 )
안녕하세요, 임채정입니다.
저는 요즘에 Cloudformation 을 사용해서 리소스 작성을 많이 하고 있습니다.
이 때, 템플릿에서 사용하는 함수에 대해서 정리해두면 도움이 될 것 같아서 이번 블로그에서는 Cloudformation 템플릿에 사용할 수 있는 함수를 정리해보려고 합니다.
하나의 블로그에서 전부 설명하기에는 함수가 많이 때문에 2개로 나눠서 진행하려고 합니다.
이 블로그에서 다룰 함수는 아젠다를 확인해주세요.
Cloudformation의 함수를 정리했습니다. ( 1 )
아젠다
- Fn::ImportValue
- Fn::Join
- Fn::Select
- Fn::Split
- Fn::Sub
- Fn::Transform
- Ref
1. Fn::ImportValue
함수의 정의
Fn::ImportValue
함수는 다른 스택에서 낸 출력 (OUTPUT) 값을 반환한다.- 각 AWS 계정의
Export
이름은 하나의 지역 내에서 고유하다 -
파라미터 (매개변수)
- sharedValueToImport
- 가져올 스택의 출력 값
- sharedValueToImport
- 반환 값
- 스택의 출력 값
사용법
Fn::ImportValue: sharedValueToImport !ImportValue sharedValueToImport
예시
템플릿(A)의 output 에서 지정한 리소스를 템플릿(B)에서 사용하는 경우
템플릿(A
#〜생략〜 Outputs: SubnetId: Value: !Ref SubnetId Description: ID of Subnet Export: Name: SubnetId SecurityGroupIds: Value: !Ref SecurityGroupIds Description: ID of Security Group Export: Name: SecurityGroupIds
템플릿(B)
#〜생략〜 EC2instance: Type: AWS::EC2::Instance Properties: ImageId: !Ref ImageId InstanceType: !Ref InstanceType SubnetId: !ImportValue SubnetId DisableApiTermination: true BlockDeviceMappings: - DeviceName: "/dev/xvda" Ebs: VolumeType: gp2 VolumeSize: 30 DeleteOnTermination: true SecurityGroupIds: - Fn::ImportValue: SecurityGroupIds KeyName: !Ref KeyName #〜생략〜
2. Fn::Join
함수의 정의
Fn::Join
함수는 は、지정된 구분자로 구분된 일련의 값을 단일 값에 추가한다.- 구분자가 빈 문자열이면 일련의 값은 구분자 없이 연결된다.
-
파라미터 (매개변수)
- delimiter
- 조각 둘 사이에서 발생하는 값
- 구분자는 조각 간에만 발생하며 최종값은 종료되지 않음
- ListOfValues
- 결합하려는 값의 목록
- delimiter
- 반환 값
- 결합된 문자열
사용법
Fn::Join: [ delimiter, [ comma-delimited list of values ] ] !Join [ delimiter, [ comma-delimited list of values ] ]
예시
여러 개의 CIDR이 출력
CIDR:CIDR:CIDR:CIDR....
의 결과가 output 값으로 출력
#〜생략〜 Resources: VPC: Type: AWS::EC2::VPC Properties: CidrBlock: 192.168.0.0/16 nableDnsSupport: true EnableDnsHostnames: true Outputs: Subnets: Description: Output Fn::Cidr Value: !Join [ ":", !Cidr [ 192.168.0.0/16, 10, 8 ] ]
3. Fn::Select
함수의 정의
Fn::Select
함수는 인덱스별 객체 목록에서 객체 1개 반환
- 파라미터 (매개변수)
- 인덱스
- 가져올 객체의 인덱스
- 값=0〜N-1
- N=Array에 포함된 요소의 수
- listOfObjects
- 선택할 객체 목록
- 이 목록은 null일 수 없으며 null 항목을 포함할 수도 없음
- 인덱스
- 반환 값
- 선택된 객체
사용법
Fn::Select: [ index, listOfObjects ] !Select [ index, listOfObjects ]
예시
AvailabilityZone
의 목록 중 0번째 항목 지정
CIDR
의 목록 중 0번째 항목을 지정
#〜생략〜 # ----- # Public Subnet # ----- publicSubnet: Type: AWS::EC2::Subnet Properties: AvailabilityZone: !Select [ 0, !GetAZs '' ] CidrBlock: !Select [0, !Cidr [!GetAtt vpc.CidrBlock, 2, 8]] VpcId: 10.0.0.0/16 Tags: - Key: Name Value: public-subnet #〜생략〜
4. Fn::Split
함수의 정의
Fn::Split
함수는 결과적으로 얻은 문자열 리스트에서 요소를 선택할 수 있도록 문자열을 문자열 값 리스트로 분할한다- 쉼표(
,
)과 같은 구분자를 이용하여 분할 위치 지정한다 -
파라미터 (매개변수)
- delimiter
- 원본 문자열을 분할할 위치를 결정하는 문자열 값
- source string
- 분할하는 문자열의 값
- delimiter
- 반환 값
- 문자열 값의 목록
사용법
Fn::Split: [ delimiter, source string ] !Split [ delimiter, source string ]
예시
지역명을 -
를 기준으로 나누어 output 값으로 설정
#〜생략〜 Resources: MyVPC: Type: AWS::EC2::VPC Properties: CidrBlock: 10.0.0.0/16 Outputs: RegionPart: Value: !Select [1, !Split ["-", !Ref "AWS::Region"]] #〜생략〜
5. Fn::Sub
함수의 정의
Fn::Sub
함수는 입력 문자열의 변수를 지정한 값으로 변환한다.
- 파라미터 (매개변수)
- String
- 변수가 포함된 문자열
VarName
String
파라미터에 포함할 변수의 이름
VarValue
- AWS CloudFormation은 실행 시간일 때 연결된 변수 이름을 이 값으로 변환
- String
- 반환 값
- 모든 변수를 이 값으로 바꾸어 원본 문자열을 반환
사용법
Fn::Sub: - String - Var1Name: Var1Value Var2Name: Var2Value !Sub - String - Var1Name: Var1Value Var2Name: Var2Value Fn::Sub: String !Sub String
예시
Properties: Name: !Sub - www.${Env}.${DnsDomain} - Env: {'Fn::ImportValue': !Sub '${text}-env'} DnsDomain: {'Fn::ImportValue': !Sub '${text}-domain'}
또는
#〜생략〜 Parameters: Env: Default: "dev" Type: String Description: "Environment name" SystemName: Default: "SystemName" Type: String Description: "System name" Resources: EC2instance: Type: AWS::EC2::Instance Properties: ImageId: ami-00000000 InstanceType: "t2.micro" #〜생략〜 Tags: - Key: Name Value: !Sub ${SystemName}-${Env} #〜생략〜
6. Fn::Transform
함수의 정의
Fn::Transform
함수는 스택 템플릿의 일부분인 사용자 지정 처리를 할 매크로 지정
매크로를 통해 검색 및 변경 작업 등의 간단한 작업부터 템플릿 전체의 변형과 동일한 작업까지 템플릿에 대한 사용자 지정 처리 수행
- 파라미터 (매개변수)
- name
- 처리를 실행하려는 매크로 이름
- parameter
- 매크로에 전달할 키-값 쌍으로 지정된 목록 파라미터
- name
- 반환 값
- 처리된 스택 템플릿에 포함된 처리된 템플릿 코드 조각
사용법
Fn::Transform: Name : macro name Parameters : Key : value Transform: Name: macro name Parameters: Key: value
예시
AWS::Include
변형을 호출하여 템플릿 코드의 조각을 검색하는 위치가 InputValue
파라미터에 전달되도록 지정
#〜생략〜 Fn::Transform: Name: AWS::Include Parameters: Location: {Location: {Ref: InputValue}} #〜생략〜
7. Ref
함수의 정의
Ref
함수는 지정된 파라미터 또는 리소스에 관한 정보는 반환한다.
- 파라미터 (매개변수)
- logicalName
- 역참조하고자 하는 리소스 또는 파라미터의 논리 이름
- logicalName
- 반환 값
- 리소스의 물리적 ID 또는 파라미터 값
사용법
Ref: logicalName !Ref logicalName
예시
#〜생략〜 Parameters: KeyPair: Type: AWS::EC2::KeyPair::KeyName Description: KeyPair Name Resources: EC2instance: Type: AWS::EC2::Instance Properties: ImageId: ami-00000000 InstanceType: "t2.micro" #〜생략〜 BlockDeviceMappings: - DeviceName: '/dev/xvda' Ebs: VolumeType: 'gp2' VolumeSize: 10 KeyName: !Ref KeyPair #〜생략〜
본 블로그 게시글을 보시고 문의 사항이 있으신 분들은 클래스메소드코리아 (info@classmethod.kr)로 연락 주시면 빠른 시일 내 담당자가 회신 드릴 수 있도록 하겠습니다 !