この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので十分ご注意ください。
CloudFormationテンプレートに興味を持ち、最近構築したものをテンプレートを使って再現できるか試してみました。
第一回は、シンプルなApplication Load Balancerの構築をテンプレートにしたものです。
CloudFormationテンプレートでALBを構築
■前提
CloudFormationのスタックを作成する前に、以下が前提条件ですのでご確認ください。
- VPC作成済み
- 別々のアベイラビリティゾーンにパブリックサブネットが一つずつ
- 各サブネットにEC2が一つずつ
■CloudFormationテンプレート
今回のテンプレートは、シンプルなApplication Load Balancerの構築ができるものです。
AWSTemplateFormatVersion: "2010-09-09"
Description:
create ALB,TG,SG
Parameters:
VPCID:
Type: AWS::EC2::VPC::Id
Subnet1ID:
Type: AWS::EC2::Subnet::Id
Subnet2ID:
Type: AWS::EC2::Subnet::Id
Instance1ID:
Type: AWS::EC2::Instance::Id
Instance2ID:
Type: AWS::EC2::Instance::Id
Resources:
ALBSecurityGroup:
Type: AWS::EC2::SecurityGroup
Properties:
GroupDescription: ALB SG
GroupName: !Sub ${AWS::StackName}-alb-sg
SecurityGroupIngress:
- IpProtocol: tcp
FromPort: 80
ToPort: 80
CidrIp: 0.0.0.0/0
- IpProtocol: tcp
FromPort: 443
ToPort: 443
CidrIp: 0.0.0.0/0
Tags:
- Key: Name
Value: !Sub ${AWS::StackName}-alb-sg
VpcId: !Ref VPCID
ALB:
Type: AWS::ElasticLoadBalancingV2::LoadBalancer
Properties:
IpAddressType: ipv4
Name: !Sub ${AWS::StackName}-alb
Scheme: internet-facing
SecurityGroups:
- !Ref ALBSecurityGroup
Subnets:
- !Ref Subnet1ID
- !Ref Subnet2ID
Tags:
- Key: Name
Value: !Sub ${AWS::StackName}-alb
Type: application
ListenerHTTP:
Type: AWS::ElasticLoadBalancingV2::Listener
Properties:
DefaultActions:
- Type: forward
TargetGroupArn: !Ref TargetGroup
LoadBalancerArn: !Ref ALB
Port: 80
Protocol: HTTP
TargetGroup:
Type: AWS::ElasticLoadBalancingV2::TargetGroup
Properties:
Matcher:
HttpCode: 200
Name: !Sub ${AWS::StackName}-tg
Port: 80
Protocol: HTTP
Tags:
- Key: Name
Value: !Sub ${AWS::StackName}-tg
Targets:
- Id: !Ref Instance1ID
- Id: !Ref Instance2ID
TargetType: instance
VpcId: !Ref VPCID
Outputs:
ALBURL:
Description: ALB endpoint URL
Value: !Join
- ""
- - http://
- !GetAtt ALB.DNSName
ALBARN:
Description: ALB ARN
Value: !Join
- ""
- - 'arn:aws:elasticloadbalancing:'
- !Ref AWS::Region
- ':'
- !Ref AWS::AccountId
- ':loadbalancer/'
- !GetAtt ALB.LoadBalancerFullName
■結果
今回のテンプレートを利用してスタックを作成してみました。
テンプレートの汎用性を高めるため、EC2やVPC,サブネットのIDをパラメータとして入力できるようにしてります。
作成する際に、自身の環境の該当IDを入力してください。
入力が完了したら、[スタックの作成]を押しましょう。
ステータスが“CREATE_COMPLETE”になりましたので、実際に構築できたか確認してみます。
↓インバウンドルールはHTTPとHTTPSを許可しています。
↓
↓
↓スタック作成時に入力したEC2インスタンス2つも、ターゲットグループに無事に紐づいているようです。
以上です。
まとめ:AWS CloudFormationテンプレートのススメ#1 ALB編
CloudFormationのテンプレートを自在に作れるようになりたいと思い、現在関わっているプロジェクトの構築をテンプレート化してみました。
詳細設計書を見て、テンプレートに落とし込めるレベルになるまで、“CloudFormationテンプレートのススメ”を書き続けようと思います。
作成したテンプレートは公式ドキュメントを見ながら独自に書いてものです。こんな風にしたほうがいいよ、というのがありましたらどんどんご連絡ください!
参考リンク:AWS公式ドキュメント
↓ほかの協栄情報メンバーもAWS CloudFormationに関する記事を公開しています。ぜひ参考にしてみてください。
■CloudFormation作成を効率化するValidate Template機能について(INAMURA)
https://cloud5.jp/cfn-validatetemplate-function/
■CloudFormationでRDS(Aurora PostgreSQL リージョン別クラスター)を構築する(小林 剛)
https://cloud5.jp/create-rds-aurora-postgresql-region-by-cfn/
■CloudFormationによる【S3】の構築(umemoto)
https://cloud5.jp/cf-s3/