概要
2017年11月時点、AWS OpsWorksがALBに対応していない。
EC2インスタンスが起動後、Chefが実行されセットアップが済んでもALBのターゲットグループに追加されないということが起きる。
ALBのターゲットグループに追加、削除するレシピを作成することで対応できる。
レシピ作成
knife create cookbook alb
ALBに登録
alb/recipes/register.rb
aws_instance_id = node[:opsworks][:instance][:aws_instance_id]
target_group_arn = node[:alb][:target_group_arn]
bash 'register instance' do
code <<-END
aws elbv2 register-targets \
--region ap-northeast-1 \
--target-group-arn #{target_group_arn} \
--targets Id=#{aws_instance_id}
END
end
ALBに解除
alb/recipes/deregister.rb
aws_instance_id = node[:opsworks][:instance][:aws_instance_id]
target_group_arn = node[:alb][:target_group_arn]
bash 'deregister instance' do
code <<-END
aws elbv2 deregister-targets \
--region ap-northeast-1 \
--target-group-arn #{target_group_arn} \
--targets Id=#{aws_instance_id}
END
end
カスタムJSONの設定
{
"alb" : {
"target_group_arn" : "arn:aws:elasticloadbalancing:ap-northeast-1:11111111111:targetgroup/name/123e123e123e123e"
}
}
AWS OpsWorks Stacks のライフサイクルイベント
SetupとShutdownに追加する。
Setup
alb::register
Shutdown
alb::deregister
IAM Policy
起動するEC2インスタンスのIAM Roleに付与する。
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"elasticloadbalancing:RegisterTargets",
"elasticloadbalancing:DeregisterTargets"
],
"Resource": "*"
}
]
}