apeescape2.com
  • メイン
  • 投資家と資金調達
  • リモートの台頭
  • 収益と成長
  • Uiデザイン
バックエンド

AWS Lambdaを使用したサービス指向アーキテクチャ:ステップバイステップのチュートリアル

Webアプリケーションを構築する場合、コミットすると、将来的にアプリケーションを支援または妨害する可能性のある多くの選択肢があります。言語、フレームワーク、ホスティング、データベースなどの選択は非常に重要です。

そのような選択の1つは、サービス指向アーキテクチャー(SOA)を使用してサービスベースのアプリケーションを作成するか、従来のモノリシックアプリケーションを作成するかです。これは、スタートアップ、スケールアップ、およびエンタープライズ企業に同様に影響を与える一般的なアーキテクチャ上の決定です。

サービス指向アーキテクチャは、Google、Facebook、Twitter、Instagram、Uberなどの有名なユニコーンやトップテクノロジー企業の多くによって使用されています。このアーキテクチャパターンは大企業では機能するようですが、あなたにとっては機能しますか?



AWS Lambdaを使用したサービス指向アーキテクチャ:ステップバイステップのチュートリアル

AWS Lambdaを使用したサービス指向アーキテクチャ:ステップバイステップのチュートリアル つぶやき

この記事では、サービス指向アーキテクチャーのトピックと、AWS LambdaをPythonと組み合わせて活用して、スケーラブルでコスト効率の高いサービスを簡単に構築する方法を紹介します。これらのアイデアを示すために、Python、AWS Lambda、Amazon S3、およびその他のいくつかの関連ツールとサービスを使用して、単純な画像のアップロードとサイズ変更サービスを構築します。

サービス指向アーキテクチャとは何ですか?

サービス指向アーキテクチャ(SOA)は新しいものではなく、数十年前にルーツがあります。近年、Webに面したアプリケーションに多くの利点を提供するため、パターンとしての人気が高まっています。

本質的に、SOAは、1つの大きなアプリケーションを多くの通信する小さなアプリケーションに抽象化したものです。これは、デカップリング、関心の分離、単一責任アーキテクチャなど、ソフトウェアエンジニアリングのいくつかのベストプラクティスに従います。

SOAの実装は、粒度の点で異なります。機能の広い領域をカバーする非常に少数のサービスから、「」と呼ばれる数十または数百の小さなアプリケーションまでです。 マイクロサービス ' 建築。粒度のレベルに関係なく、SOAの実践者の間で一般的に合意されているのは、それが決して無料の昼食ではないということです。ソフトウェアエンジニアリングの多くのグッドプラクティスと同様に、それは追加の計画、開発、およびテストを必要とする投資です。

AWS Lambdaとは何ですか?

AWS Lambdaは、 アマゾンウェブサービス プラットホーム。 AWS Lambdaを使用すると、Amazonが管理するオンデマンドコンテナで実行されるコードをアップロードできます。 AWS Lambdaは、コードを実行するサーバーのプロビジョニングと管理を管理するため、ユーザーに必要なのは、実行するコードのパッケージセットと、サーバーが実行されるコンテキストを定義するためのいくつかの構成オプションだけです。これらのマネージドアプリケーションは、Lambda関数と呼ばれます。

AWS Lambdaには、2つの主要な操作モードがあります。

非同期/イベント駆動型:

Lambda関数は、非同期モードのイベントに応答して実行できます。 S3、SNSなどのイベントのソースはブロックされず、Lambda関数は、イベントのチェーンの処理パイプラインを確立するなど、さまざまな方法でこれを利用できます。多くの情報ソースがあり、ソースに応じて、イベントはイベントソースからLambda関数にプッシュされるか、AWSLambdaによってイベントがポーリングされます。

同期/要求->応答:

応答を同期的に返す必要があるアプリケーションの場合、Lambdaを同期モードで実行できます。通常、これはAPI Gatewayと呼ばれるサービスと組み合わせて使用​​され、AWS LambdaからエンドユーザーにHTTP応答を返しますが、Lambda関数はAWSLambdaへの直接呼び出しを介して同期的に呼び出すこともできます。

