Sunday, March 7, 2021

AWS - CloudFormation (CF)

 AWS - CloudFormation (CF) - continue  3-07-2021
Class Notes -
- Doing tasks manually takes lots of time
- Creating environent takes time, and efford.
- Requirement keep changing, new services, IP addresss, requirement keep on enhancing.
- Take sometimes months and months or weeks and weeks to make it mature.
- Best way to do the job is using the code.
- You keep changing the doc and will be using different version (use like git)
- Entire code is called stack
- Say first stack is like v.01 and change the doc and new version v.02 and new requirement comes and new version is release and v.03 comes
- You create your whole infrascture automatically.
- Manual tasks you have to create network, install OS, account, permission, firewall and much more.
- But we can built/provision the infrascture using code. We even versioning your entire infrascture.
- Say, your v.03 has problen, you can go back to v.02 (roll back) easily.


VPC (say like a office)
____________________
|                                 |
|                                 |
|                                 |
|                                 |
|___________________|

inside you have subnet

VPC
- Subnet = Lab1
  - EC2 (OS)  -> need AMI to launch
     - EBS
     - EIP (public/ElasticIP)

On your VPC for outside world connectivity, you need to have internet gateway (IG)
- for this you have to create routing table on your subnet.
- You have to use a router to go outside the network.
- Any traffic can come in but I was to use firewall for that. and my security group will filter the connection
- You will allow particular port say only allow port 22 or say 80
or
- you might have your own AMI with private, or there are lots of other usecases.


If you want to automate, any authomate, without kowing the concept, steps, what to do next, you can't automate.
- for eg, you wantt o launch EC2, without subnet and subbnet can't be created without VPC or IG can't be created without VPC.
- Manual or automation, you must know the step/concept.


Got o awl console
- Management service


Go to your notepad
> notepad aws.yaml

- Before automation, create a diagram
- create a step by step plan

Plan:
step1: Create VPC
Step2: Create internet gateway because we will be using public
step3. attach igw to vpc
.....

resource: program: api

Resource is a kind of program, api helps you to attach IGW, Subnet and other resources
google "aws resource type for vpc creating "
Review all the resources available,

for instance
AWS::EC2::Instance

review the property and the values,,


Lets try manual task
1. Launch a vpc
- create a vpc

two things required
name:
IPV4, cidr

go to documents google for resource for vpc
we could not find it, since it is used on ec2, lets try at ec2.

you will find it under ec2
AWS::EC2::VPC

you can copy code directly from the page


Type: AWS::EC2::VPC
Properties:
  CidrBlock: '10.0.0.0/16'
  EnableDnsHostnames: Boolean
  EnableDnsSupport: Boolean
  InstanceTenancy: String
  Tags:
    - Tag



everything comes under resources

Resources:
  VPC:
    Type: AWS::EC2::VPC
     Properties:
      CidrBlock: '10.0.0.0/16'
      EnableDnsHostnames: true
      EnableDnsSupport: true
      InstanceTenancy: default
      Tags:         # you make a habit if adding tag
       - Key: name        # key and value
         Value: My VPC CF

Look att he doc and what are the required fields.


Enable dns on ec2 by clicking on action and enable hostname


Now go and launch.

Now, go to your CF,
create
upload this templace

CF automatically assign v1 for the first upload.

At the bottom of the page, you see designer viiew before you upload the code.

You can even drag and drop and code is created.
You can design entire infrascture this was as well.after design, you can launch to create.

Specify stack-name after you upload the code

stack name: mystack-aws

next
review the page and click on create stack.

now, without going to VPC portal, your vpc is created the way you want.

you see create in progress... and finally created.

go to your VPCs and you will se it.
click on vpc -> action and enable dns hostname

Now, we have to create internet gateway


Now, we add internet gateway
always give better name.
Always give name tag

Resources:
  VPC:
    Type: AWS::EC2::VPC
     Properties:
      CidrBlock: '10.0.0.0/16'
      EnableDnsHostnames: true
      EnableDnsSupport: true
      InstanceTenancy: default
      Tags:         
       - Key: name        
         Value: My VPC CF

