{OCI コンピュート} vm起動停止自動化

https://www.ashisuto.co.jp/db_blog/article/howto-automate-starting-and-stopping-Compute-instances.html

https://docs.oracle.com/ja-jp/iaas/Content/Compute/Tasks/autoscalinginstancepools.htm#time

https://docs.public.oneportal.content.oci.oraclecloud.com/ja-jp/iaas/compute-cloud-at-customer/topics/compute/stopping-starting-and-resetting-an-instance.htm#stopping-starting-and-resetting-an-instance


スケジュールベースの自動スケーリングで、Computeインスタンス起動停止を自動化


スケジュールベースの自動スケーリング・ポリシーで可能な実行アクション
・プール・サイズのスケーリング
・全インスタンスのライフサイクル状態の変更

 


-- 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. Computeインスタンスのアタッチ

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

 

 

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

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

 

 

oci autoscaling configuration create \
--compartment-id ocid1.compartment.oc1..000000000000000000000000000000000000000000000000000000000000 \
--policies '[
  {
    "capacity": null,
    "display-name": "asp01",
    "execution-schedule": {
      "expression": "0 35 23 * * ? *",
      "timezone": "UTC",
      "type": "cron"
    },
    "is-enabled": true,
    "policy-type": "scheduled",
    "resource-action": {
      "action": "STOP",
      "action-type": "power"
    }
  },
  {
    "capacity": null,
    "display-name": "asp02",
    "execution-schedule": {
      "expression": "0 40 23 * * ? *",
      "timezone": "UTC",
      "type": "cron"
    },
    "is-enabled": true,
    "policy-type": "scheduled",
    "resource-action": {
      "action": "START",
      "action-type": "power"
    }
  }
]' \
--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