Vimos como o Steampipe pode unificar o acesso a APIs, conduzir metapesquisa, aplicar KPIs como código e detectar desvios de configuração. Os plug-ins de ativação estavam, até recentemente, fortemente vinculados ao binário Steampipe e à instância do Postgres que o Steampipe inicia e controla. Isso levou os membros da comunidade de código aberto do Steampipe a perguntar: “Podemos usar os plug-ins em nossos próprios bancos de dados Postgres?” Agora a resposta é sim – e muito mais. Mas vamos nos concentrar primeiro no Postgres.
Usando um plugin Steampipe como wrapper de dados externos do Postgres
Visite os downloads do Steampipe para encontrar o instalador para o seu sistema operacional e execute-o para adquirir a distribuição Postgres Foreign Data Wrapper (FDW) de um plug-in – neste caso, o plug-in GitHub.
$ sudo /bin/sh -c "$(curl -fsSL https://steampipe.io/install/postgres.sh)" Enter the plugin name: github Enter the version (latest): Discovered: - PostgreSQL version: 14 - PostgreSQL location: /usr/lib/postgresql/14 - Operating system: Linux - System architecture: x86_64 Based on the above, steampipe_postgres_github.pg14.linux_amd64.tar.gz will be downloaded, extracted and installed at: /usr/lib/postgresql/14 Proceed with installing Steampipe PostgreSQL FDW for version 14 at /usr/lib/postgresql/14? - Press 'y' to continue with the current version. - Press 'n' to customize your PostgreSQL installation directory and select a different version. (Y/n): Downloading steampipe_postgres_github.pg14.linux_amd64.tar.gz... ########################################################################################### 100.0% steampipe_postgres_github.pg14.linux_amd64/ steampipe_postgres_github.pg14.linux_amd64/steampipe_postgres_github.so steampipe_postgres_github.pg14.linux_amd64/steampipe_postgres_github.control steampipe_postgres_github.pg14.linux_amd64/steampipe_postgres_github--1.0.sql steampipe_postgres_github.pg14.linux_amd64/install.sh steampipe_postgres_github.pg14.linux_amd64/README.md Download and extraction completed. Installing steampipe_postgres_github in /usr/lib/postgresql/14... Successfully installed steampipe_postgres_github extension! Files have been copied to: - Library directory: /usr/lib/postgresql/14/lib - Extension directory: /usr/share/postgresql/14/extension/
Agora conecte-se ao seu servidor normalmente, usando psql
ou outro cliente, normalmente como o postgres
do utilizador. Em seguida, execute estes comandos que são típicos de qualquer wrapper de dados externos do Postgres. Tal como acontece com todas as extensões do Postgres, você começa assim:
CREATE EXTENSION steampipe_postgres_fdw_github;
Para usar um wrapper de dados externo, primeiro crie um servidor:
CREATE SERVER steampipe_github FOREIGN DATA WRAPPER steampipe_postgres_github OPTIONS (config 'token="ghp_..."');
Use OPTIONS para configurar a extensão para usar seu token de acesso GitHub. (Como alternativa, as variáveis de ambiente padrão usadas para configurar um plugin Steampipe — são apenas GITHUB_TOKEN
neste caso, funcionará se você defini-los antes de iniciar sua instância do Postgres.)
As tabelas fornecidas pela extensão residirão em um esquema, então defina um:
CREATE SCHEMA github;
Agora importe o esquema definido pelo servidor externo para o esquema local que você acabou de criar:
IMPORT FOREIGN SCHEMA github FROM SERVER steampipe_github INTO github;
Agora execute uma consulta!
As tabelas estrangeiras fornecidas pela extensão residem no github schema
então, por padrão, você se referirá a tabelas como github.github_my_repository
. Se você set search_path="github"
porém, o esquema se torna opcional e você pode escrever consultas usando nomes de tabelas não qualificados.
select
count(*)
from
github_my_repository;
count
-------
468
Se você tiver muitos repositórios, a primeira execução dessa consulta levará alguns segundos. A segunda execução retornará resultados instantaneamente, porque a extensão inclui um cache poderoso e sofisticado.
E isso é tudo! Cada plugin Steampipe agora também é um wrapper de dados externo que funciona exatamente como este. Você pode carregar várias extensões para ingressar em APIs. É claro que você pode unir qualquer uma dessas tabelas estrangeiras de origem API com suas próprias tabelas Postgres. E para salvar os resultados de qualquer consulta, você pode acrescentar create table NAME as
ou create materialized view NAME as
a uma consulta para persistir os resultados como uma tabela ou visualização.
Usando um plugin Steampipe como extensão SQLite que fornece tabelas virtuais
Visite os downloads do Steampipe para encontrar o instalador do seu sistema operacional e execute-o para adquirir a distribuição SQLite do mesmo plugin.
$ sudo /bin/sh -c "$(curl -fsSL https://steampipe.io/install/sqlite.sh)" Enter the plugin name: github Enter version (latest): Enter location (current directory): Downloading steampipe_sqlite_github.linux_amd64.tar.gz... ############################################################################ 100.0% steampipe_sqlite_github.so steampipe_sqlite_github.linux_amd64.tar.gz downloaded and extracted successfully at /home/jon/steampipe-sqlite.
Aqui está a configuração. Você pode colocar esse código em ~/.sqliterc
se você quiser executá-lo toda vez que iniciar sqlite
.
.load /home/jon/steampipe-sqlite/steampipe_sqlite_github.so select steampipe_configure_github(' token="ghp_..." ');
Agora você pode executar a mesma consulta acima.
sqlite> select count(*) from github_my_repository;
count(*)
468
E quanto às diferenças entre SQL com sabor de Postgres e SQL com sabor de SQLite? O hub Steampipe é seu amigo! Por exemplo, aqui estão variantes de uma consulta que acessa um campo dentro de uma coluna JSON para tabular os idiomas associados aos seus gists.
Aqui também você pode carregar várias extensões para ingressar nas APIs. Você pode unir qualquer uma dessas tabelas estrangeiras de origem API com suas próprias tabelas SQLite. E você pode preceder create table NAME as
a uma consulta para persistir os resultados como uma tabela.
Usando um plugin Steampipe como ferramenta de exportação independente
Visite os downloads do Steampipe para encontrar o instalador do seu sistema operacional e execute-o para adquirir a distribuição de exportação de um plugin. Novamente, ilustraremos o uso do plugin GitHub.
$ sudo /bin/sh -c "$(curl -fsSL https://steampipe.io/install/export.sh)" Enter the plugin name: github Enter the version (latest): Enter location (/usr/local/bin): Created temporary directory at /tmp/tmp.48QsUo6CLF. Downloading steampipe_export_github.linux_amd64.tar.gz... ############################################################################## 100.0% Deflating downloaded archive steampipe_export_github Installing Applying necessary permissions Removing downloaded archive steampipe_export_github was installed successfully to /usr/local/bin
$ steampipe_export_github -h Export data using the github plugin. Find detailed usage information including table names, column names, and examples at the Steampipe Hub: https://hub.steampipe.io/plugins/turbot/github Usage: steampipe_export_github TABLE_NAME (flags) Flags: --config string Config file data -h, --help help for steampipe_export_github --limit int Limit data --output string Output format: csv, json or jsonl (default "csv") --select strings Column data to display --where stringArray where clause data
Não há mecanismo SQL na imagem aqui; esta ferramenta é puramente um exportador. Para exportar todos os seus gists para um arquivo JSON:
steampipe_export_github github_my_gist --output json > gists.json
Para selecionar apenas algumas colunas e exportar para um arquivo CSV:
steampipe_export_github github_my_gist --output csv --select "description,created_at,html_url" > gists.csv
Você pode usar --limit
para limitar as linhas retornadas e --where
para filtrá-los, mas principalmente você usará essa ferramenta para obter dados de maneira rápida e fácil que você massageará em outro lugar, por exemplo, em uma planilha.
Explore o ecossistema de plugins Steampipe
Os plug-ins do Steampipe não são apenas interfaces brutas para APIs subjacentes. Eles usam tabelas para modelar essas APIs de maneiras úteis. Por exemplo, o github_my_repository
tabela exemplifica um padrão de design que se aplica consistentemente em todo o conjunto de plug-ins. Na documentação do plugin GitHub:
Você pode possuir repositórios individualmente ou compartilhar a propriedade dos repositórios com outras pessoas em uma organização. O
github_my_repository
tabela listará repositórios que você possui, nos quais colabora ou que pertencem às suas organizações. Para consultar QUALQUER repositório, incluindo repositórios públicos, use ogithub_repository
mesa.
Outros plugins seguem o mesmo padrão. Por exemplo, o plug-in do Microsoft 365 fornece ambos microsoft_my_mail_message
e microsoft_mail_message
e o plug-in do Google Workspace fornece googleworkspace_my_gmail_message
e googleworkspace_gmail
. Sempre que possível, os plug-ins consolidam as visualizações dos recursos da perspectiva de um usuário autenticado.
Embora os plug-ins normalmente forneçam tabelas com esquemas fixos, nem sempre é esse o caso. Esquemas dinâmicos, implementados pelos plug-ins Airtable, CSV, Kubernetes e Salesforce (entre outros), são outro padrão importante. Aqui está um exemplo de CSV usando um Postgres FDW independente.
IMPORT FOREIGN SCHEMA csv FROM SERVER steampipe_csv INTO csv OPTIONS(config 'paths=("/home/jon/csv")');
Agora todos os .csv
arquivos em /home/jon/csv
serão automaticamente tabelas estrangeiras do Postgres. Suponha que você acompanhe os proprietários válidos de instâncias do EC2 em um arquivo chamado ec2_owner_tags
. Aqui está uma consulta na tabela correspondente.
select * from csv.ec2_owner_tags; owner | _ctx ----------------+---------------------------- Pam Beesly | {"connection_name": "csv"} Dwight Schrute | {"connection_name": "csv"}
Você poderia juntar-se a essa tabela com o plugin AWS aws_ec2_instance
tabela para relatar tags de proprietário em instâncias EC2 que estão (ou não) listadas no arquivo CSV.
select ec2.owner, case when csv.owner is null then 'false' else 'true' end as is_listed from (select distinct tags ->> 'owner' as owner from aws.aws_ec2_instance) ec2 left join csv.ec2_owner_tags csv on ec2.owner = csv.owner;
owner | is_listed ----------------+----------- Dwight Schrute | true Michael Scott | false
Em todo o conjunto de plug-ins, há mais de 2.300 tabelas de esquema fixo predefinidas que você pode usar dessas formas, além de um número ilimitado de tabelas dinâmicas. E novos plugins são constantemente adicionados pelo Turbot e pela comunidade de código aberto do Steampipe. Você pode acessar esse ecossistema usando Steampipe ou Turbot Pipes, de seu próprio banco de dados Postgres ou SQLite ou diretamente da linha de comando.