InternetGateway:
  Type: AWS::EC2::InternetGateway
  Properties:
    Tags:
      - Key: Name
         Value: My IGW CF

We made change to our code. we already completed first part VPC
we are going to create second part.

no reason to create a new stack. we will update
go to your stack and click on update and upload your template

click on view and design.. you will see one more resource
VPC and IGW

click next next

If you get any error, check if indent is in place properly.

at the botton of the page, it shows change set preview

now launcing IGW

go to your stack and go to your resources, you see new resource is added

step3. connect IGW to VPC

google
do you have any resouece to attach igw to vpc

We see, vpc attachment

Resources:
  VPC:
    Type: AWS::EC2::VPC
     Properties:
      CidrBlock: '10.0.0.0/16'
      EnableDnsHostnames: true
      EnableDnsSupport: true
      InstanceTenancy: default
      Tags:         
       - Key: name        
         Value: My VPC CF

  InternetGateway:
    Type: AWS::EC2::InternetGateway
    Properties:
      Tags:
        - Key: Name
           Value: My IGW CF

  VPCGatewayAttachment
    Type: AWS::EC2::VPCGatewayAttachment
    Properties:    #
     VpcId:    # we don't hard code here, but we reference it.
         Ref: VPC    # reference of vpc - it will go and pick the only id
      InternetGatewayId:
         Ref: InternetGateway    # go to this reference

# The above line can be written as
#     VpcId:    !Ref VPC    
#      InternetGatewayId: !Ref InternetGateway

manually you select IGW and click on action and specify the vpc you want .. here you specify the vpc id.
go to vpc document, and read,,, return value
ref function

fn::GetAtt
and other functions


now upload this code to your CF- stack

go to designer view  -> next
we are going to add new resource

now, we create vpc,, IGW created and attached.

Now, next plan is to create subnet

step4 create subnet

collect the info you need

go to google and get yaml

we have a function called select

  SubnetA:
     Type: AWS::EC2::Subnet
      Properties:
        VpcId: ! Ref myVPC
        CidrBlock: 10.0.0.0/24
 #       AvailabilityZone: "us-east-1a"    We want to get all az not hardcode
         AvailabilityZone: ! GetAZs    # getAZs is the function
         AvailabilityZone: ! Select  [0, GetAZs ]    # getAZs is the function
        Tags:
        - Key: Name
          Value: mysubnet1

use select funtion

gogole cloudformation getazs function

Resources:
  VPC:
    Type: AWS::EC2::VPC
     Properties:
      CidrBlock: '10.0.0.0/16'
      EnableDnsHostnames: true
      EnableDnsSupport: true
      InstanceTenancy: default
      Tags:         
       - Key: name        
         Value: My VPC CF

  InternetGateway:
    Type: AWS::EC2::InternetGateway
    Properties:
      Tags:
        - Key: Name
           Value: My IGW CF

  VPCGatewayAttachment
    Type: AWS::EC2::VPCGatewayAttachment
    Properties:    #
     VpcId:    # we don't hard code here, but we reference it.
         Ref: VPC    # reference of vpc - it will go and pick the only id
      InternetGatewayId:
         Ref: InternetGateway    # go to this reference

  SubnetA:
     Type: AWS::EC2::Subnet
      Properties:
        VpcId: ! Ref myVPC
        CidrBlock: 10.0.0.0/24
         AvailabilityZone: ! Select  [0, GetAZs ]
        Tags:
        - Key: Name
          Value: mysubnetlab1

now, go and upload your code on CF-Stack

next-> next
here is something impacted, we see no ...
update it. now, your new subnet is going to create.

Now, we want to this subnet to have outside world connection


Step 6

  RouteTable:
      Type: AWS::EC2::RouteTable
      Properties:
        VpcId:  ! Ref myVPC
        Tags:
        - Key: Name
          Value: my RT

