renoki-co/laravel-steampipe

使用 Laravel 内置的 ORM 类,通过 Steampipe 查询云资源。

1.0.0 2022-02-09 22:26 UTC

README

CI codecov StyleCI Latest Stable Version Total Downloads Monthly Downloads License

使用 Laravel 内置的 ORM 类通过 Steampipe(一个开源的 CLI 工具,可使用 SQL 立即查询云 API)查询云资源。

🤝 支持

如果您在生产应用、演示、个人项目、学校项目等中使用了一个或多个 Renoki Co. 的开源包,请通过 Github Sponsors 赞助我们的工作。📦

🚀 安装

您可以通过 composer 安装此包

composer require renoki-co/laravel-steampipe

在您的 config/database.php 文件中,添加一个新的驱动

'connections' => [

    'steampipe' => [
        'driver' => 'steampipe',
        'binary' => env('STEAMPIPE_BINARY', 'steampipe'),
    ],

],

您可以使用 STEAMPIPE_BINARY 定义 Steampipe 二进制文件的路径。

🙌 使用

Steampipe 是多厂商、多插件的。这意味着您可以使用与 Postgres 相同的方式与任何云 API 进行交互。

为了本地运行并避免代码污染,您可能需要为要通过云 API 访问的 "表" 创建一个模型。

例如,让我们为 aws_region 创建一个 AwsRegion 模型。请确保您已经 安装了 Steampipe 的 AWS 插件

php artisan steampipe:make:model aws_region

请注意,模型是从表创建的,格式为单数,如 aws_region。通常,在 Laravel 中您会直接创建模型类名。为了平衡并简化生成命令,您应该传递表名而不是类名。

该命令将为您创建一个 app/Steampipe/Aws/AwsRegion.php 文件,您可以在其中访问模型

use App\Steampipe\Aws\AwsRegion;

foreach (AwsRegion::all() as $region) {
    //
}

Laravel ORM 中的所有类似 SQL 的方法都可以使用,具体请参阅 Steampipe 文档 中的说明。

模型还可以与内置的模型功能一起使用,例如隐藏字段或附加。

生成

您可以生成所需数量的模型。约定是在创建表时,它将始终遵循以下模式

App\Steampipe\{Provider}\{TableNameStudlyCase};

这样,模型就会知道如何访问表。例如,对于 DigitalOcean droplet,它将如下所示

php artisan steampipe:make:model digitalocean_droplet
use App\Steampipe\Digitalocean\DigitaloceanDroplet;

DigitaloceanDroplet::find(227211874);

🐛 测试

您需要设置一个 AWS 账户,并将 AWS_ACCESS_KEY_IDAWS_SECRET_ACCESS_KEY 添加到环境变量中。

拥有访问令牌的用户应具有以下 IAM 策略

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": "ec2:DescribeRegions",
            "Resource": "*"
        }
    ]
}

要运行测试

vendor/bin/phpunit

🤝 贡献

有关详细信息,请参阅 CONTRIBUTING

🔒 安全

如果您发现任何与安全相关的问题,请通过电子邮件 alex@renoki.org 而不是使用问题跟踪器。

🎉 致谢