本页面由 AI 辅助从英文翻译而来。如两者存在差异,以英文版本为准。
使用 StackQL
StackQL 有多种使用模式,包括:StackQL 交互式 shell、使用 StackQL 语句的 StackQL 命令行,或执行输入文件(IQL 文件)中的一条或多条 StackQL 语句。下面将更详细地介绍每种模式:
- 使用 StackQL 交互式 shell(
stackql shell) - 使用 StackQL 命令行工具(
stackql exec) - 使用输入文件(IQL 文件)(
stackql exec -i)
使用 StackQL 交互式 shell
StackQL shell 为工程师提供了一个交互式编程环境,用于部署云资源并与之交互,还可以对其云环境进行交互式分析(使用 SELECT 语句)。该 shell 在功能上类似于 MySQL shell 或其他 REPL(Read Evaluate Print Loop)shell。该 shell 接受有效的 StackQL 语句,并将结果返回给用户。语句可以跨多行,在输入分号终止符后执行。
可以使用 shell 命令调用 StackQL shell,如下所示(有关 Provider 身份验证的信息,请参阅 StackQL Provider Registry):
# Launching the StackQL Interactive Shell
stackql shell --auth="${AUTH}"
进入已通过云服务商身份验证的 shell 后,你就可以开始运行 StackQL 查询(SELECT 查询或 DDL 操作,即基础设施即代码操作)。
默认情况下,StackQL shell 返回表格形式的结果,不过也可以通过 --output 标志使用 json、jsonl、csv 和 text 输出格式,参阅输出模式。
你可以使用 --colorscheme 标志更改 StackQL shell 的配色方案,如下所示:
# Changing the Shell Color Scheme
./stackql shell --colorscheme light
.stackqlrc 初始化文件
StackQL 命令选项的默认值(例如前面讨论的输出格式和配色方案)可以通过 stackqlrc 初始化文件设置。如果该文件存在于 StackQL 可执行文件所使用的当前目录中,则会被自动加载;也可以使用 --configfile 标志引用它,如下所示:
# Specifing a Initialization (.stackqlrc) File
./stackql shell --configfile /tmp/.stackqlrc
有关命令选项的更多信息,请参阅“全局标志”主题。
使用 StackQL 命令行工具
可以使用 StackQL 可执行文件的 exec 命令以非交互方式执行 StackQL 命令。只要每条独立的命令都以分号(;)结尾,就可以在一个批次中执行多条命令。命令标志(例如 --output 标志)可以在命令行中指定,也可以通过前面讨论的 .stackqlrc 初始化文件指定。
StackQL 可执行文件的输出会发送到所用系统的 stdout,可以在 BASH 或 PowerShell 脚本中解析该输出。
下面是一个包含 StackQL 命令的 Windows PowerShell 脚本示例:
$gcp_project = "stackql-demo"
$gcp_zone = "australia-southeast1-a"
$keyfilepath = "C:\tmp\stackql-demo.json"
Write-Output "Selecting instances in ${gcp_zone}..."
$query = "`"select id, name, machineType `
from compute.instances `
where project = '${gcp_project}' `
and zone = '${gcp_zone}';`""
$flags = "--keyfilepath ${keyfilepath} --output json"
$cmd = "stackql.exe exec"
$select = $cmd, $query, $flags -join " "
(iex $select | ConvertFrom-Json) | Out-GridView -Title 'StackQL Query Results'
上面的 PowerShell 命令演示了如何查询 Compute Engine 实例并使用 Out-GridView 显示输出。
使用输入文件(IQL 文件)
StackQL 输入文件可用于执行多条以分号结尾的命令。这是进行非交互式或批量基础设施编程的另一种方式。输入文件通过 -i 或 --infile 选项指定,如下所示:
# create an iql file
echo "select id, name from compute.instances \
where project = 'stackql-demo' \
and zone = 'australia-southeast1-a'" > listinstances.iql
# execute an iql file
./stackql exec -i listinstances.iql \
--keyfilepath /mnt/c/tmp/stackql-demo.json \
--output json | jq '.[] | .name'