このドキュメントでは、アプリケーション (REST API) を
AWS Lambda および
AWS API Gateway にデプロイする際の前提条件と手順について説明します。
「AWS Lambda を使用することで、サーバーのプロビジョニングや管理をすることなく、コードを実行できます。課金は実際に使用したコンピューティング時間に対してのみ発生し、コードが実行されていないときには料金も発生しません。」 - 引用: https://aws.amazon.com/lambda/
「Amazon API Gateway は、完全マネージド型サービスで、開発者はこれを利用することにより、どんな規模であっても、簡単に API の作成、配布、保守、監視、保護が行えます。」 - 引用: https://aws.amazon.com/api-gateway
サーバーレスプラットフォームにデプロイする主な利点は次のとおりです:
- インフラストラクチャについて考える必要がありません。
- Web サーバーの管理、設定、インストールが不要です。
- サーバーのレンタルや購入が不要です。
- 24 時間 365 日稼動させても (ほぼ) 無料です(アプリケーションを使用している場合のみ支払います)。
- AWS Lambda を使用して、クラウドで実行するコードをデプロイします。
- AWS API Gateway を使用して、REST サービスをデプロイします。
- AWS Cloudfront を CDN のために使用します。
- AWS S3 をストレージのために使用します。
- AWS IAM を資格情報のために使用します。
- Swagger 定義を使用して、アプリケーション用に生成する API を記述します。
-
GeneXus Java ジェネレーターのみ (サポートされる最新の JDK バージョン: JDK11)
- マルチメディアコンテンツの考慮事項
- Image、Audio、Video、BlobFile データタイプを使用する場合は、[ Storage Provider ] プロパティを使用する必要があります。これは、いずれのアプリマルチメディアも Amazon S3 などの外部 URL から提供する必要があるためです。
- FileSystem を使用してコンテンツを提供することはできません: Blob データタイプのファイル、Excel ファイル、PDF レポートへの読み取り/書き込みアクセス
- 一時的な制限:
- 1 つの AWS リージョンごとに最大 600 個のサービスをデプロイできます。
- 注意点
- DBMS 接続プールはサーバーレスでは機能しません。
- これは、サーバーレスが要求ごとに 1 つの Lambda 関数を実行するためです。そのため、すべての Lambda 実行で DB プールが初期化されます。したがって、200 の要求を同時に受信した場合、200 の Lambda が起動され、DB への 200 の接続が開かれます。
- AWS サーバーレスインフラストラクチャを作成します。リンク
- [ Generate OpenAPI interface ] プロパティがジェネレーターレベルで Yes に設定されていることと、 [ OpenAPI version ] プロパティが OpenAPI 3.0 に設定されていることを確認します。
- GeneXus Java アプリケーションをリビルドします。
- [ アプリケーションをデプロイ ] を使用して、デプロイ対象のメインオブジェクトを選択します。スマート デバイス アプリケーションのメインオブジェクトか API オブジェクトである必要があります。
- [ ターゲット ] ドロップダウンから [ AWS Serverless Deploy ] を選択します。
- デプロイに必要なプロパティを入力します (手順 1 のスタックの出力から情報を取得):
- AWS Access Key Id
- AWS Secret Access Key
- AWS Default Region
- IAM Role Name
- Application Name
- Stage Name
- [ デプロイ ] をクリックします。
これで完了です。
最後の手順で、GeneXus により最終 URL が印刷されます。
これを SmartDevices ジェネレーターの
[ Services URL ] プロパティに使用するか、API オブジェクトに直接使用できます。
重要な注記:
デプロイした AWS Lambda 関数がデータベースにアクセスできるようにする
必要があります (同じ VPC およびセキュリティグループに属している必要があります)。そのためには、AWS Lambda 関数コンソールで手動で設定する必要があります。
AWS Lambda は JDK11 までサポートします。JDK11 (以前のバージョン) でコンパイルするか、任意の JDK を使用して [ Compiler Options ] プロパティを -source 1.8 -target 1.8 に設定する必要があります。
com/kbaux/GXApplication has been compiled by a more recent version of the Java Runtime (class file version 61.0), this version of the Java Runtime only recognizes class file versions up to 55.0","errorType":"java.lang.UnsupportedClassVersionError
GeneXus 17 Upgrade 7 以降
https://aws.amazon.com/api-gateway/pricing/ (2018 年 9 月時点: 「Amazon API Gateway の無料利用枠では、API が受信する月間 API コール数 100 万件が最大 12 か月間ご利用になれます。」)
https://aws.amazon.com/lambda/pricing/ (2018 年 9 月時点: 「Lambda の無料利用枠には、1 か月に 1,000,000 件の無料リクエストおよび 400,000 GB-秒のコンピューティング時間が含まれます。」)
Serverless computing - The next evolution of Cloud Computing by Gonzalo Gallotti (#GX27 に掲載、スペイン語のみ、30 分)
コマンド ライン プロシージャーを AWS Lambda に関数としてデプロイする方法