【大阪 / 横浜】インフラ / サーバーサイドエンジニア募集中!

【大阪 / 横浜】インフラ / サーバーサイドエンジニア募集中!

【25卒向け】AI×バーチャル面接の募集を開始いたしました!

【25卒向け】AI×バーチャル面接の募集を開始いたしました!

【導入実績 500社以上】AWS 構築・運用保守・監視サービス

【導入実績 500社以上】AWS 構築・運用保守・監視サービス

【CentOS 後継】AlmaLinux OS サーバー構築・移行サービス

【CentOS 後継】AlmaLinux OS サーバー構築・移行サービス

【WordPress 専用】クラウドサーバー『ウェブスピード』

【WordPress 専用】クラウドサーバー『ウェブスピード』

【格安】Webサイト セキュリティ自動診断「クイックスキャナー」

【格安】Webサイト セキュリティ自動診断「クイックスキャナー」

【低コスト】Wasabi オブジェクトストレージ 構築・運用サービス

【低コスト】Wasabi オブジェクトストレージ 構築・運用サービス

【予約システム開発】EDISONE カスタマイズ開発サービス

【予約システム開発】EDISONE カスタマイズ開発サービス

【100URLの登録が0円】Webサイト監視サービス『Appmill』

【100URLの登録が0円】Webサイト監視サービス『Appmill』

【中国現地企業に対応】中国クラウド / サーバー構築・運用保守

【中国現地企業に対応】中国クラウド / サーバー構築・運用保守

【YouTube】ビヨンド公式チャンネル「びよまるチャンネル」

【YouTube】ビヨンド公式チャンネル「びよまるチャンネル」

CloudFormationでVPC環境を作ってみよう(テンプレートファイルの書き方編)

皆さんこんにちは
システムソリューション部SREチーム所属の岡崎です。

以前からAWSでの構築に携わることが多く、その中で触れる機会が多かった「CloudFormation」の簡単な使い方を紹介したいと思います。
今回はCloudFormationの実行に必要なテンプレートファイルの記入の仕方を記入します。

CloudFormationとは??

AWSが提供しているAWSクラウド環境内のリソースをyml, json形式のファイルで管理・構築できるサービスとなります。
AWSリソースの起動、停止、削除をそれぞれのコンソールからではなく単一のコンソールからスタックという単位で管理することができます。
CloudFormationで構築されたEC2インスタンスなどに費用は発生しますが、CloudFormation自体に追加料金は発生しません。

VPC周りを構築する

では早速以下のymlファイルを元にCloudFormationを使って、VPCを作ってみましょう

vpc.yml

---
AWSTemplateFormatVersion: '2010-09-09'
 
# パラメータセッティング
Parameters:
  # それぞれの識別子を入力
  ProjectCode:
    Type: String
    Default: test
    Description: Project Code
 # VPCのCIDRを入力
  VPCCidr:
    Type: String
    Default: 10.31.0.0/16
    Description: VPCCidr
  # SubnetのCIDRを入力
  PublicSubnetCidr:
    Type: String
    Default: 10.31.0.0/24
    Description: PublicSubnetCidr

Resources:
# VPC周り
  #VPCの設定
  VPC:
    Type: AWS::EC2::VPC
    Properties:
      CidrBlock: !Ref VPCCidr
      Tags:
        - Key: Name
          Value: !Join [ "-", [ !Ref ProjectCode, vpc ] ]

  # インターネットゲートウェイの設定
  InternetGateway:
    Type: AWS::EC2::InternetGateway
    Properties:
      Tags:
        - Key: Name
          Value: !Join [ "-", [ !Ref ProjectCode, igw ] ]
  AttachGateway:
    Type: AWS::EC2::VPCGatewayAttachment
    Properties:
      VpcId: !Ref VPC
      InternetGatewayId: !Ref InternetGateway
  PublicRouteTableIGW:
    Type: AWS::EC2::RouteTable
    DependsOn: AttachGateway
    Properties:
      VpcId: !Ref VPC
      Tags:
        - Key: Name
          Value: !Join [ "-", [ !Ref ProjectCode, public-route-table-igw ] ]
  PublicRouteIGW:
    Type: AWS::EC2::Route
    DependsOn: AttachGateway
    Properties:
      RouteTableId: !Ref PublicRouteTableIGW
      DestinationCidrBlock: 0.0.0.0/0
      GatewayId: !Ref InternetGateway

  # サブネットの設定
  PublicSubnet:
    Type: AWS::EC2::Subnet
    DependsOn: AttachGateway
    Properties:
      VpcId: !Ref VPC
      AvailabilityZone: ap-northeast-1a
      CidrBlock: !Ref PublicSubnetCidr
      Tags:
        - Key: Name
          Value: !Join [ "-", [ !Ref ProjectCode, public-subnet ] ]

項目ごとの解説

では上記のymlファイルの解説をいたします。

---
AWSTemplateFormatVersion: '2010-09-09'

CloudFormationテンプレートのフォーマットバージョンを記入しています。
現在最新のテンプレートのフォーマットバージョンは2010-09-09であり、
こちらが2019年3月21日時点では唯一有効な値となっております。

