JavaScriptを有効にしてください

【PHP】AWSのlambdaを実行する

 ·  ☕ 3 分で読めます

【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();
}

参考

共有

こぴぺたん
著者
こぴぺたん
Copy & Paste Engineer