renoki-co/laravel-steampipe

Use Laravel's built-in ORM classes to query cloud resources with Steampipe.

1.0.0 2022-02-09 22:26 UTC

README

CI codecov StyleCI Latest Stable Version Total Downloads Monthly Downloads License

Use Laravel's built-in ORM classes to query cloud resources with Steampipe, an open source CLI to instantly query cloud APIs using SQL.

🤝 Supporting

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. 📦

🚀 Installation

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.

🙌 Usage

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.

Generation

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);

🐛 Testing

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

🤝 Contributing

Please see CONTRIBUTING for details.

🔒 Security

If you discover any security related issues, please email alex@renoki.org instead of using the issue tracker.

🎉 Credits