問題タブ [serverless-framework]

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.

0 投票する
1 に答える
2076 参照

node.js - サーバーレス AWS Lambda Express アプリでの Mocha テスト

gruntjsをタスク ランナーとして、mochajsをテスト フレームワークとして使用してテストしている、expressjsに基づくnodejsアプリがあります。したがって、CI プロセスの一部としてデプロイ中にテスト VM を開発し、テスト VM でローカル経由またはローカル経由で直接実行されるコンポーネント、統合、単体テストを作成しました。grunt testmocha test/component/v1/apiX

このアプリを AWS Lambda に移行すること、つまりサーバーレスaws-serverless-expressにすることを考えると、テストと CI プロセスに関して次のような疑問が頭に浮かびます (ラムダ関数を使用するので、ラムダ関数を明示的に記述する必要はないことに注意してください)。

1) HTTP API リクエストを介して行われるコンポーネント / e2e テストを実装する方法は?

2) アプリの一部のみを読み込んでテストする統合および単体テストを実装する方法は?

3) いずれかのテストが失敗した場合にデプロイを拒否する新しい CI フローと両方を統合する方法は?

質問 1) はほとんど解決されたと思います。AWS Lambda を外部からテストする方法はたくさんあります。lambda-to-test を test-lambda から直接呼び出して lambda-to-lambda テストを実行するか、ここで説明されているように test-lambda から HTTP を使用して AWS API Gateway 経由で lambda-to-test を呼び出すことができます。ローカル ラムダ テストにserverless-mocha-pluginを使用することもできます ( serverlessを使用している場合)。

興味深いのは 2) です。ラムダが展開されると、それはブラック ボックスになります。明示的にラムダ インターフェイスとして宣言されていないものは実行できません。既存の mocha ユニットと統合テストを保存または再実装するにはどうすればよいですか?

3) も同様: CI が展開時にすべてのテストを実行し、失敗した場合は展開を拒否するにはどうすればよいですか?

ここで私自身のアプローチ:テスト環境の場合にのみ、ノードアプリをサーバーレスにします。環境に応じてすべてのサーバーレス変更を条件付きにすることで、単純に従来のノード HTTP サービスとして機能させます。必要な変更はほとんどないため、これは可能で保守可能です。これで、grunt と mocha を使用して、ローカルおよび展開時に通常どおりテストを実行できます。その後、サーバーレス バージョンも同様に機能することを確認したい場合は、ラムダからラムダへの最終的なテストを行うことができます。

0 投票する
1 に答える
75 参照

amazon-web-services - サーバーレス REST API ゲートウェイ nodejs

どうすれば params データを取得できますか?

しかし、 event.some_data print undefine は、コードの何が問題なのか誰にもわかりませんか?

0 投票する
2 に答える
4837 参照

amazon-web-services - サーバーレスで Lambda をデプロイするときに、S3 バケットをどのように再利用しますか?

最近、AWS 環境で Lambda 関数のデプロイを処理するためにサーバーレスを採用しましたが、デプロイされた固有の関数ごとに、新しい S3 バケットが作成されます。これは非効率的であり、サーバーレスが作成するスタックごとに 1 つのバケットを持つことが理想的です。serverless.yml ファイル内からこれを行う方法はありますか? リソースに対して次の yml ファイル構成を試みましたが、成功しませんでした。

1 - yml で使用するリソースとしてバケットを一覧表示する

出力:

2 - yml でバケットを参照しようとしています

出力:

0 投票する
1 に答える
337 参照

python - Serverless Framework v1.0.0 GA - Python ハンドラ内の環境変数

サーバーレス フレームワークの環境変数に関するベスト プラクティスは何ですか。

python dotenv 環境に関する議論を聞いたことがありますが、python の経験があまりないので、これを設定して使用するためのガイダンスを探しています (例が良いでしょう!)

たとえば、サーバーレス ハンドラー関数で db_arn の環境変数を使用したいと考えています。

db_arn = "ec2-xx-xx-xx-xxx.eu-west-1.compute.amazonaws.com"

def getCustomer(): #db_arn を使用して接続

ハードコードされた文字列ではなく、db_arn を環境変数 (dev、test、prod など) にしたいと考えています。

これを dotenv でどのように行うことができますか?また、これを可能にするためにサーバーレス サービスをどのように編成しますか?

よろしくお願いします!

0 投票する
3 に答える
21512 参照

aws-lambda - サーバーレス フレームワーク - Python と Requirements.txt

サーバーレス フレームワーク v1.0.0 を使用すると、サービス ルートに「requirements.txt」があり、内容は依存する python パッケージのリストです。(リクエストなど)。

ただし、これらの依存関係がパッケージの一部としてインストールされていないように見えるため、結果として展開された関数は失敗します

「モジュール 'handler' をインポートできません: requests という名前のモジュールがありません」

pipのインストールはサーバーレスだと思いますが、結果のzipファイルは小さく、明らかにそれを実行していません。設計または何かが足りないため、私のせいですか?これを行うのはラムダだからですか?もしそうなら、私は何が欠けていますか?)