AWS Lambda関数は、ハンドラーの操作に必要な依存関係に加えて、ハンドラーコードを含むzipファイルとしてアップロードされます。アップロードされると、AWS Lambdaは必要に応じてこのコードを実行し、必要に応じてサーバーの数を0から数千にスケーリングします。コンシューマーが追加の介入を行う必要はありません。

ラムダはSOAの進化として機能します

基本的なSOAは、この記事の前半で説明した方法でアプリケーションに利益をもたらすために、コードベースを小さなアプリケーションに構造化する方法です。このことから、これらのアプリケーション間の通信方法に焦点が当てられます。イベント駆動型SOA(別名SOA 2.0)を使用すると、SOA 1.0の従来の直接的なサービス間通信だけでなく、変更を伝達するためにイベントをアーキテクチャ全体に伝播することもできます。

イベント駆動型アーキテクチャは、疎結合と構成可能性を自然に促進するパターンです。イベントを作成して対応することにより、サービスをアドホックに追加して既存のイベントに新しい機能を追加したり、複数のイベントを構成してより豊富な機能を提供したりできます。

AWS Lambdaは、SOA2.0アプリケーションを簡単に構築するためのプラットフォームとして使用できます。 Lambda関数をトリガーする方法はたくさんあります。 Amazon SNSを使用した従来のメッセージキューアプローチから、Amazon S3にアップロードされるファイルによって作成されるイベント、またはAmazonSESで送信されるEメールまで。

シンプルな画像アップロードサービスの実装

AWSスタックを利用して画像をアップロードおよび取得するためのシンプルなアプリケーションを構築します。このサンプルプロジェクトには、2つのラムダ関数が含まれます。1つは単純なWebフロントエンドを提供するために使用される要求->応答モードで実行され、もう1つはアップロードされた画像を検出してサイズを変更します。

最初のラムダ関数は、アップロードされた画像を格納するS3バケットでトリガーされたファイルアップロードイベントに応答して非同期で実行されます。提供された画像を取得し、400x400の画像に収まるようにサイズを変更します。

他のラムダ関数はHTMLページを提供し、ユーザーが他のラムダ関数によってサイズ変更された画像を表示する機能と、画像をアップロードするためのインターフェイスの両方を提供します。

AWSの初期構成

始める前に、IAMやS3などの必要なAWSサービスを設定する必要があります。これらは、WebベースのAWSコンソールを使用して設定されます。ただし、ほとんどの設定は、後で使用するAWSコマンドラインユーティリティを使用して行うこともできます。

S3バケットの作成

S3(またはSimple Storage Service)は、あらゆるデータの信頼性が高く費用効果の高いストレージを提供するAmazonオブジェクトストアサービスです。 S3を使用して、アップロードされる画像と、処理した画像のサイズ変更されたバージョンを保存します。

S3サービスは、AWSコンソールの[Storage&ContentDelivery]サブセクションの[Services]ドロップダウンにあります。バケットを作成するときに、バケット名とリージョンの両方を入力するように求められます。ユーザーに近いリージョンを選択すると、S3はレイテンシーとコスト、およびいくつかの規制要因を最適化できます。この例では、「USStandard」リージョンを選択します。この同じリージョンは、後でAWSLambda関数をホストするために使用されます。

S3バケット名は一意である必要があるため、選択した名前を使用する場合は、新しい一意の名前を選択する必要があることに注意してください。

このサンプルプロジェクトでは、「test-upload」と「test-resized」という名前の2つのストレージバケットを作成します。 「test-upload」バケットは、画像をアップロードし、アップロードされた画像を処理およびサイズ変更する前に保存するために使用されます。サイズが変更されると、画像は「テストサイズ変更」バケットに保存され、アップロードされた生の画像が削除されます。

S3アップロード権限

デフォルトでは、S3パーミッションは制限的であり、外部ユーザーまたは非管理ユーザーでさえ、バケット上のパーミッションまたはオブジェクトの読み取り、書き込み、更新、または削除を許可しません。これを変更するには、AWSバケットのアクセス許可を管理する権限を持つユーザーとしてログインする必要があります。

AWSコンソールを使用している場合、バケットを名前で選択し、画面の右上にある[プロパティ]ボタンをクリックして、折りたたまれた[アクセス許可]セクションを開くと、アップロードバケットのアクセス許可を表示できます。

