テンプレート名
ACS-ESS-LifeCycleModifyRedisIPWhitelist
テンプレートの説明
Auto Scaling が Elastic Compute Service (ECS) インスタンスを追加または削除する際に、ライフサイクルフックを使用して更新をトリガーし、Tair (Redis OSS 互換) インスタンスの IP アドレスホワイトリストを更新します。
テンプレートタイプ
自動
所有者
Alibaba Cloud
入力パラメーター
|
パラメーター |
説明 |
タイプ |
必須 |
デフォルト値 |
制限 |
|
dbInstanceId |
IP アドレスホワイトリストを更新する Tair (Redis OSS 互換) インスタンスの ID です。 |
String |
はい |
||
|
modifyMode |
IP アドレスホワイトリストの更新方法です。スケールアウト (インスタンスの追加) 時には |
String |
はい |
||
|
regionId |
Tair インスタンスが存在するリージョンです。デフォルトでは、Auto Scaling のライフサイクルフックから渡されるリージョン ID が使用されます。 |
String |
いいえ |
${regionId} |
|
|
instanceIds |
IP アドレスをホワイトリストに追加または削除する対象の ECS インスタンスの ID です。デフォルトでは、ライフサイクルフックから渡されるインスタンス ID リストが使用されます。 |
List |
いいえ |
['${instanceIds}'] |
|
|
lifecycleHookId |
この実行をトリガーしたライフサイクルフックの ID です。 |
String |
いいえ |
${lifecycleHookId} |
|
|
lifecycleActionToken |
インスタンスに関連付けられたスケーリングアクティビティを識別するトークンです。 |
String |
いいえ |
${lifecycleActionToken} |
|
|
OOSAssumeRole |
OOS がこのテンプレートを実行するために引き受ける RAM ロールです。 |
String |
いいえ |
OOSServiceRole |
出力パラメーター
|
パラメーター |
説明 |
タイプ |
|
ipAddresses |
指定された ECS インスタンスのプライベート IP アドレスです。VPC のプライベート IP とクラシックネットワークの内部 IP を含みます。 |
List |
仕組み
このテンプレートは、4 つのタスクを順番に実行します:
getInstanceIpAddress —
ecs:DescribeInstancesを呼び出して、指定された ECS インスタンスの VPC とクラシックネットワークのプライベート IP アドレスを取得します。このステップが失敗した場合、テンプレートはCompleteLifecycleActionForAbandonをトリガーします。modifySecurityIps —
kvstore:ModifySecurityIpsを呼び出して、指定されたmodifyModeを使用して取得した IP を使用して Tair インスタンスのホワイトリストを更新します。このステップが成功した場合、テンプレートはCompleteLifecycleActionForContinueをトリガーします。失敗した場合は、CompleteLifecycleActionForAbandonをトリガーします。CompleteLifecycleActionForContinue — Auto Scaling にライフサイクルフックアクティビティが続行できる (
CONTINUE) ことを通知します。ステップ 2 が成功した場合にのみ実行されます。CompleteLifecycleActionForAbandon:Auto Scaling にスケーリングアクティビティを破棄 (
ABANDON) するように通知します。ステップ 1 またはステップ 2 が失敗した場合に実行されます。
このテンプレートの実行に必要なポリシー
{
"Version": "1",
"Statement": [
{
"Action": [
"ecs:DescribeInstances"
],
"Resource": "*",
"Effect": "Allow"
},
{
"Action": [
"kvstore:ModifySecurityIps"
],
"Resource": "*",
"Effect": "Allow"
},
{
"Action": [
"ess:CompleteLifecycleAction"
],
"Resource": "*",
"Effect": "Allow"
}
]
}
関連ドキュメント
ACS-ESS-LifeCycleModifyRedisIPWhitelist
テンプレートコンテンツ
FormatVersion: OOS-2019-06-01
Description:
ja: ライフサイクルフックを使用して Tair インスタンスの IP アドレスホワイトリストを変更します
name-ja: ACS-ESS-LifeCycleModifyRedisIPWhitelist
categories:
- elastic_manage
Parameters:
dbInstanceId:
Label:
ja: DBInstanceId
Type: String
modifyMode:
Label:
ja: ModifyMode
Description:
ja: IP アドレスホワイトリストの更新方法です。Append と AppendDup はスケールアウト時に、Delete はスケールイン時に使用されます。
Type: String
AllowedValues:
- Append
- Delete
- AppendDup
regionId:
Label:
ja: RegionId
Description:
ja: 'リージョン ID です。Auto Scaling から渡されるデフォルト値 (${regionId}) を使用してください。'
Type: String
Default: '${regionId}'
instanceIds:
Label:
ja: InstanceIds
Description:
ja: 'ECS インスタンスの ID リストです。Auto Scaling から渡されるデフォルト値 (["${instanceIds}"]) を使用してください。'
Type: List
Default:
- '${instanceIds}'
lifecycleHookId:
Label:
ja: LifecycleHookId
Description:
ja: 'ライフサイクルフックの ID です。Auto Scaling から渡されるデフォルト値 (${lifecycleHookId}) を使用してください。'
Type: String
Default: '${lifecycleHookId}'
lifecycleActionToken:
Label:
ja: LifecycleActionToken
Description:
ja: 'インスタンスに関連付けられたスケーリングアクティビティを識別するトークンです。Auto Scaling から渡されるデフォルト値 (${lifecycleActionToken}) を使用してください。'
Type: String
Default: '${lifecycleActionToken}'
OOSAssumeRole:
Label:
ja: OOSAssumeRole
Type: String
Default: OOSServiceRole
RamRole: '{{ OOSAssumeRole }}'
Tasks:
- Name: getInstanceIpAddress
Action: 'ACS::ExecuteAPI'
Description:
ja: ECS インスタンスの IP アドレスを取得します
OnError: CompleteLifecycleActionForAbandon
Properties:
Service: ECS
API: DescribeInstances
Parameters:
RegionId: '{{ regionId }}'
InstanceIds: '{{ instanceIds }}'
Outputs:
Ips:
Type: List
ValueSelector: >-
.Instances.Instance[]|.VpcAttributes.PrivateIpAddress.IpAddress+.InnerIpAddress.IpAddress|.[]
- Name: modifySecurityIps
Action: 'ACS::ExecuteAPI'
Description:
ja: ホワイトリストを変更します
OnError: CompleteLifecycleActionForAbandon
OnSuccess: CompleteLifecycleActionForContinue
Properties:
Service: R-KVSTORE
API: ModifySecurityIps
Parameters:
RegionId: '{{ regionId }}'
ModifyMode: '{{ modifyMode }}'
InstanceId: '{{ dbInstanceId }}'
SecurityIps:
'Fn::Join':
- ','
- '{{ getInstanceIpAddress.Ips }}'
- Name: CompleteLifecycleActionForContinue
Action: 'ACS::ExecuteAPI'
Description:
ja: ライフサイクルアクションを続行 (CONTINUE) として完了します
OnSuccess: 'ACS::END'
Properties:
Service: ESS
API: CompleteLifecycleAction
Parameters:
RegionId: '{{ regionId }}'
LifecycleHookId: '{{ lifecycleHookId }}'
LifecycleActionToken: '{{ lifecycleActionToken }}'
LifecycleActionResult: CONTINUE
- Name: CompleteLifecycleActionForAbandon
Action: 'ACS::ExecuteAPI'
Description:
ja: ライフサイクルアクションを破棄 (ABANDON) として完了します
Properties:
Service: ESS
API: CompleteLifecycleAction
Parameters:
RegionId: '{{ regionId }}'
LifecycleHookId: '{{ lifecycleHookId }}'
LifecycleActionToken: '{{ lifecycleActionToken }}'
LifecycleActionResult: ABANDON
Outputs:
ipAddresses:
Type: List
Value: '{{ getInstanceIpAddress.Ips }}'