事前にComposerでaws-sdk-phpをrequireしておきます。
composer require aws/aws-sdk-php
<?php
require 'vendor/autoload.php';
use Aws\Lambda\LambdaClient;
use Aws\Lambda\Exception\LambdaException;
function invoke_lambda () {
$client = LambdaClient::factory(array(
'profile' => 'profileName',
'region' => 'ap-northeast-1',
'version' => '2015-03-31'
));
$result = $client->invoke(array(
'FunctionName' => 'lambdaFunctionName',
'InvocationType' => 'Event',
'LogType' => 'Tail',
'Payload' => '{"paramName": "abcdef"}'
));
var_dump($result);
}
invoke_lambda();
FunctionName
実行したいLambdaの名前を設定します。
InvocationType
LambdaをPHPから呼び出す際InvocationType
の設定値によってLambdaの実行終了まで待つか非同期で実行するか選択することができます。
InvocationType | 動作 |
---|---|
Event | 非同期実行 |
RequestResponse | 同期実行 |
LogType
同期実行をした場合のみLogTypeが有効になります。Tailを設定しておくとログの最後のほうがBASE64形式で返ってくるのでデバッグする際など便利です。
Payload
Payloadに指定した値がLambdaのeventに渡されます。
ポリシー設定
実行権限が必要なので下記のようなポリシーを作成してロールに付与しておきます。
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "invokeLambda",
"Effect": "Allow",
"Action": "lambda:InvokeFunction",
"Resource": "arn:aws:lambda:*:<アカウントID>:function:<function名>"
}
]
}
ロールが設定できないとき
ローカルから実行などアクセスキーを使用したいときは以下のようにdefaultProviderを使用すると~/.aws/config
の設定を読みにいってくれます。
<?php
require 'vendor/autoload.php';
use Aws\Credentials\CredentialProvider;
use Aws\Lambda\LambdaClient;
use Aws\Lambda\Exception\LambdaException;
function invoke_lambda () {
$provider = CredentialProvider::defaultProvider();
$client = LambdaClient::factory(array(
'region' => 'ap-northeast-1',
'version' => '2015-03-31',
'credentials' => $provider,
));
$result = $client->invoke(array(
'FunctionName' => 'lambdaFunctionName',
'InvocationType' => 'Event',
'LogType' => 'Tail',
'Payload' => '{"paramName": "abcdef"}'
));
var_dump($result);
}
invoke_lambda();