LoginSignup
0
0

More than 1 year has passed since last update.

CloudFormationでパブリック、プライベートどちらにも対応したEC2を構築する方法

Posted at

CloudFromationとは

CloudFormationはプログラミング言語やYAML,JSONを使用してAWSリソースを構築出来、AWS環境をテンプレート化しておくことで、同じ環境を作成する際に時間を削減することができます。

今回はYAMLで作成していきますので、JSONに変換したい方は次の記事をご参照下さい。
YAMLからJSONに変換する方法

完成したテンプレート

テンプレート
AWSTemplateFormatVersion: "2010-09-09"  

Metadata:
  AWS::CloudFormation::Interface:
    ParameterGroups:
      -
        Label:
          default: EC2
        Parameters:
          - Ec2Name
          - InstanceType
          - ImageId
          - SshKeyName
          - Ec2PubricIp
          - SecurityGroupIds
          - SubnetId
      -
        Label:
          default: EBS
        Parameters:
          - VolumeType
          - VolumeSizeGiB
          - EbsKmsArn

Parameters:
  Ec2Name:
    Type: String
    Default: 'EC2-NAME'

  InstanceType:
      Type: String
      Default: 't2.micro'
      # 許可するインスタンスタイプ
      AllowedValues:
        - t2.micro
        - t2.nano

  ImageId:
    Type: AWS::EC2::Image::Id

  SshKeyName:
    Type: AWS::EC2::KeyPair::KeyName
 
  Ec2PubricIp:
    Type: String
    AllowedValues:
      - "true"
      - "false"

  SecurityGroupIds:
    Type: AWS::EC2::SecurityGroup::Id
  
  SubnetId:
    Type: AWS::EC2::Subnet::Id
  
  VolumeType:
    Type: String
    AllowedValues:
      - gp2
      - gp3
      - io1
      - io2
      - sc1
      - st1
      - standard
    # 許可するボリュームタイプ
    AllowedValues:
        - gp2

  VolumeSizeGiB:
    Type: Number
    Default: '8'
  
  EbsKmsArn:
    Type: String
    Default: 'KMS-ARN'

Resources:  
  Ec2Instance:
    Type: AWS::EC2::Instance
    Properties:
      NetworkInterfaces: 
        - AssociatePublicIpAddress: !Ref Ec2PubricIp
          DeleteOnTermination: "true" 
          Description: "Public IP Address" 
          SubnetId: !Ref SubnetId
          DeviceIndex: '0' 
          GroupSet:
            - !Ref SecurityGroupIds 
      InstanceType: !Ref InstanceType
      ImageId: !Ref ImageId
      KeyName: !Ref SshKeyName
      BlockDeviceMappings: 
        - DeviceName: /dev/xvda
          Ebs:
            DeleteOnTermination: "true"
            VolumeType: !Ref VolumeType
            VolumeSize: !Ref VolumeSizeGiB
            Encrypted: true
            KmsKeyId: !Ref EbsKmsArn
      Tags:
      - Key: Name
        Value: !Ref Ec2Name

構築手順

1 スタックの新規作成

AWS CloudFormation管理コンソールから、スタックの作成をクリックし、[新しいリソースを使用(標準)]を選択。

2 テンプレートアップロード

[スタックの作成]で、[テンプレートの準備完了]を選択し、[テンプレートファイルのアップロード]>
[ファイルの選択]で、テンプレートを選択。
スクリーンショット 2022-11-22 20.45.18.png

3 パラメータ入力

各パラメータを入力します。スタックの名前は任意の名前を入れる
スクリーンショット 2022-11-27 14.43.19.png

パラメータの詳細

パラメータ名 用途 備考
Ec2Name EC2の名前 例:CF-EC2
InstanceType インスタンスタイプの入力 例:t2.micro
ImageId インスタンスのAMIID 例:ami-xxxxxxxxxxx
SshKeyName SSHのKeyNameを選択 事前に作成が必要になります
Ec2PubricIp EC2にパブリックIPアドレスを付与するか true=付与,false=付与しない
SecurityGroupIds EC2にアタッチするSGを選択 事前に作成が必要になります
SubnetId EC2インスタンスを起動するサブネットを選択 事前に作成が必要になります
VolumeType ボリュームのタイプを選択 例:gp2
VolumeSizeGiB ボリュームのサイズ(GiB) 例:8
EbsKmsArn EBS暗号化のKMSのARN 例:arn:aws:kms:452345234nafofpu:579823475723:key/ssssscasdfsdafsadfas

4 CloudFormation詳細設定

次へを選択。CloudFormationの詳しい設定について次の記事をご覧下さい。
CloudFormationの詳しい設定について

5 最終確認

最終確認を行い送信を選択

6 正常終了確認

ステータスがCREATE_COMPLETEになったらスタック正常終了です。
スクリーンショット 2022-11-22 22.04.50.png

参考にした記事

CloudFormationによる【EC2】の構築

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0