2

サーバー上で圧縮したコードから関数を作成する PHP スクリプトを作成しようとしています。ファイルをラムダに手動でアップロードしましたが、正常に動作します。しかし、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、ファイルへのフルパス、ファイルへの相対パスなどを渡そうとしました。何でも直します。

4

1 に答える 1

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

ドキュメントとAWS従業員による投稿によると、作成機能にbase64エンコーディングを使用する必要がないため、これが必要な理由はわかりません。彼らは何かを混同したに違いありません。

于 2015-06-23T15:30:01.887 に答える