CloudFormation Intrinsic Functions
Hello Everyone
Welcome to CloudAffaire and this is Debjeet.
In the last blog post, we have created a CloudFormation stack using Designer.
https://cloudaffaire.com/cloudformation-designer/
In this blog post, we are going to discuss intrinsic functions in CloudFormation.
CloudFormation Intrinsic Functions:
AWS CloudFormation provides several built-in functions that help you manage your stacks. You can use intrinsic functions in your templates to assign values to properties that are not available until runtime.
Note: Currently, you can use intrinsic functions in resource properties, outputs, metadata attributes, and update policy attributes.
AWS provides below intrinsic functions.
Fn::Base64
Description:
The intrinsic function Fn::Base64 returns the Base64 representation of the input string. This function is typically used to pass encoded data to Amazon EC2 instances by way of the UserData property.
Syntax:
1 |
Fn::Base64: valueToEncode |
Parameters:
- valueToEncode: The string value you want to convert to Base64.
Return Value: The original string, in Base64 representation.
Fn::Cidr
Description: The intrinsic function Fn::Cidr returns an array of CIDR address blocks. The number of CIDR blocks returned is dependent on the count parameter.
Syntax:
1 2 3 4 |
Fn::Cidr: - ipBlock - count - cidrBits |
Parameters:
- ipBlock: The user-specified CIDR address block to be split into smaller CIDR blocks.
- count: The number of CIDRs to generate. Valid range is between 1 and 256.
- cidrBits: The number of subnet bits for the CIDR. 32-x where x = cidrBits
Return Value: An array of CIDR address blocks.
Fn::FindInMap
Description: The intrinsic function Fn::FindInMap returns the value corresponding to keys in a two-level map that is declared in the Mappings section.
Syntax:
1 |
Fn::FindInMap: [ MapName, TopLevelKey, SecondLevelKey ] |
Parameters:
- MapName: The logical name of a mapping declared in the Mappings section that contains the keys and values.
- TopLevelKey: The top-level key name. Its value is a list of key-value pairs.
- SecondLevelKey: The second-level key name, which is set to one of the keys from the list assigned to TopLevelKey.
Return Value: The value that is assigned to SecondLevelKey.
Fn::GetAtt
Description: The Fn::GetAtt intrinsic function returns the value of an attribute from a resource in the template.
Syntax:
1 |
Fn::GetAtt: [ logicalNameOfResource, attributeName ] |
Parameters:
- logicalNameOfResource: The logical name of the resource that contains the attribute that you want.
- attributeName: The name of the resource-specific attribute whose value you want.
Return Value: The attribute value.
Fn::GetAZs
Description: The intrinsic function Fn::GetAZs returns an array that lists Availability Zones for a specified region.
Syntax:
1 |
Fn::GetAZs: region |
Parameters:
- region: The name of the region for which you want to get the Availability Zones.
Return Value: The list of Availability Zones for the region.
Fn::ImportValue
Description: The intrinsic function Fn::ImportValue returns the value of an output exported by another stack.
Syntax:
1 |
Fn::ImportValue: sharedValueToImport |
Parameters:
- sharedValueToImport: The stack output value that you want to import.
Return Value: The stack output value.
Fn::Join
Description: The intrinsic function Fn::Join appends a set of values into a single value, separated by the specified delimiter. If a delimiter is the empty string, the set of values are concatenated with no delimiter.
Syntax:
1 |
Fn::Join: [ delimiter, [ comma-delimited list of values ] ] |
Parameters:
- delimiter: The value you want to occur between fragments.
- ListOfValues: The list of values you want to be combined.
Return Value: The combined string.
Fn::Select
Description: The intrinsic function Fn::Select returns a single object from a list of objects by index.
Syntax:
1 |
Fn::Select: [ index, listOfObjects ] |
Parameters:
- index: The index of the object to retrieve. This must be a value from zero to N-1.
- listOfObjects: The list of objects to select from. This list must not be null, nor can it have null entries.
Return Value: The selected object.
Fn::Split
Description: To split a string into a list of string values so that you can select an element from the resulting string list.
Syntax:
1 |
Fn::Split: [ delimiter, source string ] |
Parameters:
- delimiter: A string value that determines where the source string is divided.
- source string: The string value that you want to split.
Return Value: A list of string values.
Fn::Sub
Description: The intrinsic function Fn::Sub substitutes variables in an input string with values that you specify.
Syntax:
1 2 3 |
Fn::Sub: - String - { Var1Name: Var1Value, Var2Name: Var2Value } |
Parameters:
- String: Variables (represented as ${MyVarName}) that are substituted with their associated values at runtime.
- VarName: The name of a variable that you included in the String parameter.
- VarValue: The value that AWS CloudFormation substitutes for the associated variable name at runtime.
Return Value: AWS CloudFormation returns the original string, substituting the values for all of the variables.
Fn::Transform
Description: The intrinsic function Fn::Transform specifies a macro to perform custom processing on part of a stack template.
Syntax:
1 2 3 4 |
Fn::Transform: Name : macro name Parameters : Key : value |
Parameters:
- Name: The name of the macro you want to perform the processing.
- Parameters: The list parameters, specified as key-value pairs, to pass to the macro.
Return Value: The processed template snippet to be included in the processed stack template.
Ref
Description: The intrinsic function Ref returns the value of the specified parameter or resource.
Syntax:
1 |
!Ref logicalName |
Parameters:
- logicalName: The logical name of the resource or parameter you want to dereference.
Return Value: The physical ID of the resource or the value of the parameter.
Fn::And
Description: Returns true if all the specified conditions are true, or returns false if any one of the conditions is false.
Syntax:
1 |
!And [condition] |
Parameters:
- condition: A condition that evaluates to true or false.
Return Value: true/false
Fn::Equals
Description: Compares if two values are equal. Returns true if the two values are equal or false if they aren’t.
Syntax:
1 |
!Equals [value_1, value_2] |
Parameters:
- value: A value of any type that you want to compare.
Return Value: true/false
Fn::If
Description: Returns one value if the specified condition is true and another value if the specified condition is false.
Syntax:
1 |
!If [condition_name, value_if_true, value_if_false] |
Parameters:
- condition_name: A reference to a condition in the Conditions section. Use the condition’s name to reference it.
- value_if_true: A value to be returned if the specified condition evaluates to true.
- value_if_false: A value to be returned if the specified condition evaluates to false.
Return Value: value_if_true/value_if_false
Fn::Not
Description: Returns true if condition is false or returns false if condition is true. Fn::Not acts as a NOT operator.
Syntax:
1 |
!Not [condition] |
Parameters:
- condition: A condition such as Fn::Equals that evaluates to true or false.
Return Value: true/false
Fn::Or
Description: Returns true if any one of the conditions is true, or returns false if all of the conditions are false.
Syntax:
1 |
!Or [condition, ...] |
Parameters:
- condition: A condition that evaluates to true or false.
Return Value: true/false
You can create a stack using intrinsic_functions_demo.yaml from below GitHub repo.
https://github.com/CloudAffaire/CloudFormation
The templet uses below intrinsic functions to create a vpc with one public subnet and an EC2 instance.
Fn::Select
Fn::GetAZs
Fn::GetAtt
Fn::FindInMap
Fn::Cidr
Fn::Base64
Fn::Equals
Fn::If
!Sub
Ref:
Hope you have enjoyed this article. In the next blog post, we will discuss drift detection.
To get more details on CloudFormation, please refer below AWS documentation
https://docs.aws.amazon.com/cloudformation/index.html