【AWS】CloudFormation で Amazon EC2 インスタンスを作成する手順【VPC&サブネット&セキュリティグループ&EC2インスタンス】【Part.2】

前回 CloudFormation で Amazon EC2 インスタンスを作成し、インターネット経由でアクセスを試みましたが、セキュリティグループの設定が抜けていたため、今回は「セキュリティグループ」及び「タイムゾーン」の設定も含め CloudFormation で Amazon EC2 インスタンスを作成する手順を解説します。

 

 

 

 

CloudFormation でリソースを作成する順番

以下の順番でリソースを作成します。

  1. VPC
  2. サブネット(Subnet)
  3. セキュリティグループ(Security Group)
  4. EC2 インスタンス

 

以下、それぞれのリソースについて分解して解説し、最後に1つにまとめます。

 

 

 

CloudFormation で VPC を作成する

CloudFormation で VPC を作成します。

VPC の設定は以下で説明する 4 種類のみとなります。

 

【VPC の作成】

AWSTemplateFormatVersion: “2010-09-09” 
Description: VPC and Subnet And SecurityGroup and EC2 Create 
Resources: 
  MyVPC01: 
    Type: AWS::EC2::VPC 
    Properties: 
      CidrBlock: 10.0.0.0/16 
      EnableDnsSupport: ‘true’ 
      EnableDnsHostnames: ‘false’ 
      InstanceTenancy: dedicated 
      Tags: 
      – Key: Name 
        Value: MyVPC01 
        

 

■CidrBlock

VPC に含める CIDR ブロックを設定します。

例: “10.0.0.0/16″。

 

■EnableDnsSupport

VPC に対して DNS 解決がサポートされているかどうかを指定します。

この属性が true の場合、Amazon DNS サーバーはインスタンスの DNS ホスト名を対応する IP アドレスに解決します。それ以外の場合は解決しません。

デフォルトでは、値は true に設定されます。

 

■EnableDnsHostnames

VPC 内に起動されるインスタンスが DNS ホスト名を取得するかどうかを指定します。

この属性が true の場合、VPC 内のインスタンスは DNS ホスト名を取得します。それ以外の場合は取得しません。

EnableDnsHostnames を true に設定できるのは、EnableDnsSupport 属性も true に設定した場合のみです。

デフォルトでは、値は false に設定されます。

 

■InstanceTenancy 

ハードウェア専有インスタンスの属性を設定します。

  • default ← インスタンスは共有するハードウェアで実行されます。
  • dedicated ← インスタンスはシングルテナントのハードウェアで実行されます。
  • host ← インスタンスは Dedicated Host で実行します。Dedicated Host はユーザーが設定を制御できる隔離サーバーです。

 

 

 

CloudFormation で Subnet(サブネット)を作成する

CloudFormation で Subnet を作成します。

 

【Subnet(サブネット)の作成】

  MySubnet01: 
    Type: AWS::EC2::Subnet 
    Properties: 
      VpcId: 
        Ref: MyVPC01 
      CidrBlock: 10.0.0.0/24 
      AvailabilityZone: ap-northeast-1a 

 

■AvailabilityZone

サブネットを作成するアベイラビリティーゾーンです。デフォルトは、AWS によってゾーンが選択されます。

 

■CidrBlock

CIDR ブロックを設定します。

 

■VpcId

サブネットを作成する VPC の ID を含む Ref 構造です。

VPC ID は、「 Ref: VPCID 」のように、Ref プロパティの値として設定します。

 

 

 

 

CloudFormation でセキュリティグループを作成する

CloudFormation でセキュリティグループを新規作成し EC2 インスタンスに割り当てます。

 

【セキュリティグループ作成の構文】

Type: AWS::EC2::SecurityGroup 
Properties:  
  GroupName: String ← セキュリティグループの名前を設定します。 
  GroupDescription: String ← セキュリティグループの説明を記載します。 
  SecurityGroupEgress: 
    – Security Group Rule ← Outbound ルール(アウトバウンドルール)を設定します。 
  SecurityGroupIngress: 
    – Security Group Rule ← Inbound ループ(インバウンドルール)を設定します。 
  Tags: 
    – Resource Tag ← リソースに付けるタグを設定します。 
  VpcId: String ← VPC の ID を設定します。

 

 

 

 

【インターネット経由で SSH ログインを有効にする場合】