匿名ユーザーがこのバケットにアップロードできるようにするには、バケットポリシーを編集して、アップロードを許可する特定の権限を許可する必要があります。これは、JSONベースの構成ポリシーによって実現されます。これらの種類のJSONポリシーは、IAMサービスと組み合わせてAWS全体で広く使用されています。 [バケットポリシーの編集]ボタンをクリックしたら、次のテキストを貼り付けて[保存]をクリックし、公開画像のアップロードを許可します。

{ 'Version': '2008-10-17', 'Id': 'Policy1346097257207', 'Statement': [ { 'Sid': 'Allow anonymous upload to /', 'Effect': 'Allow', 'Principal': { 'AWS': '*' }, 'Action': 's3:PutObject', 'Resource': 'arn:aws:s3:::test-upload/*' } ] }

これを行った後、バケットに画像をアップロードすることで、バケットポリシーが正しいことを確認できます。次のcURLコマンドでうまくいきます。

curl https://test-upload.s3.amazonaws.com -F 'key=test.jpeg' -F ' [email protected] '

200範囲の応答が返されると、アップロードバケットの構成が正常に適用されたことがわかります。これで、S3バケットが(ほとんど)構成されているはずです。画像アップロードイベントをサイズ変更関数の呼び出しに接続するために、後でコンソールでこのサービスに戻ります。

LambdaのIAM権限

Lambdaロールはすべて、パーミッションコンテキスト内で実行されます。この場合、IAMサービスによって定義された「ロール」です。このロールは、Lambda関数が呼び出し中に持つすべての権限を定義します。このサンプルプロジェクトの目的のために、両方のLambda関数間で使用されるジェネリックロールを作成します。ただし、実稼働シナリオでは、セキュリティの悪用が定義されたアクセス許可コンテキストのみに分離されるように、アクセス許可の定義をより細かくすることをお勧めします。

IAMサービスは、[サービス]ドロップダウンの[セキュリティとID]サブセクションにあります。 IAMサービスは、AWSサービス全体のアクセスを管理するための非常に強力なツールであり、同様のツールに慣れていない場合、提供されるインターフェイスは最初は少し圧倒される可能性があります。

IAMダッシュボードページが表示されると、ページの左側に「ロール」サブセクションが表示されます。ここから、「新しい役割の作成」ボタンを使用して、役割の権限を定義するためのマルチステップウィザードを表示できます。一般的な権限の名前として「lambda_role」を使用しましょう。名前定義ページから続行すると、役割の種類を選択するオプションが表示されます。 S3アクセスのみが必要なため、「AWS Service Roles」をクリックし、選択ボックス内で「AWSLambda」を選択します。この役割に添付できるポリシーのページが表示されます。 「AmazonS3FullAccess」ポリシーを選択し、次の手順に進んで、作成する役割を確認します。

データベーステーブルの設計にはどのようなタスクが関係していますか?

作成されたロールの名前とARN(Amazonリソース名)に注意することが重要です。これは、関数の呼び出しに使用されるロールを識別するために新しいLambda関数を作成するときに使用されます。

注意: AWS Lambdaは、ロギングサービスであるAWSCloudwatchの関数呼び出しからのすべての出力を自動的にログに記録します。実稼働環境で推奨されるこの機能が必要な場合は、Cloudwatchログストリームへの書き込み権限をこのロールのポリシーに追加する必要があります。

コード!

概要概要

これで、コーディングを開始する準備が整いました。この時点で、「awscli」コマンドを設定したと想定します。まだお持ちでない場合は、次の手順に従ってください。 https://aws.amazon.com/cli/ コンピューターにawscliを設定します。

注意: これらの例で使用されているコードは、画面が見やすいように短くなっています。より完全なバージョンについては、次のリポジトリにアクセスしてください。 https://github.com/gxx/aws-lambda-python/ 。

まず、プロジェクトのスケルトン構造を設定しましょう。

aws-lambda-python/ - image_list/ - handler.py - list.html - Makefile - requirements.txt - image_resize/ - handler.py - resize.py - Makefile - requirements.txt - .pydistutils.cfg

