前提: セキュリティリストで80番ポート許可したVCN作成済み
★Cloud-initスクリプト
→ Terraformの場合と同様にCLIの場合もcloud-config形式で記述する必要がある
-- 1. コンピュートインスタンス作成(OL9)
oci compute image list \
--compartment-id ocid1.compartment.oc1..000000000000000000000000000000000000000000000000000000000000 \
--all \
--query 'data.{"operating-system":"operating-system","operating-system-version":"operating-system-version","display-name":"display-name"}' \
--output=table
oci compute image list \
--compartment-id ocid1.compartment.oc1..000000000000000000000000000000000000000000000000000000000000 \
--all \
--query 'data[?"display-name"==`'Oracle-Linux-9.2-2023.12.08-0'`].id | [0]' \
--raw-output
oci compute shape list \
--compartment-id ocid1.compartment.oc1..000000000000000000000000000000000000000000000000000000000000 \
--image-id ocid1.image.oc1.iad.000000000000000000000000000000000000000000000000000000000000 \
--query 'sort_by(data, &"ocpus").{"shape":"shape","ocpus":"ocpus","memory-in-gbs":"memory-in-gbs"}' \
--output=table
cat <<-'EOF' > a.yaml
#cloud-config
timezone: Asia/Tokyo
locale: ja_JP.utf8
package_update: true
packages:
- httpd
runcmd:
- setenforce 0
- sed -i -e 's/^SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config
- systemctl stop firewalld
- systemctl disable firewalld
- systemctl start httpd
- systemctl enable httpd
- echo $(hostname) > /var/www/html/index.html
EOF
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" \
--user-data-file "./a.yaml"
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 \
--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. Load Balancer作成
oci lb shape list \
--compartment-id ocid1.compartment.oc1..000000000000000000000000000000000000000000000000000000000000
oci lb load-balancer list \
--compartment-id ocid1.compartment.oc1..000000000000000000000000000000000000000000000000000000000000
oci lb load-balancer create \
--compartment-id ocid1.compartment.oc1..000000000000000000000000000000000000000000000000000000000000 \
--display-name lb01 \
--shape-name flexible \
--subnet-ids '[
"ocid1.subnet.oc1.iad.000000000000000000000000000000000000000000000000000000000000"
]' \
--ip-mode IPV4 \
--is-private false \
--shape-details '{
"maximumBandwidthInMbps": 10,
"minimumBandwidthInMbps": 10
}'
oci lb load-balancer list \
--compartment-id ocid1.compartment.oc1..000000000000000000000000000000000000000000000000000000000000 \
--query 'data[].{"display-name":"display-name","id":"id","lifecycle-state":"lifecycle-state"}' \
--output table
oci lb load-balancer delete \
--load-balancer-id ocid1.loadbalancer.oc1.iad.000000000000000000000000000000000000000000000000000000000000 \
--force
-- 6. バックエンドセット作成
oci lb backend-set list \
--load-balancer-id ocid1.loadbalancer.oc1.iad.000000000000000000000000000000000000000000000000000000000000
oci lb policy list \
--compartment-id ocid1.compartment.oc1..000000000000000000000000000000000000000000000000000000000000
oci lb backend-set create \
--health-checker-protocol HTTP \
--load-balancer-id ocid1.loadbalancer.oc1.iad.000000000000000000000000000000000000000000000000000000000000 \
--name bs01 \
--policy ROUND_ROBIN \
--health-checker-interval-in-ms 100000 \
--health-checker-port 80 \
--health-checker-retries 3 \
--health-checker-return-code 200 \
--health-checker-timeout-in-ms 3000 \
--health-checker-url-path "/"
oci lb backend-set list \
--load-balancer-id ocid1.loadbalancer.oc1.iad.000000000000000000000000000000000000000000000000000000000000
oci lb backend-set delete \
--load-balancer-id ocid1.loadbalancer.oc1.iad.000000000000000000000000000000000000000000000000000000000000 \
--backend-set-name bs01 \
--force
-- 7. リスナー作成
oci lb listener create \
--default-backend-set-name bs01 \
--load-balancer-id ocid1.loadbalancer.oc1.iad.000000000000000000000000000000000000000000000000000000000000 \
--name lis01 \
--port 80 \
--protocol HTTP
oci lb listener delete \
--load-balancer-id ocid1.loadbalancer.oc1.iad.000000000000000000000000000000000000000000000000000000000000 \
--listener-name lis01 \
--force
-- 8. バックエンドセットへのインスタンス・プールのアタッチ
oci compute-management instance-pool attach-lb \
--backend-set-name bs01 \
--instance-pool-id ocid1.instancepool.oc1.iad.000000000000000000000000000000000000000000000000000000000000 \
--load-balancer-id ocid1.loadbalancer.oc1.iad.000000000000000000000000000000000000000000000000000000000000 \
--port 80 \
--vnic-selection PrimaryVnic
-- 9. 動作確認
while true; do
curl http://192.0.2.1
sleep 1;
done
ssh -i $HOME/.ssh/id_rsa opc@192.0.2.2
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