InstanceSecurityGroup: 
  Type: AWS::EC2::SecurityGroup 
  Properties: 
    GroupName: SecurityGroupForOnlySSH22 
    GroupDescription: Allow SSH22 from client host 
    VpcId: 
      Ref: vpc-34776f56 
    SecurityGroupIngress: 
    – IpProtocol: tcp 
      FromPort: 22 
      ToPort: 22 
      CidrIp: 0.0.0.0/0 

 

■GroupName

セキュリティグループの名前を設定します。

有効な値

  • Constraints(制約): Up to 255 characters in length.(255文字まで) Cannot start with sg-.(sg-で始めることはできない)
  • Constraints for EC2-Classic: ASCII characters
  • Constraints for EC2-VPC(VPCの制約): a-z, A-Z, 0-9, spaces, and ._-:/()#,@[]+=&;{}!$*

 

■GroupDescription

セキュリティグループの説明。

有効な値

  • Constraints(制約): Up to 255 characters in length.(255文字まで)
  • Constraints for EC2-Classic: ASCII characters
  • Constraints for EC2-VPC(VPCの制約): a-z, A-Z, 0-9, spaces, and ._-:/()#,@[]+=&;{}!$*

 

■SecurityGroupIngress

以下に続く構文でインバウンドルールを設定します。

 

■IpProtocol

IP プロトコルの名前または番号を設定します。

 

■FromPort

TCP および UDP プロトコルのポート範囲の開始番号、または ICMP タイプの番号を設定します。

 

■ToPort

TCP および UDP プロトコルのポート範囲の終了番号、または ICMP コードを設定します。

 

 

 

 

CloudFormation で EC2 インスタンスを作成する

【EC2 インスタンスの作成】

  # EC2 
  MyEC2Instance01: 
    Type: AWS::EC2::Instance 
    Properties: 
      AvailabilityZone: ap-northeast-1a 
      # Red Hat Enterprise Linux 8 (HVM) 
      ImageId: ami-03c6a4362c5fb8c61 
      KeyName: RedHat_20190429 
      #InstanceType: t2.micro 
      # Attach Security Group 
      #SecurityGroupIds: 
      #  – !GetAtt InstanceSecurityGroup.GroupId 
      NetworkInterfaces: 
        – AssociatePublicIpAddress: true 
          DeviceIndex: “0” 
          GroupSet:  
            – Ref: InstanceSecurityGroup 
          SubnetId:  
            Ref: MySubnet01

 

 

 

 

全部を足したテンプレート

上記各リソースを作成するテンプレートを総合したテンプレートです。

AWSTemplateFormatVersion: “2010-09-09” 
Description: VPC and Subnet And SecurityGroup and EC2 Create 
Resources: 
  MyVPC01: 
    Type: AWS::EC2::VPC 
    Properties: 
      CidrBlock: 10.0.0.0/16 
      EnableDnsSupport: ‘true’ 
      EnableDnsHostnames: ‘false’ 
      InstanceTenancy: dedicated 
      Tags: 
      – Key: Name 
        Value: MyVPC01 
         
  MySubnet01: 
    Type: AWS::EC2::Subnet 
    Properties: 
      VpcId: 
        Ref: MyVPC01 
      CidrBlock: 10.0.0.0/24 
      AvailabilityZone: ap-northeast-1a 
 
  # SecurityGroup Create 
  InstanceSecurityGroup: 
    Type: AWS::EC2::SecurityGroup 
    Properties: 
      GroupDescription: SSH for Client 
      SecurityGroupIngress: 
        – IpProtocol: tcp 
          FromPort: 22 
          ToPort: 22 
          CidrIp: 0.0.0.0/0 
      # VPC Attach 
      VpcId:  
        Ref: MyVPC01 
         
  # EC2 
  MyEC2Instance01: 
    Type: AWS::EC2::Instance 
    Properties: 
      AvailabilityZone: ap-northeast-1a 
      # Red Hat Enterprise Linux 8 (HVM) 
      ImageId: ami-03c6a4362c5fb8c61 
      KeyName: RedHat_20190429 
      #InstanceType: t2.micro 
      # Attach Security Group 
      #SecurityGroupIds: 
      #  – !GetAtt InstanceSecurityGroup.GroupId 
      NetworkInterfaces: 
        – AssociatePublicIpAddress: true 
          DeviceIndex: “0” 
          GroupSet:  
            – Ref: InstanceSecurityGroup 
          SubnetId:  
            Ref: MySubnet01 
 

 

 

 

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

コメント

コメントする

AlphaOmega Captcha Medica  –  What Do You See?
     
 

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください