AWS Lambda PHP使用Zip创建函数

时间:2015-06-22 21:47:10

标签: php amazon-web-services aws-lambda

我正在尝试创建一个PHP脚本,该脚本从我在服务器上压缩的一些代码创建一个函数。我手动将文件上传到lambda,它工作正常。但是当我尝试使用aws sdk来创建函数时,它会失败并显示错误消息。有人有任何线索吗?

代码:

private function createLambdaFunction() {

    $result = $this->lambdaConn->createFunction(array(
        'FunctionName' => $this->lambdaFunctionName,
        'Runtime' => $this->runtime,
        'Role' => $this->role,
        'Handler' => $this->lambdaFunctionName.".".$this->handler,
        'Description' => $this->description,
        'Timeout' => $this->timeout,
        'MemorySize' => $this->memorySize,
        'Code' => array(
            'ZipFile' => 'fileb://test.zip'
        )
    ));

错误:

PHP Fatal error:  Uncaught Aws\Lambda\Exception\LambdaException: AWS 
Error Code: InvalidParameterValueException, 
Status Code: 400, AWS Request ID: asdf, AWS Error Type: user, 
AWS Error Message: Could not unzip uploaded file. Please check 
your file, then try to upload again., User-Agent: 
aws-sdk-php2/2.8.10 Guzzle/3.9.3 curl/7.35.0 PHP/5.5.9-1ubuntu4.9

我似乎无法在谷歌上找到一个好的例子,文档是......不太理想。我用php创建了zip文件,所以我尝试传递var,文件的完整路径,文件的相对路径等等。最后学会了你必须使用fileb:// preface,但这并没有结束修理任何东西。

1 个答案:

答案 0 :(得分:1)

好的,我不确定为什么会这样,但你需要对你的zip文件进行base64编码,如:

            $result = $this->lambdaConn->createFunction(array(
            'FunctionName' => $this->lambdaFunctionName,
            'Runtime' => $this->runtime,
            'Role' => $this->role,
            'Handler' => $this->lambdaFunctionName . "." . $this->handler,
            'Description' => $this->description,
            'Timeout' => $this->timeout,
            'MemorySize' => $this->memorySize,
            'Code' => array(
                'ZipFile' => 'fileb://'.base64_encode(file_get_contents('test.zip'))
            )
        ));

我不确定为什么这是必需的,因为考虑到doumentation和AWS员工的帖子,你不必为create function编写base64编码。他们一定是混淆了什么。