Launch OCI free tier ATP and ADW using Terraform on Window platform

Terraform template available at GitHub will not work directly with OCI free tier ADB database service. You have to adjust some parameter inside the Terraform template to make it compatible with free tier ADB services.

We will Launch two ADB databases one for the ATP database and one for the ADW database using a single command then we will play with ADB using OCI CLI and then finally we will destroy the created infrastructure using a single command.

Download the terraform for window10.

Installation Steps
copy the downloads for windows version.
copy inside program file and configure windows path variable



Usage: terraform [-version] [-help] <command> [args]

The available commands for execution are listed below.
The most common, useful commands are shown first, followed by
less common or more advanced commands. If you're just getting
started with Terraform, stick with the common commands. For the
other commands, please read the help and docs before usage.

Common commands:
apply Builds or changes infrastructure
console Interactive console for Terraform interpolations
destroy Destroy Terraform-managed infrastructure
env Workspace management
fmt Rewrites config files to canonical format
get Download and install modules for the configuration
graph Create a visual graph of Terraform resources
import Import existing infrastructure into Terraform
init Initialize a Terraform working directory
output Read an output from a state file
plan Generate and show an execution plan
providers Prints a tree of the providers used in the configuration
refresh Update local state file against real resources
show Inspect Terraform state or plan
taint Manually mark a resource for recreation
untaint Manually unmark a resource as tainted
validate Validates the Terraform files
version Prints the Terraform version
workspace Workspace management

All other commands:
0.12upgrade Rewrites pre-0.12 module source code for v0.12
debug Debug output management (experimental)
force-unlock Manually unlock the terraform state
push Obsolete command for Terraform Enterprise legacy (v1)
state Advanced state management


C:\Users\oracle-learn>terraform --version
Terraform v0.12.18

Prepare the Environment.

oracle-learn MINGW64 ~/projects/adb (master)
$ cat .profile
export TF_VAR_user_ocid=ocid1.user.oc1..pqr
export TF_VAR_fingerprint=
export TF_VAR_region=ap-mumbai-1
export TF_VAR_private_key_path=<path/oci_api_key.pem>
export TF_VAR_private_key_password={put-here-the-private-key-password}
export TF_VAR_compartment_ocid=ocid1.compartment.oc1..cid

You may refer OCI Documentation to find these variable values.


$ cat
// Copyright (c) 2017, 2019, Oracle and/or its affiliates. All rights reserved.

