紙一重の積み重ね

35歳のエンジニアがなれる最高の自分を目指して、学んだことをこつこつ情報発信するブログです。

【AWS】ALBを作る時は、healthCheckIntervalSecondsを5以上にしよう #CloudFormation

f:id:yokoyantech:20181207175720p:plain

はじめに

CloudFormationで少しハマったのでメモ。

結論

ターゲットグループのhealthCheckIntervalSecondsは、5以上に設定する。

困っていること

  • CodeDeployの待ち時間が遅い
    • 10分位待つ

AWSの構成

  • ALB
  • EC2×2
  • ALB、TargetGroup、EC2等はCloudFormationで一気に作成
  • CodeDeployでRailsアプリケーションをデプロイ
    • インプレースデプロイ

やりたいこと

  • CodeDeployを高速化したい

以下の記事を参考に最小値に設定して、CloudFormationを実行してみた。

qiita.com

結果、怒られた。

発生したエラー

ターゲットグループのメンバーは、healthCheckIntervalSecondsが5以上必要とのこと。

CREATE_FAILED
AWS::ElasticLoadBalancingV2::TargetGroup
TargetGroup 1 validation error detected: Value '2' at 'healthCheckIntervalSeconds' failed to satisfy constraint: Member must have value greater than or equal to 5 (Service: AmazonElasticLoadBalancingV2; Status Code: 400; Error Code: ValidationError; Request ID: 5f176293-14a8-11e9-9de4-d5bbd703824e)

対処

HealthCheckIntervalSecondsに5以上の値を指定する。

TargetGroup:
  Type: "AWS::ElasticLoadBalancingV2::TargetGroup"
  Properties:
    VpcId:
      Fn::ImportValue:
        !Sub "${ENV}-VPC"
    Name: !Sub "${ENV}-tg"
    Protocol: "HTTP"
    Port: 80
    HealthCheckProtocol: "HTTP"
    HealthCheckPath: "/healthcheck.png"
    HealthCheckPort: "traffic-port"
    # ヘルスチェックの秒数はCodeDeployの時間短縮のため最小値とする
    # 参考:https://qiita.com/wMETAw/items/7b814fe400cd21776ca6
    # HealthCheckIntervalSecondsは5以上にしないとエラーが起きるので注意
    HealthyThresholdCount: 5
    UnhealthyThresholdCount: 2
    HealthCheckTimeoutSeconds: 2
    HealthCheckIntervalSeconds: 5
    Matcher:
      HttpCode: "200"

おわりに

CloudFormationは動くようになりましたが、結局CodeDeployは高速化できていません。 継続調査します。