この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。
こんにちは。サービスグループの武田です。
AWS CloudFormationがサポートするリソースは日々追加されていますが、今回次のリソースについて追加がありました。
- AWS::ApiGateway::Deployment
- AWS::ApiGateway::Stage
- AWS::AutoScaling::AutoScalingGroup
- AWS::EC2::EIP
- AWS::ElasticLoadBalancingV2::Listener
- AWS::EMR::Cluster
- AWS::OpsWorks::Layer
- AWS::RDS::DBCluster
- AWS::RDS::DBInstance
- AWS::S3::Bucket
- AWS::SNS::Topic
詳細はHistoryを見ていただければ。更新日がNovember 19, 2018
のものですが、執筆時点では英語のドキュメントのみ更新されていました。
Release History - AWS CloudFormation
個人的な注目はElasticLoadBalancingV2のListener
おそらくS3 BucketのPublicAccessBlockConfiguration
なんかも大きなアップデートのはずです。ただ個人的にはELBv2のListenerのアップデートがとてもうれしかったので、そのテンションでエントリを書いてます。
CloudFormationではELBv2のListenerを作成できますが、リソース定義にDefaultActions
の指定が必須となっています。ところがこれまではCloudFormationで指定できるActionのTypeはforward
のみでした。つまりTargetGroupがないと、そもそもListenerが作成できませんでした。
「とりあえずALBとListenerのガワだけ作っておきたい」というユースケースでは、空のTargetGroupを用意するかCloudFormationとは別にListenerを作成する必要がありました。今回のアップデートで次の4つのTypeがサポートされたことでCloudFormationがより便利になりました!
- authenticate-cognito
- authenticate-oidc
- fixed-response
- redirect
今回はfixed-response
を実際に試してみました。
CloudFormationでfixed-responseを試してみた
次の環境で検証しています。
$ sw_vers
ProductName: Mac OS X
ProductVersion: 10.14.1
BuildVersion: 18B75
$ aws --version
aws-cli/1.16.34 Python/3.7.0 Darwin/18.2.0 botocore/1.12.24
試すにあたって次のCloudFormationテンプレートを用意しました。自分の環境で試す場合はSubnets
のIDを環境に合わせて変更してください。16行目から20行目が今回のアップデートで指定可能となりました。
alb-fixed-response-listener.yml
---
AWSTemplateFormatVersion: '2010-09-09'
Description: This template create a ALB and Listener with Fixed response config.
Resources:
LoadBalancer:
Type: AWS::ElasticLoadBalancingV2::LoadBalancer
Properties:
Name: sample-alb
Subnets:
- subnet-1234aabb
- subnet-5678ccdd
Listener:
Type: AWS::ElasticLoadBalancingV2::Listener
Properties:
DefaultActions:
- Type: fixed-response
FixedResponseConfig:
ContentType: text/plain
MessageBody: 'Page Not Found'
StatusCode: 404
LoadBalancerArn: !Ref LoadBalancer
Port: 80
Protocol: HTTP
それではAWS CLIのコマンドでスタックを作成します。
$ aws cloudformation create-stack --stack-name alb-test --template-body file://alb-fixed-response-listener.yml
しばらく待っているとリソースの作成が終わります。作成されたリソースをマネジメントコンソールから確認してみました。
sample-alb
という名前のALBが作成されリスナーも作成されています。
リスナーの詳細を見てみると固定レスポンスを返すデフォルトアクションが定義されています。
ブラウザからALBにアクセスをしてみると設定した404のコンテンツが返ってきました!
まとめ
これまでCloudFormationとCLIを組み合わせて実現していた処理を、CloudFormationだけで実現できるようになるととってもうれしいですね。
AWSのアップデートが怒涛のようにリリースされていますが、本番のre:Inventももう来週です。どんな新サービスが発表されるのか今から楽しみですね!