IPv6対応のELBとオートスケールなEC2をCloudFormationで作成してみた
はじめに
AWSチームのすずきです。
CloudFormationを利用して作成したIPv6対応のVPC環境に、 IPv6、DualStackに対応したELB(ALB)と、Egress-Only Internet Gateway を経由した、外部のIPv6サービス を利用に設定したEC2をオートスケールで起動するテンプレートを紹介させて頂きます。
構成図
- FrontendSubnet に ELB(ALB)を設置、アクセスログ用のS3を設置します。
- ApplicationSubunet に オートスケール、マルチAZ起動のEC2を設置します。
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)を設置する場合、下記のテンプレートをお試しください。