modify the upload to the stack..

now, routing table is created
now, click on routing table
this routing table does not have capability to go to internet.

for this one, you have to go to extra resource

go to route


  InternetRoute:
    Type: AWS::EC2::Route
    DependsOn: GatewayToInternet
    Properties:
       RouteTableId: !  Ref: myRouteTable
       DestinationCidrBlock: 0.0.0.0/0
       GatewayId: !  Ref myInternetGateway

update your code

Resources:
  VPC:
    Type: AWS::EC2::VPC
     Properties:
      CidrBlock: '10.0.0.0/16'
      EnableDnsHostnames: true
      EnableDnsSupport: true
      InstanceTenancy: default
      Tags:         
       - Key: name        
         Value: My VPC CF

  InternetGateway:
    Type: AWS::EC2::InternetGateway
    Properties:
      Tags:
        - Key: Name
           Value: My IGW CF

  VPCGatewayAttachment
    Type: AWS::EC2::VPCGatewayAttachment
    Properties:    #
     VpcId:    # we don't hard code here, but we reference it.
         Ref: VPC    # reference of vpc - it will go and pick the only id
      InternetGatewayId:
         Ref: InternetGateway    # go to this reference

  SubnetA:
     Type: AWS::EC2::Subnet
      Properties:
        VpcId: ! Ref myVPC
        CidrBlock: 10.0.0.0/24
         AvailabilityZone: ! Select  [0, GetAZs ]
        Tags:
        - Key: Name
          Value: mysubnetlab1

  RouteTable:
      Type: AWS::EC2::RouteTable
      Properties:
        VpcId:  ! Ref myVPC
        Tags:
        - Key: Name
          Value: my RT

  InternetRoute:
    Type: AWS::EC2::Route
    DependsOn: GatewayToInternet
    Properties:
       RouteTableId: !  Ref: myRouteTable
       DestinationCidrBlock: 0.0.0.0/0
       GatewayId: !  Ref myInternetGateway


update your stack, check the designers view,

and update the stack.

we we have lots of resources...

there is something failed.

when something fails, it automatically roll back. to previous version.

lets review the code..


Resources:
  VPC:
    Type: AWS::EC2::VPC
     Properties:
      CidrBlock: '10.0.0.0/16'
      EnableDnsHostnames: true
      EnableDnsSupport: true
      InstanceTenancy: default
      Tags:         
       - Key: name        
         Value: My VPC CF

  InternetGateway:
    Type: AWS::EC2::InternetGateway
    Properties:
      Tags:
        - Key: Name
           Value: My IGW CF

  VPCGatewayAttachment
    Type: AWS::EC2::VPCGatewayAttachment
    Properties:    #
     VpcId:    # we don't hard code here, but we reference it.
         Ref: VPC    # reference of vpc - it will go and pick the only id
      InternetGatewayId:
         Ref: InternetGateway    # go to this reference

  SubnetA:
     Type: AWS::EC2::Subnet
      Properties:
        VpcId: ! Ref myVPC
        CidrBlock: 10.0.0.0/24
         AvailabilityZone: ! Select  [0, GetAZs ]
        Tags:
        - Key: Name
          Value: mysubnetlab1

  RouteTable:
      Type: AWS::EC2::RouteTable
      Properties:
        VpcId:  ! Ref myVPC
        Tags:
        - Key: Name
          Value: my RT

  InternetRoute:
    Type: AWS::EC2::Route
    DependsOn: GatewayToInternet
    Properties:
       RouteTableId: !  Ref: myRouteTable
       DestinationCidrBlock: 0.0.0.0/0
       GatewayId: !  Ref InternetGateway    # our gatewayid was wrong...

lets update the stack,
it looks good now.

now, attach routing table to subnet

subnet, routing table association

look for resource type

step 8

what subnet you wantt o associate : SubnetA

  mySubnetRouteTableAssociation:
    Type: AWS::EC2::SubnetRouteTableAssociation
    Properties:
      SubnetId: ! Ref mySubnet
      RouteTableId: ! Ref myRouteTable

