2015-06-22 3 views
2

Я пытаюсь создать скрипт PHP, который создает функцию из некоторого кода, который я застегиваю на нашем сервере. Я загрузил файл вручную в лямбда, и он отлично работает. Но когда я пытаюсь использовать aws-sdk для создания функции, она не работает с сообщением об ошибке. Кто-нибудь понял?AWS Lambda PHP Создать функцию с Zip

Код:

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 

Я не могу найти хороший пример на Google, и документация ... меньше, чем идеал. Я создал zip-файл с php, поэтому я попытался передать этот var, полный путь к файлу, относительный путь к файлу и т. Д. Наконец, вы узнали, что вам нужно использовать префикс fileb: //, но это не закончилось фиксируя что угодно.

ответ

1

Хорошо, я не знаю, почему это так, но вы должны 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')) 
      ) 
     )); 

Я не знаю, почему это необходимо, так как accourding к doumentation и сообщение сотрудника AWS, вам не нужно иметь кодировку base64 для создания функции. Они, должно быть, что-то перепутали.

+0

Это не работает для меня! – Yukulelix

+0

Какая ошибка вы получаете? Что не работает? – Fooldj

+0

Теперь он работает, вам больше не нужно использовать base64_encode, поскольку новый SDK выполняет преобразование для вас, просто используйте file_get_contents ('test.zip'), и он работает: https://github.com/aws/aws- sdk-php/issues/673 # event-347510707 – Yukulelix

Смежные вопросы