構造体には、ラムダ関数ごとに1つずつ、合計2つのサブディレクトリがあります。これらのそれぞれに、共通のhandler.py、Makefile、およびrequirements.txtファイルがあります。 handler.pyファイルには、各ラムダ関数の呼び出しを呼び出すメソッドが含まれ、関数のエントリポイントと見なすことができます。 Requirements.txtファイルには依存関係のリストが含まれているため、要件を簡単に指定および更新できます。最後に、awscliと対話するための簡単なメカニズムを提供するために使用するMakefileコマンド。これにより、ラムダ関数の作成と更新のプロセスがはるかに簡単になります。

プロジェクトディレクトリのルートに.pydistutils.cfgファイルがあります。このファイルは、HomebrewでPythonを使用している場合に必要です。 Lambda関数(次のセクションで説明)をデプロイする方法のため、このファイルが必要です。詳細については、リポジトリを参照してください。

画像ラムダ関数のサイズ変更

コード

resize_image関数から始めて、Wand==0.4.2を保存することにより、画像処理ライブラリであるWand依存関係をフリーズします。要件.txtに。これは、image_resizeラムダ関数の唯一の依存関係になります。 resize.pyのresize_image関数は、Wandライブラリの画像リソースを処理し、指定された幅と高さのパラメーターに従ってサイズを変更する必要があります。サイズ変更中の画像を保持するために、元の画像の画像比率を維持しながら、指定された幅と高さに収まるように画像サイズを縮小する「最適な」サイズ変更アルゴリズムを使用します。

def resize_image(image, resize_width, resize_height): ... original_ratio = image.width / float(image.height) resize_ratio = resize_width / float(resize_height) # We stick to the original ratio here, regardless of what the resize ratio is if original_ratio > resize_ratio: # If width is larger, we base the resize height as a function of the ratio of the width resize_height = int(round(resize_width / original_ratio)) else: # Otherwise, we base the width as a function of the ratio of the height resize_width = int(round(resize_height * original_ratio)) if ((image.width - resize_width) + (image.height - resize_height)) <0: filter_name = 'mitchell' else: filter_name = 'lanczos2' image.resize(width=resize_width, height=resize_height, filter=filter_name, blur=1) return image

それが邪魔にならないように、アップロードされた画像S3によって生成されたイベントを受け入れ、それをresize_imageに渡すにはハンドラー関数が必要です。関数、および結果のサイズ変更された画像を保存します。

from __future__ import print_function import boto3 from wand.image import Image from resize import resize_image def handle_resize(event, context): # Obtain the bucket name and key for the event bucket_name = event['Records'][0]['s3']['bucket']['name'] key_path = event['Records'][0]['s3']['object']['key'] response = boto3.resource('s3').Object(bucket_name, key_path).get() # Retrieve the S3 Object # Perform the resize operation with Image(blob=response['Body'].read()) as image: resized_data = resize_image(image, 400, 400).make_blob() # And finally, upload to the resize bucket the new image s3_connection.Object('test-resized', key_path).put(ACL='public-read', Body=resized_data) # Finally remove, as the bucket is public and we don't want just anyone dumping the list of our files! s3_object.delete()

展開

コードが完成したら、新しいLambda関数としてAmazonLambdaにアップロードする必要があります。ここで、ディレクトリ構造に追加されたMakefileが機能します。このMakefileは、作成しているLambda関数定義をデプロイするために使用されます。

ROLE_ARN = arn:aws:iam::601885388019:role/lambda_role FUNCTION_NAME = ResizeImage REGION = us-west-1 TIMEOUT = 15 MEMORY_SIZE = 512 ZIPFILE_NAME = image_resize.zip HANDLER = handler.handle_resize clean_pyc : find . | grep .pyc$ | xargs rm install_deps : pip install -r requirements.txt -t . build : install_deps clean_pyc zip $(ZIPFILE_NAME) -r * create : build aws lambda create-function --region $(REGION) --function-name $(FUNCTION_NAME) --zip-file fileb://$(ZIPFILE_NAME) --role $(ROLE_ARN) --handler $(HANDLER) --runtime python2.7 --timeout $(TIMEOUT) --memory-size $(MEMORY_SIZE) update : build aws lambda update-function-code --region $(REGION) --function-name $(FUNCTION_NAME) --zip-file fileb://$(ZIPFILE_NAME) --publish

