AWS CLI から ELB ~ Auto Scaling グループの作成を行ってみた時のメモ
ELB の作成
以下のコマンドを実行する
(aws cli の region が ap-northeast-1 に設定された状態で試しました)
ELBの作成
始めにELBの作成を行う
ヘルスチェックなどいくつかの設定は別のコマンドで設定しなければいけないよう
aws elb create-load-balancer \
--load-balancer-name sample-elb \
--listeners 'Protocol=HTTP,LoadBalancerPort=80,InstanceProtocol=HTTP,InstancePort=80' \
--subnets 'subnet-123456' 'subnet-456789' \
--security-groups 'sg-123456' \
--scheme internal
今回は内部向けロードバランサー
http://docs.aws.amazon.com/ja_jp/elasticloadbalancing/latest/classic/elb-internal-load-balancers.html
を作成しようと思うので
--scheme internal
をつけているが、内部向けでなければこのオプションを外す
クロスゾーン負荷分散・接続のストリーミングの有効化
今回はクロスゾーン負荷分散と接続のストリーミングを有効化したいので以下のコマンドを追加で実行する
aws elb modify-load-balancer-attributes \
--load-balancer-name sample-elb \
--load-balancer-attributes '{
"CrossZoneLoadBalancing":{
"Enabled":true
},
"ConnectionDraining":{
"Enabled":true,
"Timeout":300
}
}'
ヘルスチェック設定を追加
更にヘルスチェックの設定を行うために以下のコマンドも実行する
aws elb configure-health-check \
--load-balancer-name sample-elb \
--health-check Target=HTTP:80/target/ping/path,Interval=30,UnhealthyThreshold=2,HealthyThreshold=2,Timeout=3
上記で設定は完了
値の確認
正しく作成・設定されたか確認する
(値は適当な値に書き換えてます)
aws elb describe-load-balancers --load-balancer-name sample-elb
{
"LoadBalancerDescriptions": [
{
"Subnets": [
"subnet-123456",
"subnet-456789"
],
"CanonicalHostedZoneNameID": "CanonicalHostedZoneNameID",
"VPCId": "vpc-123456",
"ListenerDescriptions": [
{
"Listener": {
"InstancePort": 80,
"LoadBalancerPort": 80,
"Protocol": "HTTP",
"InstanceProtocol": "HTTP"
},
"PolicyNames": []
}
],
"HealthCheck": {
"HealthyThreshold": 2,
"Interval": 30,
"Target": "HTTP:80/target/ping/path",
"Timeout": 3,
"UnhealthyThreshold": 2
},
"BackendServerDescriptions": [],
"Instances": [],
"DNSName": "internal-sample-elb-123456.ap-northeast-1.elb.amazonaws.com",
"SecurityGroups": [
"sg-123456"
],
"Policies": {
"LBCookieStickinessPolicies": [],
"AppCookieStickinessPolicies": [],
"OtherPolicies": []
},
"LoadBalancerName": "sample-elb",
"CreatedTime": "2017-08-27T04:54:54.290Z",
"AvailabilityZones": [
"ap-northeast-1b",
"ap-northeast-1c"
],
"Scheme": "internal",
"SourceSecurityGroup": {
"OwnerAlias": "123456",
"GroupName": "default"
}
}
]
}
起動設定 ~ Auto Scaling グループを作成
起動設定を作成
以下のコマンドで起動設定を作成
試した時の状況としてオプションとして行ってることとして
- 詳細モニタリングをOFFにしてる
- インスタンスプロファイルを設定してる
- ブロックデバイスを手動で設定してる
あたりが入ってる
aws autoscaling create-launch-configuration \
--launch-configuration-name launch-configuration-for-sample-elb \
--image-id ami-123456 \
--instance-type m4.large \
--security-groups sg-123456 \
--instance-monitoring Enabled=false \
--iam-instance-profile sample-instance-profile \
--key-name keyname \
--block-device-mappings '[
{
"DeviceName": "/dev/sdx",
"Ebs": {
"VolumeSize": 100,
"VolumeType": "gp2",
"DeleteOnTermination": true
}
},
{
"DeviceName": "/dev/xvda",
"Ebs": {
"VolumeSize": 8,
"VolumeType": "gp2",
"DeleteOnTermination": true
}
}
]'
Auto Scaling グループを作成
上記で作成した ELB と 起動設定を利用して Auto Scaling グループを作成
注意点として一旦台数固定の Scaling Policy は無しで作成してる
aws autoscaling create-auto-scaling-group \
--auto-scaling-group-name auto-scaling-group-for-sample-elb \
--launch-configuration-name launch-configuration-for-sample-elb \
--min-size 2 \
--max-size 2 \
--desired-capacity 2 \
--load-balancer-names sample-elb \
--health-check-type EC2 \
--health-check-grace-period 300 \
--availability-zones ap-northeast-1b ap-northeast-1c \
--vpc-zone-identifier subnet-123456,subnet-456789 \
--tags '[
{
"PropagateAtLaunch": true,
"Key": "Name",
"Value": "sample-elb-instance"
}
]'
Auto Scaling グループの通知設定を作成
先程作成した Auto Scaling グループに通知設定を追加
aws autoscaling put-notification-configuration \
--auto-scaling-group-name auto-scaling-group-for-sample-elb \
--topic-arn arn:aws:sns:ap-northeast-1:XXXXXX:XXXXXX \
--notification-type autoscaling:EC2_INSTANCE_LAUNCH autoscaling:EC2_INSTANCE_LAUNCH_ERROR autoscaling:EC2_INSTANCE_TERMINATE autoscaling:EC2_INSTANCE_TERMINATE_ERROR
値の確認
正しく作成・設定されたか確認する
(値は適当な値に書き換えてます)
$ aws autoscaling describe-launch-configurations --launch-configuration-names launch-configuration-for-sample-elb
{
"LaunchConfigurations": [
{
"UserData": "",
"IamInstanceProfile": "intent-recommend-search",
"EbsOptimized": false,
"LaunchConfigurationARN": "arn:aws:autoscaling:ap-northeast-1:XXXXXX:launchConfiguration:XXXXXX:launchConfigurationName/launch-configuration-for-sample-elb",
"InstanceMonitoring": {
"Enabled": false
},
"ClassicLinkVPCSecurityGroups": [],
"CreatedTime": "2017-08-27T06:31:16.558Z",
"BlockDeviceMappings": [
{
"DeviceName": "/dev/xvda",
"Ebs": {
"DeleteOnTermination": true,
"VolumeSize": 8,
"VolumeType": "gp2"
}
},
{
"DeviceName": "/dev/sdx",
"Ebs": {
"DeleteOnTermination": true,
"VolumeSize": 100,
"VolumeType": "gp2"
}
}
],
"KeyName": "keyname",
"SecurityGroups": [
"sg-123456"
],
"LaunchConfigurationName": "launch-configuration-for-sample-elb",
"KernelId": "",
"RamdiskId": "",
"ImageId": "ami-123456",
"InstanceType": "m4.large"
}
]
}
$ aws autoscaling describe-auto-scaling-groups --auto-scaling-group-name auto-scaling-group-for-sample-elb
{
"AutoScalingGroups": [
{
"AutoScalingGroupARN": "arn:aws:autoscaling:ap-northeast-1:XXXXXXX:autoScalingGroup:XXXXXX:autoScalingGroupName/auto-scaling-group-for-sample-elb",
"TargetGroupARNs": [],
"SuspendedProcesses": [],
"DesiredCapacity": 2,
"Tags": [
{
"ResourceType": "auto-scaling-group",
"ResourceId": "auto-scaling-group-for-sample-elb",
"PropagateAtLaunch": true,
"Value": "sample-elb-instance",
"Key": "Name"
}
],
"EnabledMetrics": [],
"LoadBalancerNames": [
"intent-recommend-search-ja-JP"
],
"AutoScalingGroupName": "auto-scaling-group-for-sample-elb",
"DefaultCooldown": 300,
"MinSize": 2,
"Instances": [
...
],
"MaxSize": 2,
"VPCZoneIdentifier": "subnet-123456,subnet-456789",
"HealthCheckGracePeriod": 300,
"TerminationPolicies": [
"Default"
],
"LaunchConfigurationName": "launch-configuration-for-sample-elb",
"CreatedTime": "2017-08-27T06:31:16.558Z",
"AvailabilityZones": [
"ap-northeast-1b",
"ap-northeast-1c"
],
"HealthCheckType": "EC2",
"NewInstancesProtectedFromScaleIn": false
}
]
}
$ autoscaling describe-notification-configurations --auto-scaling-group-name auto-scaling-group-for-sample-elb
{
"NotificationConfigurations": [
{
"AutoScalingGroupName": "auto-scaling-group-for-sample-elb",
"NotificationType": "autoscaling:EC2_INSTANCE_LAUNCH",
"TopicARN": "arn:aws:sns:ap-northeast-1:XXXXXX:XXXXXX"
},
{
"AutoScalingGroupName": "auto-scaling-group-for-sample-elb",
"NotificationType": "autoscaling:EC2_INSTANCE_LAUNCH_ERROR",
"TopicARN": "arn:aws:sns:ap-northeast-1:XXXXXX:XXXXXX"
},
{
"AutoScalingGroupName": "auto-scaling-group-for-sample-elb",
"NotificationType": "autoscaling:EC2_INSTANCE_TERMINATE",
"TopicARN": "arn:aws:sns:ap-northeast-1:XXXXXX:XXXXXX"
},
{
"AutoScalingGroupName": "auto-scaling-group-for-sample-elb",
"NotificationType": "autoscaling:EC2_INSTANCE_TERMINATE_ERROR",
"TopicARN": "arn:aws:sns:ap-northeast-1:XXXXXX:XXXXXX"
}
]
}
参考:
- http://qiita.com/tcsh/items/7a017c179c61111afe89
- http://docs.aws.amazon.com/ja_jp/elasticloadbalancing/latest/classic/config-conn-drain.html
- http://docs.aws.amazon.com/ja_jp/elasticloadbalancing/latest/classic/enable-disable-crosszone-lb.html
- http://docs.aws.amazon.com/ja_jp/elasticloadbalancing/latest/classic/elb-healthchecks.html
- http://docs.aws.amazon.com/ja_jp/elasticloadbalancing/latest/classic/elb-create-internal-load-balancer.html
- http://docs.aws.amazon.com/cli/latest/reference/elb/configure-health-check.html
- http://docs.aws.amazon.com/cli/latest/reference/elb/create-load-balancer.html
- http://docs.aws.amazon.com/cli/latest/reference/elb/modify-load-balancer-attributes.html
- https://www.slideshare.net/AmazonWebServicesJapan/elastic-load-balancing
- http://qiita.com/tcsh/items/1f3dbe0e637b6d96b426
- http://docs.aws.amazon.com/cli/latest/reference/autoscaling/create-launch-configuration.html
- http://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/block-device-mapping-concepts.html
- http://inokara.hateblo.jp/entry/2014/01/05/125712
- http://docs.aws.amazon.com/cli/latest/reference/autoscaling/put-notification-configuration.html
- http://docs.aws.amazon.com/cli/latest/reference/autoscaling/create-auto-scaling-group.html
- http://docs.aws.amazon.com/ja_jp/autoscaling/latest/userguide/us-iam-role.html
- http://docs.aws.amazon.com/ja_jp/AWSCloudFormation/latest/UserGuide/aws-properties-as-tags.html