問題タブ [aws-serverless]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
amazon-web-services - AWS Lambda の API バックエンド
コンテキスト: バックエンド サービスで 1 つ以上の機能を計算する必要があるユースケースがあります。各機能は単純な計算の平和であり (2 つの数値を加算するだけでよい)、各機能は入力を受け取り、出力値を返します。ブール値または数値。クライアントは実際に機能 (1 または 10 など) を要求でき、各機能には複数のバージョンを含めることができます。
設計: Lambda 関数は、バージョニングをサポートし、スケーリングを処理するため、適切な選択のようです。私の設計では、1 つの Lambda がリクエストを受信し、さらにラムダ関数を並行して呼び出し (たとえば、ユーザーが 12 の機能を要求したとします。Lambda 関数 L1 は 12 の Lambda 関数を並行して呼び出します)、計算されたすべての機能値を 1 つの応答として返します (HTTP )。このようにして、すべての機能を独自の Lambda 関数でバージョン管理できます。
質問: 別の Lambda 関数からラムダ関数を直接呼び出しても問題ありませんか? Lambda 関数を使用するのに適したユースケースですか?
ありがとう
amazon-dynamodb - サーバーレスの DynamoDB、Fn::GetRef を使用してグローバル セカンダリ インデックスを参照
DynamoDB テーブルで定義している API/サービスがあります。いくつかのクエリをサポートするために、いくつかのインデックス (グローバル セカンダリ インデックスとして定義) があります。GSI 定義を使用してテーブルを設計し、正しいクエリのように見えます。ただし、クエリを作成すると、次の例外が発生します。
例外の上部には、getRoomMessages メソッドis not authorized to perform: dynamodb:Query on resource:
の ARN が表示され、グローバル セカンダリ インデックスの ARN が表示されます。
グローバル セカンダリ インデックスへのアクセス権を付与するポリシーを定義する必要があることは明らかです。しかし、その方法はまったく明らかではありません。DynamoDB に関する他の StackOverflow の質問で、ドキュメントが断片化されていて、何かを見つけるのがいかに難しいかについて不平を言っているのを見てきました。私は同意しなければなりません。「断片化」という言葉は控えめすぎる。
サーバーレス フレームワークを使用しています。このprovider
セクションは、このポリシー/ロールの定義を示しています。
このResource
セクションでは、許可が宣言されているリソースをリストすることになっていると思います。1 つ目は、テーブル全体を参照します。追加した最後の 2 つは、インデックスを参照します。
編集:実行するとserverless deploy
、次のメッセージが出力されます。
これについていくつかのバリエーションを試しましたが、同じエラーが発生しました。要するに、Cloudfront 構文を使用して、インデックスの ARN を取得するにはどうすればよいかということですserverless.yml
。例外に示されているため、ARN は存在します。
DynamoDB テーブル定義:
上記の例外に対応して使用されているクエリ:
そして、クエリを生成する Lambda 関数のコード スニペット: