chef
chef-solo
opsworks
ALB

AWS OpsWorksでインスタンスを追加された時にALBに追加するChefのレシピ

More than 1 year has passed since last update.

概要

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": "*"
        }
    ]
}