add this code and update the stack.


Resources:
  VPC:
    Type: AWS::EC2::VPC
     Properties:
      CidrBlock: '10.0.0.0/16'
      EnableDnsHostnames: true
      EnableDnsSupport: true
      InstanceTenancy: default
      Tags:         
       - Key: name        
         Value: My VPC CF

  InternetGateway:
    Type: AWS::EC2::InternetGateway
    Properties:
      Tags:
        - Key: Name
           Value: My IGW CF

  VPCGatewayAttachment
    Type: AWS::EC2::VPCGatewayAttachment
    Properties:    #
     VpcId:    # we don't hard code here, but we reference it.
         Ref: VPC    # reference of vpc - it will go and pick the only id
      InternetGatewayId:
         Ref: InternetGateway    # go to this reference

  SubnetA:
     Type: AWS::EC2::Subnet
      Properties:
        VpcId: ! Ref myVPC
        CidrBlock: 10.0.0.0/24
         AvailabilityZone: ! Select  [0, GetAZs ]
        Tags:
        - Key: Name
          Value: mysubnetlab1

  RouteTable:
      Type: AWS::EC2::RouteTable
      Properties:
        VpcId:  ! Ref myVPC
        Tags:
        - Key: Name
          Value: my RT

  InternetRoute:
    Type: AWS::EC2::Route
    DependsOn: GatewayToInternet
    Properties:
       RouteTableId: !  Ref: myRouteTable
       DestinationCidrBlock: 0.0.0.0/0
       GatewayId: !  Ref InternetGateway    # our gatewayid was wrong...

  mySubnetRouteTableAssociation:
    Type: AWS::EC2::SubnetRouteTableAssociation
    Properties:
      SubnetId: ! Ref mySubnet
      RouteTableId: ! Ref myRouteTable




  MyEC2Instance:
    Type: AWS::EC2::Instance
    Properties:
      ImageId: "ami-79fd7eee"  # or ImageID: ! Reg AMI
      InstanceType: ! Ref InstanceType
      KeyName: "testkey"    # fix your key # !Ref KeyName
      SubnetId: !Ref SubnetA
      Tags:
      - Key: Name
        Value: My-Test-env


      - Key: Auther
        Value: Sam

      BlockDeviceMappings:
      - DeviceName: "/dev/sdm"
        Ebs:
          VolumeType: "io1"
          Iops: "200"
          DeleteOnTermination: "false"
          VolumeSize: "20"
      - DeviceName: "/dev/sdk"
        NoDevice: {}


You can define default values for ami
you can go to doc and review what values are required, which one not requirred.

If you don't speciy instance type: it will puck t1.small



Now, update the stack

parameters:
  AMI:
    Type: String
     Description: My custom AMI for web server
     Default: ani-04054jdf83u

  InstanceType
    Type: String
    Description: My instance type
    Default: t2.micro

  KeyName
    Type: String
    Description: my ssh key
    Default: none

