IBM Cloud Load Balancer(ICLB): connection timeoutの変更方法

#1. はじめに
IBM Cloud Load Balancerの[Connection timeout](https://cloud.ibm.com/docs/infrastructure/loadbalancer-service?topic=loadbalancer-service-advanced-traffic-management-with-ibm-cloud-load-balancer#connection-timeouts)の値は変更可能だが、本記事執筆時点ではAPIでのみ変更がサポートされている。利用するAPIは、[SoftLayer_Network_LBaaS_Listener](https://sldn.softlayer.com/reference/services/SoftLayer_Network_LBaaS_Listener/) Serviceの[UpdateLoadBalancerProtocols](https://sldn.softlayer.com/reference/services/SoftLayer_Network_LBaaS_Listener/updateLoadBalancerProtocols/)メソッドを利用する。
一応、[こちら](https://cloud.ibm.com/docs/loadbalancer-service?topic=loadbalancer-service-api-reference#update-a-protocol)で具体的なコードは紹介されているが、結局UUIDなどを別途取得する必要がある。そのため、なるべくコードを書かずに変更する手順を、UUID取得方法から含めて紹介する。

#2. UUIDの取得
変更するためには、`ICLBのUUID`と、`変更対象のListenerのUUID`が必要になる。

```console:ICLBのUUIDの取得
# slcli loadbal list
:............................................................................................................................................:
:                                                           IBM Cloud LoadBalancer                                                           :
:........:..........:...............................................:.............:........:...........................:.........:...........:
:   Id   : Location : Address                                       : Description : Public :        Create Date        : Members : Listeners :
:........:..........:...............................................:.............:........:...........................:.........:...........:
: 921608 : Tokyo 2  : xxxxxICLB-1756623-tok02.clb.appdomain.cloud : None        :  Yes   : 2020-03-19T03:01:06-06:00 :    3    :     2     :
:........:..........:...............................................:.............:........:...........................:.........:...........:

# slcli call-api Network_LBaaS_LoadBalancer getObject --id=921608 --mask=id,address,uuid
:.........:...............................................:
:    name : value                                         :
:.........:...............................................:
: address : xxxxxICLB-1756623-tok02.clb.appdomain.cloud :
:      id : 921608                                        :
:    uuid : 016b62fa-d99c-4e35-a051-7ad59e57344c          :
:.........:...............................................:
```

上記より、ICLBのUUIDは`016b62fa-d99c-4e35-a051-7ad59e57344c`である。

```console:変更対象のListnerのUUIDの取得
# slcli call-api Network_LBaaS_LoadBalancer getListeners --id=921608 --mask=id,protocol,protocolPort,uuid
:........:..........:..............:......................................:
:   id   : protocol : protocolPort :                 uuid                 :
:........:..........:..............:......................................:
: 944832 :   HTTP   :      80      : b37b5840-1d92-43e0-8e0e-b58614b371fe :
: 945310 :  HTTPS   :     443      : a64414db-8e7f-4de2-94a5-017492bc20a7 :
:........:..........:..............:......................................:
```

今回は変更対象を80番ポートのListenerとするため、変更対象のListnerのUUIDは`b37b5840-1d92-43e0-8e0e-b58614b371fe`である。


#3. 変更前パラメーターの確認

Defaultでは`clientTimeout`も`serverTimeout`も50秒に設定されている。

```
# slcli call-api Network_LBaaS_Listener getObject --id=944832
:....................:......................................:
:               name : value                                :
:....................:......................................:
:      clientTimeout : 50                                   :
:    connectionLimit :                                      :
:         createDate : 2020-03-19T03:01:06-06:00            :
:                 id : 944832                               :
:         modifyDate : 2020-03-25T02:22:02-06:00            :
:           protocol : HTTP                                 :
:       protocolPort : 80                                   :
: provisioningStatus : ACTIVE                               :
:      serverTimeout : 50                                   :
:   tlsCertificateId :                                      :
:               uuid : b37b5840-1d92-43e0-8e0e-b58614b371fe :
:....................:......................................:
```


#4. 変更の実施と確認

以下のようなファイルを作成する。
ここで`016b62fa-d99c-4e35-a051-7ad59e57344c`はICLBのUUIDであり、
`b37b5840-1d92-43e0-8e0e-b58614b371fe`はListnerのUUIDである。

```console:timeoutvalue.json
# cat timeoutvalue.json
{
  "parameters": [
    "016b62fa-d99c-4e35-a051-7ad59e57344c",
    [
      {
        "listenerUuid": "b37b5840-1d92-43e0-8e0e-b58614b371fe",
        "serverTimeout": 120,
        "clientTimeout": 10
      }
    ]
  ]
}
```
```console:変更の実施
# curl -u $API_USER:$API_KEY https://api.softlayer.com/rest/v3.1/SoftLayer_Network_LBaaS_Listener/updateLoadBalancerProtocols.json -X POST -d @timeoutvalue.json
```
```console:変更の確認
# slcli call-api Network_LBaaS_Listener getObject --id=944832
:....................:......................................:
:               name : value                                :
:....................:......................................:
:      clientTimeout : 10                                   :
:    connectionLimit :                                      :
:         createDate : 2020-03-19T03:01:06-06:00            :
:                 id : 944832                               :
:         modifyDate : 2020-03-26T19:50:57-06:00            :
:           protocol : HTTP                                 :
:       protocolPort : 80                                   :
: provisioningStatus : ACTIVE                               :
:      serverTimeout : 120                                  :
:   tlsCertificateId :                                      :
:               uuid : b37b5840-1d92-43e0-8e0e-b58614b371fe :
:....................:......................................:
```