Here is what the created resources will look like at the end of the recipe:
We start by creating the standard CloudFormation template properties in step 1.
In step 2, you define the template's parameters that will be used when configuring the resources.
Steps 3 and 4 are where the EFS resources are specified. They consist of an EFS filesystem and mount targets in each of the AZs that will access it.
We then create the security groups in steps 5 and 6: one for the mount targets and one for the instances that are allowed to connect to the mount targets.
As these two security groups contain two-way (or circular) references to each other, we must define the rules between them in separate resources in steps 7 and 8.
In step 9, you save the template with a specific filename so that it can be referenced in the command to launch the stack in step 10.