{OCI コンピュート} インスタンスのオートスケーリングを設定する

https://cloudii.jp/news/blog/%e3%82%a4%e3%83%b3%e3%82%b9%e3%82%bf%e3%83%b3%e3%82%b9%e3%81%ae%e8%87%aa%e5%8b%95%e3%82%b9%e3%82%b1%e3%83%bc%e3%83%aa%e3%83%b3%e3%82%b0%e8%a8%ad%e5%ae%9a%e3%82%92%e3%81%97%e3%81%a6%e3%82%a4%e3%83%b3/

https://oracle-japan.github.io/ocitutorials/intermediates/autoscaling/

https://docs.oracle.com/ja-jp/iaas/Content/Compute/Concepts/instancemanagement.htm


メトリックベースの自動スケーリング: パフォーマンス・メトリックがしきい値以上になると、自動スケーリング・アクションがトリガーされます。
スケジュールベースの自動スケーリング: 自動スケーリング・イベントは、ユーザーがスケジュールした特定の時間に実行されます。

 

-- 1. インスタンス作成(OL9)


oci compute instance launch \
--compartment-id ocid1.compartment.oc1..000000000000000000000000000000000000000000000000000000000000 \
--availability-domain OEIw:US-ASHBURN-AD-1 \
--subnet-id ocid1.subnet.oc1.iad.000000000000000000000000000000000000000000000000000000000000 \
--assign-public-ip true \
--boot-volume-size-in-gbs 50 \
--display-name vm01 \
--fault-domain FAULT-DOMAIN-1 \
--image-id ocid1.image.oc1.iad.000000000000000000000000000000000000000000000000000000000000 \
--shape VM.Standard.E2.1 \
--ssh-authorized-keys-file "$HOME/.ssh/id_rsa.pub" 

oci compute instance list \
--compartment-id ocid1.compartment.oc1..000000000000000000000000000000000000000000000000000000000000 \
--query 'data.{"display-name":"display-name","id":"id","lifecycle-state":"lifecycle-state"}' \
--output table


oci compute instance terminate \
--instance-id ocid1.instance.oc1.iad.000000000000000000000000000000000000000000000000000000000000 \
--force

 


-- 2. インスタンス構成の作成


oci compute-management instance-configuration create-from-instance \
--compartment-id ocid1.compartment.oc1..000000000000000000000000000000000000000000000000000000000000 \
--instance-id ocid1.instance.oc1.iad.000000000000000000000000000000000000000000000000000000000000 \
--display-name ic01 

 

oci compute-management instance-configuration list \
--compartment-id ocid1.compartment.oc1..000000000000000000000000000000000000000000000000000000000000 \
--query 'data.{"display-name":"display-name","id":"id","lifecycle-state":"lifecycle-state"}' \
--output table

oci compute-management instance-configuration get \
--instance-configuration-id ocid1.instanceconfiguration.oc1.iad.000000000000000000000000000000000000000000000000000000000000 

 


oci compute-management instance-configuration delete \
--instance-configuration-id ocid1.instanceconfiguration.oc1.iad.000000000000000000000000000000000000000000000000000000000000 \
--force 

 

 

-- 3. インスタンス・プールの作成

 

oci compute-management instance-pool create \
--compartment-id ocid1.compartment.oc1..000000000000000000000000000000000000000000000000000000000000 \
--instance-configuration-id ocid1.instanceconfiguration.oc1.iad.000000000000000000000000000000000000000000000000000000000000 \
--placement-configurations '[
  {
    "availability-domain": "OEIw:US-ASHBURN-AD-1",
    "fault-domains": null,
    "primary-subnet-id": null,
    "primary-vnic-subnets": {
      "ipv6-address-ipv6-subnet-cidr-pair-details": null,
      "is-assign-ipv6-ip": null,
      "subnet-id": "ocid1.subnet.oc1.iad.000000000000000000000000000000000000000000000000000000000000"
    },
    "secondary-vnic-subnets": null
  }
]' \
--size 0 \
--display-name ip01 \
--instance-display-name-formatter 'ip01insntace${launchCount}' \
--instance-hostname-formatter 'ip01insntace${launchCount}' 

 


oci compute-management instance-pool list \
--compartment-id ocid1.compartment.oc1..000000000000000000000000000000000000000000000000000000000000 \
--query 'data.{"display-name":"display-name","id":"id","lifecycle-state":"lifecycle-state"}' \
--output table

oci compute-management instance-pool get \
--instance-pool-id ocid1.instancepool.oc1.iad.000000000000000000000000000000000000000000000000000000000000 

 


oci compute-management instance-pool terminate \
--instance-pool-id ocid1.instancepool.oc1.iad.000000000000000000000000000000000000000000000000000000000000 \
--force 


-- 4. 自動スケーリング構成の作成

oci autoscaling configuration create --generate-full-command-json-input

 

oci autoscaling configuration create \
--compartment-id ocid1.compartment.oc1..000000000000000000000000000000000000000000000000000000000000 \
--policies '[
  {
    "capacity": {
      "initial": 1,
      "max": 2,
      "min": 1
    },
    "display-name": "asp01",
    "is-enabled": true,
    "policy-type": "threshold",
    "rules": [
      {
        "action": {
          "type": "CHANGE_COUNT_BY",
          "value": -1
        },
        "display-name": "asp0101",
        "metric": {
          "metric-type": "CPU_UTILIZATION",
          "threshold": {
            "operator": "LT",
            "value": 30
          }
        }
      },
      {
        "action": {
          "type": "CHANGE_COUNT_BY",
          "value": 1
        },
        "display-name": "asp0102",
        "metric": {
          "metric-type": "CPU_UTILIZATION",
          "threshold": {
            "operator": "GT",
            "value": 70
          }
        }
      }
    ]
  }
]' \
--resource '{
  "id": "ocid1.instancepool.oc1.iad.000000000000000000000000000000000000000000000000000000000000",
  "type": "instancePool"
}' \
--cool-down-in-seconds 300 \
--display-name asc01 \
--is-enabled true 

 


oci autoscaling configuration list \
--compartment-id ocid1.compartment.oc1..000000000000000000000000000000000000000000000000000000000000 \
--query 'data.{"display-name":"display-name","id":"id","lifecycle-state":"lifecycle-state"}' \
--output table

oci autoscaling configuration get \
--auto-scaling-configuration-id ocid1.autoscalingconfiguration.oc1.iad.000000000000000000000000000000000000000000000000000000000000 

 

oci autoscaling configuration delete \
--auto-scaling-configuration-id ocid1.autoscalingconfiguration.oc1.iad.000000000000000000000000000000000000000000000000000000000000 \
--force 

 

-- 5. 動作確認

ssh -i $HOME/.ssh/id_rsa opc@192.0.2.1


sudo dnf repolist all | grep -i epel
sudo yum-config-manager --enable ol9_developer_EPEL
sudo dnf -y install stress

stress -c 2 &
top -c

pkill stress