AWS Classroom Series – 21/May/2020

References and concepts

  • Refer
  • Install Visual Studio Code and Cloudformation Extension Preview
  • Format Version
  • Preview of Workflows Preview Preview

Cloudformation Resources

  • Refer Here
  • In Resources section we describe/declare what resources have to be created.
"Resources" : {
    "Logical ID" : {
        "Type" : "Resource type",
        "Properties" : {
            Set of properties
        }
    }
}
Resources:
  Logical ID:
    Type: Resource type
    Properties:
      Set of properties
  • Logical ID is unique id given by template designer/creator
  • Every resource in AWS has a unique type and it will have set of properties Preview
  • In the Resources section, we create multiple resources as per the needs of the application / infra to be deployed

Cloudformation template to create a vpc with 4 subnets

  • Make a note of manual steps
    • Create a vpc
    • Create subnet1 and select the vpc created above Preview
    • Add three more subnets in the same way
  • Create a new folder ‘vpc’ and add a file ‘vpc.json’ to it
  • Now lets add the basic structure with Description and template version
{
    "AWSTemplateFormatVersion": "2010-09-09",
    "Description": "This template is written for learning and it creates vpc with 4 subnets",
}
  • Now since we need to create vpc, lets add resources section
{
    "AWSTemplateFormatVersion": "2010-09-09",
    "Description": "This template is written for learning and it creates vpc with 4 subnets",
    "Resources": {
        
    }
}
  • Lets find aws vpc cloudformation resource docs Refer Here and also look into resources section from here and then fill the template
{
    "AWSTemplateFormatVersion": "2010-09-09",
    "Description": "This template is written for learning and it creates vpc with 4 subnets",
    "Resources": {
        "myvpc": {
            "Type": "AWS::EC2::VPC",
            "Properties": {
                "CidrBlock": "10.0.0.0/16",
                "EnableDnsHostnames": true,
                "Tags": [
                    {
                        "Key": "Name",
                        "Value": "myvpc"
                    }
                ]
            }
        }

    }
}
  • Hint: If you have installed vscode extension as mentioned above, you get help (intellisense) from vscode Preview
  • Now we need to add subnets, As shown below, we need vpc id Preview
  • Lets add one subnet resource Refer Here.
  • While creating template for subnet i need to give vpc id which is not yet created/known i.e. resource with subnet1 id is depending on resource with myvpc id
