この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。
はじめに
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)を設置する場合、下記のテンプレートをお試しください。