provider "oci" {
  tenancy_ocid     = "${var.tenancy_ocid}"
  user_ocid        = "${var.user_ocid}"
  fingerprint      = "${var.fingerprint}"
  private_key_path = "${var.private_key_path}"
  region           = "${var.region}"

provider "local" {
  version = ">=1.3.0" # Need this version of the local provider to support base64 encoded inputs
$ cat
// Copyright (c) 2017, 2019, Oracle and/or its affiliates. All rights reserved.

variable "tenancy_ocid" {}
variable "user_ocid" {}
variable "fingerprint" {}
variable "private_key_path" {}
variable "region" {}
variable "compartment_ocid" {}

variable "autonomous_database_db_workload" {
  default = "OLTP"

variable "autonomous_data_warehouse_db_workload" {
  default = "DW"

variable "autonomous_database_defined_tags_value" {
  default = "value"

variable "autonomous_database_freeform_tags" {
  default = {
    "Department" = "Finance"

variable "autonomous_database_license_model" {
  default = "LICENSE_INCLUDED"

variable "autonomous_database_is_dedicated" {
  default = false

I have modified the template accordingly for the free tier template available at GitHub

$ cat
// Copyright (c) 2017, 2019, Oracle and/or its affiliates. All rights reserved.

resource "random_string" "autonomous_database_wallet_password" {
  length  = 16
  special = true

data "oci_database_autonomous_database_wallet" "autonomous_database_wallet" {
  autonomous_database_id = "${}"
  password               = "${random_string.autonomous_database_wallet_password.result}"
  base64_encode_content  = "true"

resource "local_file" "autonomous_database_wallet_file" {
  content_base64 = "${data.oci_database_autonomous_database_wallet.autonomous_database_wallet.content}"
  filename       = "${path.module}/"

output "autonomous_database_wallet_password" {
  value = "${random_string.autonomous_database_wallet_password.result}"

$ cat
// Copyright (c) 2017, 2019, Oracle and/or its affiliates. All rights reserved.

resource "random_string" "autonomous_database_admin_password" {
  length      = 16
  min_numeric = 1
  min_lower   = 1
  min_upper   = 1
  min_special = 1

resource "oci_database_autonomous_database" "autonomous_database" {
  admin_password           = "${random_string.autonomous_database_admin_password.result}"
  compartment_id           = "${var.compartment_ocid}"
  cpu_core_count           = "1"
  data_storage_size_in_tbs = "1"
  db_name                  = "atpdb1"
  is_free_tier             = true
  db_workload                                    = "${var.autonomous_database_db_workload}"
  display_name                                   = "example_autonomous_database"
  is_auto_scaling_enabled                        = "false"
  is_preview_version_with_service_terms_accepted = "false"

data "oci_database_autonomous_databases" "autonomous_databases" {
  compartment_id = "${var.compartment_ocid}"

  display_name = "${oci_database_autonomous_database.autonomous_database.display_name}"
  db_workload  = "${var.autonomous_database_db_workload}"

output "autonomous_database_admin_password" {
  value = "${random_string.autonomous_database_admin_password.result}"

output "autonomous_database_high_connection_string" {
  value = "${lookup(oci_database_autonomous_database.autonomous_database.connection_strings.0.all_connection_strings, "high", "unavailable")}"

output "autonomous_databases" {
  value = "${data.oci_database_autonomous_databases.autonomous_databases.autonomous_databases}"

Follow the same steps for and

[1] Initialize a Terraform working directory
$ terraform init

[2] Generate and show an execution plan
$ terraform plan

[3] Builds or changes infrastructure
$ terraform apply

Do you want to perform these actions?
  Terraform will perform the actions described above.
  Only 'yes' will be accepted to approve.

  Enter a value: yes

random_string.autonomous_database_admin_password: Creating...
random_string.autonomous_data_warehouse_admin_password: Creating...
random_string.autonomous_data_warehouse_wallet_password: Creating...
random_string.autonomous_database_wallet_password: Creating...
random_string.autonomous_database_admin_password: Creation complete after 0s [id=0++6KrIV8T?=F1*k]
random_string.autonomous_data_warehouse_admin_password: Creation complete after 0s [id=Dtbt2t!0KZ]y0Y<&] random_string.autonomous_data_warehouse_wallet_password: Creation complete after 0s [id=a?*>RADQ+]Uv[Xgt]
random_string.autonomous_database_wallet_password: Creation complete after 0s [id=_HLrXaT*Zf@eXqu#]
oci_database_autonomous_database.autonomous_data_warehouse: Creating...
oci_database_autonomous_database.autonomous_database: Creating...
oci_database_autonomous_database.autonomous_database: Still creating... [10s elapsed]
oci_database_autonomous_database.autonomous_data_warehouse: Still creating... [10s elapsed]
oci_database_autonomous_database.autonomous_database: Still creating... [20s elapsed]
oci_database_autonomous_database.autonomous_data_warehouse: Still creating... [20s elapsed]
oci_database_autonomous_database.autonomous_data_warehouse: Still creating... [1m50s elapsed]
oci_database_autonomous_database.autonomous_database: Still creating... [2m0s elapsed]
oci_database_autonomous_database.autonomous_data_warehouse: Still creating... [2m0s elapsed]
oci_database_autonomous_database.autonomous_database: Still creating... [2m10s elapsed]
oci_database_autonomous_database.autonomous_data_warehouse: Still creating... [2m10s elapsed]

oci_database_autonomous_database.autonomous_data_warehouse: Still creating... [2m20s elapsed]
local_file.autonomous_data_warehouse_wallet_file: Creating...
local_file.autonomous_data_warehouse_wallet_file: Creation complete after 0s [id=a2cfa32740b9dcdffb8524d72fc703f62c5cfcdf]

Apply complete! Resources: 8 added, 0 changed, 0 destroyed.


[4] Play with ADB

#List of all the ADBs
$ oci db autonomous-database list –compartment-id $TF_VAR_compartment_ocid

#List of all the ADWs
$ oci db autonomous-data-warehouse list –compartment-id $TF_VAR_compartment_ocid

#Stop ADW
$ oci db autonomous-data-warehouse stop –autonomous-data-warehouse-id

#Start ADW
$ oci db autonomous-data-warehouse start –autonomous-data-warehouse-id

#Get details about specific ADW
$ oci db autonomous-data-warehouse get –autonomous-data-warehouse-id

[5] Destroy Terraform-managed infrastructure
$ terraform destroy

Do you really want to destroy all resources?
  Terraform will destroy all your managed infrastructure, as shown above.
  There is no undo. Only 'yes' will be accepted to confirm.

  Enter a value: yes

local_file.autonomous_database_wallet_file: Destroying... [id=6c0eff5f4d195f0e38a364ef7d414dc7c39ed027]
local_file.autonomous_data_warehouse_wallet_file: Destroying... [id=a2cfa32740b9dcdffb8524d72fc703f62c5cfcdf]
local_file.autonomous_data_warehouse_wallet_file: Destruction complete after 0s
local_file.autonomous_database_wallet_file: Destruction complete after 0s
random_string.autonomous_data_warehouse_wallet_password: Destroying... [id=a?*>RADQ+]Uv[Xgt]
random_string.autonomous_data_warehouse_wallet_password: Destruction complete after 0s
Destroy complete! Resources: 8 destroyed.

Thank you for visit this blog.
Happy Learning. 🙂

Launch your first Compute Instance from OCI CLI on Window 10 OS Platform

First of all, We have to install OCI CLI in the windows machine then we will configure OCI CLI and further we will play with compute instance life cycle operations like launch instance, start, stop and other possible actions and at the end, we will terminate the instance from oci cli.

#Install OCI CLI 
Follow the below commands provided in OCI Documentation.

Windows PowerShell
Copyright (C) Microsoft Corporation. All rights reserved.

PS C:\WINDOWS\system32> Set-ExecutionPolicy RemoteSigned

PS C:\WINDOWS\system32> powershell -NoProfile -ExecutionPolicy Bypass -Command “iex ((New-Object System.Net.WebClient).DownloadString(‘;))”

You have started the OCI CLI Installer in interactive mode. If you do not wish
to run this in interactive mode, please include the -AcceptAllDefaults option.
If you have the script locally and would like to know more about
input options for this script, then you can run:
help .\install.ps1
If you would like to know more about input options for this script, refer to:
VERBOSE: Python found in registry: HKCU:\Software\Python\PythonCore
VERBOSE: Downloading install script to C:\Users\oracle-learn\AppData\Local\Temp\tmpDDAF.tmp
VERBOSE: False False
VERBOSE: Using Python executable: C:\Users\oracle-learn\AppData\Local\Programs\Python\Python37\python.exe to run install
VERBOSE: Arguments to python script: “C:\Users\oracle-learn\AppData\Local\Temp\tmpDDAF.tmp”
— Verifying Python version.
— Python version 3.7.5 okay.

===> In what directory would you like to place the install? (leave blank to use ‘C:\Users\oracle-learn\lib\oracle-cli’):
— We will install at ‘C:\Users\oracle-learn\lib\oracle-cli’.

===> In what directory would you like to place the ‘oci.exe’ executable? (leave blank to use ‘C:\Users\oracle-learn\bin’):
— The executable will be in ‘C:\Users\oracle-learn\bin’.

===> In what directory would you like to place the OCI scripts? (leave blank to use ‘C:\Users\oracle-learn\bin\oci-cli-scripts’):
— The scripts will be in ‘C:\Users\oracle-learn\bin\oci-cli-scripts’.

===> Currently supported optional packages are: [‘db (will install cx_Oracle)’]
What optional CLI packages would you like to be installed (comma separated names; press enter if you don’t need any optional packages)?:
— The optional packages installed will be ”.
— Downloading virtualenv package from
— Downloaded virtualenv package to C:\Users\oracle-learn\AppData\Local\Temp\tmpukxf413h\15.0.0.tar.gz.
— Checksum of C:\Users\oracle-learn\AppData\Local\Temp\tmpukxf413h\15.0.0.tar.gz OK.
— Extracting ‘C:\Users\oracle-learn\AppData\Local\Temp\tmpukxf413h\15.0.0.tar.gz’ to ‘C:\Users\oracle-learn\AppData\Local\Temp\tmpukxf413h’.
— Copying DLLs into virtualenv.
— Copying C:\Users\oracle-learn\AppData\Local\Programs\Python\Python37\python3.dll to C:\Users\oracle-learn\lib\oracle-cli\Scripts
— Copying C:\Users\oracle-learn\AppData\Local\Programs\Python\Python37\python37.dll to C:\Users\oracle-learn\lib\oracle-cli\Scripts
— Copying C:\Users\oracle-learn\AppData\Local\Programs\Python\Python37\vcruntime140.dll to C:\Users\oracle-learn\lib\oracle-cli\Scripts
— Executing: [‘C:\\Users\\oracle-learn\\AppData\\Local\\Programs\\Python\\Python37\\python.exe’, ‘’, ‘–python’, ‘C:\\Users\\oracle-learn\\AppData\\Local\\Programs\\Python\\Python37\\python.exe’, ‘C:\\Users\\oracle-learn\\lib\\oracle-cli’]
Already using interpreter C:\Users\oracle-learn\AppData\Local\Programs\Python\Python37\python.exe
Using base prefix ‘C:\\Users\\oracle-learn\\AppData\\Local\\Programs\\Python\\Python37’ DeprecationWarning: the imp module is deprecated in favour of importlib; see the module’s documentation for alternative uses
import imp
New python executable in C:\Users\oracle-learn\lib\oracle-cli\Scripts\python.exe
Installing setuptools, pip, wheel…done.
— Executing: [‘C:\\Users\\oracle-learn\\lib\\oracle-cli\\Scripts\\pip’, ‘install’, ‘–cache-dir’, ‘C:\\Users\\oracle-learn\\AppData\\Local\\Temp\\tmpukxf413h’, ‘oci_cli’, ‘–upgrade’]
Collecting oci_cli
Downloading (6.3MB)
|████████████████████████████████| 6.3MB 363kB/s
Collecting jmespath==0.9.3
Collecting oci==2.8.0
Downloading (3.1MB)
|████████████████████████████████| 3.1MB 409kB/s
Collecting cryptography==2.4.2
Downloading (1.3MB)
|████████████████████████████████| 1.3MB 726kB/s
Collecting six==1.11.0
Collecting configparser==3.5.0
Collecting pytz==2016.10
Downloading (483kB)
|████████████████████████████████| 491kB 1.3MB/s
Collecting PyYAML==5.1.2
Downloading (215kB)
|████████████████████████████████| 225kB 285kB/s
Collecting pyOpenSSL==18.0.0
Downloading (53kB)
|████████████████████████████████| 61kB 218kB/s
Collecting click==6.7
Downloading (71kB)
|████████████████████████████████| 71kB 353kB/s
Collecting python-dateutil==2.7.3
Downloading (211kB)
|████████████████████████████████| 215kB 504kB/s
Collecting certifi
Downloading (156kB)
|████████████████████████████████| 163kB 409kB/s
Collecting idna<2.7,>=2.5
Downloading (56kB)
|████████████████████████████████| 61kB 563kB/s
Collecting terminaltables==3.1.0
Collecting retrying==1.3.3
Collecting arrow==0.10.0
Downloading (86kB)
|████████████████████████████████| 92kB 368kB/s
Collecting cffi!=1.11.3,>=1.7
Downloading (175kB)
|████████████████████████████████| 184kB 1.1MB/s
Collecting asn1crypto>=0.21.0
Downloading (103kB)
|████████████████████████████████| 112kB 1.3MB/s
Collecting pycparser
Downloading (158kB)
|████████████████████████████████| 163kB 328kB/s
Building wheels for collected packages: configparser, terminaltables, retrying, arrow, pycparser
Building wheel for configparser ( … done
Created wheel for configparser: filename=configparser-3.5.0-cp37-none-any.whl size=20865 sha256=abc942bac573f3e5f612d62de463f504320677dc1a6d2788edfb03ed52de7aed
Stored in directory: C:\Users\oracle-learn\AppData\Local\Temp\tmpukxf413h\wheels\a3\61\79\424ef897a2f3b14684a7de5d89e8600b460b89663e6ce9d17c
Building wheel for terminaltables ( … done
Created wheel for terminaltables: filename=terminaltables-3.1.0-cp37-none-any.whl size=15362 sha256=53403741f831f93681673c00903de32d313f57c3d539207141a994b5a75026d8
Stored in directory: C:\Users\oracle-learn\AppData\Local\Temp\tmpukxf413h\wheels\30\6b\50\6c75775b681fb36cdfac7f19799888ef9d8813aff9e379663e
Building wheel for retrying ( … done
Created wheel for retrying: filename=retrying-1.3.3-cp37-none-any.whl size=11435 sha256=662b2240b6aaa349ae3edc39b178cb9bd2cafa4ffd22333154573f356f63434a
Stored in directory: C:\Users\oracle-learn\AppData\Local\Temp\tmpukxf413h\wheels\d7\a9\33\acc7b709e2a35caa7d4cae442f6fe6fb
Building wheel for arrow ( … done
Created wheel for arrow: filename=arrow-0.10.0-py2.py3-none-any.whl size=32856 sha256=358422ae1a2eaa31691be7ded73643fd
Stored in directory: C:\Users\oracle-learn\AppData\Local\Temp\tmpukxf413h\wheels\ce\4f\95\64541c7466fd88ffe72fda5164f8323c91d695c9a77072c574
Building wheel for pycparser ( … done
Created wheel for pycparser: filename=pycparser-2.19-py2.py3-none-any.whl size=111018 sha256=402b3b5fcdf0280d8ca2389825fed90efcdb20185d76b36fab57cc6008fdbf4c
Stored in directory: C:\Users\oracle-learn\AppData\Local\Temp\tmpukxf413h\wheels\f2\9a\90\de94f8556265ddc9d9c8b271b0f63e57b26fb1d67a45564511
Successfully built configparser terminaltables retrying arrow pycparser
Installing collected packages: jmespath, idna, pycparser, cffi, asn1crypto, six, cryptography, configparser, certifi, pytz, pyOpenSSL, python-dateutil, oci, PyYAML, click, terminaltables, retrying, arrow, oci-cli
Successfully installed PyYAML-5.1.2 arrow-0.10.0 asn1crypto-1.2.0 certifi-2019.11.28 cffi-1.13.2 click-6.7 configparser-3.5.0 cryptography-2.4.2 idna-2.6 jmespath-0.9.3 oci-2.8.0 oci-cli-2.7.0 pyOpenSSL-18.0.0 pycparser-2.19 python-dateutil-2.7.3 pytz-2016.10 retrying-1.3.3 six-1.11.0 terminaltables-3.1.0

===> Modify PATH to include the CLI and enable tab completion in PowerShell now? (Y/n): Y

— ** Close and re-open PowerShell to reload changes to your PATH **
— In order to run the autocomplete script, you may also need to set your PowerShell execution policy to allow for running local scripts (as an Administrator run Set-ExecutionPolicy RemoteSigned in a PowerShell prompt)

— Installation successful.
— Run the CLI with C:\Users\oracle-learn\bin\oci.exe –help
VERBOSE: Successfully installed OCI CLI!
PS C:\WINDOWS\system32>

#Configure the OCI CLI

C:\Users\oracle-learn\bin> oci setup config
This command provides a walkthrough of creating a valid CLI config file.

The following links explain where to find the information required by this

User OCID and Tenancy OCID:


General config documentation:

Enter a location for your config [C:\Users\oracle-learn\.oci\config]: C:\Users\oracle-learn\.oci\config
Enter a user OCID: ocid1.user.oc1..fddsfdsfdsfjhgjhjhg54534vcxvcxvcxv
Enter a tenancy OCID: ocid1.tenancy.oc1..dfdsfljfsdjf433sdfsdlfjsfjsdf
Enter a region (e.g. ap-mumbai-1, ap-seoul-1, ap-sydney-1, ap-tokyo-1, ca-toronto-1, eu-frankfurt-1, eu-zurich-1, sa-saopaulo-1, uk-gov-london-1, uk-london-1, us-ashburn-1, us-gov-ashburn-1, us-gov-chicago-1, us-gov-phoenix-1, us-langley-1, us-luke-1, us-phoenix-1): ap-mumbai-1
Do you want to generate a new RSA key pair? (If you decline you will be asked to supply the path to an existing key.) [Y/n]: Y
Enter a directory for your keys to be created [C:\Users\oracle-learn\.oci]:
Enter a name for your key [oci_api_key]:
Public key written to: C:\Users\oracle-learn\.oci\oci_api_key_public.pem
Enter a passphrase for your private key (empty for no passphrase):
File C:\Users\oracle-learn\.oci\oci_api_key.pem already exists, do you want to overwrite? [y/N]: y
Private key written to: C:\Users\oracle-learn\.oci\oci_api_key.pem
Fingerprint: 29:80:a7:d8:4d:5b:a1:54:d1:c6:cc:b3:de:6c:ef:52
Config written to C:\Users\oracle-learn\.oci\config

If you haven’t already uploaded your public key through the console,

follow the instructions on the page linked below in the section ‘How to
upload the public key’:

C:\Users\oracle-learn\bin>oci –help

Once everything is configured correctly you can run a few commands to try out the client. The basic syntax is:
$ oci

$ oci
Some of the available services are:

Core (Networking, Compute, Block Volume, etc.)
Load Balancing
Object Storage

#Launch Compute instance

When you launch an instance you have to provide the following information, some of which you’ve already obtained:


Sample commands to find the required information.
oci iam user list –compartment-id
oci iam availability-domain list
oci compute shape list -c
oci compute image list -c

You can use -h option at end of the command to find an help related to specific command option.
oci compute image list -h
oci compute shape list -h

oci compute instance launch –availability-domain “” -c –shape “” –display-name “” –image-id –ssh-authorized-keys-file “” –subnet-id


oci compute instance launch --availability-domain "AARS:AP-MUMBAI-1-AD-1" -c ocid1.compartment.oc1..ggfdh434332sfsdfsdfsdfsf --shape "VM.Standard.E2.1" --display-name "MyFirstMachineFromCLI" --image-id ocid1.image.oc1.ap-mumbai-1.aaaaaaaaka7f3qhfuobx2s7dqfgbcx5klllh5xlflbgzb5pymqsnuphehk2a --ssh-authorized-keys-file "C:\Users\oracle-learn\.ssh\" --subnet-id ocid1.subnet.oc1.ap-mumbai-1.aaaaaaaah44xlfte72zz4yrgrp5pqc3ndqy5atc3kqlfmz4lzwdlsdlhyoya

#List Compute instances
oci compute instance list --compartment-id ocid1.compartment.oc1..ggfdh434332sfsdfsdfsdfsf

Performs one of the following power actions on the specified instance

[1] * **START** – Powers on the instance.

oci compute instance action --instance-id ocid1.instance.oc1.ap-mumbai-1.fdsfdsfsdfsdfdsf343sdfsdfsfsdf --action START --wait-for-state RUNNING

[2] * **STOP** – Powers off the instance.

oci compute instance action --instance-id ocid1.instance.oc1.ap-mumbai-1.fdsfdsfsdfsdfdsf343sdfsdfsfsdf --action STOP --wait-for-state STOPPED

[3] * **SOFTRESET** – Gracefully reboots instance by sending a shutdown
command to the operating system and then powers the instance back

oci compute instance action --instance-id ocid1.instance.oc1.ap-mumbai-1.fdsfdsfsdfsdfdsf343sdfsdfsfsdf --action SOFTRESET --wait-for-state RUNNING

[4] * **SOFTSTOP** – Gracefully shuts down instance by sending a
shutdown command to the operating system.

oci compute instance action --instance-id ocid1.instance.oc1.ap-mumbai-1.fdsfdsfsdfsdfdsf343sdfsdfsfsdf --action SOFTSTOP --wait-for-state STOPPED

[5] * **RESET** – Powers off the instance and then powers it back on.

oci compute instance action --instance-id ocid1.instance.oc1.ap-mumbai-1.fdsfdsfsdfsdfdsf343sdfsdfsfsdf --action RESET --wait-for-state RUNNING

#Terminate Compute instance
oci compute instance terminate --instance-id ocid1.instance.oc1.ap-mumbai-1.fdsfdsfsdfsdfdsf343sdfsdfsfsdf

#OCI Documentation References

Thank you for visit this blog

Happy Learning 🙂