Oracle Cloud Infrastructure(OCI)CLI命令解读

Oracle Cloud Infrastructure(OCI)CLI 的核心命令就是 oci。它本质上是把 OCI API 做成命令行接口,命令结构比较规律:服务 → 资源 → 动作。官方当前 CLI 文档也提供 -i 交互式补全。

OCI CLI 官方 Command Reference


1. 安装

Linux/macOS 最简单:

1
bash -c "$(curl -L https://raw.githubusercontent.com/oracle/oci-cli/master/scripts/install/install.sh)"

或者 macOS:

1
brew install oci-cli

检查

1
2
oci --version
oci --help

2. 配置 OCI 认证

第一次使用:

1
oci setup config

它会让你输入:

1
2
3
4
5
Enter a location for your config [/home/user/.oci/config]:
Enter a user OCID:
Enter a tenancy OCID:
Enter a region:
Do you want to generate a new API Signing RSA key pair? [Y/n]:

通常会生成:

1
2
3
~/.oci/config
~/.oci/oci_api_key.pem
~/.oci/oci_api_key_public.pem

config 大概长这样:

1
2
3
4
5
6
[DEFAULT]
user=ocid1.user.oc1....
fingerprint=xx:xx:xx:xx
tenancy=ocid1.tenancy.oc1....
region=ap-tokyo-1
key_file=/home/user/.oci/oci_api_key.pem

然后需要把 public key 上传到 OCI 用户的 API Keys 中。

测试:

1
oci iam region list

或者:

1
2
oci iam compartment list \
--compartment-id <TENANCY_OCID>

3. OCI CLI命令结构(层级)

例如:

1
2
oci compute instance list \
--compartment-id <COMPARTMENT_OCID>

可以理解为:

1
2
3
4
oci
└── compute # 服务
└── instance # 资源
└── list # 动作

常见结构:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
oci compute instance list
oci compute instance get
oci compute instance launch
oci compute instance terminate

oci network vcn list
oci network subnet list
oci network security-list list

oci os bucket list
oci os object list
oci os object put
oci os object get

oci iam user list
oci iam group list
oci iam policy list

oci db system list
oci db system get

oci ce cluster list

4.oci命令帮助操作

4.1强烈推荐-i获取帮助

如果不知道具体参数:

1
oci -i

OCI CLI 有交互式命令提示、参数补全和参数说明。

1
oci compute instance -i

实际使用 OCI CLI 时,这个功能非常省时间。


4.2查看帮助

1
oci --help
1
oci compute --help
1
oci compute instance --help
1
oci compute instance launch --help

所以遇到不会的命令,可以一直向下钻:

1
2
3
4
5
6
7
oci
↓
oci compute
↓
oci compute instance
↓
oci compute instance launch

5. 查询示例

5.1VM

列出 compartment 下所有实例:

1
2
oci compute instance list \
--compartment-id <COMPARTMENT_OCID>

指定 availability domain:

1
2
3
oci compute instance list \
--compartment-id <COMPARTMENT_OCID> \
--availability-domain <AD>

获取某台机器:

1
2
oci compute instance get \
--instance-id <INSTANCE_OCID>

只看名称和状态:

1
2
3
4
oci compute instance list \
--compartment-id <COMPARTMENT_OCID> \
--query 'data[].{name:"display-name",state:"lifecycle-state"}' \
--output table

这里非常重要:

1
2
--query
--output table

OCI CLI 支持 JMESPath 查询,可以直接在 CLI 层过滤 JSON。


5.2启动 / 停止 VM

启动:

1
2
3
oci compute instance action \
--instance-id <INSTANCE_OCID> \
--action START

停止:

1
2
3
oci compute instance action \
--instance-id <INSTANCE_OCID> \
--action STOP

重启:

1
2
3
oci compute instance action \
--instance-id <INSTANCE_OCID> \
--action SOFTRESET

强制重启:

1
2
3
oci compute instance action \
--instance-id <INSTANCE_OCID> \
--action RESET

5.3 Object Storage

查看 namespace:

1
oci os ns get

列 Bucket:

1
2
3
oci os bucket list \
--compartment-id <COMPARTMENT_OCID> \
--namespace-name <NAMESPACE>

上传:

1
2
3
oci os object put \
--bucket-name mybucket \
--file ./test.zip

下载:

1
2
3
4
oci os object get \
--bucket-name mybucket \
--name test.zip \
--file ./test.zip

列对象:

1
2
oci os object list \
--bucket-name mybucket

删除:

1
2
3
oci os object delete \
--bucket-name mybucket \
--object-name test.zip

5.4 网络

VCN:

1
2
oci network vcn list \
--compartment-id <COMPARTMENT_OCID>

Subnet:

1
2
oci network subnet list \
--compartment-id <COMPARTMENT_OCID>

VCN 详细信息:

1
2
oci network vcn get \
--vcn-id <VCN_OCID>

查看某个 subnet:

1
2
oci network subnet get \
--subnet-id <SUBNET_OCID>

6.多Profile配置及使用

如果你有多个 OCI Tenancy,非常推荐:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
[DEFAULT]
...

[PROD]
user=...
fingerprint=...
tenancy=...
region=ap-tokyo-1
key_file=...

[DEV]
user=...
fingerprint=...
tenancy=...
region=ap-osaka-1
key_file=...

使用:

1
2
3
oci compute instance list \
--compartment-id <OCID> \
--profile PROD

或者:

1
2
3
oci compute instance list \
--compartment-id <OCID> \
--profile DEV

这样可以避免频繁切换配置文件。


7.输出格式

默认:

1
--output json

例如:

1
2
3
oci compute instance list \
--compartment-id <OCID> \
--output json

人类阅读:

1
--output table

例如:

1
2
3
oci compute instance list \
--compartment-id <OCID> \
--output table

CLI 真正好用的地方:JSON + JMESPath

例如:

1
2
3
oci compute instance list \
--compartment-id <OCID> \
--query 'data[]."display-name"'

得到:

1
2
3
web-01
web-02
db-01

进一步:

1
2
3
4
oci compute instance list \
--compartment-id <OCID> \
--query 'data[?contains("display-name", `web`)].{Name:"display-name",State:"lifecycle-state"}' \
--output table

这就可以把 OCI CLI 当成一个 OCI API + JSON 查询工具 使用。


8.OCI CLI 的认证方式

不只是 API Key当前 CLI 支持:

1
2
3
4
5
6
api_key
instance_principal
resource_principal
security_token
instance_obo_user
oke_workload_identity

例如在 OCI VM 内使用 Instance Principal:

1
2
3
oci --auth instance_principal \
compute instance list \
--compartment-id <OCID>

这样可以避免在服务器上保存用户 API private key。


9. OCI 运维建议记住这张表

目的 CLI
VM oci compute instance
VCN oci network vcn
Subnet oci network subnet
NSG oci network nsg
Load Balancer oci lb
Object Storage oci os
Block Volume oci bv
Database oci db
OKE oci ce
IAM oci iam
DNS oci dns
Functions oci fn
Logging oci logging
Monitoring oci monitoring
Vault oci vault

最值得掌握的不是背命令,而是这套模式:

1
oci <service> <resource> <action> <options>

例如:

1
2
3
oci compute instance list
oci compute instance get
oci compute instance action
1
2
3
oci network vcn list
oci network vcn get
oci network vcn create
1
2
3
oci os bucket list
oci os object list
oci os object put