IPv6対応のELBとオートスケールなEC2をCloudFormationで作成してみた

2017.10.15

はじめに

AWSチームのすずきです。

CloudFormationを利用して作成したIPv6対応のVPC環境に、 IPv6、DualStackに対応したELB(ALB)と、Egress-Only Internet Gateway を経由した、外部のIPv6サービス を利用に設定したEC2をオートスケールで起動するテンプレートを紹介させて頂きます。

IPv6対応のVPCをCloudFormationで作成してみた

IPv6対応のSSHサーバをCloudFormationで作成してみた

構成図

  • FrontendSubnet に ELB(ALB)を設置、アクセスログ用のS3を設置します。
  • ApplicationSubunet に オートスケール、マルチAZ起動のEC2を設置します。

ipv6-vpc-as-ec2-03

CloudFormation テンプレート

  • 事前に作成済みのVPCとセキュリティグループを、スタック名を指定して利用するテンプレートです。

ipv6-validation-autoscale-ec2-alb.yaml

Parameters

  • IPv6対応のVPCの設置に利用したCloudFormationのスタック名を指定します。
VpcStack:
    Description: VPC Cloudformation Stack
    Type: String
    Default: ipv6-test

IAM

  • EC2で利用するIAMロールを設定します
Ec2Role:
    Type: AWS::IAM::Role
  Ec2RolePolicies:
    Type: AWS::IAM::Policy
  Ec2InstanceProfile:
    Type: AWS::IAM::InstanceProfile

S3

  • ELBのアクセスログ保存先とするS3バケットを作成します。
  • バケットポリシーと自動削除のライフサイクル設定を実施しています。
  • CloudFormationスタック削除時のエラーを回避する為「DeletionPolicy: Retain」を指定しています。スタック削除後もS3バケットが残りますので、必要に応じ手動削除してください。
S3bucketElblogs:
    Type: AWS::S3::Bucket
    DeletionPolicy: Retain
    Properties:
      LifecycleConfiguration:
  S3bucketEbElblogsBucketPolicy:
    Type: AWS::S3::BucketPolicy

ELB、EC2

共通
  • VPCサブネット、セキュリティグループは「!ImportValue」を利用し、IPv6対応VPCを設置に利用したCloudFormationの設定値を参照します。
Subnets:
      - !ImportValue
        Fn::Sub: ${VpcStack}-FrontendSubnet1
      - !ImportValue
        Fn::Sub: ${VpcStack}-FrontendSubnet2

      SecurityGroups:
      - !ImportValue
        Fn::Sub: ${VpcStack}-FrontendSecurityGroup
ELB
  • ELBとしてALBを利用しました。
  • ALBでは、IPv6に対応させるため、dualstackを指定します。
AlbLoadBalancer:
    Type: AWS::ElasticLoadBalancingV2::LoadBalancer
    Properties:
      IpAddressType: dualstack

  AlbTargetGroup:
    Type: AWS::ElasticLoadBalancingV2::TargetGroup

  AlbListenerHTTP:
    Type: AWS::ElasticLoadBalancingV2::Listener
EC2: LaunchConfiguration
  • IPv4で提供されるインターネットサービスの利用を可能とするため、パブリックアドレスの付与を有効としました
  • 今回のIPv6対応のVPCではコストとなるため省略しましたが、NATGatewayが有効なVPCであれば、IPv4パブリックIPは必須ではありません。
ApplicationEc2LaunchConfig:
    Type: AWS::AutoScaling::LaunchConfiguration
    Properties:
      AssociatePublicIpAddress: 'true'                  

まとめ

IPv6対応のELB、EC2をCloudFormationで設置する事ができました。

次回はVPC、EC2をIPv6対応とする利点について、紹介させて頂きたいと思います。

おまけ

2017年10月現在RDSはIPv4で利用する事になりますが、今回紹介したIPv6用のVPCにRDS(MySQL)を設置する場合、下記のテンプレートをお試しください。

ipv6-vpc-as-ec2-04