Use Laravel's built-in ORM classes to query cloud resources with Steampipe, an open source CLI to instantly query cloud APIs using SQL.
If you are using one or more Renoki Co. open-source packages in your production apps, in presentation demos, hobby projects, school projects or so, sponsor our work with Github Sponsors. 📦
You can install the package via composer:
composer require renoki-co/laravel-steampipe
In your config/database.php
, add a new driver:
'connections' => [
'steampipe' => [
'driver' => 'steampipe',
'binary' => env('STEAMPIPE_BINARY', 'steampipe'),
],
],
You can define the Steampipe binary path with STEAMPIPE_BINARY
.
Steampipe is multi-vendor, multi-plugin. This means that you can interact with any cloud APIs just like yo would do with Postgres.
For it to work locally and avoid code pollution, you would want to create a model for the "tables" you would want to access the cloud APIs through.
For example, let's make a AwsRegion
model for the aws_region
table. Make sure you have installed the AWS plugin for Steampipe.
php artisan steampipe:make:model aws_region
Please observe that the models are created from the table in singular, aws_region
. Usually, in Laravel you would have created the model class name directly. To break even and make the generation command easier, you should pass the table name instead of a class name.
The command will create for you an app/Steampipe/Aws/AwsRegion.php
file where you can access the model:
use App\Steampipe\Aws\AwsRegion;
foreach (AwsRegion::all() as $region) {
//
}
All SQL-like methods from Laravel ORM are available to be used as explained in the Steampipe documentation.
Models also work with the built-in model features, like hidden fields or appends.
You may generate as many models as you need. The convention is that when creating a table, it will always follow this pattern:
App\Steampipe\{Provider}\{TableNameStudlyCase};
This way, the models will know how to access the tables. For example, for a DigitalOcean droplet it would look like this:
php artisan steampipe:make:model digitalocean_droplet
use App\Steampipe\Digitalocean\DigitaloceanDroplet;
DigitaloceanDroplet::find(227211874);
You will need to set up an AWS account and add AWS_ACCESS_KEY_ID
and AWS_SECRET_ACCESS_KEY
to your environment variables.
The user with the access tokens should have the following IAM policy:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": "ec2:DescribeRegions",
"Resource": "*"
}
]
}
To run tests:
vendor/bin/phpunit
Please see CONTRIBUTING for details.
If you discover any security related issues, please email [email protected] instead of using the issue tracker.