"subnet1": {
            "Type": "AWS::EC2::Subnet",
            "Properties": {
                "CidrBlock": "10.0.0.0/24",
                "Tags": [
                    {
                        "Key": "Name",
                        "Value": "subnet1"
                    }
                ],
                "VpcId": 

            }
        }
  • Now lets look at documentation of vpc cf resource and navigate to Return Values section Preview
  • According to docs lets refer Ref section over here
  • So adding reference to myvpc in subnet1
{
    "AWSTemplateFormatVersion": "2010-09-09",
    "Description": "This template is written for learning and it creates vpc with 4 subnets",
    "Resources": {
        "myvpc": {
            "Type": "AWS::EC2::VPC",
            "Properties": {
                "CidrBlock": "10.0.0.0/16",
                "EnableDnsHostnames": true,
                "Tags": [
                    {
                        "Key": "Name",
                        "Value": "myvpc"
                    }
                ]
            }
        },
        "subnet1": {
            "Type": "AWS::EC2::Subnet",
            "Properties": {
                "CidrBlock": "10.0.0.0/24",
                "Tags": [
                    {
                        "Key": "Name",
                        "Value": "subnet1"
                    }
                ],
                "VpcId": {
                    "Ref": "myvpc"
                }
            }
        }
    }
}
  • Now adding other 3 subnets to cf template
{
    "AWSTemplateFormatVersion": "2010-09-09",
    "Description": "This template is written for learning and it creates vpc with 4 subnets",
    "Resources": {
        "myvpc": {
            "Type": "AWS::EC2::VPC",
            "Properties": {
                "CidrBlock": "10.0.0.0/16",
                "EnableDnsHostnames": true,
                "Tags": [
                    {
                        "Key": "Name",
                        "Value": "myvpc"
                    }
                ]
            }
        },
        "subnet1": {
            "Type": "AWS::EC2::Subnet",
            "Properties": {
                "CidrBlock": "10.0.0.0/24",
                "Tags": [
                    {
                        "Key": "Name",
                        "Value": "subnet1"
                    }
                ],
                "VpcId": {
                    "Ref": "myvpc"
                }
            }
        },
        "subnet2": {
            "Type": "AWS::EC2::Subnet",
            "Properties": {
                "VpcId": {
                    "Ref": "myvpc"
                },
                "CidrBlock": "10.0.1.0/24",
                "Tags": [
                    {
                        "Key": "Name",
                        "Value": "subnet2"
                    }
                ]
            }
        },
        "subnet3": {
            "Type": "AWS::EC2::Subnet",
            "Properties": {
                "VpcId": {
                    "Ref": "myvpc"
                },
                "CidrBlock": "10.0.2.0/24",
                "Tags": [
                    {
                        "Key": "Name",
                        "Value": "subnet3"
                    }
                ]
            }
        },
        "subnet4": {
            "Type": "AWS::EC2::Subnet",
            "Properties": {
                "VpcId": {
                    "Ref": "myvpc"
                },
                "CidrBlock": "10.0.3.0/24",
                "Tags": [
                    {
                        "Key": "Name",
                        "Value": "subnet4"
                    }
                ]
            }
        }
    }
}
  • Now execute this tempalte and look into results Preview Preview Preview
  • Now if we were asked to create subnet1 in AZ -a subnet2 in Az B etc we need to understand the impact of the change which is mentioned in Update Requires section in Parameter Preview
{
    "AWSTemplateFormatVersion": "2010-09-09",
    "Description": "This template is written for learning and it creates vpc with 4 subnets",
    "Resources": {
        "myvpc": {
            "Type": "AWS::EC2::VPC",
            "Properties": {
                "CidrBlock": "10.0.0.0/16",
                "EnableDnsHostnames": true,
                "Tags": [
                    {
                        "Key": "Name",
                        "Value": "myvpc"
                    }
                ]
            }
        },
        "subnet1": {
            "Type": "AWS::EC2::Subnet",
            "Properties": {
                "CidrBlock": "10.0.4.0/24",
                "Tags": [
                    {
                        "Key": "Name",
                        "Value": "subnet1"
                    }
                ],
                "VpcId": {
                    "Ref": "myvpc"
                },
                "AvailabilityZone": "ap-south-1a"
            }
        },
        "subnet2": {
            "Type": "AWS::EC2::Subnet",
            "Properties": {
                "VpcId": {
                    "Ref": "myvpc"
                },
                "CidrBlock": "10.0.5.0/24",

                "Tags": [
                    {
                        "Key": "Name",
                        "Value": "subnet2"
                    }
                ]
                ,
                "AvailabilityZone": "ap-south-1b"
            }
        },
        "subnet3": {
            "Type": "AWS::EC2::Subnet",
            "Properties": {
                "VpcId": {
                    "Ref": "myvpc"
                },
                "CidrBlock": "10.0.6.0/24",
                "Tags": [
                    {
                        "Key": "Name",
                        "Value": "subnet3"
                    }
                ]
                ,
                "AvailabilityZone": "ap-south-1c"
            }
        },
        "subnet4": {
            "Type": "AWS::EC2::Subnet",
            "Properties": {
                "VpcId": {
                    "Ref": "myvpc"
                },
                "CidrBlock": "10.0.7.0/24",
                "Tags": [
                    {
                        "Key": "Name",
                        "Value": "subnet4"
                    }
                ]
                ,
                "AvailabilityZone": "ap-south-1a"
            }
        }
    }
}
  • Now if we execute this, new subnets will be created when the stack is updated Preview Preview
  • After updating the stack succesfully compare subnet ids Preview

Summary

  • Format Version
  • Resources
  • Visual Studio Code Extension
  • Reference
  • Update Requires

Leave a Reply

This site uses Akismet to reduce spam. Learn how your comment data is processed.

Please turn AdBlock off
Social Network Widget by Acurax Small Business Website Designers

Discover more from Direct DevOps from Quality Thought

Subscribe now to keep reading and get access to the full archive.

Continue reading

Visit Us On FacebookVisit Us On LinkedinVisit Us On Youtube