[アップデート]注目はELBv2のListener!AWS CloudFormationのサポートするリソースが追加されました

こんにちは。サービスグループの武田です。

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行目が今回のアップデートで指定可能となりました。

---
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ももう来週です。どんな新サービスが発表されるのか今から楽しみですね!