php - 如何使用 laravel 连接到 Amazon Keyspaces (Cassandra)?
问题描述
我正在尝试连接到托管在亚马逊密钥空间的 Cassandra,并且需要在每个连接上包含 SSL 证书。
我已经安装了驱动程序并且连接成功,但是身份验证失败,因为我缺少证书。
我尝试了以下包装器,但这些包装器都不包含配置 SSL 证书的参数:
Sonvq/laravel-cassandra Fuitad/laravel-cassandra cubettech/lacassa
在我的 config/database.php 文件中,我配置了以下内容,我猜证书在“选项”参数中,但它不起作用:
'cassandra' => [
'driver' => 'cassandra',
'host' => env('CASSANDRA_DB_HOST', ''),
'port' => env('CASSANDRA_DB_PORT', 9142),
'keyspace' => env('CASSANDRA_DB_DATABASE', ''),
'username' => env('CASSANDRA_DB_USERNAME', ''),
'password' => env('CASSANDRA_DB_PASSWORD', ''),
'options' => array(
Cassandra::VERIFY_PEER_CERT => '/home/user/AmazonRootCA1.pem',
),
]
通过命令行使用“cqlsh”效果很好,因为在该命令中很容易配置证书路径,但在 laravel 上我无法找到如何设置该路径。
任何帮助都会很棒!谢谢!
解决方案
自从过去两天试图将我的 laravel 应用程序连接到亚马逊键空间以来,我一直在努力。
最后,对 cubettech/lacassa 进行了一些更改,我让它工作了
在 datastax 阅读文档后,我找到了加载 amazon PEM 证书的方法,终于可以连接了。
如果对 connection.php 进行以下更改,那就太好了
protected function createConnection(array $config)
{
$ssl = Cassandra::ssl()
->withVerifyFlags(Cassandra::VERIFY_PEER_CERT)
->withTrustedCerts($config['cert_path'])
->build();
$cluster = Cassandra::cluster()
->withContactPoints($config['host'])
->withPort((int) $config['port'])
->withCredentials($config['username'],$config['password'])
->withSSL($ssl)
->withDefaultConsistency(Cassandra::CONSISTENCY_LOCAL_QUORUM)
->build();
$keyspace = $config['keyspace'];
$connection = $cluster->connect($keyspace);
return $connection;
}
还需要设置证书路径变量。
出于某种原因,我发现即使配置了环境变量,也总是与 localhost 建立连接,这就是我使用 $config 数组加载环境变量的原因。
查询返回一个 Cassandra/Rows Object ,我必须将它们转换为字符串或循环读取它们,但这不是问题。
推荐阅读
- java - java8 remove objects from list of objects basis condition
- jenkins - 问:如何使用 groovy 管道将工件保存到 Nexus 存储库中?
- jira - 如何在(Jira Query Languange)中编写查询以按周数限制问题?
- python - 编辑响应json python
- javascript - 如何在 axios catch() 块中重新抛出捕获的错误
- html - 在html中插入图像后编写文本
- java - Ignore fields during deserialization in spring?
- bash - Nested function in Bash: why does return stop parent function?
- mysql - dyld:库未加载:/usr/local/opt/unixodbc/lib/libodbc.2.dylib
- react-native - 我第一次尝试运行 React Native 应用程序,但我遇到了一个错误。undefined 不是函数(评估“Object.getOwnPropertyDescriptors”)