テンプレート名
ACS-ESS-AdjustScalingGroupInstanceCount
テンプレートの説明
スケーリングルールを作成および実行することにより、スケーリンググループのインスタンス数を調整します。注:
スケーリンググループが予想インスタンス数で構成されている場合、スケーリンググループのインスタンス数が予想インスタンス数と異なる場合、Auto Scaling は自動的にスケーリンググループにインスタンスを追加または削除し、スケーリンググループのインスタンス数が予想インスタンス数と等しくなるようにします。テンプレートを実行した後、Auto Scaling コンソールでスケーリング結果を確認してください。
スケールイン後の Container Service for Kubernetes (ACK) クラスタのノード数は、コンポーネントに必要な最小ノード数より小さくすることはできません。そうでない場合、IncorrectCapacity エラーコードが返されます。
テンプレートを実行する前に、アカウントの残高が新しいインスタンスの購入費用よりも大きいことを確認してください。そうでない場合、InvalidAccountStatus.NotEnoughBalance エラーコードが返されます。
複数ゾーンにデプロイされているスケーリンググループをスケールアウトするには、次の式を使用して AdjustmentCount パラメータの値を計算します。ゾーンごとに追加するインスタンス数 × ゾーン数。
スケールアウト後に追加される Elastic Compute Service (ECS) インスタンスは、従量課金制で課金されます。ビジネス要件に基づいて、課金方法をサブスクリプションに変更できます。詳細については、「インスタンスの課金方法を従量課金からサブスクリプションに変更する」をご参照ください。
次のいずれかのスケールイン方法を使用できます。 パラメータを構成して特定の数の ECS インスタンスを削除する、 パラメータを 0 に設定し、削除する ECS インスタンスを選択して特定の ECS インスタンスを削除する。調整回数 パラメーターを指定し、特定の ECS インスタンスを削除します。調整回数 パラメーターを 0 に設定し、削除する ECS インスタンスを選択します。
スケールインで削除されるインスタンス数は、スケーリンググループに最初に作成されたインスタンス数より少なくすることはできません。
ACK クラスタのノードプールのノード数を調整します。詳細については、「ノードプールを作成および管理する」をご参照ください。注:
リンク先のドキュメントを読み、AliyunOOSLifecycleHook4CSRole ロールに権限を付与します。
テンプレートタイプ
自動
所有者
Alibaba Cloud
入力パラメータ
パラメータ | 説明 | タイプ | 必須 | デフォルト値 | 制限 |
resourceType | 調整するリソースのタイプ。 | String | いいえ | ESS | |
regionId | クローン作成する ECS インスタンスのリージョン ID。 | String | いいえ | {{ ACS::RegionId }} | |
scalingGroupId | スケーリンググループ ID。 | String | いいえ | "" | |
adjustmentType | スケーリング方法。 | String | いいえ | ScaleOut | |
adjustmentCount | スケーリンググループで変更する ECS インスタンスの数。 | Number | いいえ | 0 | |
instancesToBeRemoved | スケーリンググループから削除する ECS インスタンス。 | Json | いいえ | {'Type': 'ResourceIds', 'ResourceIds': [], 'RegionId': '{{ ACS::RegionId }}'} | |
clusterId | クラスタ ID。 | String | いいえ | "" | |
nodepoolId | ノードプール ID。 | String | いいえ | "" | |
desiredSize | 予想ノード数。 | Number | いいえ | 0 | |
OOSAssumeRole | CloudOps Orchestration Service (OOS) がアシュームする Resource Access Management (RAM) ロール。 | String | いいえ | "" |
出力パラメータ
パラメータ | 説明 | タイプ |
adjustDetail | String | |
lifecycleHookOOSExecutionResult | String |
テンプレートを実行するために必要なポリシー
{
"Version": "1",
"Statement": [
{
"Action": [
"ecs:DescribeInstances"
],
"Resource": "*",
"Effect": "Allow"
},
{
"Action": [
"ess:CreateScalingRule",
"ess:DeleteScalingRule",
"ess:DescribeScalingActivities",
"ess:DescribeScalingActivityDetail",
"ess:ExecuteScalingRule",
"ess:RemoveInstances"
],
"Resource": "*",
"Effect": "Allow"
},
{
"Action": [
"oos:ListExecutions"
],
"Resource": "*",
"Effect": "Allow"
},
{
"Action": [
"cs:DescribeClusterNodePoolDetail",
"cs:ModifyClusterNodePool"
],
"Resource": "*",
"Effect": "Allow"
}
]
}
参照
ACS-ESS-AdjustScalingGroupInstanceCount
テンプレートコンテンツ
FormatVersion: OOS-2019-06-01
Description:
ja: <p class="p">スケーリンググループルールを作成および実行することにより、スケーリンググループのインスタンス数を調整します。説明:</p>
<ul class="ul">
<li class="li">スケーリンググループで必要なインスタンス数が構成されている場合、スケーリンググループのインスタンス数が予想インスタンス数と等しくない場合、自動スケーリングサービスは、スケーリンググループのインスタンス数が常に維持されるように自動的にスケーリングします。実行が完了したら、ESS コンソールに移動して調整結果を表示してください。</li>
<li class="li">ノードをスケールダウンした後のクラスタノードの数は、コンポーネントの最小ノード要件より少なくすることはできません。そうでない場合、スケーリング操作でコード:IncorrectCapacity のエラーが返される可能性があります。</li>
<li class="li">アカウントの残高が新しく購入したインスタンスの費用よりも大きいことを確認してください。そうでない場合、コード:InvalidAccountStatus.NotEnoughBalance のエラーが返されます。</li>
<li class="li">マルチゾーンの場合は、ゾーン数の倍数に展開してください。</li>
<li class="li">拡張された ECS の支払方法は従量課金です。必要に応じて、お客様は年間および月間の手動下請けを行う必要があります。</a></li>
<li class="li">スケールダウンには 2 つの方法があります。指定された数の ECS インスタンスをスケールダウンする(<b>スケーリンググループの ECS インスタンス調整の数</b>は 0 ではない)、指定された ECS インスタンスをスケーリンググループから削除する(<b>スケーリンググループの ECS インスタンス調整の数</b>は 0 で、削除する ECS インスタンスが選択されている)</li>
<li class="li">スケーリングは、スケーリンググループで最初に開かれた数より少なくすることはできません。</li>
</ul>
<p class="p">スケーリンググループルールを作成および実行することにより、スケーリンググループのインスタンス数を調整します。説明:</p>
<ul class="ul">
<li class="li">ACK クラスタノードプール<a href='https://www.alibabacloud.com/help/ja/ack/ack-edge/user-guide/create-a-node-pool?spm=a3c0i.23458820.2359477120.9.57186e9b4Ewe21'>予想ノード数</a>を調整します。リンク先のドキュメントをよく読んで、ロール AliyunOOSLifecycleHook4CSRole を承認してください。</li>
</ul>
name-ja: エラスティックスケーリング
categories:
- エラスティック管理
- アプリケーション管理
- コンピュートネスト
Parameters:
resourceType:
Type: String
Label:
ja: リソースタイプ
AllowedValues:
- ACK
- ESS
Default: ESS
regionId:
Type: String
Label:
ja: リージョン ID
AssociationProperty: RegionId
Default: '{{ ACS::RegionId }}'
scalingGroupId:
Type: String
Label:
ja: スケーリンググループ ID
Default: ''
AssociationProperty: ALIYUN::ESS::AutoScalingGroup::AutoScalingGroupId
AssociationPropertyMetadata:
RegionId: regionId
Visible:
Condition:
Fn::Equals:
- '${resourceType}'
- ESS
adjustmentType:
Type: String
Label:
ja: 調整タイプ
AssociationPropertyMetadata:
LocaleKey: ESSGroupAdjustmentType
Visible:
Condition:
Fn::Equals:
- '${resourceType}'
- ESS
AllowedValues:
- ScaleOut
- ScaleIn
- TotalCapacity
Default: ScaleOut
adjustmentCount:
Type: Number
Label:
ja: 調整カウント
MinValue: 0
MaxValue: 100
Default: 0
AssociationPropertyMetadata:
Visible:
Condition:
Fn::Equals:
- '${resourceType}'
- ESS
instancesToBeRemoved:
Type: Json
Label:
ja: 削除されたインスタンス
Default:
Type: ResourceIds
ResourceIds: []
RegionId: '{{ ACS::RegionId }}'
AssociationProperty: Targets
AssociationPropertyMetadata:
ResourceType: ALIYUN::ECS::Instance
RegionId: regionId
Visible:
Condition:
Fn::And:
- Fn::Equals:
- '${resourceType}'
- ESS
- Fn::Equals:
- '${adjustmentType}'
- ScaleIn
- Fn::Equals:
- '${adjustmentCount}'
- 0
clusterId:
Label:
ja: クラスタ ID
Type: String
Default: ''
AssociationProperty: ALIYUN::CS::Cluster::ClusterId
AssociationPropertyMetadata:
RegionId: ${regionId}
Visible:
Condition:
Fn::Equals:
- '${resourceType}'
- ACK
nodepoolId:
Label:
ja: ノードプール ID
Type: String
Default: ''
AssociationProperty: ALIYUN::CS::Cluster::ClusterNodePool
AssociationPropertyMetadata:
RegionId: ${regionId}
ClusterId: ${clusterId}
Visible:
Condition:
Fn::Equals:
- '${resourceType}'
- ACK
desiredSize:
Label:
ja: 必要なサイズ
Type: Number
MinValue: 0
MaxValue: 100
Default: 0
AssociationPropertyMetadata:
Visible:
Condition:
Fn::Equals:
- '${resourceType}'
- ACK
OOSAssumeRole:
Label:
ja: OOS アシュームロール
Type: String
Default: ''
RamRole: '{{ OOSAssumeRole }}'
Tasks:
- Name: chooseNextTaskByResourceType
Action: 'ACS::Choice'
Description:
ja: リソースタイプ別に次のタスクを選択
Properties:
DefaultTask: whetherToRemoveInstancesFromScalingGroup
Choices:
- When:
Fn::Equals:
- 'ACK'
- '{{ resourceType }}'
NextTask: getNodePoolDetail
- Name: whetherToRemoveInstancesFromScalingGroup
Action: 'ACS::Choice'
Description:
ja: 調整タイプ別に次のタスクを選択
Properties:
DefaultTask: createScalingRule
Choices:
- When:
Fn::And:
- Fn::Equals:
- '{{adjustmentType}}'
- ScaleIn
- Fn::Equals:
- '{{adjustmentCount}}'
- 0
NextTask: getInstanceToBeRemoved
- Name: getInstanceToBeRemoved
Description:
ja: 削除する ECS インスタンスを取得
Action: ACS::SelectTargets
Properties:
ResourceType: ALIYUN::ECS::Instance
RegionId: '{{ regionId }}'
Filters:
- '{{ instancesToBeRemoved }}'
Outputs:
instanceIds:
Type: List
ValueSelector: Instances.Instance[].InstanceId
- Name: removeInstances
Action: 'ACS::ExecuteAPI'
OnSuccess: waitScalingActivityComplete
When:
Fn::Not:
Fn::Equals:
- '{{ getInstanceToBeRemoved.instanceIds }}'
- []
Description:
ja: スケーリンググループからインスタンスを削除
Properties:
Service: ESS
API: RemoveInstances
Parameters:
RegionId: '{{ regionId }}'
ScalingGroupId: '{{ scalingGroupId }}'
InstanceIds: '{{ getInstanceToBeRemoved.instanceIds }}'
Outputs:
scalingActivityId:
Type: String
ValueSelector: .ScalingActivityId
- Name: createScalingRule
Action: 'ACS::ExecuteAPI'
Description:
ja: スケーリングルールを作成
Properties:
Service: ESS
API: CreateScalingRule
Parameters:
RegionId: '{{ regionId }}'
ScalingGroupId: '{{ scalingGroupId }}'
ScalingRuleName: '{{ ACS::ExecutionId }}'
AdjustmentType:
Fn::If:
- Fn::Equals:
- 'TotalCapacity'
- '{{ adjustmentType }}'
- TotalCapacity
- QuantityChangeInCapacity
AdjustmentValue:
Fn::If:
- Fn::Equals:
- ScaleIn
- '{{ adjustmentType }}'
- '-{{ adjustmentCount }}'
- '{{ adjustmentCount }}'
Outputs:
scalingRuleAri:
Type: String
ValueSelector: ScalingRuleAri
scalingRuleId:
Type: String
ValueSelector: ScalingRuleId
- Name: executeScalingRule
Description:
ja: スケーリングルールを実行
OnError: deleteScalingRule
Action: 'ACS::ExecuteApi'
Properties:
Service: ESS
API: ExecuteScalingRule
Parameters:
RegionId: '{{ regionId }}'
ScalingRuleAri: '{{ createScalingRule.scalingRuleAri }}'
Outputs:
scalingActivityId:
Type: String
ValueSelector: ScalingActivityId
- Name: waitScalingActivityComplete
Description:
ja: スケーリングアクティビティの実行が成功または失敗するまでポーリング
OnError: deleteScalingRule
Retries: 30
Action: 'ACS::WaitFor'
Properties:
Service: ESS
API: DescribeScalingActivities
Parameters:
RegionId: '{{ regionId }}'
ScalingActivityId1:
Fn::If:
- Fn::And:
- Fn::Equals:
- '{{adjustmentType}}'
- ScaleIn
- Fn::Equals:
- '{{adjustmentCount}}'
- 0
- '{{ removeInstances.scalingActivityId }}'
- '{{ executeScalingRule.scalingActivityId }}'
DesiredValues:
- Successful
StopRetryValues:
- Failed
- Rejected
- Warning
PropertySelector: 'ScalingActivities.ScalingActivity[0].StatusCode'
- Name: deleteScalingRule
When:
Fn::Not:
Fn::And:
- Fn::Equals:
- '{{adjustmentType}}'
- ScaleIn
- Fn::Equals:
- '{{adjustmentCount}}'
- 0
Description:
ja: スケーリングルールを削除
Action: 'ACS::ExecuteApi'
Properties:
Service: ESS
API: DeleteScalingRule
Parameters:
RegionId: '{{ regionId }}'
ScalingRuleId: '{{ createScalingRule.scalingRuleId }}'
- Name: describeScalingActivityDetail
Description:
ja: スケーリングアクティビティの詳細を記述
Action: 'ACS::ExecuteApi'
Properties:
Service: ESS
API: DescribeScalingActivityDetail
Parameters:
RegionId: '{{ regionId }}'
ScalingActivityId:
Fn::If:
- Fn::And:
- Fn::Equals:
- '{{adjustmentType}}'
- ScaleIn
- Fn::Equals:
- '{{adjustmentCount}}'
- 0
- '{{ removeInstances.scalingActivityId }}'
- '{{ executeScalingRule.scalingActivityId }}'
Outputs:
detail:
Type: String
ValueSelector: .Detail
- Name: getOOSExecutionOutput
Action: 'ACS::ExecuteAPI'
OnSuccess: ACS::END
Description:
ja: ライフサイクルフック OOS 実行出力を取得
Properties:
Service: OOS
API: ListExecutions
Parameters:
RegionId: '{{ regionId }}'
Tags:
ESS:ScalingActivityId:
Fn::If:
- Fn::And:
- Fn::Equals:
- '{{adjustmentType}}'
- ScaleIn
- Fn::Equals:
- '{{adjustmentCount}}'
- 0
- '{{ removeInstances.scalingActivityId }}'
- '{{ executeScalingRule.scalingActivityId }}'
Outputs:
lifecycleHookOOSExecutionResult:
Type: String
ValueSelector: 'Executions[].Outputs'
- Name: getNodePoolDetail
Action: ACS::WaitFor
Description:
ja: クラスタノードプール情報を取得
Retries: 20
Properties:
Service: CS
API: DescribeClusterNodePoolDetail
Method: GET
URI: /clusters/{{clusterId}}/nodepools/{{nodepoolId}}
Parameters: {}
DesiredValues:
- active
PropertySelector: .status.state
Outputs:
nodePoolInfo:
Type: Json
ValueSelector: .
- Name: modifyClusterNodePool
Action: ACS::ExecuteAPI
Description:
ja: クラスタノードプール構成を変更
Properties:
Service: CS
API: ModifyClusterNodePool
Method: PUT
Headers:
Content-Type: application/json
URI: /clusters/{{clusterId}}/nodepools/{{nodepoolId}}
Body:
Fn::Jq:
- First
- '.+({"scaling_group": (.scaling_group + {"desired_size": {{desiredSize}}})}) | del(.scaling_group.login_password)'
- '{{ getNodePoolDetail.nodePoolInfo }}'
- Name: untilClusterNodePoolReady
Action: ACS::WaitFor
Description:
ja: クラスタノードプール構成が完了するまで待機
Retries: 20
Properties:
Service: CS
API: DescribeClusterNodePoolDetail
Method: GET
Parameters: {}
URI: /clusters/{{clusterId}}/nodepools/{{nodepoolId}}
DesiredValues:
- active
PropertySelector: .status.state
Outputs:
adjustDetail:
Type: String
Value: '{{ describeScalingActivityDetail.detail }}'
lifecycleHookOOSExecutionResult:
Type: String
Value: '{{ getOOSExecutionOutput.lifecycleHookOOSExecutionResult }}'
Metadata:
ALIYUN::OOS::Interface:
ParameterGroups:
- Parameters:
- regionId
- resourceType
- scalingGroupId
- adjustmentType
- adjustmentCount
- instancesToBeRemoved
- clusterId
- nodepoolId
- desiredSize
Label:
default:
ja: スケーリングルールの構成パラメータ
- Parameters:
- OOSAssumeRole
Label:
default:
ja: 制御オプション