【CFn】テンプレを眺めて理解。Auto ScalingのSampleテンプレから各プロパティを深堀りしてみる。
公式のサンプルテンプレートを眺めて一緒にCFnのAutoScaling構成の一例を勉強しましょう。
「眺めて理解。」としていますが、
これを書いている私自信もテンプレートを見ながらドキュメントや技術記事を検索してコメントをつけて勉強する意味でもありますし、
記事を覗いてくださった方も、テンプレ内に添えたコメントと各設定項目(プロパティ)を一緒に眺めておさらい出来たり、
リソースの参照関係などを「見て理解」出来るようになれたらいいなという感覚のものです。
書く側が変に包丁を入れずに調べた内容を記入していくだけにしているので、テンプレを上から下まで眺められるので逆に良いのではと思ったりしてます。
今回はAutoScalingです。
テンプレ内にコメントをつけたいというのもありますがjsonからyamlに変換しています。
以下、テンプレート内容です
Load-based-auto-scaling.yml
AWSTemplateFormatVersion: 2010-09-09
Description: >-
AWS CloudFormation Sample Template AutoScalingMultiAZWithNotifications: Create
a multi-az, load balanced and Auto Scaled sample web site running on an Apache
Web Serever. The application is configured to span all Availability Zones in
the region and is Auto-Scaled based on the CPU utilization of the web servers.
Notifications will be sent to the operator email address on scaling events.
The instances are load balanced with a simple health check against the default
web page. **WARNING** This template creates one or more Amazon EC2 instances
and an Application Load Balancer. You will be billed for the AWS resources
used if you create a stack from this template.
Parameters:
#既存VPCを選択させるリストを用意。
VpcId:
Type: 'AWS::EC2::VPC::Id'
Description: VpcId of your existing Virtual Private Cloud (VPC)
ConstraintDescription: must be the VPC Id of an existing Virtual Private Cloud.
#既存サブネットを選択させるリストを用意。説明文で「同一AZでない最低2つの」を強制。
Subnets:
Type: 'List<AWS::EC2::Subnet::Id>'
Description: The list of SubnetIds in your Virtual Private Cloud (VPC)
ConstraintDescription: >-
must be a list of at least two existing subnets associated with at least
two different availability zones. They should be residing in the selected
Virtual Private Cloud.
#インスタンスタイプを選択させるリストを用意。説明文でウェブサーバー用である事を説明。
InstanceType:
Description: WebServer EC2 instance type
Type: String
#デフォルトをt2.smallに。
Default: t2.small
AllowedValues:
- t1.micro
- t2.nano
- t2.micro
- t2.small
- t2.medium
- t2.large
- m1.small
- m1.medium
- m1.large
- m1.xlarge
- m2.xlarge
- m2.2xlarge
- m2.4xlarge
- m3.medium
- m3.large
- m3.xlarge
- m3.2xlarge
- m4.large
- m4.xlarge
- m4.2xlarge
- m4.4xlarge
- m4.10xlarge
- c1.medium
- c1.xlarge
- c3.large
- c3.xlarge
- c3.2xlarge
- c3.4xlarge
- c3.8xlarge
- c4.large
- c4.xlarge
- c4.2xlarge
- c4.4xlarge
- c4.8xlarge
- g2.2xlarge
- g2.8xlarge
- r3.large
- r3.xlarge
- r3.2xlarge
- r3.4xlarge
- r3.8xlarge
- i2.xlarge
- i2.2xlarge
- i2.4xlarge
- i2.8xlarge
- d2.xlarge
- d2.2xlarge
- d2.4xlarge
- d2.8xlarge
- hi1.4xlarge
- hs1.8xlarge
- cr1.8xlarge
- cc2.8xlarge
- cg1.4xlarge
#正しくない値が選択された際のエラーメッセージを指定。
ConstraintDescription: must be a valid EC2 instance type.
OperatorEMail:
Description: EMail address to notify if there are any scaling operations
Type: String
#正規表現(EMail)
AllowedPattern: >-
([a-zA-Z0-9_\-\.]+)@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.)|(([a-zA-Z0-9\-]+\.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(\]?)
ConstraintDescription: must be a valid email address.
#キーペアを選択させるリストを用意。
KeyName:
Description: The EC2 Key Pair to allow SSH access to the instances
Type: 'AWS::EC2::KeyPair::KeyName'
ConstraintDescription: must be the name of an existing EC2 KeyPair.
#EC2にSSHアクセスする際に使うIPレンジを入力させるテキストボックス。
SSHLocation:
Description: The IP address range that can be used to SSH to the EC2 instances
Type: String
#文字の長さを9-18文字に限定。
MinLength: '9'
MaxLength: '18'
Default: 0.0.0.0/0
#正規表現(IPレンジ)
AllowedPattern: '(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})/(\d{1,2})'
ConstraintDescription: must be a valid IP CIDR range of the form x.x.x.x/x.
#Stack作成リージョンや選択したインスタンスタイプなどに応じてAMIの要素を準備キー/バリュー対応させる。(後で起動設定でAMIがこの対応付から決まる。)
Mappings:
Region2Examples:
ap-east-1:
Examples: 'https://s3-ap-east-1.amazonaws.com/cloudformation-examples-ap-east-1'
ap-northeast-1:
Examples: >-
https://s3-ap-northeast-1.amazonaws.com/cloudformation-examples-ap-northeast-1
ap-northeast-2:
Examples: >-
https://s3-ap-northeast-2.amazonaws.com/cloudformation-examples-ap-northeast-2
ap-northeast-3:
Examples: >-
https://s3-ap-northeast-3.amazonaws.com/cloudformation-examples-ap-northeast-3
ap-south-1:
Examples: 'https://s3-ap-south-1.amazonaws.com/cloudformation-examples-ap-south-1'
ap-southeast-1:
Examples: >-
https://s3-ap-southeast-1.amazonaws.com/cloudformation-examples-ap-southeast-1
ap-southeast-2:
Examples: >-
https://s3-ap-southeast-2.amazonaws.com/cloudformation-examples-ap-southeast-2
ca-central-1:
Examples: >-
https://s3-ca-central-1.amazonaws.com/cloudformation-examples-ca-central-1
cn-north-1:
Examples: >-
https://s3.cn-north-1.amazonaws.com.cn/cloudformation-examples-cn-north-1
cn-northwest-1:
Examples: >-
https://s3.cn-northwest-1.amazonaws.com.cn/cloudformation-examples-cn-northwest-1
eu-central-1:
Examples: >-
https://s3-eu-central-1.amazonaws.com/cloudformation-examples-eu-central-1
eu-north-1:
Examples: 'https://s3-eu-north-1.amazonaws.com/cloudformation-examples-eu-north-1'
eu-west-1:
Examples: 'https://s3-eu-west-1.amazonaws.com/cloudformation-examples-eu-west-1'
eu-west-2:
Examples: 'https://s3-eu-west-2.amazonaws.com/cloudformation-examples-eu-west-2'
eu-west-3:
Examples: 'https://s3-eu-west-3.amazonaws.com/cloudformation-examples-eu-west-3'
me-south-1:
Examples: 'https://s3-me-south-1.amazonaws.com/cloudformation-examples-me-south-1'
sa-east-1:
Examples: 'https://s3-sa-east-1.amazonaws.com/cloudformation-examples-sa-east-1'
us-east-1:
Examples: 'https://s3.amazonaws.com/cloudformation-examples-us-east-1'
us-east-2:
Examples: 'https://s3-us-east-2.amazonaws.com/cloudformation-examples-us-east-2'
us-west-1:
Examples: 'https://s3-us-west-1.amazonaws.com/cloudformation-examples-us-west-1'
us-west-2:
Examples: 'https://s3-us-west-2.amazonaws.com/cloudformation-examples-us-west-2'
AWSInstanceType2Arch:
t1.micro:
Arch: HVM64
t2.nano:
Arch: HVM64
t2.micro:
Arch: HVM64
t2.small:
Arch: HVM64
t2.medium:
Arch: HVM64
t2.large:
Arch: HVM64
m1.small:
Arch: HVM64
m1.medium:
Arch: HVM64
m1.large:
Arch: HVM64
m1.xlarge:
Arch: HVM64
m2.xlarge:
Arch: HVM64
m2.2xlarge:
Arch: HVM64
m2.4xlarge:
Arch: HVM64
m3.medium:
Arch: HVM64
m3.large:
Arch: HVM64
m3.xlarge:
Arch: HVM64
m3.2xlarge:
Arch: HVM64
m4.large:
Arch: HVM64
m4.xlarge:
Arch: HVM64
m4.2xlarge:
Arch: HVM64
m4.4xlarge:
Arch: HVM64
m4.10xlarge:
Arch: HVM64
c1.medium:
Arch: HVM64
c1.xlarge:
Arch: HVM64
c3.large:
Arch: HVM64
c3.xlarge:
Arch: HVM64
c3.2xlarge:
Arch: HVM64
c3.4xlarge:
Arch: HVM64
c3.8xlarge:
Arch: HVM64
c4.large:
Arch: HVM64
c4.xlarge:
Arch: HVM64
c4.2xlarge:
Arch: HVM64
c4.4xlarge:
Arch: HVM64
c4.8xlarge:
Arch: HVM64
g2.2xlarge:
Arch: HVMG2
g2.8xlarge:
Arch: HVMG2
r3.large:
Arch: HVM64
r3.xlarge:
Arch: HVM64
r3.2xlarge:
Arch: HVM64
r3.4xlarge:
Arch: HVM64
r3.8xlarge:
Arch: HVM64
i2.xlarge:
Arch: HVM64
i2.2xlarge:
Arch: HVM64
i2.4xlarge:
Arch: HVM64
i2.8xlarge:
Arch: HVM64
d2.xlarge:
Arch: HVM64
d2.2xlarge:
Arch: HVM64
d2.4xlarge:
Arch: HVM64
d2.8xlarge:
Arch: HVM64
hi1.4xlarge:
Arch: HVM64
hs1.8xlarge:
Arch: HVM64
cr1.8xlarge:
Arch: HVM64
cc2.8xlarge:
Arch: HVM64
AWSInstanceType2NATArch:
t1.micro:
Arch: NATHVM64
t2.nano:
Arch: NATHVM64
t2.micro:
Arch: NATHVM64
t2.small:
Arch: NATHVM64
t2.medium:
Arch: NATHVM64
t2.large:
Arch: NATHVM64
m1.small:
Arch: NATHVM64
m1.medium:
Arch: NATHVM64
m1.large:
Arch: NATHVM64
m1.xlarge:
Arch: NATHVM64
m2.xlarge:
Arch: NATHVM64
m2.2xlarge:
Arch: NATHVM64
m2.4xlarge:
Arch: NATHVM64
m3.medium:
Arch: NATHVM64
m3.large:
Arch: NATHVM64
m3.xlarge:
Arch: NATHVM64
m3.2xlarge:
Arch: NATHVM64
m4.large:
Arch: NATHVM64
m4.xlarge:
Arch: NATHVM64
m4.2xlarge:
Arch: NATHVM64
m4.4xlarge:
Arch: NATHVM64
m4.10xlarge:
Arch: NATHVM64
c1.medium:
Arch: NATHVM64
c1.xlarge:
Arch: NATHVM64
c3.large:
Arch: NATHVM64
c3.xlarge:
Arch: NATHVM64
c3.2xlarge:
Arch: NATHVM64
c3.4xlarge:
Arch: NATHVM64
c3.8xlarge:
Arch: NATHVM64
c4.large:
Arch: NATHVM64
c4.xlarge:
Arch: NATHVM64
c4.2xlarge:
Arch: NATHVM64
c4.4xlarge:
Arch: NATHVM64
c4.8xlarge:
Arch: NATHVM64
g2.2xlarge:
Arch: NATHVMG2
g2.8xlarge:
Arch: NATHVMG2
r3.large:
Arch: NATHVM64
r3.xlarge:
Arch: NATHVM64
r3.2xlarge:
Arch: NATHVM64
r3.4xlarge:
Arch: NATHVM64
r3.8xlarge:
Arch: NATHVM64
i2.xlarge:
Arch: NATHVM64
i2.2xlarge:
Arch: NATHVM64
i2.4xlarge:
Arch: NATHVM64
i2.8xlarge:
Arch: NATHVM64
d2.xlarge:
Arch: NATHVM64
d2.2xlarge:
Arch: NATHVM64
d2.4xlarge:
Arch: NATHVM64
d2.8xlarge:
Arch: NATHVM64
hi1.4xlarge:
Arch: NATHVM64
hs1.8xlarge:
Arch: NATHVM64
cr1.8xlarge:
Arch: NATHVM64
cc2.8xlarge:
Arch: NATHVM64
AWSRegionArch2AMI:
af-south-1:
HVM64: ami-064cc455f8a1ef504
HVMG2: NOT_SUPPORTED
ap-east-1:
HVM64: ami-f85b1989
HVMG2: NOT_SUPPORTED
ap-northeast-1:
HVM64: ami-0b2c2a754d5b4da22
HVMG2: ami-09d0e0e099ecabba2
ap-northeast-2:
HVM64: ami-0493ab99920f410fc
HVMG2: NOT_SUPPORTED
ap-northeast-3:
HVM64: ami-01344f6f63a4decc1
HVMG2: NOT_SUPPORTED
ap-south-1:
HVM64: ami-03cfb5e1fb4fac428
HVMG2: ami-0244c1d42815af84a
ap-southeast-1:
HVM64: ami-0ba35dc9caf73d1c7
HVMG2: ami-0e46ce0d6a87dc979
ap-southeast-2:
HVM64: ami-0ae99b503e8694028
HVMG2: ami-0c0ab057a101d8ff2
ca-central-1:
HVM64: ami-0803e21a2ec22f953
HVMG2: NOT_SUPPORTED
cn-north-1:
HVM64: ami-07a3f215cc90c889c
HVMG2: NOT_SUPPORTED
cn-northwest-1:
HVM64: ami-0a3b3b10f714a0ff4
HVMG2: NOT_SUPPORTED
eu-central-1:
HVM64: ami-0474863011a7d1541
HVMG2: ami-0aa1822e3eb913a11
eu-north-1:
HVM64: ami-0de4b8910494dba0f
HVMG2: ami-32d55b4c
eu-south-1:
HVM64: ami-08427144fe9ebdef6
HVMG2: NOT_SUPPORTED
eu-west-1:
HVM64: ami-015232c01a82b847b
HVMG2: ami-0d5299b1c6112c3c7
eu-west-2:
HVM64: ami-0765d48d7e15beb93
HVMG2: NOT_SUPPORTED
eu-west-3:
HVM64: ami-0caf07637eda19d9c
HVMG2: NOT_SUPPORTED
me-south-1:
HVM64: ami-0744743d80915b497
HVMG2: NOT_SUPPORTED
sa-east-1:
HVM64: ami-0a52e8a6018e92bb0
HVMG2: NOT_SUPPORTED
us-east-1:
HVM64: ami-032930428bf1abbff
HVMG2: ami-0aeb704d503081ea6
us-east-2:
HVM64: ami-027cab9a7bf0155df
HVMG2: NOT_SUPPORTED
us-west-1:
HVM64: ami-088c153f74339f34c
HVMG2: ami-0a7fc72dc0e51aa77
us-west-2:
HVM64: ami-01fee56b22f308154
HVMG2: ami-0fe84a5b4563d8f27
Resources:
#SNSトピック
NotificationTopic:
Type: 'AWS::SNS::Topic'
Properties:
Subscription:
#パラメータで入力したEmailをエンドポイント(宛先)に。
- Endpoint: !Ref OperatorEMail
Protocol: email
#オートスケーリンググループ
WebServerGroup:
Type: 'AWS::AutoScaling::AutoScalingGroup'
Properties:
#パラメータで選択した複数のサブネットを指定。
VPCZoneIdentifier: !Ref Subnets
#起動設定を指定。
LaunchConfigurationName: !Ref LaunchConfig
#起動するインスタンス数は最低1-最大3
MinSize: '1'
MaxSize: '3'
#ALBのターゲットグループを指定。
TargetGroupARNs:
- !Ref ALBTargetGroup
#通知設定
NotificationConfiguration:
#SNSトピックを指定。
TopicARN: !Ref NotificationTopic
#通知するタイプを指定。インスタンスの作成・エラー・削除・削除エラー。
NotificationTypes:
- 'autoscaling:EC2_INSTANCE_LAUNCH'
- 'autoscaling:EC2_INSTANCE_LAUNCH_ERROR'
- 'autoscaling:EC2_INSTANCE_TERMINATE'
- 'autoscaling:EC2_INSTANCE_TERMINATE_ERROR'
#作成ポリシー
CreationPolicy:
ResourceSignal:
#15分のタイムアウト
Timeout: PT15M #ISO8601 日付/時刻形式(「PT#H#M#S」形式。「#」はそれぞれ、時間数、分数、秒数を表す。)
#一回
Count: '1'
#更新ポリシー
UpdatePolicy:
#更新はローリングアップデート
AutoScalingRollingUpdate:
MinInstancesInService: '1' #更新中 InServiceにするインスタンスの最小数 ↑のMaxサイズ以下である必要がある。
MaxBatchSize: '1'
PauseTime: PT15M # バッチ更新後 CFnが停止する時間の長さ。
WaitOnResourceSignals: 'true' #ASGがインスタンスのシグナルを待機するかどうか。
#起動設定
LaunchConfig:
Type: 'AWS::AutoScaling::LaunchConfiguration'
#アパッチとindex.htmlを用意。
Metadata:
Comment: Install a simple application
'AWS::CloudFormation::Init':
config:
packages:
yum:
httpd: []
files:
/var/www/html/index.html:
content: !Join
- |+
- - <img src="
- !FindInMap
- Region2Examples
- !Ref 'AWS::Region'
- Examples
- /cloudformation_graphic.png" alt="AWS CloudFormation Logo"/>
- >-
<h1>Congratulations, you have successfully launched the AWS
CloudFormation sample.</h1>
mode: '000644'
owner: root
group: root
/etc/cfn/cfn-hup.conf:
content: !Join
- ''
- - |
[main]
- stack=
- !Ref 'AWS::StackId'
- |+
- region=
- !Ref 'AWS::Region'
- |+
mode: '000400'
owner: root
group: root
/etc/cfn/hooks.d/cfn-auto-reloader.conf:
content: !Join
- ''
- - |
[cfn-auto-reloader-hook]
- |
triggers=post.update
- >
path=Resources.LaunchConfig.Metadata.AWS::CloudFormation::Init
- 'action=/opt/aws/bin/cfn-init -v '
- ' --stack '
- !Ref 'AWS::StackName'
- ' --resource LaunchConfig '
- ' --region '
- !Ref 'AWS::Region'
- |+
- |
runas=root
mode: '000400'
owner: root
group: root
services:
sysvinit:
httpd:
enabled: 'true'
ensureRunning: 'true'
cfn-hup:
enabled: 'true'
ensureRunning: 'true'
files:
- /etc/cfn/cfn-hup.conf
- /etc/cfn/hooks.d/cfn-auto-reloader.conf
Properties:
#パラメータで選択したキー
KeyName: !Ref KeyName
#AMIを指定(※Mappingで該当するもの)
ImageId: !FindInMap
- AWSRegionArch2AMI
- !Ref 'AWS::Region'
- !FindInMap
- AWSInstanceType2Arch
- !Ref InstanceType
- Arch
#セキュリティグループを指定。
SecurityGroups:
- !Ref InstanceSecurityGroup
InstanceType: !Ref InstanceType
#各インスタンス起動時に一度だけ実行されるコマンド。
UserData: !Base64
'Fn::Join':
- ''
- - |
#!/bin/bash -xe
- |
yum update -y aws-cfn-bootstrap
- |
yum update -y aws-cli
- '/opt/aws/bin/cfn-init -v '
- ' --stack '
- !Ref 'AWS::StackName'
- ' --resource LaunchConfig '
- ' --region '
- !Ref 'AWS::Region'
- |+
- '/opt/aws/bin/cfn-signal -e $? '
- ' --stack '
- !Ref 'AWS::StackName'
- ' --resource WebServerGroup '
- ' --region '
- !Ref 'AWS::Region'
- |+
#スケーリングポリシー(スケールUP)
WebServerScaleUpPolicy:
Type: 'AWS::AutoScaling::ScalingPolicy'
Properties:
AdjustmentType: ChangeInCapacity #ScalingAdjustmentの数値の解釈。増減か、その数に変更か、パーセンテージ増減か。ここでは指定の数を増減。
AutoScalingGroupName: !Ref WebServerGroup #どのASGに対するポリシーか。
Cooldown: '60' #秒単位のクールダウン期間
ScalingAdjustment: '1' #↑AdjustmentTypeで説明済み。
#スケーリングポリシー(スケールDOWN)
WebServerScaleDownPolicy:
Type: 'AWS::AutoScaling::ScalingPolicy'
Properties:
AdjustmentType: ChangeInCapacity
AutoScalingGroupName: !Ref WebServerGroup
Cooldown: '60'
ScalingAdjustment: '-1' #同じ条件で1減らす。
#クラウドウォッチアラーム(上)
CPUAlarmHigh:
Type: 'AWS::CloudWatch::Alarm'
Properties:
#このアラームの説明
AlarmDescription: Scale-up if CPU > 90% for 10 minutes #「10分でCPUが90%超えたらスケールアップするよ。」
MetricName: CPUUtilization #CPU使用率メトリック
Namespace: AWS/EC2
Statistic: Average #平均
Period: '300' #5分が
EvaluationPeriods: '2' #2回 評価期間
Threshold: '90' #閾値
AlarmActions: #このアラームがなった時のアクション
- !Ref WebServerScaleUpPolicy #スケールアップポリシー
Dimensions:
- Name: AutoScalingGroupName
Value: !Ref WebServerGroup
ComparisonOperator: GreaterThanThreshold #より大きい ">"の事。 他にはGreaterThanOrEqualToThreshold(以上)、 LessThanOrEqualToThreshold(以下)、LessThanThreshold(より低い)がある。
#クラウドウォッチアラーム(下)
CPUAlarmLow:
Type: 'AWS::CloudWatch::Alarm'
Properties:
AlarmDescription: Scale-down if CPU < 70% for 10 minutes #「10分でCPUが70%より低くなったらスケールダウンするよ。」
MetricName: CPUUtilization
Namespace: AWS/EC2
Statistic: Average
Period: '300'
EvaluationPeriods: '2'
Threshold: '70'
AlarmActions:
- !Ref WebServerScaleDownPolicy
Dimensions:
- Name: AutoScalingGroupName
Value: !Ref WebServerGroup
ComparisonOperator: LessThanThreshold
#ALB
ApplicationLoadBalancer:
Type: 'AWS::ElasticLoadBalancingV2::LoadBalancer'
Properties:
#パラメータで選択した複数サブネットを指定。
Subnets: !Ref Subnets
#ALBリスナー
ALBListener:
Type: 'AWS::ElasticLoadBalancingV2::Listener'
Properties:
DefaultActions:
- Type: forward #指定されたターゲットグループにリクエストを転送。他にauthenticate-cognito/authenticate-oidc/fixed-response/redirect がある(字面でそこそこわかりますが、各詳細はドキュメントを参照ください。)
TargetGroupArn: !Ref ALBTargetGroup #ターゲットグループを指定
LoadBalancerArn: !Ref ApplicationLoadBalancer #ALBを指定
Port: '80' #ポートは80(HTTPの事)
Protocol: HTTP
#ターゲットグループ
ALBTargetGroup:
Type: 'AWS::ElasticLoadBalancingV2::TargetGroup'
Properties:
HealthCheckIntervalSeconds: 30 #個々のターゲットのヘルスチェックの概算間隔 (秒単位) ターゲットがinstanceやipの場合は30、Lambdaの場合は35秒がデフォなので、今回はデフォルトと同じ。
HealthCheckTimeoutSeconds: 5 #ヘルスチェック失敗と見なす、ターゲットからレスポンスがない時間 (秒単位)instance/ipは5秒がデフォルト Lambdaは30秒がデフォ。
HealthyThresholdCount: 3 #非正常インスタンスが正常であると見なすまでに必要なヘルスチェックの連続成功回数。デフォは5なので少ない回数を設定している。
Port: 80
Protocol: HTTP
UnhealthyThresholdCount: 5 #非正常インスタンスが非正常であると見なすまでに必要なヘルスチェックの連続失敗回数。デフォは2なので多く取っている。
VpcId: !Ref VpcId
#セキュリティグループ
InstanceSecurityGroup:
Type: 'AWS::EC2::SecurityGroup'
Properties:
#説明
GroupDescription: Enable SSH access and HTTP from the load balancer only #「ALBからのSSHとHTTPのみOKにしてるよ。」
SecurityGroupIngress:
- IpProtocol: tcp
FromPort: '22' #22はSSH
ToPort: '22'
CidrIp: !Ref SSHLocation #パラメータで入力したIPレンジ
- IpProtocol: tcp
FromPort: '80' #80はHTTP
ToPort: '80'
SourceSecurityGroupId: !Select #ALBのセキュリティグループ あるいは0.0.0.0/0 いずれかが選択される(とドキュメントを読み解釈)
- 0
- !GetAtt
- ApplicationLoadBalancer
- SecurityGroups
VpcId: !Ref VpcId
#出力(する値)
Outputs:
URL:
Description: The URL of the website
Value: !Join #結合する
- '' #何も間に挟まずに
- - 'http://' #←と↓のALBのDNS名(アクセスするとALBを介してASGで作成したEC2にアクセス出来る。)
- !GetAtt
- ApplicationLoadBalancer
- DNSName
作成されたリソースタイプまとめ。
上記テンプレートで作成されるタイプは以下(「AWS::」は省略)
AutoScaling::AutoScalingGroup
AutoScaling::LaunchConfiguration
AutoScaling::ScalingPolicy×2
CloudWatch::Alarm×2
SNS::Topic
EC2::SecurityGroup
ElasticLoadBalancingV2::LoadBalancer
ElasticLoadBalancingV2::TargetGroup
ElasticLoadBalancingV2::Listener
ELBはV2と書いてあるのでALBかNLB。(今回はALB)
そのELB用に
・ターゲットグループ
・リスナー
・オートスケーリンググループ
・起動設定
・スケールアップ(インスタンスを増やす時用)
・スケールダウン(減らす時用)
二つのスケーリングポリシー。
入力したメールアドレスに通知を行うSNSトピック
・ハイ(CPU使用率が一定より上がった時用)
・ロー(その逆で下がった時用)
二つのクラウドウォッチアラーム。
入力画面はこのようになっています。
上記パラメータで入力した値が!Refで参照され、各所で使用されていました。
出力タブからhttp:// とALBのDNS名を結合したURLがあります。クリックすると、
このように表示されます。
以上でした。
私自身「Iac=マネコンより難解」と勝手に思ってしまっていた節があるので、実はそんな事なくて「これはここを参照・あれはここで使う」と画面遷移せずに確認出来るので、AWSに触れて短い方にも、
以外と「日本語以外=難しい」という事もないのではという感覚を共有していただけたら幸いです。
思ったよりカタカナを常用している人種ですし、知らない単語の用途に触れたり、慣れていただくきっかけになれば嬉しいです。
日々練習がてら取り組んでいこうと思っているので、また同じようにアップしていきます。
それでは良い一日にしましょう^^ ありがとう御座いました。
Discussion