CloudFormationでALBを構築する

AWS CloudFormation

ウィスキー、シガー、パイプをこよなく愛する大栗です。

先週発表がされたアプリケーションロードバランサー(ALB)ですが、最初からCloudFormationに対応しています。いつもCloudFormation対応は後になるのですが、ALBはサービスの発表と同時に対応しているので試してみました。

リソースのおさらい

以下のようにリソースの種類が1種類から4種類へ分割されています。

  • 標準ロードバランサー(旧ELB:Classic Load Balancer)
    • AWS::ElasticLoadBalancing::LoadBalancer
  • アプリケーションロードバランサー(ALB:Application Load Balancer)
    • AWS::ElasticLoadBalancingV2::Listener
    • AWS::ElasticLoadBalancingV2::ListenerRule
    • AWS::ElasticLoadBalancingV2::LoadBalancer
    • AWS::ElasticLoadBalancingV2::TargetGroup

テンプレート

今回は以下の様なシンプルな環境のテンプレートをサンプルとして作成します。VPC、サブネットは既存のものを使用する前提です。

alb-stack

ちょっと長いですが、以下のテンプレートを作成しました。

内容の解説

パラメータ

パラメータは以下の内容となっています。

パラメータ名 内容 備考
AMIID HVMのAmazon LinuxのAMI IDを入力 今回は東京リージョンで実行しているのでami-374db956としました。
Env 任意の内容 環境の識別子
KeyPair 任意のKeyPair
Subnets ALBとEC2インスタンスを配置するサブネット 今回はDefault VPCの2個のサブネットを選択します
VPCID 環境を配置するVPC 今回はDefault VPCのIDを選択します

リソース

以下の様な構成にしています。デフォルトルールのみであるためAWS::ElasticLoadBalancingV2::ListenerRuleを使用していません。

リソース名 Type 内容
ALBSG AWS::EC2::SecurityGroup ALB用のセキュリティグループです。80/443番ポートを開けています。
AppSG AWS::EC2::SecurityGroup EC2用のセキュリティグループです。ALBSGからの80番ポートを開けています。
Instance01 AWS::EC2::Instance apacheをインストールして/index.htmlにインスタンスIDを表示します。
Instance02 AWS::EC2::Instance apacheをインストールして/index.htmlにインスタンスIDを表示します。
ALBTarget AWS::ElasticLoadBalancingV2::TargetGroup Instance01Instance02を登録します。
ALB AWS::ElasticLoadBalancingV2::LoadBalancer ALBを作成します。
ALBListener AWS::ElasticLoadBalancingV2::Listener HTTPを受け付けて、デフォルトルールでALBTargetへ向けています。

出力

出力は確認用のURLとしています。

出力名 内容
CheckURL アクセスの確認用URL

動作確認

実際にアクセスして動作確認します。出力の内容のURLへアクセスしてみます。
下図のようにインスタンスIDが表示されます。

alb-cfn-alb-1484150246_ap-northeast-1_elb_amazonaws_com_index_html

さいごに

ALBは最初からCloudFormationに対応しているのでやきもきせずに済みました。CloudFormationを前提とするService Catalogでも使えるということなのでALBの構成管理も可能ですね。