Hemos visto cómo Steampipe puede unificar el acceso a las API, impulsar la metabúsqueda, hacer cumplir los KPI como códigoy detectar deriva de configuración. El habilitando complementos hasta hace poco, estaban estrechamente vinculados al binario Steampipe y a la instancia de Postgres que Steampipe lanza y controla. Eso llevó a los miembros de la comunidad de código abierto de Steampipe a preguntar: «¿Podemos usar los complementos en nuestras propias bases de datos de Postgres?» Ahora la respuesta es sí y más. Pero centrémonos primero en Postgres.
Usar un complemento Steampipe como contenedor de datos externos de Postgres
Visita Descargas de Steampipe para encontrar el instalador para su sistema operativo y ejecutarlo para adquirir la distribución de contenedor de datos externos (FDW) de Postgres de un complemento; en este caso, el complemento de 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/
Ahora conéctese a su servidor como de costumbre, usando psql
u otro cliente, normalmente como el postgres
usuario. Luego ejecute estos comandos que son típicos de cualquier Postgres contenedor de datos extranjeros. Como con todas las extensiones de Postgres, comienzas así:
CREATE EXTENSION steampipe_postgres_fdw_github;
Para utilizar un contenedor de datos externo, primero crea un servidor:
CREATE SERVER steampipe_github FOREIGN DATA WRAPPER steampipe_postgres_github OPTIONS (config 'token="ghp_..."');
Use OPCIONES para configurar la extensión para usar su token de acceso de GitHub. (Alternativamente, las variables de entorno estándar utilizadas para configurar un complemento Steampipe; es solo GITHUB_TOKEN
en este caso, funcionará si los configura antes de iniciar su instancia de Postgres).
El mesas proporcionado por la extensión vivirá en un esquema, así que defina uno:
CREATE SCHEMA github;
Ahora importe el esquema definido por el servidor externo al esquema local que acaba de crear:
IMPORT FOREIGN SCHEMA github FROM SERVER steampipe_github INTO github;
¡Ahora ejecute una consulta!
Las mesas extranjeras proporcionadas por la extensión viven en el github schema
por lo que de forma predeterminada harás referencia a tablas como github.github_my_repository
. Si usted set search_path="github"
sin embargo, el esquema se vuelve opcional y puede escribir consultas utilizando nombres de tablas no calificados.
select
count(*)
from
github_my_repository;
count
-------
468
Si tiene muchos repositorios, la primera ejecución de esa consulta tardará unos segundos. Sin embargo, la segunda ejecución arrojará resultados instantáneamente, porque la extensión incluye un potente y sofisticado cache.
¡Y eso es todo! Cada complemento de Steampipe ahora también es un contenedor de datos externo que funciona exactamente como este. Puede cargar varias extensiones para unirse a través de API. Por supuesto, puede unir cualquiera de estas tablas externas basadas en API con sus propias tablas de Postgres. Y para guardar los resultados de cualquier consulta, puede anteponer create table NAME as
o create materialized view NAME as
a una consulta para conservar los resultados como una tabla o vista.
Usar un complemento Steampipe como extensión SQLite que proporciona tablas virtuales
Visita Descargas de Steampipe para encontrar el instalador para su sistema operativo y ejecutarlo para adquirir la distribución SQLite del mismo complemento.
$ 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.
Aquí está la configuración. Puedes colocar este código en ~/.sqliterc
si quieres ejecutarlo cada vez que comiences sqlite
.
.load /home/jon/steampipe-sqlite/steampipe_sqlite_github.so select steampipe_configure_github(' token="ghp_..." ');
Ahora puede ejecutar la misma consulta que arriba.
sqlite> select count(*) from github_my_repository;
count(*)
468
¿Qué pasa con las diferencias entre SQL con sabor a Postgres y SQLite? El Centro de tubería de vapor ¡es tu amigo! Por ejemplo, aquí hay variantes de una consulta que accede a un campo dentro de una columna JSON para tabular los idiomas asociados con sus esencias.
Aquí también puedes cargar múltiples extensiones para unirse a través de API. Puede unir cualquiera de estas tablas externas basadas en API con sus propias tablas SQLite. Y puedes anteponer create table NAME as
a una consulta para conservar los resultados como una tabla.
Usar un complemento Steampipe como herramienta de exportación independiente
Visita Descargas de Steampipe para encontrar el instalador para su sistema operativo y ejecutarlo para adquirir la distribución de exportación de un complemento. De nuevo, ilustraremos usando el complemento de 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
Aquí no hay ningún motor SQL en la imagen; Esta herramienta es puramente exportadora. Para exportar toda su esencia a un archivo JSON:
steampipe_export_github github_my_gist --output json > gists.json
Para seleccionar solo algunas columnas y exportar a un archivo CSV:
steampipe_export_github github_my_gist --output csv --select "description,created_at,html_url" > gists.csv
Puedes usar --limit
para limitar las filas devueltas, y --where
para filtrarlos, pero sobre todo utilizará esta herramienta para capturar datos de forma rápida y sencilla que manipulará en otro lugar, por ejemplo, en una hoja de cálculo.
Acceda al ecosistema de complementos de Steampipe
Los complementos de Steampipe no son sólo interfaces sin formato para las API subyacentes. Usan tablas para modelar esas API de manera útil. Por ejemplo, el github_my_repository
La tabla ejemplifica un patrón de diseño que se aplica de manera consistente en todo el conjunto de complementos. De la documentación del complemento GitHub:
Puede poseer repositorios individualmente o puede compartir la propiedad de los repositorios con otras personas de una organización. El
github_my_repository
La tabla enumerará los repositorios que posee, en los que colabora o que pertenecen a sus organizaciones. Para consultar CUALQUIER repositorio, incluidos los repositorios públicos, utilice elgithub_repository
mesa.
Otros complementos siguen el mismo patrón. Por ejemplo, el Complemento de Microsoft 365 proporciona ambos microsoft_my_mail_message
y microsoft_mail_message
y el Complemento de espacio de trabajo de Google proporciona googleworkspace_my_gmail_message
y googleworkspace_gmail
. Siempre que sea posible, los complementos consolidan vistas de recursos desde la perspectiva de un usuario autenticado.
Si bien los complementos suelen proporcionar tablas con esquemas fijos, no siempre es así. Esquemas dinámicos, implementados por el mesa de aire, CSV, Kubernetesy Fuerza de ventas Los complementos (entre otros) son otro patrón clave. A continuación se muestra un ejemplo de CSV que utiliza un FDW de Postgres independiente.
IMPORT FOREIGN SCHEMA csv FROM SERVER steampipe_csv INTO csv OPTIONS(config 'paths=["/home/jon/csv"]');
Ahora todos los .csv
archivos en /home/jon/csv
automáticamente serán tablas extranjeras de Postgres. Suponga que realiza un seguimiento de los propietarios válidos de las instancias EC2 en un archivo llamado ec2_owner_tags
. Aquí hay una consulta contra la tabla correspondiente.
select * from csv.ec2_owner_tags; owner | _ctx ----------------+---------------------------- Pam Beesly | {"connection_name": "csv"} Dwight Schrute | {"connection_name": "csv"}
Podrías unirte a esa mesa con el Complementos de AWS aws_ec2_instance
tabla para informar etiquetas de propietario en instancias EC2 que están (o no) enumeradas en el archivo 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
En todo el conjunto de complementos hay más de 2300 tablas de esquema fijo predefinidas que puede usar de esta manera, además de una cantidad ilimitada de tablas dinámicas. Y Turbot y la comunidad de código abierto de Steampipe agregan constantemente nuevos complementos. Puedes acceder a este ecosistema usando Tubo de vapor o Tubos de rodaballodesde su propia base de datos Postgres o SQLite, o directamente desde la línea de comando.
Copyright © 2024 IDG Communications, Inc.