このMakefileの主な機能は、「作成」と「更新」です。これらの関数は、最初に現在のディレクトリをパッケージ化します。これは、Lambda関数を実行するために必要なすべてのコードを表します。次に、requirements.txtで指定された依存関係ファイルは、パッケージ化される現在のサブディレクトリにインストールされます。パッケージ化の手順では、ディレクトリの内容を圧縮して、後で「awscli」コマンドを使用してアップロードします。 Makefileは、他のLambda関数定義で使用するように適合させることができます。

ユーティリティMakefileで、イメージの作成/更新に必要ないくつかの変数を定義します。 Makefileコマンドが正しく機能するように、必要に応じてこれらを構成します。

  • ROLE_ARN:これは、Lambda関数を実行する役割を識別するAmazonリソース名です。
  • FUNCTION_NAME:作成/更新しているLambda関数の名前。
  • REGION:Lambda関数が作成/更新される領域。
  • TIMEOUT:Lambda呼び出しが強制終了されるまでの秒単位のタイムアウト。
  • MEMORY_SIZE:Lambda関数が呼び出されたときにアクセスできるメモリのサイズ(メガバイト単位)。
  • ZIPFILE_NAME:Lambda関数コードと依存関係を含むzipパッケージの名前。
  • HANDLER:ハンドラー関数のドット表記での絶対インポートパス。

構成したら、make createを実行しますコマンドは、次の出力のようなものを生成します。

$ make create pip install -r requirements.txt -t . ... find . | grep .pyc| xargs rm zip image_resize.zip -r * ... aws lambda create-function --region ap-northeast-1 --function-name ResizeImage2 --zip-file fileb://image_resize.zip --role arn:aws:iam::11111111111:role/lambda_role --handler handler.handle_resize --runtime python2.7 --timeout 15 --memory-size 512 { 'CodeSha256': 'doB1hsujmZnxZHidnLKP3XG2ifHM3jteLEBvsK1G2nasKSo=', 'FunctionName': 'ResizeImage', 'CodeSize': 155578, 'MemorySize': 512, 'FunctionArn': 'arn:aws:lambda:us-west-1:11111111111:function:ResizeImage', 'Version': '$LATEST', 'Role': 'arn:aws:iam::11111111111:role/lambda_role', 'Timeout': 15, 'LastModified': '2016-01-10T11:11:11.000+0000', 'Handler': 'handler.handle_resize', 'Runtime': 'python2.7', 'Description': '' }

テスト

作成コマンドを実行すると、画像のサイズ変更機能を使用できるようになりますが、イベントを受信するためにS3バケットに接続されていません。 AWSコンソールを介して関数をテストし、関数がS3ファイルのアップロードイベントを適切に処理することを確認できます。 [サービス]ドロップダウンの[計算]サブセクションにあるAWSLambdaダッシュボードで、作成した関数の名前を選択します。このLambda関数の詳細ページには、「テストイベントの構成」というラベルの付いたオプションを含む「アクション」というラベルの付いたドロップダウンがあります。

これをクリックするとモーダルが開き、テストイベントといくつかのサンプルテンプレートを指定できます。 「S3Put」の例を選択し、バケット名の記載を、設定されているバケットの名前に置き換えます。これが設定されると、Lambda関数のページの[テスト]ボタンを使用すると、以前に設定されたイベントが実際に発生したかのようにLambda関数が呼び出されます。

エラースタックトレースまたはログメッセージを監視するために、Cloudwatchでログストリームを表示できます。 Lambda関数が作成されると同時に、新しいロググループが作成されます。これらのログストリームは便利であり、他のサービスにパイプすることができます。

S3バケットイベントへの接続

S3ダッシュボードに戻り、[プロパティ]メニューにある折りたたまれた[イベント]セクションを展開して、[イベント通知]フォームを表示します。入力する必須フィールドは、「イベント」と「送信先」の入力です。 「イベント」から「オブジェクト作成(すべて)」イベントを選択します。これにより、アップロードバケットにオブジェクトを作成するすべてのイベントをインターセプトできます。 「送信先」入力には、「ラムダ関数」ラジオボタンを選択します。オプションとして設定した「ResizeImage」ラムダ関数を含むドロップダウンを含む新しいセクションが表示されます。 「保存」をクリックすると、「オブジェクト作成」イベントはすべて、「ResizeImage」Lambda関数の呼び出しへの入力としてルーティングされます。

