お客様の 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 ロールを作成して SORACOM の AWS アカウントに割り当てる
ステップ 1: AWS Lambda を設定する で作成した関数の実行を許可するための AWS IAM ロールを作成し、Beam が動作する SORACOM の AWS アカウントに割り当てます。
IAM コンソール にアクセスし、 → の順にクリックして、 をクリックします。
→ の順にクリックし、 に SORACOM の AWS アカウント ID を入力します。
Beam が動作する SORACOM の AWS アカウントの ID は、カバレッジタイプによって異なります。
- 日本カバレッジ:
762707677580
- グローバルカバレッジ:
950858143650
- 日本カバレッジ:
にチェックを入れ、 に任意の文字列を入力します。
に入力した文字列は、これ以降、${external_id} と表記します。例:External-ID-N4gqVwJMp7ZTVEgY
外部 ID の詳細は、AWS の AWS リソースへのアクセス権を第三者に付与するときに外部 ID を使用する方法 - AWS Identity and Access Management を参照してください。
をクリックします。
「許可を追加」画面が表示されます。
をクリックします。
別のウィンドウまたは別のタブで、「ポリシーの作成」画面が表示されます。
ここからは「ポリシーの作成」画面でポリシーを作成します
「ポリシーの作成」画面の操作が終わったら、
が表示されている「許可を追加」画面に戻ってきて IAM ロールを作成する操作を続けます。画面を閉じないでください。以下の項目を設定します。
項目 説明 をクリックして、 をクリックします。 に「InvokeFunctionUrl」と入力し、 にチェックを入れます。 → → の順にクリックします。
「ARN の追加」画面が表示されます。
に、${lambda_func_arn} (例:arn:aws:lambda:ap-northeast-1:XXXXXXXXXXXX:function:beam-hello-world
) を入力して、 をクリックします。「ポリシーの作成」画面に戻ります。
→ の順にクリックします。
に AWS IAM ポリシーの名前を入力し、 をクリックします。
AWS IAM ポリシーが作成され、ポリシー画面が表示されます。
ポリシー画面が表示されているウィンドウまたはタブを閉じて、「許可を追加」画面に戻ります。
をクリックし、手順 10 で入力した AWS IAM ポリシーの名前をテキストボックスに入力して、Enter キーを押します。
作成した AWS IAM ポリシーが表示されます。
作成した AWS IAM ポリシーにチェックを入れて、
をクリックします。に IAM ロールの名前を入力して、 をクリックします。
ロール画面に戻ります。
作成した IAM ロールの名前をクリックし、
をメモします。この ARN は、これ以降、${iam_role_arn} と表記します。例:
arn:aws:iam::XXXXXXXXXXXX:role/beam-hello-world-invoke-function-url-role
ステップ 3: SORACOM Beam をセットアップする
IoT SIM を利用するデバイスから送信されたデータに応じて、Beam から AWS Lambda 関数を呼び出すための設定を、ユーザーコンソールで行います。
認証情報ストアに AWS IAM ロール認証情報を登録する
Beam から AWS Lambda 関数を呼び出すために、IAM ロールに関する認証情報を、ユーザーコンソールの認証情報ストアに登録します。認証情報は、${iam_role_arn} および ${external_id} です。認証情報ストアの「認証情報を登録」画面の表示方法については、認証情報を登録する を参照してください。
認証情報は、以下のように登録します。
項目 | 説明 |
---|---|
認証情報を識別するために任意の名前を入力します。例: 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"}