AWS上に構築されたモバイルアプリケーションを開発しました。 Lambdaサービスは、小規模なサーバーロジックの作成に最適でしたが、これも簡単にスケーラブルです。
ラムダタスクは非常に簡単に設定されました。DynamoDBへのリクエストを実行し、Elasticacheを使用して最も人気のあるリクエストをキャッシュします。 発生した問題は、VPCからAmazonの内部および外部リソースへのアクセスの設定に関連しています。
このケースでは、Elasticacheサービス(VPC内)およびDynamoDB(VPC外)の可用性を確保する必要がありました。 この目標を達成するために、VPCで構造が開発されました。図に示されています。
以下は、AWSコンソールからこのようなVPC作業パターンを作成する方法の手順です。
VPCを構成する
VPCをまだ作成していない場合は、最初に作成する必要があります。 パブリックとプライベートの2つのサブネット(サブネット)を作成します。
2番目の手順は、ルーティングテーブル(ルートテーブル)を作成することです。 デフォルトでは、すでに1つのメインテーブルが作成されており、プライベートテーブルとして機能します。 公開テーブルを作成するためだけに残ります。 作成時には、VPCを指定する必要があります。
サブネット(パブリックおよびプライベート)ごとに、適切なルーティングテーブルを選択します。
次に、ゲートウェイ(インターネットゲートウェイ)を作成します。これは、VPCの外部のすべてのサービスおよび一般的な外部アドレスへのアクセスを提供します。 添付後、VPCへのゲートウェイが作成されました。 また、パブリックサブネットに接続するNATゲートウェイを作成します。
そして、結局のところ、ルーティングテーブルを構成するだけです。
- 作成されたインターネットゲートウェイのパブリックテーブルにルートを作成します。 例:
- 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の開始方法