LoginSignup
1
0

More than 3 years have passed since last update.

【AWS】用語を整理しながら学ぶAWS - part5 Cloud Formation - 3

Last updated at Posted at 2021-03-28

はじめに

この記事では AWS Cloud Tech を通して Cloud Formation を学習して実践していく記事です。
主な内容としては実践したときのメモを中心に書きます。(忘れやすいことなど)
誤りなどがあれば書き直していく予定です。

前回までのおさらい

テンプレートの定義には
Resources 以外に Outputs というオプションが存在する。

Outputs で出力されたパラメータはエクスポート名という名前で参照できる。
エクスポート名はクロススタック参照という方法で利用できる。

また、テンプレート内の値を参照する場合は組み込み関数を利用することで
動的に参照することが可能である。

【AWS】用語を整理しながら学ぶ AWS - part5 Cloud Formation - 2

前回の内容を実践

よくある VPC ネットワークを構築してみる。

ファイル名 用途
vpc_network.yml VPC の構成を管理
public_network.yml パブリックサブネットの構成を管理
private_network.yml プライベートサブネットの構成を管理

VPC ネットワークを定義する。

vpc_network.yml
AWSTemplateFormatVersion: 2010-09-09
Resources:
  MainVpc:
    Type: AWS::EC2::VPC
    Properties:
      CidrBlock: 10.0.0.0/21
      EnableDnsSupport: true
      Tags:
        - Key: Name
          Value: MainVpcfromCF

Outputs:
  MainVpc:
    Value: !Ref MainVpc
    Export:
      Name: MainVpcId

パブリックサブネットを定義する。

public_subnet.yml
AWSTemplateFormatVersion: 2010-09-09
Resources:
  subnetName:
    Type: AWS::EC2::Subnet
    Properties:
      AvailabilityZone: "ap-northeast-1a"
      VpcId: !ImportValue MainVpcId
      CidrBlock: 10.0.2.0/24
      Tags:
        - Key: Name
          Value: PublicSubnet
  secGroupName:
    Type: AWS::EC2::SecurityGroup
    Properties:
      GroupName: PublicSecGrp
      GroupDescription: PublicSecGrp
      VpcId: !ImportValue MainVpcId
      SecurityGroupIngress:
        - IpProtocol: tcp
          FromPort: 22
          ToPort: 22
          CidrIp: 0.0.0.0/0
      Tags:
        - Key: Name
          Value: MainVpc

Outputs:
  PublicSubnet:
    Value: !Ref subnetName
    Export:
      Name: PublicSubnet
  PublicSecGrp:
    Value: !GetAtt secGroupName.GroupId
    Export:
      Name: PublicSecGrp

続いてプライベートサブネットを定義する。

private_subnet.yml
AWSTemplateFormatVersion: 2010-09-09
Resources:
  subnetName:
    Type: AWS::EC2::Subnet
    Properties:
      AvailabilityZone: "ap-northeast-1a"
      VpcId: !ImportValue MainVpcId
      CidrBlock: 10.0.1.0/24
      Tags:
        - Key: Name
          Value: PrivateSubnet

Outputs:
  PrivateSubnet:
    Value: !Ref subnetName
    Export:
      Name: PrivateSubnet

次にやること

プライベートネットワークとパブリックサブネット内に EC2 を配置する。

ファイル名 用途
public_ec2.yml パブリックサブネット内の EC2 を管理
private_ec2.yml プライベートサブネットの内の EC2 を管理

次回の Part5 - 4 に持ち越し

EC2 を テンプレートで定義すると

仮にですが、思いつきでパッどEC2を定義してみると...

public_ec2.yml
AWSTemplateFormatVersion: 2010-09-09
Resources:
  myEC2Instance:
    Type: AWS::EC2::Instance
    Properties:
      KeyName: Mykeypair
      ImageId: ami-0992fc94ca0f1415a
      InstanceType: t2.micro
      Monitoring: false
      SecurityGroupIds:
        - !ImportValue PublicSecGrp
      SubnetId: !ImportValue PublicSubnet
      Tags:
        - Key: Name
          Value: CFec2

こんな感じになるかと思うのですが
個人的には幾つか気に入らない点がありまして文字数

気に入らない点

キーペアの管理

鍵を管理するのが面倒くさい。

AMI のID

コード内にIDをハードコートしたくない。
というのもリージョンごとに異なるIDとなる為
冗長化するときに一々、AMI IDを調べないといけない。

じゃあどうするか

鍵は管理しない代わりにSSMを利用する。
AMIのIDは常に最新に保とうとしましたが
AMIが変わったことによる不具合などに悩まされたくないので一旦、ハードコートする。

良い方法を後程、考えます。

まとめ

Cloud Formatinを利用してVPCネットワークを構築してサブネットを切りました。
次回はこのネットワークにEC2を構築します。

おわり

1
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
1
0