Resources:
  VPC:
    Type: AWS::EC2::VPC
     Properties:
      CidrBlock: '10.0.0.0/16'
      EnableDnsHostnames: true
      EnableDnsSupport: true
      InstanceTenancy: default
      Tags:         
       - Key: name        
         Value: My VPC CF

  InternetGateway:
    Type: AWS::EC2::InternetGateway
    Properties:
      Tags:
        - Key: Name
           Value: My IGW CF

  VPCGatewayAttachment
    Type: AWS::EC2::VPCGatewayAttachment
    Properties:    #
     VpcId:    # we don't hard code here, but we reference it.
         Ref: VPC    # reference of vpc - it will go and pick the only id
      InternetGatewayId:
         Ref: InternetGateway    # go to this reference

  SubnetA:
     Type: AWS::EC2::Subnet
      Properties:
        VpcId: ! Ref myVPC
        CidrBlock: 10.0.0.0/24
         AvailabilityZone: ! Select  [0, GetAZs ]
        Tags:
        - Key: Name
          Value: mysubnetlab1

  RouteTable:
      Type: AWS::EC2::RouteTable
      Properties:
        VpcId:  ! Ref myVPC
        Tags:
        - Key: Name
          Value: my RT

  InternetRoute:
    Type: AWS::EC2::Route
    DependsOn: GatewayToInternet
    Properties:
       RouteTableId: !  Ref: myRouteTable
       DestinationCidrBlock: 0.0.0.0/0
       GatewayId: !Ref InternetGateway    

  mySubnetRouteTableAssociation:
    Type: AWS::EC2::SubnetRouteTableAssociation
    Properties:
      SubnetId: ! Ref mySubnet
      RouteTableId: !Ref myRouteTable

  MyEC2Instance:
    Type: AWS::EC2::Instance
    Properties:
      ImageId: !Reg AMI
      InstanceType: ! Ref InstanceType
      KeyName: !Ref KeyName
      SubnetId: !Ref SubnetA
      Tags:
      - Key: Name
        Value: My-Test-env


Update the stack..

now, this failed
lets review the code


parameters:
  AMI:
    Type: String
     Description: My custom AMI for web server
     Default: ani-04054jdf83u

  InstanceType
    Type: String
    Description: My instance type
    Default: t2.micro

  KeyName
    Type: String
    Description: my ssh key
    Default: none

Resources:
  VPC:
    Type: AWS::EC2::VPC
     Properties:
      CidrBlock: '10.0.0.0/16'
      EnableDnsHostnames: true
      EnableDnsSupport: true
      InstanceTenancy: default
      Tags:         
       - Key: name        
         Value: My VPC CF

  InternetGateway:
    Type: AWS::EC2::InternetGateway
    Properties:
      Tags:
        - Key: Name
           Value: My IGW CF

  VPCGatewayAttachment
    Type: AWS::EC2::VPCGatewayAttachment
    Properties:    #
     VpcId:    # we don't hard code here, but we reference it.
         Ref: VPC    # reference of vpc - it will go and pick the only id
      InternetGatewayId:
         Ref: InternetGateway    # go to this reference

  SubnetA:
     Type: AWS::EC2::Subnet
      Properties:
        VpcId: ! Ref myVPC
        CidrBlock: 10.0.0.0/24
         AvailabilityZone: ! Select  [0, GetAZs ]
        Tags:
        - Key: Name
          Value: mysubnetlab1

  RouteTable:
      Type: AWS::EC2::RouteTable
      Properties:
        VpcId:  ! Ref myVPC
        Tags:
        - Key: Name
          Value: my RT

  InternetRoute:
    Type: AWS::EC2::Route
    DependsOn: GatewayToInternet
    Properties:
       RouteTableId: !Ref: myRouteTable
       DestinationCidrBlock: 0.0.0.0/0
       GatewayId: !Ref InternetGateway    

  mySubnetRouteTableAssociation:
    Type: AWS::EC2::SubnetRouteTableAssociation
    Properties:
      SubnetId: ! Ref mySubnet
      RouteTableId: !Ref myRouteTable


 MyFirstOSbyCF:
    Type: AWS::EC2::Instance
    Properties:
      ImageId: !Reg AMI
      SubnetId: !Ref SubnetA
      InstanceType: !Ref InstanceType
      AvailabilityZone: ap-south-1a
      Tags:
      - Key: Name
        Value: My-Test-env


attach the key manually..

security group is conditional so we need it

we have to add security group.


Now, we don't have public IP enabled
you have to goto eip and attach eip

go to document to see if there is EIP create option


  MyEIP:
    Type: AWS::EC2::EIP
    Properties:
      InstanceId: !Ref MyFirstOSbyCF:

