はじめに
この記事では 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 ネットワークを定義する。
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
パブリックサブネットを定義する。
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
続いてプライベートサブネットを定義する。
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を定義してみると...
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を構築します。