本文将分如下4个小节来介绍:
演示环境说明
取得Oracle Cloud Infrastructure(OCI)相关信息
Terraform环境安装、配置、运行
通过Terraform管理OCI实例
1. 演示环境说明
本小节分为如下3个部分:
Terraform简介
Oracle Cloud Infrastructure简介
本文演示环境说明
1.1 Terraform简介
Terraform 是一个 IT 基础架构自动化编排工具,它的口号是 "Write, Plan, and create Infrastructure asCode", 基础架构即代码。具体的说就是可以用代码来管理维护 IT 资源,比如针对 Oralce Cloud Infrastructure,我们可以用它创建,修改,删除Linux、Windows、Database实例,Storage、VCN等各种资源。并且在真正运行之前可以看到执行计划(即干运行-dryrun)。由于状态保存到文件中,因此能够离线方式查看资源情况 -- 当然,前提是不要在 Terraform 之外对资源进行修改。
1.2 Oracle Cloud Infrastructure简介
Oracle CloudI nfrastructure,简称OCI,中文名称:Oracle云基础设施。OCI融合了公有云的弹性和实用性与内部部署基础设施的细粒度控制、安全性和可预测性,可以提供高性能、高可用性且经济高效的基础设施服务。
OCI主要产品包括如下:
计算
具有灵活性,适用于高要求的各类负载
存储
具有高持久性的云存储,可保护和处理您的关键任务数据
网络
您可以定义云资源所使用的专用云网络
监管
对各种规模的云资源实施控制和提供保护
数据库
基于高性能裸机的按需扩展Oracle 数据库
负载平衡
您的云应用:实现高可用性、可扩展性和安全性
Ravello
在先进的公有云上运行企业VMware 负载
1.3 本文演示环境说明
Terraform可以对OCI进行各种类型的操作,如创建:Compartment、Group、User、VCN、Storage;启动Windows实例、Linux实例、Database实例等;配置集群、负载均衡等。
本文只演示比较典型的一个操作:根据配置动态分配资源(OCPU、内存、存储、网络等)创建并启动Linux实例,最后终止Linux实例。
本文演示环境中,Terraform安装配置在Windows客户端中。
总体来说,配置的步骤还是比较多的。但这可以说是一个“一劳永逸”的工作,初次配置花费较多的功夫,以后使用时就简单了,根据需要更改一下配置参数,就可以直接执行自动化管理操作了。
2. 取得Oracle Cloud Infrastructure(OCI)相关信息
登录OCI环境,例如本文用到的登录信息如下:
OCI portal网址:
https://console.us-phoenix-1.oraclecloud.com/
登录用户名: demo.user01
登录密码: ******
身份域: gsebmcs00009
查找:Tenancy OCID
记录下该 Tenancy OCID,
Tenancy OCID:ocid1.tenancy.oc1..aaaaaaaawz52pbyqeud4ryne7ojegn2bzavhie4bgki5j6k7fwp5asbs5dqa
后面配置时会用到。
查找:Compartment OCID
记录下该Compartment OCID,
Compartment c01 OCID:
ocid1.compartment.oc1..aaaaaaaaldctk5h5nnvemgl6vudavygi276bq55wh7zbzldaewxqdcfw45fq
后面配置时会用到。
查找:User OCID
记录下该User OCID,
User OCID:
[……]
后面配置时会用到。
查找:Subnet OCID
记录下该Subnet OCID,
Subnet OCID:
[……]
后面配置时会用到
查找:Region
记录下该Region,
us-phoenix-1
后面配置时会用到
3. Terraform环境安装、配置、运行
为便于阅读,此小节将分为如下16个部分介绍:
Install git for windows.
下载并安装VIM
生成ssh-keys
安装应用管理工具chocolatey (Choco)
安装Terraform
安装Wget,用于从GitHub中下载资源
安装ChocolateyGUI
Git-Bash创建工作目录及从GitHub复制repo
下载windows版OCI terraform package
配置OCI Terraform provider
为Terraform生成所需要API的keys
将密钥(公钥)添加到OCI Console
为Terraform配置环境变量
Terraform初使化
修改变量配置文件
验证Terraform配置
3.1 Installgit for windows.
Download
https://github.com/git-for-windows/git/releases/download/v2.14.0.windows.1/Git-2.14.0-64-bit.exe and install
Windows[开始]菜单,输入”Git Bash”搜索,并打开Git Bash,
3.2 下载并安装VIM
https://sourceforge.net/projects/cream/files/Vim/8.0.824/gvim-8-0-824.exe/
VIM可方便查看、编辑Linux格式的回车符号的文档。
在本文的操作中,通过记事本查看和操作,实现与VIM同样的功能。
3.3 生成ssh-keys
Git Bash中执行命令:
ssh-keygen
用缺省的路径,及密码设置为[Blank]
生成的密钥文件如下图所示,
3.4 安装应用管理工具chocolatey (Choco)
打开PowerShell工具,需要以管理员身份运行。
执行命令:
Set-ExecutionPolicy -ScopeCurrentUser BypassSet-ExecutionPolicy -Scope LocalMachine Bypass
执行下命令以安装chocolatey工具:
iex ((New-ObjectSystem.Net.WebClient).DownloadString('https://chocolatey.org/install.ps1'))
3.5 安装Terraform
Chocolatey安装完成后,重新以管理员身份打开PowerShell,
执行如下命令:
PS> choco install terraform
3.6 安装Wget,用于从GitHub中下载资源
PS> choco install wget
3.7 安装ChocolateyGUI
PS> choco install ChocolateyGUI
Chocolatey所管理的工具在目录
C:\ProgramData\Chocolatey\bin
下,
3.8 Git-Bash创建工作目录及从GitHub复制repo
$ mkdir -p~/work/terraform-bmcs
$ cd ~/work/terraform-bmcs
$ git clone https://github.com/oracle/terraform-provider-baremetal
repo的存放位置,
C:\Users\jqwang\work\terraform-bmcs
我们将会用到
C:\Users\jqwang\work\terraform-bmcs\terraform-provider-baremetal\docs\examples\compute\instance
在目录C:\Users\jqwang\work\terraform-bmcs下建立目录:
demo,并将目录
C:\Users\jqwang\work\terraform-bmcs\terraform-provider-baremetal\docs\examples\compute\instance
下的内容COPY到目录
C:\Users\jqwang\work\terraform-bmcs\demo
下,
3.9 下载windows版OCI terraform package
下载链接:
https://github.com/oracle/terraform-provider-oci/releases/download/v2.0.6/windows.zip
下载后解压缩,
将目录windows_386下的文件
terraform-provider-oci_v2.0.6.exe
COPY到目录
C:\ProgramData\chocolatey\bin\
下,
3.10 配置OCI Terraform provider
在目录:C:\Users\[username]\AppData\Roaming\
如我的环境中该目录为:C:\Users\jqwang\AppData\Roaming\
下新建立文件:terraform.rc,用记事本打开添加如下内容:
providers { oci = "C:\\ProgramData\\Chocolatey\\bin\\terraform-provider-oci_v2.0.6.exe" } |
注意:
Terraform将会用该文件中配置的provider– oci,进行OCI管理。oci为关键字,必须要与后面”instance”中的配置文件中的provider名称一致;否则在后续配置步骤“PS> terraform init”时会报错“A provider named"oci" could not be found in the official repository.”。
3.11 为Terraform生成所需要API的keys
在Git-Bash下执行下命令:
$ mkdir ~/.oraclebmc (ifthis folder already exists, cd to this folder)$ openssl genrsa -out ~/.oraclebmc/bmcs_api_key.pem2048$ chmod 0700 ~/.oraclebmc$ chmod 0600 ~/.oraclebmc/bmcs_api_key.pem
$ openssl rsa -pubout -in~/.oraclebmc/bmcs_api_key.pem -out ~/.oraclebmc/bmcs_api_key_public.pem
$ cat~/.oraclebmc/bmcs_api_key_public.pem
$ openssl rsa -pubout-outform DER -in ~/.oraclebmc/bmcs_api_key.pem | openssl md5
$ openssl rsa -pubout-outform DER -in ~/.oraclebmc/bmcs_api_key.pem | openssl md5 >~/.oraclebmc/bmcs_api_key_fingerprint
最后生成的3个密钥文件如下图所示,
文件:
C:\Users\jqwang\.oraclebmc\bmcs_api_key_fingerprint
内容为:
(stdin)= fad32e5506a180279d5663086bd2b611 |
需要去掉前部分的“(stdin)=”,并将余下的部分修改为如格式(即每2个字符之间通过“:”分隔):
fa:d3:2e:55:06:a1:80:27:9d:56:63:08:6b:d2:b6:11 |
3.12 将密钥(公钥)添加到OCIConsole
目的:Terraform通过私钥连接到OCI环境中时,与该公钥配对进行身份验证。
在OCI Console中,登录用户下选择“User Settins”,
点击“AddPublic Key”,
将文件:
C:\Users\jqwang\.oraclebmc\bmcs_api_key_public.pem
的内容COPY到:PUBLIC KEY的输入框中,如下图所示,
完成后,会显示刚添加的Public Key,
Fingerprint: fa:d3:2e:55:06:a1:80:27:9d:56:63:08:6b:d2:b6:11
与文件:
C:\Users\jqwang\.oraclebmc\bmcs_api_key_fingerprint
中的内容是一样的。
3.13 为Terraform配置环境变量
为了方便管理,我们将环境变量配置在文件中。
在目录:
C:\Users\jqwang\work\terraform-bmcs\demo
下建立文件:
env-vars.ps1
用记事本打开,添加如下内容:
上述配置文件的内容来自于前面“2. 取得Oracle Cloud Infrastructure(OCI)相关信息”的配置和第3部分配置。
在PowerShell中生效上面配置文件中指定的环境变量,通过命令
PS> .\env-vars.ps1
查看设置的环境变量,通过命令:
PS> dir env:
3.14 Terraform初使化
在PowerShell中通过命令
terraform init
3.15 修改变量配置文件
修改变量文件:
C:\Users\jqwang\work\terraform-bmcs\demo\variables.tf
如下,红色字体为修改后的内容,之所以要这样修改是要保证OCI中有足够可用资源,并且是可用的资源,
variable "tenancy_ocid" {} variable "user_ocid" {} variable "fingerprint" {} variable "private_key_path" {} variable "region" {}
variable "compartment_ocid" {} variable "ssh_public_key" {} variable "ssh_private_key" {}
variable "SubnetOCID" {}
# Choose an Availability Domain variable "AD" { default = "2" #可用域”1”的实例已经用满,域”2”中还有可用资源 }
variable "InstanceShape" { default = "VM.Standard2.1" # Shape“VM.Standard1.1”已经用满,Shape“VM.Standard2.1”中还有可用资源
}
variable "InstanceImageDisplayName" { default = "Oracle-Linux-7.4-2017.12.18-0" #InstanceImage需要与可用列表中的名称一样 }
variable "DBSize" { default = "50" size in GBs }
variable "BootStrapFile" { default = "./userdata/bootstrap" } |
3.16 验证Terraform配置
在PowerShell中通过命令
terraform plan
此时,terraform会通过用户“OPC”+私钥连接到OCI验证上述配置的正确性。(但最后执行是否成功,还有其他因素的限制,如是否有足够可用的资源)
4. 通过Terraform管理OCI实例
本小节分为如下3个部分:
Terraform根据配置动态启动Linux实例
通过PuTTY连接Terraform启动的Linux实例-验证环境可用性
Terraform 关闭Linux实例
4.1 Terraform根据配置动态启动Linux实例
Terraform根据配置动态分配所需要的资源,包括:
域
OCPU
内存
存储
网络
…
启动Linux实例
在PowerShell中通过命令
terraform apply
此时,terraform会通过用户“opc”+私钥连接到OCI,执行操作。
执行完成后,可以在界面中看到成功启动的Linux实例的IP地址,如下所示:
InstancePublicIP = [
129.146.131.194
]
同时可以在OCIPortal中看到通过Terraform启动的Linux实例,
查看实例的详细信息,
此处显示的Pubilic IP Address:129.146.131.194
与上面terraformapply执行完成后显示的
InstancePublicIP = [ 129.146.131.194 ]
完全一样。
同时可通过PowerShell命令:
terraform refresh
查看通过Terraform启动的Linix实例的IP地址等信息。
4.2 通过PuTTY连接Terraform启动的Linux实例-验证实例可用性
首先将私钥
C:\Users\jqwang\.ssh\id_rsa
通过puttygen工具转换为PuTTY可识别的格式,存储为名称:id_rsa_fromPutty.ppk,如下图所示,
PuTTY中配置IP地址为上述Linux实例的IP地址: 129.146.131.194
密钥文件设置为:
C:\Users\jqwang\.ssh\id_rsa_fromPutty.ppk
输入用户名:opc,连接到Linux实例环境中,如下图所示,
4.3 Terraform关闭Linux实例
在PowerShell中通过命令
terraform plan –destroy
此时,terraform会通过用户“opc”+私钥连接到OCI,生成关闭Linux实例的配置,
通过命令:
terraform destroy
此时,terraform会通过用户“opc”+私钥连接到OCI,关闭Linux实例,
OCI Portal中查看,此时Linux实例已经处于TERMNATED状态,
至此,我们的安装、配置、使用介绍全部完成。
若您想进一步了解Oracle Cloud Infrastructure相关信息,请参考Oracle帮助文档,
https://cloud.oracle.com/zh_CN/cloud-infrastructure
也欢迎与我们联系: j.jun.wang@oracle.com。
感谢您抽出宝贵时间阅读本篇文章。