これで、アプリケーションのコア機能ができました。別のcURLテストを実行して、すべてが期待どおりに機能していることを確認しましょう。 cURLを使用して画像をS3バケットにアップロードし、画像がサイズ変更バケットにアップロードされていることを手動で確認します。

curl https://test-upload.s3.amazonaws.com -F 'key=test.jpeg' -F ' [email protected] '

このコマンドを実行すると、Lambda関数がすでに「ウォームアップ」されているかどうかに応じて、サイズ変更されたイメージが50〜1000ミリ秒後に「test-resized」バケットに作成されます。

リスト画像ラムダ関数

コード

ListImage Lambda関数は、サイズ変更された画像のリストを取得し、ユーザーのHTMLページに表示します。このHTMLページは、ユーザーが独自の画像をアップロードするための機能も提供します。 Jinja2は、テンプレート定義からHTMLをレンダリングする関数で使用されます。以前と同様に、これらの要件はrequirements.txtで指定されています。ファイル。

from __future__ import print_function import os import boto3 from jinja2 import Environment from jinja2 import FileSystemLoader def _render_template(image_urls): env = Environment(loader=FileSystemLoader(os.path.abspath(os.path.dirname(__file__)))) template = env.get_template('list.html') rendered_template = template.render(image_urls=image_urls) return rendered_template def handle_list_image(event, context): bucket = boto3.resource('s3').Bucket('test-resized') image_summaries = sorted((image_summary for image_summary in bucket.objects.all()), key=lambda o: o.last_modified) image_urls = [] for summary in image_summaries: image_urls.append( boto3.client('s3').generate_presigned_url( 'get_object', Params={ 'Bucket': summary.bucket_name, 'Key': summary.key } ) ) return {'htmlContent': _render_template(image_urls)} List Images var uploadImage = (function () { var inProgress = false; return function () { if (inProgress) { return; } inProgress = true; var formData = new FormData(); var fileData = $('#image-file').prop('files')[0]; formData.append('key', parseInt(Math.random() * 1000000)); formData.append('acl', 'public-read'); formData.append('file', fileData); $.ajax({ url: 'https://test-upload.s3.amazonaws.com/', type: 'POST', data: formData, processData: false, contentType: false, success: function (data) { window.location.reload(); } }); } })(); .image__container { float: left; width: 30%; margin-left: 2.5%; margin-right: 2.5%; max-width: 400px; } {% for image_url in image_urls %} {% endfor %}

ここでも、前のMakefileを変更し、createコマンドを使用してラムダ関数をデプロイできます。

ゲートウェイAPI

ImageList Lambda関数は完了していますが、どのユーザーにも提供できません。これは、Lambda関数は、別のサービスからのイベントへの応答として、またはプログラムでのみ呼び出すことができるためです。ここで、Amazon AWS APIGatewayサービスが導入されます。 API Gatewayは、「アプリケーションサービス」サブセクションにあります。

API Gatewayは、エンドポイントをリソースとメソッドのセット、本質的にはRESTインターフェースとしてモデル化する方法です。 API Gatewayは、リクエストを検証および変換する機能を提供するだけでなく、スロットル/レート制限リクエストの提供などの他の機能を実行します。

API Gatewayダッシュボードから、ListImage関数を提供するための新しいAPIを作成します。名前と説明はお好みに合わせて設定できます。作成したら、新しいAPIの名前をクリックして、APIの詳細にアクセスします。ルートURL「/」の新しいリソースを作成します。このURLは、HTMLページを提供するために使用されます。

ルートリソースページの詳細を表示しながら、GETメソッドを追加します。 「IntegrationType」を「LambdaFunction」に設定し、「LambdaRegion」を「us-west-1」または選択したリージョンに設定して、ListImageLambda関数の名前を入力します。

応答をHTML出力にマッピングする前に、この応答をコンテンツタイプにマッピングすることに加えて、サーバーからの応答のスキーマを定義する「モデル」を定義する必要があります。 APIの「モデル」セクションを選択し、「作成」をクリックして新しいモデルを作成します。モデルに「HTML」という名前を付け、コンテンツタイプを「text / html」にして、スキーマを次のように定義します。

