【发布时间】:2019-02-12 06:31:35
【问题描述】:
像往常一样,操作越简单,AWS 文档就越让我感到困惑。我想使用 PHP 来写入和读取存储在 EFS 上的文件。我有使用 AWS PHP 库的经验,我只需要正确的代码来促进交流。这是我的设置:
- 我的默认 VPC 上的 1 EFS 文件系统。
- 1 Elasticbeanstalk 环境,将“storage-efs-mountfilesystem.config”添加到最新应用程序代码的 .ebextensions 目录中,并在没有错误的情况下初始化(这让我认为它正在连接)。 EB 的安全组被添加到 EFS 安全组。 AWS PHP SDK 也存在于应用程序中
- 应用程序中有 1 个 PHP 文件
现在在文件中我通常以这种方式连接到其他服务:
use Aws\S3\S3Client;
$options = [
'region' => 'us-east-1',
'version' => '2006-03-01',
'signature_version' => 'v4',
'credentials' => [
'key' => 'key#',
'secret' => 'secret#'
]
];
$GLOBALS['s3Client'] = new S3Client($options);
$writeFile = $GLOBALS['s3Client']->putObject(array(...
我认为这对于 EFS 应该是一样的。作为第一个猜测,我尝试了:
$efsOptions = [
'region' => 'us-east-1',
'version' => 'latest',
'credentials' => [
'key' => 'key#',
'secret' => 'secret#'
]
];
use Aws\Efs\EfsClient;
$efsClient = new EfsClient($efsOptions);
$result = $efsClient->describeFileSystems(array(
'FileSystemId' => 'fs-#'
));
但是得到一个错误:
Fatal error: Uncaught exception 'Aws\Efs\Exception\EfsException' with message 'Error executing "DescribeFileSystems" on "https://elasticfilesystem.us-east-1.amazonaws.com/2015-02-01/file-systems?FileSystemId=f#"; AWS HTTP error: Client error: `GET https://elasticfilesystem.us-east-1.amazonaws.com/2015-02-01/file-systems?FileSystemId=f#` resulted in a `403 Forbidden`
那么正确的方法是什么? (须藤代码):
use Aws\efs\EfsClient;
$options = [
'What keys need to be here' => 'paramter',
'credentials' => [
'key' => 'key#',
'secret' => 'sevret#'
]
];
$efsClient = new EfsClient($options);
$dir = "/test/";
$makeDir = $efsClient -> mkdir($dir);
$scanDir = $efsClient -> scandir($dir);
print_r($scanDir);
**/test/
我从不使用控制台或连接到服务器来安装软件包,因此请将其限制为允许我在 PHP 文件中执行所有操作或有限的“一次性”控制台配置的答案。重点是我需要 PHP 脚本来创建和读取 EFS 上的文件并与其他 EB 环境共享这些文件。到目前为止我已经查看或使用过的 AWS 文档:
https://docs.aws.amazon.com/elasticbeanstalk/latest/dg/services-efs.html https://github.com/awsdocs/elastic-beanstalk-samples/blob/master/configuration-files/aws-provided/instance-configuration/storage-efs-mountfilesystem.config https://docs.aws.amazon.com/aws-sdk-php/v2/api/class-Aws.Efs.EfsClient.html
【问题讨论】:
-
为什么不将 EFS 作为共享安装在运行代码的 EC2 实例上。那么 EFS 只是您的 PHP 应用程序可以写入的常规路径。这就是我们在 Elastic Beanstalk Web 服务器上为持久用户文件上传等所做的工作。
-
是的,这也可以。你有任何关于如何完成连接的示例代码吗?使用 PHP 的原生文件命令会很棒。
-
我在下面回答了一个小例子。
-
@mrunion 谢谢先生 .. 我今天会试一试并跟进。
标签: php amazon-web-services amazon-elastic-beanstalk mkdir amazon-efs