still need to create security group and attach ..


  InstanceSecurityGroup:
    Type: AWS::EC2::SecurityGroup
    Properties:
        GroupDescription: Allow http to client host
        VpcId:  !Ref: VPC
        SecurityGroupIngress:
        - IpProtocol: tcp
          FromPort: 80
          ToPort: 80
          CidrIp: 0.0.0.0/0
        SecurityGroupEgress:
        - IpProtocol: -1    # all the protocols allow
          FromPort: 80
          ToPort: 80
          CidrIp: 0.0.0.0/0





parameters:
  AMI:
    Type: String
     Description: My custom AMI for web server
     Default: ani-04054jdf83u

  InstanceType
    Type: String
    Description: My instance type
    Default: t2.micro

  KeyName
    Type: String
    Description: my ssh key
    Default: none

Resources:
  VPC:
    Type: AWS::EC2::VPC
     Properties:
      CidrBlock: '10.0.0.0/16'
      EnableDnsHostnames: true
      EnableDnsSupport: true
      InstanceTenancy: default
      Tags:         
       - Key: name        
         Value: My VPC CF

  InternetGateway:
    Type: AWS::EC2::InternetGateway
    Properties:
      Tags:
        - Key: Name
           Value: My IGW CF

  VPCGatewayAttachment
    Type: AWS::EC2::VPCGatewayAttachment
    Properties:    #
     VpcId:    # we don't hard code here, but we reference it.
         Ref: VPC    # reference of vpc - it will go and pick the only id
      InternetGatewayId:
         Ref: InternetGateway    # go to this reference

  SubnetA:
     Type: AWS::EC2::Subnet
      Properties:
        VpcId: ! Ref myVPC
        CidrBlock: 10.0.0.0/24
         AvailabilityZone: ! Select  [0, GetAZs ]
        Tags:
        - Key: Name
          Value: mysubnetlab1

  RouteTable:
      Type: AWS::EC2::RouteTable
      Properties:
        VpcId:  ! Ref myVPC
        Tags:
        - Key: Name
          Value: my RT

  InternetRoute:
    Type: AWS::EC2::Route
    DependsOn: GatewayToInternet
    Properties:
       RouteTableId: !Ref: myRouteTable
       DestinationCidrBlock: 0.0.0.0/0
       GatewayId: !Ref InternetGateway    

  mySubnetRouteTableAssociation:
    Type: AWS::EC2::SubnetRouteTableAssociation
    Properties:
      SubnetId: ! Ref mySubnet
      RouteTableId: !Ref myRouteTable


 MyFirstOSbyCF:
    Type: AWS::EC2::Instance
    Properties:
      ImageId: !Reg AMI
      SubnetId: !Ref SubnetA
      InstanceType: !Ref InstanceType
      AvailabilityZone: ap-south-1a
      Tags:
      - Key: Name
        Value: My-Test-env

  MyEIP:
    Type: AWS::EC2::EIP
    Properties:
      InstanceId: !Ref MyFirstOSbyCF:

  InstanceSecurityGroup:
    Type: AWS::EC2::SecurityGroup
    Properties:
        GroupDescription: Allow http to client host
        VpcId:  !Ref: VPC
        SecurityGroupIngress:
        - IpProtocol: tcp
          FromPort: 80
          ToPort: 80
          CidrIp: 0.0.0.0/0
        SecurityGroupEgress:
        - IpProtocol: -1    # all the protocols allow
          FromPort: 80
          ToPort: 80
          CidrIp: 0.0.0.0/0

update the stack

you have to attach


 MyFirstOSbyCF:
    Type: AWS::EC2::Instance
    Properties:
      ImageId: !Reg AMI
      SubnetId: !Ref SubnetA
      InstanceType: !Ref InstanceType
      SecurityGroupIDs: - !Ref InstanceSecurityGroup
      AvailabilityZone: ap-south-1a
      Tags:
      - Key: Name
        Value: My-Test-env

update your os  part and update the stack


parameters:
  AMI:
    Type: String
     Description: My custom AMI for web server
     Default: ani-04054jdf83u

  InstanceType
    Type: String
    Description: My instance type
    Default: t2.micro

  KeyName
    Type: String
    Description: my ssh key
    Default: none

