CloudFormationを使ってALBにAutoScalingGroupを紐付けようとした時にドキュメントの解釈を間違えてかなり躓いてしまったので、メモしておきます。

AWSのCloudFormationのAWS::AutoScaling::AutoScalingGroupに関する日本語ドキュメントを読むとCloudFormationの定義は以下のようになっています。

Type: AWS::AutoScaling::AutoScalingGroup
Properties:
  AutoScalingGroupName: String
  AvailabilityZones:
    - 文字列
  Cooldown: String
  DesiredCapacity: String
  HealthCheckGracePeriod: Integer
  HealthCheckType: String
  InstanceId: String
  LaunchConfigurationName: String
  LaunchTemplate: LaunchTemplateSpecification
  LifecycleHookSpecificationList: 
    - LifecycleHookSpecification
  LoadBalancerNames:
    - 文字列
  MaxSize: String
  MetricsCollection:
    - MetricsCollection
  MinSize: String
  MixedInstancesPolicy: 
    MixedInstancesPolicy
  NotificationConfigurations:
    - NotificationConfiguration
  PlacementGroup: String
  ServiceLinkedRoleARN: String
  Tags:
    - TagProperty
  TargetGroupARNs:
    - 文字列
  TerminationPolicies:
    - 文字列
  VPCZoneIdentifier:
    - 文字列

注目する所としてはAutoScalingGroupの作成の際、どのELB(CLB/ALB/NLB)にリソースを紐付けるのか対応関係はAutoScalingGroup側に記述するために LoadBalancerNames という値を利用します。
この値の利用の仕方について解釈を間違ったため、めちゃくちゃハマりました。
LoadBalancerNames は以下のような記述で詳細が記されていました。

LoadBalancerNames
この Auto Scaling グループに関連付けられている クラシックロードバランサー のリスト。Application Load Balancer または Network Load Balancer を指定するには、代わりに TargetGroupARNs を使用します。

Required: No

Type: List of String values

更新に伴う要件: 中断はありません。

ELBの場合ここに直接LBの名前を書いたりするわけですが、「ALBはTargetGroupのarnを書くのか…ふむふむ」と思い直接arnを書くとStackの更新が通らなくなってしまいました。
色々悩んだうちに、正解にはたどり着いたのですが、この記述を正しく解釈すると以下のようになります。

# 間違い
LoadBalancerNames:
  - arn:aws:elasticloadbalancing:us-west-2:123456789012:targetgroup/my-targets/aaaa
  - arn:aws:elasticloadbalancing:us-west-2:123456789012:targetgroup/my-targets/bbbb

# 正しい
TargetGroupARNs:
  - arn:aws:elasticloadbalancing:us-west-2:123456789012:targetgroup/my-targets/aaaa
  - arn:aws:elasticloadbalancing:us-west-2:123456789012:targetgroup/my-targets/bbbb

CloudFormationでは、設定できる値の種類はドキュメント冒頭にyamlかjsonで列挙されていると思っていたのですが、このように項目名が入れ替わるようなパラメーターも存在するみたいですね。