av christophe Mias för 12 månader sedan
57
Mer av detta
some common ones, see AWS links for complete list
La fonction intrinsèque Fn::FindInMap
renvoie la valeur correspondant aux clés dans un mappage à deux niveaux déclaré dans la section Mappings
.
{ "Fn::Split" : [ "delimiter", "source string" ] } { "Fn::Split":[ ":", { "Fn::GetAtt":[ "OpenSearchDeliveryStreamLogGroup", "Arn" ] } ] }
This function will split an input string by a defined delimiter. It is usually used together with Fn::Select
and I have never used it standalone.
{ "Fn::Select" : [ index, listOfObjects ] } { "Fn::Select":[ "6", { "Fn::Split":[ ":", { "Fn::GetAtt":[ "OpenSearchDeliveryStreamLogGroup", "Arn" ] } ] } ] }
This function is returning a part of a string from a list of objects. It always starts with the index 0.
I often use it together with the Parameters
attribute if I need to split an ARN and only return a certain part. In this example, it only returns the name of the log group of a provided CloudWatch LogGroup ARN.
Eq. to Substitute:
{ "Fn::Sub" : [ String, { Var1Name: Var1Value, Var2Name: Var2Value } ] } { "Fn::Sub":"arn:aws:logs:${AWS::Region}:${AWS::AccountId}:*" }
This function replaces parts of your input string with variables. The following predefined parameters are supported:
I usually use it to construct an ARN.
{ "Fn::Join" : [ "delimiter", [ comma-delimited list of values ] ] } { "Fn::Join":[ "", [ { "Fn::GetAtt":[ "LogBackupS3Bucket", "Arn" ] }, "/*" ] ] }
This function appends several values to a single one. This is handy if you need to create resources for policies for example. We can use it together with other functions too.
ex: TemplateURL: !Join ["/", [!Ref S3BucketUrl, 'EU-WEST-1/05-APIGatewayNoPrivateLink.yaml']]
{ "Type":"AWS::Lambda::Function", "Properties":{ "FunctionName":"CloudWatchTransformFunction", "Handler":"index.lambda_handler", "Code":{ "ZipFile":{ "Fn::Join":[ "", [ "import boto3\n", "import json\n", "import re\n", "s3Client = boto3.client('s3')\n", "s3Resource = boto3.resource('s3')\n", "def lambda_handler(event, context):\n", " for event in event['Records']:\n", " bucketName = event['s3']['bucket']['name']\n", " objectName = event['s3']['object']['key']\n", " fileName = event['s3']['object']['key'].split('/')[-1]\n", ] ] } }, "Runtime":"python3.8", ... }
One special use case for this function is to add source code to a lambda function. It is better readable than a single line of code.
{ "Fn::GetAtt" : [ "logicalNameOfResource", "attributeName" ] }
{
"Fn::GetAtt":[
"OpenSearchDataStream",
"Arn"
]
}
This function will get the ARN or other details from a created resource. Make sure the resource exists before you reference it. You can use the DependsOn
attribute to ensure this.
ex (Yml): NetworkLoadBalancerTargetGroupArn: !GetAtt LoadBalancer.Outputs.NetworkLoadBalancerTargetGroupArn