【PHP】AWSのlambdaを実行する
PHPでAWSのlambdaを実行する方法メモ
SDKのインストール
composer
を利用してAWS SDKをインストールします。
composer require aws/aws-sdk-php
Lambda実行クラスコード
実行する際は PHP側に実行権限を付与 することを忘れないでください。
Lambdaを実行するクラス
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
| require 'vendor/autoload.php';
use Aws\Lambda\LambdaClient;
class AwsLambdaInvoker
{
private $lambda;
/**
* AWS Lambda
* @param $region リージョン
* @param $awsAccessKey AWSアクセスキー
* @param $awsSecretKey AWSシークレットキー
*/
public function __construct($region, $awsAccessKey = null, $awsSecretKey = null)
{
$param = [
'region' => $region, // リージョン
'version' => '2015-03-31', // SDKバージョン
];
// AWSのキーが渡されたなら設定する
if (!is_null($awsAccessKey) && !is_null($awsSecretKey)) {
$param = array_merge(
$param,
[
'credentials' => [
'key' => $awsAccessKey,
'secret' => $awsSecretKey
]
]
);
}
// AWS Lambdaクライアントの作成
$this->lambda = new LambdaClient($param);
}
/**
* Lambda実行
*
* @param $functionName 実行Lambda関数名
* @param $payload Lambdaに渡すjson
*/
public function invokeLambda(string $functionName, array $payload): array
{
// Lambda関数を実行します
return $this->lambda->invoke([
'FunctionName' => $functionName, // 実行するLambda関数の名前を指定します
'Payload' => json_encode($payload) // Lambda関数に渡すJSONペイロードを指定します
]);
}
}
|
aws設定ファイルを使用する場合
AWSキーを使用しないで ~/.aws/config
から設定を読みに行く場合は以下のようにしてください。
1
2
3
4
5
6
| $provider = CredentialProvider::defaultProvider();
$client = LambdaClient::factory([
'region' => $region, // リージョン
'version' => '2015-03-31', // SDKバージョン
'credentials' => $provider,
]);
|
またどちらも使用しない場合はアタッチされているロールを使用します。
Lambda実行のオプション
1
2
3
4
5
6
7
8
| $result = $this->lambda->invoke([
'ClientContext' => '<string>', // Lambda関数のクライアントコンテキスト情報
'FunctionName' => '<string>', // REQUIRED Lambda関数名
'InvocationType' => 'Event|RequestResponse|DryRun', // Lambda実行タイプ Event:非同期 RequestResponse:同期 DryRun:ドライラン
'LogType' => 'None|Tail', // ログ種類 None:なし Tail:ログあり
'Payload' => <string || resource || Psr\Http\Message\StreamInterface>, // Lambdaに渡すJSON
'Qualifier' => '<string>', // Lambda関数のバージョンまたはエイリアス名
]);
|
返ってくる値
1
2
3
4
5
6
7
8
9
10
| [
'StatusCode' => (int), // Lambda関数のステータスコード
'FunctionError' => (string), // Lambda関数がエラーを返した場合、エラータイプを示す文字列
'LogResult' => (string), // Lambda関数のログデータ(Base64エンコードされた文字列)
'Payload' => (string), // Lambda関数が返したJSONペイロード
'ExecutedVersion' => (string), // 実行されたLambda関数のバージョン
'SdkResponseMetadata' => [
// SDKのメタデータ
]
]
|
実行コード
実際に実行するコード
1
2
3
4
5
6
7
8
9
10
11
| <?php
try {
$invoker = new AwsLambdaInvoker('us-west-2');
$payload = ['message' => 'Hello from PHP!']; // Lambda関数に渡すJSON
$result = $invoker->invokeLambda('myLambdaFunction', $payload);
var_dump($result);
} catch (Exception $e) {
// 例外処理
echo $e->getMessage();
}
|
参考