# パラメータセッティング
Parameters:
  # それぞれの識別子を入力
  ProjectCode:
    Type: String
    Default: test
    Description: Project Code
 # VPCのCIDRを入力
  VPCCidr:
    Type: String
    Default: 10.31.0.0/16
    Description: VPCCider
  # SubnetのCIDRを入力
  PublicSubnetCidr:
    Type: String
    Default: 10.31.0.0/24
    Description: PublicSubnetCider

それぞれのリソースを作成したいとき、毎回決まった値を作成する場合はいいのですが、
運用しやすいように値を変えたい場合があると思います。
CloudFormationではそれら自由に値を変更したいときに「Parameters」というセクションで設定できます。
サンプルファイルではリソースごとに共通する識別子をProjectCodeとして設定し、
初期値をtestとしていますが、スタックとに自由に入力できるようにしております。
VPCのCidrやSubnetのCidrも初期値として設定していますが、同じようにスタック単位で値を設定できるようにしております。

Resources:
# VPC周り
  #VPCの設定
  VPC:
    Type: AWS::EC2::VPC
    Properties:
      CidrBlock: !Ref VPCCidr
      Tags:
        - Key: Name
          Value: !Join [ "-", [ !Ref ProjectCode, vpc ] ]

AWSのリソースを管理する部分が上記の「Resources」というセクションになります。
VPCの部分は論理IDと言われ、任意のものを設定可能で、他のリソースから呼び出したりも可能です。
しかし、それぞれが一意でないと実行時にエラーが発生してしまいます。
Type:~の部分が実際のAWSリソースを定義する部分になります。
Properties配下がVPC自体の設定の部分になり、さきほどのVPCCidrのパラメーターをRefという関数で呼び出し事前に定義したCIDRを呼び出しCidrBlockに挿入しております。
今回VPCで設定するのはCidrBlockのみになりますが、詳細な設定はAWS公式にありますのでまた確認いただければと思います。
AWS公式「AWS::EC2::VPC」について

また、Tags部分にてわかりやすいようにNameタグを付けております。
こちらもValueの部分を識別子-vpcというタグが付くようにJoinという関数を利用して結合しております。

  AttachGateway:
    Type: AWS::EC2::VPCGatewayAttachment
    Properties:
      VpcId: !Ref VPC
      InternetGatewayId: !Ref InternetGateway
  PublicRouteTableIGW:
    Type: AWS::EC2::RouteTable
    DependsOn: AttachGateway
    Properties:
      VpcId: !Ref VPC
      Tags:
        - Key: Name
          Value: !Join [ "-", [ !Ref ProjectCode, public-route-table-igw ] ]
  PublicRouteIGW:
    Type: AWS::EC2::Route
    DependsOn: AttachGateway
    Properties:
      RouteTableId: !Ref PublicRouteTableIGW
      DestinationCidrBlock: 0.0.0.0/0
      GatewayId: !Ref InternetGateway

  # サブネットの設定
  PublicSubnet:
    Type: AWS::EC2::Subnet
    DependsOn: AttachGateway
    Properties:
      VpcId: !Ref VPC
      AvailabilityZone: ap-northeast-1a
      CidrBlock: !Ref PublicSubnetCidr
      Tags:
        - Key: Name
          Value: !Join [ "-", [ !Ref ProjectCode, public-subnet ] ]

その他のリソースも同じようにType:~でそれぞれのリソースを宣言しPropertiesにて細かい設定を行い、Nameタグを紐づけております。

まとめ

今回はCloudFormationでVPCを構築するために必要なテンプレートファイルの書き方を記入しましたが、
実際の実行部分は長くなってしまうので次回にまた記入したいと思います。
日々手動でAWSリソースを立ち上げることがあると思いますが、こういったツールを使うことで
少しでも工数を減らすことができると思いますので、AWSを利用することが多い方は
利用自体は無料なのでぜひとも利用してほしいとおもいます。

この記事がお役に立てば【 いいね 】のご協力をお願いいたします!
0
読み込み中...
0 票, 平均: 0.00 / 10
5,209
X facebook はてなブックマーク pocket
【2024.6.30 CentOS サポート終了】CentOS サーバー移行ソリューション

【2024.6.30 CentOS サポート終了】CentOS サーバー移行ソリューション

【25卒向け】AI×バーチャル面接の募集を開始いたしました!

【25卒向け】AI×バーチャル面接の募集を開始いたしました!

【大阪 / 横浜】インフラエンジニア・サーバーサイドエンジニア 積極採用中!

【大阪 / 横浜】インフラエンジニア・サーバーサイドエンジニア 積極採用中!

この記事をかいた人

About the author

岡崎潤一郎

スマートフォン向けゲームの移設及び運用経験豊富。

日々、マルチクラウドの運用、サーバ構築・移設をこなす。案件数が増えてきたことから業務の効率を思案中。各クラウドの良さを踏まえてサーバ移設の方法などを思考することが多い。

クラウド間や物理からクラウドなどの移設を実施しているうちに、日本MSP協会が開催しているコンペで二連覇を達成。