これを行うために何が必要で、どのように機能するかについてのドキュメントはありますか? pipがこれらをインストールするのはサーバーレスですか、それともawsラムダ側ですか?

0 投票する
1 に答える
987 参照

rest - サーバーレスでエラーを処理する方法

私はこれをやっています:

郵便配達員から api を呼び出すと、次のように返されます。

という名前のキーを送信していませんerrorMessage

私の質問は、はいの場合はエラーを返す正しい方法を使用していますか、いいえの場合はなぜこのように動作するのか、サーバーレスでエラーを処理する正しい方法は何ですか

感謝します。

0 投票する
2 に答える
1544 参照

angular - Universal Angular を Google Cloud Function または AWS Lambda にデプロイする

Angular 2 を試しているときに、たまたまAngular Universal を見つけました。ReactJs と同じように、Angular 2 アプリのサーバー側レンダリングです。1 つのコード スニペットを含む入門ガイドもここにあります

これが Google Cloud Function や AWS Lambda などのサーバーレス環境にデプロイできるものかどうかを理解しようとしています。両方のサービスのドキュメントは、nodejs がサポートされていることを示しています。私はAngular2とサーバーレスホスティングパターンの両方に非常に慣れていません。

0 投票する
1 に答える
1355 参照

amazon-web-services - AWS API ゲートウェイ認証 (Cognito 対カスタムオーソライザー)

フェデレーション認証を使用してサーバーレス アプリケーション (ReactJS、API Gateway、AWS Lambda、DynamoDB) を作成しようとしています。以下は、私が想定している種類のアーキテクチャです (簡潔にするために STS を追加していません。また、フローを完全に理解しているとは思いません)。

認証シーケンス

ラムダ関数をトリガーする API Gateway エンドポイントを作成しました。最初に Google でユーザーを認証したいのですが、成功した場合は API エンドポイントを使用できるはずです。

最初のステップは、標準の Outh2 を使用して Google でユーザーを認証することです。目的のために、認証されていないエンドポイント /signin/google と /callback/google を 2 つ作成しました。コールバック ラムダ関数で Google から認証の成功応答を取得したら、id_token (とりわけ) を使用できます。

現時点では、API の認証に使用できる 2 つのアプローチがあります。

  1. API エンドポイントに使用できるカスタム オーソライザーを構築します。コードは次のとおりです ( https://github.com/prabhatsharma/api-gateway-custom-authorizer/ )。これは非常に簡単です。Google が提供する同じ id_token を使用して、API エンドポイントを認証できます。カスタムオーソライザーは id_token が適切であることを検証し、エンドポイントへのアクセスを許可します。また、この検証が毎回必要にならないように結果をキャッシュします。(これは、この方法で google の id_token を再利用する良いアプローチですか?) これでオーソライザーを使用できます ( https://github.com/prabhatsharma/lambda-custom-auth )

  2. 認証に AWS cognito を使用できます。このために、フェデレーション ID プールを作成し、Google アプリ クライアント ID を cognito コンソールに設定しました。私の /callback/google ラムダ関数では、AWS SDK を使用して identityId、sessionToken、および accessKeyId を取得しています。(ソースコードhttps://github.com/prabhatsharma/lambda-cognito-auth )

    /li>

これで、資格情報を使用して、次のコードを使用してトークンを取得できます

これで、identityId と Token をフロントエンドの reactJS アプリケーションに渡すことができます。

これは、概念を理解するのにほとんど助けが必要ないところです。ブラウザで AWS SDK を使用して AWS リソースにアクセスできるようになりました。でもちょっと待って!!!Gateway 経由で標準の RESTful API を作成した目的は、特定のライブラリに依存せずに標準の JavaScript を使用することではないでしょうか? AWS SDK を直接使用することは、android/ios/unity アプリのより適切なユースケースのように見えます。私のチームの開発者が、この状況でも使用するフロント エンドの標準の JavaScript ライブラリを使用できるようにしたいと考えています。また、エクスポートされた API SDK を API エンドポイントに使用したくなく、フロントエンド アプリを AWS SDK の仕様から完全に切り離したいと考えています。すべてのリクエストに v4 署名を手動で署名するのは冗長な作業です。Cognito を使用して、標準のトークン ベースの API エンドポイント アクセスを使用することはできませんか?

この種の認証のベスト プラクティスは何ですか? 私は正しい方向に考えていますか?

免責事項 - リポジトリ内のコードはまだ使用しないでください。これは進行中の作業であり、まだ製品化の準備ができていません。

0 投票する
1 に答える
364 参照

amazon-web-services - 不要な Webpack エクスターナル

私の環境 (aws-lambda) では、aws-sdk がセットアップされているため、webpack.config に次を追加しました。

ビルドするときに、奇妙なことmodule.exports = aws-sdk;の代わりにそれを設定しているように見えますが、以前は正常に機能していましたが、ランダムに停止しました。アイデアはありますか?module.exports = require('aws-sdk');

(serverless-webpack と webpack を使用)