Resources:
  VPC:
    Type: AWS::EC2::VPC
     Properties:
      CidrBlock: '10.0.0.0/16'
      EnableDnsHostnames: true
      EnableDnsSupport: true
      InstanceTenancy: default
      Tags:         
       - Key: name        
         Value: My VPC CF

  InternetGateway:
    Type: AWS::EC2::InternetGateway
    Properties:
      Tags:
        - Key: Name
           Value: My IGW CF

  VPCGatewayAttachment
    Type: AWS::EC2::VPCGatewayAttachment
    Properties:    #
     VpcId:    # we don't hard code here, but we reference it.
         Ref: VPC    # reference of vpc - it will go and pick the only id
      InternetGatewayId:
         Ref: InternetGateway    # go to this reference

  SubnetA:
     Type: AWS::EC2::Subnet
      Properties:
        VpcId: ! Ref myVPC
        CidrBlock: 10.0.0.0/24
         AvailabilityZone: ! Select  [0, GetAZs ]
        Tags:
        - Key: Name
          Value: mysubnetlab1

  RouteTable:
      Type: AWS::EC2::RouteTable
      Properties:
        VpcId:  ! Ref myVPC
        Tags:
        - Key: Name
          Value: my RT

  InternetRoute:
    Type: AWS::EC2::Route
    DependsOn: GatewayToInternet
    Properties:
       RouteTableId: !Ref: myRouteTable
       DestinationCidrBlock: 0.0.0.0/0
       GatewayId: !Ref InternetGateway    

  mySubnetRouteTableAssociation:
    Type: AWS::EC2::SubnetRouteTableAssociation
    Properties:
      SubnetId: ! Ref mySubnet
      RouteTableId: !Ref myRouteTable

 MyFirstOSbyCF:
    Type: AWS::EC2::Instance
    Properties:
      ImageId: !Reg AMI
      SubnetId: !Ref SubnetA
      InstanceType: !Ref InstanceType
      SecurityGroupIDs: - !Ref InstanceSecurityGroup
      AvailabilityZone: ap-south-1a
      Tags:
      - Key: Name
        Value: My-Test-env

  MyEIP:
    Type: AWS::EC2::EIP
    Properties:
      InstanceId: !Ref MyFirstOSbyCF:

  InstanceSecurityGroup:
    Type: AWS::EC2::SecurityGroup
    Properties:
        GroupDescription: Allow http to client host
        VpcId:  !Ref: VPC
        SecurityGroupIngress:
        - IpProtocol: tcp
          FromPort: 80
          ToPort: 80
          CidrIp: 0.0.0.0/0
        SecurityGroupEgress:
        - IpProtocol: -1    # all the protocols allow
          FromPort: 80
          ToPort: 80
          CidrIp: 0.0.0.0/0

now, update and run, instance does not have to terminate. it is updated successfully...


when our instance starts, what the public ip associated on instance, we want it to be printed


Outputs:
  PublicIp:
    Value:
      fn:: GetAtt:
         -  MyFirstOSbyCF    # go to this os and retireve ip
         - PublicIPs

go to document of ec2 instance
look for written values..


now, go and update the code


use function to retireve az, public/private ip and other values

parameter is input function

output is output function



==========================

In summary

Plan:

CF: resoruce: program: api

step1. Create VPC
name
cidr

step2: create IGW

Step3: attach IGW to VPC
vpcid

Step4: Subnet
subnet
AZ

Now, we want to this subnet to have outside world connection
Step5: Create routing table

Step 6: create route
0.0.0./0: igw

step7: Attach Routing table to Subnet
after creating routing table,
routing table to the subnet id

step8: route table association

step 9. launch ec2 instance



No comments:

Post a Comment

Git branch show detached HEAD

  Git branch show detached HEAD 1. List your branch $ git branch * (HEAD detached at f219e03)   00 2. Run re-set hard $ git reset --hard 3. ...