Autoscaling起動時にEIPをアタッチさせる
外部APIとの接続があるときautoscalingで起動されたec2にも固定IPをつけたくなることがあると思います。その場合はNATゲートウェイを使うのがベストプラクティスだそうです。しかし、NATゲートウェイは意外と料金が高くつくので今回はEIPをAutoscaling時に自動でアタッチさせる方法を試してみます。
■まとめ
今回はAutoscaling起動時のec2のIPを固定化するためにEIPをアタッチさせました。EIPは月に300円程度なのでNatゲートウェイを使うよりも安く収まります。しかし、Natゲートウェイを利用したほうがec2をプライベートサブネットに置くことができるなどのメリットがあるのでNatゲートウェイの利用をおすすめします。
■参考
https://aws.amazon.com/jp/blogs/security/demystifying-ec2-resource-level-permissions/?nc1=h_ls
https://dev.classmethod.jp/articles/choose-eip-from-addresspool/
実装手順
- 1. アタッチさせるEIPを事前にプールしておく
- 2. IAMポリシーの作成
- 3. シェルスクリプトの設定
- 1. アタッチさせるEIPを事前にプールしておく
- 2. IAMポリシーの作成
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "ec2eip",
"Effect": "Allow",
"Action": [
"ec2:CreateImage",
"ec2:CreateSnapshot",
"ec2:Describe*",
"ec2:DescribeInstances",
"ec2:DescribeAddresses",
"ec2:AssociateAddress"
],
"Resource": [
"*"
]
},
{
"Sid": "ec2",
"Effect": "Allow",
"Action": [
"ec2:RebootInstances",
"ec2:StartInstances",
"ec2:StopInstances"
],
"Resource": [
"arn:aws:ec2:ap-northeast-1::instance/"
]
}
]
}
なのでAutoscalingのEC2にアタッチするポリシーを作る必要があります。ポリシーを作成してAutoscalingで利用するロールにアタッチします。
- 3. シェルスクリプトの設定
#!/bin/bash
yum install jq -y
# EIPの割り当てID
eip_alloc_ids="eipalloc-07fad2290f8915762"
export AWS_DEFAULT_REGION=ap-northeast-1 instance_id=$(curl -s http://169.254.169.254/latest/meta-data/instance-id)
available_alloc_id=$(aws ec2 describe-addresses --allocation-ids ${eip_alloc_ids} | jq -r '[.Addresses[] | select(.InstanceId == null)][0] | .AllocationId')
echo $available_alloc_id
aws ec2 associate-address --instance-id ${instance_id} --allocation-id ${available_alloc_id}