2 years ago I started work on the OCI-AutoScaling script. I wanted to run my workloads on OCI as efficiently as possible. So workloads that I did not need in the evenings or weekends could automatically be turned off orscaled down.
With the new release this OCI-AutoScaling script now support 8 OCI services!
Based on an hourly schedule, configured by a Scheduling TAG, you can initiate the following operations:
- Compute VMs: On/Off
- Instance Pools: On/Off and Scaling (# of instances)
- Database VMs: On/Off
- Database Baremetal Servers: Scaling (# of CPUs between 1 and 52)
- Database Exadata CS: Scaling (# of CPUs between 2 and 400)
- Autonomous Databases: On/Off and Scaling (# of CPUs between 1 and 128)
- Oracle Digital Assistant: On/Off
- Oracle Analytics Cloud: On/Off and Scaling (between 2-8 oCPU and 10-12 oCPU)
- Oracle Integration Service: On/Off
- Load Balancer: Scaling (between 10, 100, 400, 8000 Mbps)*
This script needs to run hourly and you can use an Always Free Compute instance to do this. Here is a youtube video demonstrating how you can implement this: Youtube demonstration video: https://youtu.be/veHbyvDB74A
The full project can be found on github: https://github.com/AnykeyNL/OCI-AutoScale
Hi Richard, I tried the recent update (via the install.sh), but am now getting a new error, any ideas ?
[opc@autoscaler OCI-AutoScale]$ /usr/bin/python3 /home/opc/OCI-AutoScale/AutoScaleALL.py down
Using Instance principle
Starting Auto Scaling script, executing Down actions
Logged in as: Instance Principle/imaginecorp @ iad
Enabled regions: us-ashburn-1 us-phoenix-1
Day of week: Saturday – Weekday: False – Current hour: 13
Checking: sroh-xgljob1-qa01-us3 – PrivateIp
Traceback (most recent call last):
File “/home/opc/OCI-AutoScale/AutoScaleALL.py”, line 347, in
schedule = resourceDetails.defined_tags[PredefinedTag]
NameError: name ‘resourceDetails’ is not defined
What kind of resource is sroh-xgljob1-qa01-us3 – PrivateIp?
I think you have a schedule tag on a non-supported resource. If added a fix to not process those. Update the code and check if you still get the same error.
Thanks Richard (it is a VM instance), I applied the latest code and it’s working like a charm now. I did a quick calculation, and if my math is right then I would expect to see the following savings once I get my schedules defined (almost too good to be true?).
weekends off = 28%
weekends and weeknights off = 65%
That is great to hear! If you want to write a guest blog about your experience, feel free to volunteer 🙂
Hi Richard,
After using this command python3 CreateNameSpaces.py, I get the following error, what can I do?
[opc@vm-terraform OCI-AutoScale]$ python3 CreateNameSpaces.py
/usr/lib/python3.6/site-packages/oci/packages/cryptography/hazmat/bindings/opens sl/binding.py:179: CryptographyDeprecationWarning: OpenSSL version 1.0.2 is no l onger supported by the OpenSSL project, please upgrade. The next version of cryp tography will completely remove support for it.
utils.CryptographyDeprecationWarning,
Traceback (most recent call last):
File “CreateNameSpaces.py”, line 41, in
compartment = identity.get_compartment(compartment_id=SearchCompID).data
File “/usr/lib/python3.6/site-packages/oci/identity/identity_client.py”, line 4321, in get_compartment
response_type=”Compartment”)
File “/usr/lib/python3.6/site-packages/oci/base_client.py”, line 263, in call_ api
return self.request(request)
File “/usr/lib/python3.6/site-packages/oci/base_client.py”, line 384, in reque st
self.raise_service_error(request, response)
File “/usr/lib/python3.6/site-packages/oci/base_client.py”, line 554, in raise _service_error
original_request=request)
oci.exceptions.ServiceError: {‘opc-request-id’: ‘3ACEF5FCDE434B6D87E49CA3EFE9227 7/2EF6A5158AC660EFAE6BA481B4A8C7A4/46375D1E8FBF659356CA82F0383518F0’, ‘code’: ‘N otAuthorizedOrNotFound’, ‘message’: ‘Authorization failed or requested resource not found’, ‘status’: 404}
[opc@vm-terraform OCI-AutoScale]$
Did you configure your oci-cli tool with the right credentials?
You need to run ‘oci setup config’, go thru the wizard. After that add the created public key to your user’s profile on OCI as API key.
Hello Richard,
Would you be able to explain a bit more with some examples the use scheduling/tags like below:
AnyDay : 0,0,0,0,0,0,0,0,*,*,*,*,*,*,*,*,0,0,0,0,0,0,0,0
Lets say i want my vms to be stopped every day at 10 pm and started back at 8 am ?
would that be:
AnyDay: *,*,0,*,*,*,*,*,*,*,*,*,*,*,1,*,*,*,*,*,*,*,*,*
Hello Richard,
Would you be able to explain a bit more with some examples the use scheduling/tags like below:
AnyDay : 0,0,0,0,0,0,0,0,*,*,*,*,*,*,*,*,0,0,0,0,0,0,0,0
Lets say i want my vms to be stopped every day at 10 pm and started back at 8 am ?
would that be:
AnyDay: *,*,0,*,*,*,*,*,*,*,*,*,*,*,1,*,*,*,*,*,*,*,*,*
Yes, the example you give is correct, using the *,*,0,*,*,*,*,*,*,*,*,*,*,*,1,*,*,*,*,*,*,*,*,* would only do 2 actions during 24 hours. All the other hours it will leave the state of the service as-is.
a tag like: 0,0,0,0,0,0,0,0,*,*,*,*,*,*,*,*,0,0,0,0,0,0,0,0 would enforce all evening/night long that the instances stay powered off.
Hi Richard,
How are you?
Yesterday I tried to install this script and I notice something. OEL image isn’t coming with Python3 installed anymore.
So, I modified the install script to work with this image.
I modified just yum and pip3 commands.
Best regards!
# This is an auto install script for Oracle Autonomous Linux 7.8
# It will configure to automatically run the autoscale script using Instance Principal permission
# So ensure you have configured a dynamic group for this instance and that that dynamic group
# has a policy to manage all resources in your tenancy.
# Set to your time zone for correct time
sudo timedatectl set-timezone Europe/Amsterdam
# Install needed components and configure crontab with correct schedule
sudo yum -y install git python3
sudo pip3 install oci oci-cli requests
git clone https://github.com/AnykeyNL/OCI-AutoScale.git
cd OCI-AutoScale/
sed -i ‘s/UseInstancePrinciple = False/UseInstancePrinciple = True/g’ AutoScaleALL.py
crontab schedule.cron
hi richard,
Is this script region specific ? My home region is UK-LONDON-1 where as the compute and databases are deployed on frankfurt. Tried to startup one compute on Frankfurt region but no luck. Can you please help on this
[opc@automationtool OCI-AutoScale]$ python3 AutoScaleALL.py
Using Instance principle
Starting Auto Scaling script, executing All actions
Logged in as: Instance Principle/test @ uk-london-1
Day of week: Tuesday – Weekday: True – Current hour: 4
All scaling tasks done
Richard, we’ve been using OCI-AutoScale to scale up and down our Exadata cores, and it works brilliantly, thank you for your efforts.
I notice recently when logging into the OCI console that we’re now being prompted to update to the new User/API Experience and that in May the old API’s will be deprecated. I’m assuming that this will affect the script, and that to continue supporting scaling of Exadata cores it will need updating to use the new API’s is that correct? If so, do you have any plans to change the script?
I was not aware of this, but will look into this.
Hi Richard, first, thanks a lot for you work, it’s really cool !
We installed it in our sandbox env and work perfectly. But in our integration we face this issue:
(For information, the dynamic group have the right to manage all ressource + manage tag-namespaces
File “CreateNameSpaces.py”, line 42, in
compartment = identity.get_compartment(compartment_id=SearchCompID).data
File “/usr/lib/python3.6/site-packages/oci/identity/identity_client.py”, line 4322, in get_compartment
response_type=”Compartment”)
File “/usr/lib/python3.6/site-packages/oci/base_client.py”, line 417, in call_api
return self.request(request)
File “/usr/lib/python3.6/site-packages/oci/base_client.py”, line 541, in request
self.raise_service_error(request, response)
File “/usr/lib/python3.6/site-packages/oci/base_client.py”, line 711, in raise_service_error
original_request=request)
oci.exceptions.ServiceError: {‘opc-request-id’: ‘F2588D5F2EB94FAF952DA8B3C10A0352/21523817FFB1D15C3104D9B4014EB09F/C86F3CE48D3F4EDB37333AFCF39BC62A’, ‘code’: ‘NotAuthorizedOrNotFound’, ‘message’: ‘Authorization failed or requested resource not found’, ‘status’: 404}
Thanks for your effort.
but I got following errors when I tried to apply schedule.
[opc@autoschedule OCI-AutoScale]$ python3 AutoScaleALL.py
##########################################################################################
# Running Auto Scale #
##########################################################################################
Traceback (most recent call last):
File “AutoScaleALL.py”, line 1613, in
config, signer = create_signer(cmd.config_profile, cmd.is_instance_principals, cmd.is_delegation_token)
File “AutoScaleALL.py”, line 219, in create_signer
(config_profile if config_profile else oci.config.DEFAULT_PROFILE)
File “/usr/lib/python3.6/site-packages/oci/config.py”, line 106, in from_file
raise ConfigFileNotFound(“Could not find config file at {}, please follow the instructions in the link to setup the config file https://docs.cloud.oracle.com/en-us/iaas/Content/API/Concepts/sdkconfig.htm“.format(expanded_file_location))
oci.exceptions.ConfigFileNotFound: Could not find config file at /home/opc/.oci/config, please follow the instructions in the link to setup the config file https://docs.cloud.oracle.com/en-us/iaas/Content/API/Concepts/sdkconfig.htm
And I wonder if the script might work in DBCS RAC environment.
It seems you did not configure the Authentication. Please make sure you have an correct OCI config file or use Instance Principle authentication
Hi Richard,
I’m using AutoScale for log time but only with Instances and Autonomous. Now I’m trying to use it with Exadata but not pretty sure what does it’s means “Database Exadata CS”, because I’m trying to use it with Exadata VM Cluster (” Overview – Oracle Exadata Database Service on Dedicated Infrastructure – Exadata VM Clusters -Exadata VM Cluster Details), but adding Schedule tag I can’t see Exadata schedule executing “python3 /home/opc/OCI-AutoScale/AutoScaleALL.py”, I only see instances schedule.
Can you help me?
Regards.