前書き
先日、プロジェクトの作業でALBを作る機会がありました。ロードバランサーは、通常その先にあるターゲットへのトラフィックを分散させるために使用します。
しかし、今回はまだターゲットとなるリソースを作成しておらず、とりあえず疎通確認だけを先に済ませておきたい、という状況でした。
ターゲットグループ用のLambdaやEC2を暫定的に作成してもよかったのですが、ALBはターゲットを作らずとも固定値を返すことができるということは知っていたので、その方法を使おうと思い立ちました。
しかし、いざマネコンからALBを作成しようとしたら「you must select st least one target group」というエラーが表示され、ターゲットグループを選択せずにALBを作成することを許してもらえませんでした......
(そういえばELBの画面ってなんで日本語で表示されないんですかね?)
CloudFormationでターゲットグループを指定せずにALBを作成
そこで思いついた方法が、CloudFormationで何も設定されていない、いわば素の状態のALBを作成してしまおうという作戦です。
CloudFormationのType AWS::ElasticLoadBalancingV2::LoadBalancerを確認したところ、ターゲットグループを指定する箇所がなさそうでした。これはイケそう。
Type: AWS::ElasticLoadBalancingV2::LoadBalancer
Properties:
IpAddressType: String
LoadBalancerAttributes:
- LoadBalancerAttribute
Name: String
Scheme: String
SecurityGroups:
- String
SubnetMappings:
- SubnetMapping
Subnets:
- String
Tags:
- Tag
Type: String
実際に使用したテンプレートが以下です
AWSTemplateFormatVersion: "2010-09-09"
Description:
ALB Create
Resources:
# ------------------------------------------------------------#
# ALB
# ------------------------------------------------------------#
MySecurityGroup:
Type: 'AWS::EC2::SecurityGroup'
Properties:
GroupDescription: Security Group for qiita-test-alb
GroupName: qiita-test-alb
# めんどくさいのでマネコンから設定する
# SecurityGroupIngress:
# -
# VpcIdを入力
VpcId: xxxxxxxxxx
MyLoadBalancer:
Type: 'AWS::ElasticLoadBalancingV2::LoadBalancer'
Properties:
Type: 'application'
# Subnetsを入力
Subnets:
- xxxxxxxxxx
- xxxxxxxxxx
SecurityGroups:
- !Ref MySecurityGroup
Scheme: internet-facing
Name: qiita-test-alb
セキュリティグループはマネコンから設定するほうが楽そうだったので、マネコンから設定します。
今回は、自分のPCのIPアドレスからのアクセスのみを許可するインバウンドルールを作成しました。
まとめ
以前も記事に書いたのですが、AWSは意外とサービスによって仕様がバラバラです。
ALBも固定値を返すだけのものが作成できるのであれば、マネコンからも作成させてくれればいいのに、と思いました。
マネコンはめちゃくちゃ便利ですが、なんでもできる完璧な仕様になっているわけではなく、あくまで使いやすくしてくれてるおまけ程度に考えるのがいいかもしれませんね。