お客様の AWS アカウントにある AWS Lambda 関数へのアクセスを、Beam が動作する SORACOM の AWS アカウントにのみ許可できます。
Beam の HTTP エントリポイントを使用すると、以下のようなメリットがあります。
AWS Lambda 関数にアクセスするための認証情報を、デバイスにインストールする必要がありません。
デバイスでは、以下のように Beam のエントリポイントにリクエストを送信するだけで、AWS Lambda 関数にアクセスできます。AWS API リクエストの署名 で説明されている署名バージョン 4 の署名プロセスをデバイスで行う必要はありません。
$ curl -X POST http://beam.soracom.io:8888/lambda-with-signature-v4 \ -H "Content-Type: application/json" \ -d '{ "key": "value" }'
{ "message": "Hello from Lambda!", "body": { "key": "value" } }
1 つのグループ設定に複数の HTTP エントリポイントを設定できます。
HTTP エントリポイントを経由して AWS Lambda 関数にデータを送る場合は、転送可能なデータの最大値は 6 MiB です。
ステップ 1: AWS Lambda を設定する
Beam から呼び出す AWS Lambda 関数を作成します。
AWS Lambda の 「関数の作成」画面 にアクセスします。
をクリックし、以下の項目を設定します。
項目 説明 関数名を入力します。例: beam-hello-world
「Node.js xx.x」を選択します。 「x86_64」を選択します。 Beam は Lambda ランタイムには依存しません。任意の Lambda ランタイムの Function を利用できます。ここでは、手順 4 で入力するサンプルプログラムにあわせて「Node.js xx.x」を選択します。
をクリックし、 にチェックを入れて、 で「AWS_IAM」が選択されていることを確認します。
をクリックします。
関数が作成されます。
の「index.mjs」をダブルクリックして、以下のサンプルプログラムが表示されていることを確認します。
export const handler = async(event) => { const body = { "message": "Hello from Lambda!", "body": JSON.parse(event.body) } const response = { statusCode: 200, body: JSON.stringify(body), }; return response; };
に表示されている と の値をコピーします。
は、これ以降、${lambda_func_arn} と表記します。例:arn:aws:lambda:ap-northeast-1:XXXXXXXXXXXX:function:beam-hello-world
は、これ以降、${lambda_func_url} と表記します。例:https://XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.lambda-url.ap-northeast-1.on.aws/
続けて、${lambda_func_url} にアクセスしても、アクセスできないことを確認します。
以下のコマンドを実行します。
$ curl -X POST https://XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.lambda-url.ap-northeast-1.on.aws/ \ -H "Content-Type: application/json" \ -d '{ "key": "value" }'
{"Message":"Forbidden"}
これは、
で「AWS_IAM」を選択したためです。
ステップ 2: IAM ポリシーと IAM ロールを作成する
Beam の HTTP エントリポイントが、お客様の AWS アカウントの AWS Lambda の関数 URL を呼び出すために、お客様の AWS アカウントに以下の設定の IAM ポリシーと IAM ロールを作成します。操作手順について詳しくは、IAM ポリシーと IAM ロールを作成する を参照してください。
項目 | 説明 |
---|---|
IAM ポリシー | このページで説明する機能を体験するために、お客様の AWS アカウントの AWS Lambda の関数 URL を呼び出す権限を追加します。 具体的には以下のように設定します。
|
IAM ロール | SORACOM の AWS アカウントを、信頼できるエンティティとして指定します。
なお、ここで作成した IAM ロールの ARN を、これ以降、${iam_role_arn} と表記します。例:
|
ステップ 3: SORACOM Beam をセットアップする
IoT SIM を利用するデバイスから送信されたデータに応じて、Beam から AWS Lambda 関数を呼び出すための設定を、ユーザーコンソールで行います。
認証情報ストアに AWS IAM ロール認証情報を登録する
Beam から AWS Lambda 関数を呼び出すために、IAM ロールに関する認証情報を、SORACOM ユーザーコンソールに登録します。
具体的には、認証情報ストアの「認証情報を登録」画面で以下のように登録します。この画面の表示方法については、認証情報を登録する を参照してください。
項目 | 説明 |
---|---|
認証情報を識別するために任意の名前を入力します。例: AWS-IAM-role-credentials-invokeFunctionUrl | |
「AWS IAM ロール認証情報」を選択します。 | |
${iam_role_arn} を入力します。例: arn:aws:iam::XXXXXXXXXXXX:role/beam-hello-world-invoke-function-url-role | |
${external_id} を入力します。例: External-ID-N4gqVwJMp7ZTVEgY |
Beam の HTTP エントリポイントを設定する
Beam の設定はグループに対して行います
ここでは、グループの設定を変更する操作のみを説明します。グループの仕組みやグループを作成する操作について詳しくは、グループ設定 を参照してください。
SIM グループ画面で
をクリックします。SIM グループ画面を表示する操作について詳しくは、グループの設定を変更する を参照してください。
→ の順にクリックします。
「SORACOM Beam - HTTP 設定」画面が表示されます。
以下のように設定します。
項目 説明 任意の設定名 (例: AWS Lambda
) を入力します。→ /lambda-with-signature-v4
を入力します。1 つのグループ設定に複数のエントリポイントを設定できます
→ の内容で HTTP エントリポイントが識別されます。HTTP エントリポイントごとに設定を変更すると、1 つのグループ設定に複数のエントリポイントを設定できます。
→ 「HTTPS」を選択します。 → ${lambda_func_url} から、先頭の「https://」および末尾の「/」を取り除いた文字列を入力します (例: XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.lambda-url.ap-northeast-1.on.aws
)。→ 空欄のままにします。 → 空欄のままにします。 → オンにして、以下のように設定します。
- : 「AWS Signature V4」を選択します。
- : 「lambda」(AWS Lambda) を選択します。
- : AWS Lambda 関数のリージョンを選択します。
- 認証情報ストアに AWS IAM ロール認証情報を登録する で登録した AWS IAM ロール認証情報を選択します。 :
HTTP エントリポイントの設定値の意味は、HTTP エントリポイント を参照してください。
をクリックします。
IoT SIM の Beam の設定が完了しました。
ここでは、HTTP エントリポイントを利用しましたが、Web サイトエントリポイント でも を利用できます。
ステップ 4: HTTP エントリポイントを使用して AWS Lambda 関数を呼び出す
Beam の HTTP エントリポイントを使用して、AWS Lambda 関数を呼び出します。
IoT SIM を利用するデバイスで、以下のコマンドを実行します。
$ curl -X POST http://beam.soracom.io:8888/lambda-with-signature-v4 \ -H "Content-Type: application/json" \ -d '{ "key": "value" }'
{ "message": "Hello from Lambda!", "body": { "key": "value" } }
続けて、${lambda_func_url} にアクセスしても、引き続きアクセスできないことを確認します。
IoT SIM を利用するデバイスで、以下のコマンドを実行します。
$ curl -X POST https://XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.lambda-url.ap-northeast-1.on.aws/ \ -H "Content-Type: application/json" \ -d '{ "key": "value" }'
{"Message":"Forbidden"}