{ '$schema': 'http://json-schema.org/draft-04/schema#', 'title' : 'HTML', 'type' : 'object' }

APIダッシュボードに戻り、作成したリソースを選択して、「統合応答」セクションに移動します。このセクションでは、Lambda関数から応答を受け取った後、応答を最終ステップにパイプする前に処理する変換を定義します。

「マッピングテンプレート」セクションを開き、「text / html」の新しい「コンテンツタイプ」を追加します。古い「コンテンツタイプ」を同時に削除します。右側で、ドロップダウンを「出力パススルー」から「マッピングテンプレート」に変更します。これにより、API Gatewayで受け入れられる生のJSONを変更し、代わりに返されたデータの「htmlContent」プロパティ内のHTMLコンテンツを使用できるようになります。マッピングテンプレートには、テンプレートとして「$ input.htmlContent」を指定します。最後に、「Response Modelsfor200」から「application / json」を削除し、代わりに「text / html」を追加して、「MethodResponse」セクションを変更します。

APIのダッシュボードに戻ると、ページの左上に「DeployAPI」というラベルの付いたボタンがあります。このボタンをクリックして、指定したリソース、メソッド、モデル、およびマッピングを使用してAPIを更新または作成します。これが完了すると、選択された展開ステージ(デフォルトではステージング)のURLが表示されます。最後に、例が完成しました!いくつかのファイルをアップロードして、サイズ変更された画像をテストおよび表示できます。

まとめ

AWSは大規模なサービスであり、すぐになくなることはありません。ベンダーロックインは常に注意が必要ですが、AWS Lambdaは、豊富な補助構成オプションを備えた比較的薄いサービスを提供します。 AWSが提供するサービスを活用して、簡単にスケーラブルで保守可能なアプリケーションを実装すると、AWSプラットフォームを使用する最大のメリットが得られます。 AWS Lambdaは、非常に多くの消費者が使用するエンタープライズグレードのプラットフォームに裏打ちされた、エレガントでスケーラブルで費用効果の高いソリューションを提供します。 「サーバーレス」アプリケーションは未来の道だと思います。以下のコメントであなたの考えを教えてください。

AureliaとAngular2 —コードの比較

Webフロントエンド

AureliaとAngular2 —コードの比較
ProjectLombokで無脂肪のJavaコードを書く

ProjectLombokで無脂肪のJavaコードを書く

バックエンド

人気の投稿
Go言語に対する4つの批判
Go言語に対する4つの批判
SVGアニメーションのハウツーガイド
SVGアニメーションのハウツーガイド
説得力のあるデザイン:高度な心理学を効果的に使用する
説得力のあるデザイン:高度な心理学を効果的に使用する
eコマース101:ショッピングカートの放棄を理解する(インフォグラフィック付き)
eコマース101:ショッピングカートの放棄を理解する(インフォグラフィック付き)
開発者向けAndroidM(Android 6.0):正しい方向への進化の一歩
開発者向けAndroidM(Android 6.0):正しい方向への進化の一歩
 
フロントエンドコードのMonoreposガイド
フロントエンドコードのMonoreposガイド
Terraform AWSクラウド:健全なインフラストラクチャ管理
Terraform AWSクラウド:健全なインフラストラクチャ管理
ブロックチェーンテクノロジーの説明:ビットコインへの電力供給
ブロックチェーンテクノロジーの説明:ビットコインへの電力供給
サブスクリプションビジネスモデルに疲れた
サブスクリプションビジネスモデルに疲れた
同じマシンでのMySQLマスタースレーブレプリケーション
同じマシンでのMySQLマスタースレーブレプリケーション
人気の投稿
  • 接続性と閉鎖の原則は、それを最もよく示しています
  • Ruby onRailsはどのように機能しますか
  • デザインドキュメントの書き方
  • 資本予算は表示するように設計されています
  • 最高のパフォーマンスのクオンツヘッジファンド
  • ccorpとして課税されるllc
  • AfterEffectsでビデオを作成する方法
カテゴリー
Uiデザイン エンジニアリング管理 アジャイルタレント 人とチーム Kpiと分析 リモートの台頭 モバイル 設計プロセス 仕事の未来 分散チーム

© 2021 | 全著作権所有

apeescape2.com