ElasticacheとDynamoDBを使用してAWS Lambdaから作業する方法

2016年2月以降、AWS LambdaはVirtual Private Cloud内のリソースにアクセスできましたが、デフォルトではすべてのラムダがVPCの外部で機能します。 この機会は比較的最近現れたものであり、それを実装する方法に関する記事はそれほど多くないので、私たちの経験をあなたと共有したいと思います。



AWS上に構築されたモバイルアプリケーションを開発しました。 Lambdaサービスは、小規模なサーバーロジックの作成に最適でしたが、これも簡単にスケーラブルです。



ラムダタスクは非常に簡単に設定されました。DynamoDBへのリクエストを実行し、Elasticacheを使用して最も人気のあるリクエストをキャッシュします。 発生した問題は、VPCからAmazonの内部および外部リソースへのアクセスの設定に関連しています。



このケースでは、Elasticacheサービス(VPC内)およびDynamoDB(VPC外)の可用性を確保する必要がありました。 この目標を達成するために、VPCで構造が開発されました。図に示されています。



VPCブロック図








以下は、AWSコンソールからこのようなVPC作業パターンを作成する方法の手順です。



VPCを構成する

VPCをまだ作成していない場合は、最初に作成する必要があります。 パブリックとプライベートの2つのサブネット(サブネット)を作成します。



2番目の手順は、ルーティングテーブル(ルートテーブル)を作成することです。 デフォルトでは、すでに1つのメインテーブルが作成されており、プライベートテーブルとして機能します。 公開テーブルを作成するためだけに残ります。 作成時には、VPCを指定する必要があります。



サブネット(パブリックおよびプライベート)ごとに、適切なルーティングテーブルを選択します。



次に、ゲートウェイ(インターネットゲートウェイ)を作成します。これは、VPCの外部のすべてのサービスおよび一般的な外部アドレスへのアクセスを提供します。 添付後、VPCへのゲートウェイが作成されました。 また、パブリックサブネットに接続するNATゲートウェイを作成します。



そして、結局のところ、ルーティングテーブルを構成するだけです。





パブリックルーティングテーブル










プライベートルーティングテーブル








Elasticacheのセットアップ



この例では、Elasticacheをプライベートサブネットに接続することを検討してください。 これを行うには、Elasticacheパネルで、プライベートサブネットのグループ(キャッシュサブネットグループ)を作成します。 そして、クラスターを作成するときに、作成されたグループを示します。



結局のところ、VPCのセキュリティグループでグループを検索し(自動的に作成される)、クラスターのポートにルールを追加する(デフォルトではredis-6379; memcached-11211)のは、VPCパネルにのみあります。 例:



セキュリティグループのルール








それがすべて私たちと一緒に飛んでいく方法を確認しましょう。 ラムダ設定で、VPCとプライベートネットワークを選択します。 コードを実行します。



from __future__ import print_function import json import boto3 import decimal import logging import elasticache_auto_discovery from pymemcache.client.hash import HashClient CACHE_ENDPOINTS = 'exaplecache.wjbxgg.cfg.euw1.cache.amazonaws.com:11211' def decimal_default(obj): if isinstance(obj, decimal.Decimal): return float(obj) raise TypeError def lambda_handler(event, context): nodes_endpoints = elasticache_auto_discovery.discover(CACHE_ENDPOINTS) nodes = map(lambda x: (x[1], int(x[2])), nodes_endpoints) memcache_client = HashClient(nodes, timeout=60, connect_timeout=2) table = boto3.resource('dynamodb').Table('Photo') response = table.scan(Limit=20) memcache_client.set('example', json.dumps(response['Items'], default=decimal_default)) cache_elements = memcache_client.get('example') if json.loads(cache_elements) == response['Items']: return "It works!" else: return "Doesn't work"
      
      







そして、発売後、大事な結果が表示されます。

画像



おわりに

VPCの内外でAmazonサービスを使用すると、AWS Lambdaを使用する多くの可能性が広がります。 この記事で紹介するVPCの構成スキームは、VPC内外のその他のサービスへのアクセスを提供するユニバーサルソリューションとして使用できます。



便利なリンク:

VPCのラムダ

vpcとサブネット

Amazon ElastiCacheの開始方法



All Articles