Cookie の設定を選択する

当社は、当社のサイトおよびサービスを提供するために必要な必須 Cookie および類似のツールを使用しています。当社は、パフォーマンス Cookie を使用して匿名の統計情報を収集することで、お客様が当社のサイトをどのように利用しているかを把握し、改善に役立てています。必須 Cookie は無効化できませんが、[カスタマイズ] または [拒否] をクリックしてパフォーマンス Cookie を拒否することはできます。

お客様が同意した場合、AWS および承認された第三者は、Cookie を使用して便利なサイト機能を提供したり、お客様の選択を記憶したり、関連する広告を含む関連コンテンツを表示したりします。すべての必須ではない Cookie を受け入れるか拒否するには、[受け入れる] または [拒否] をクリックしてください。より詳細な選択を行うには、[カスタマイズ] をクリックしてください。

チュートリアル: Amazon VPC の MemoryDB にアクセスする Lambda 関数の設定

フォーカスモード
チュートリアル: Amazon VPC の MemoryDB にアクセスする Lambda 関数の設定 - Amazon MemoryDB

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

このチュートリアルの学習内容は次のとおりです。

  • デフォルトの us-east-1 リージョンの Amazon Virtual Private Cloud (Amazon VPC) に MemoryDB クラスターを作成します。

  • クラスターにアクセスするための Lambda 関数を作成します。Lambda 関数を作成する際には、Lambda 関数で VPC 内のリソースにアクセスできるように、Amazon VPC 内のサブネット ID と VPC セキュリティグループを指定します。このチュートリアルでは、例示のため、この Lambda 関数で UUID の生成、クラスターへの書き込み、クラスターからの取得を行います。

  • Lambda 関数を手動で呼び出し、この関数が VPC 内のクラスターにアクセスしたことを確認します。

  • このチュートリアルに設定された Lambda 関数、クラスター、IAM ロールをクリーンアップします。

ステップ 1: クラスターを作成する

クラスターを作成するには、次のステップに従います。

クラスターを作成する

このステップでは、 AWS Command Line Interface (CLI) を使用して、アカウントの us-east-1 リージョンのデフォルトの Amazon VPC にクラスターを作成します。MemoryDB コンソールまたは API を使用してクラスターを作成する方法については、「ステップ 2: クラスターを作成する」を参照してください。

aws memorydb create-cluster --cluster-name cluster-01 --engine-version 7.0 --acl-name open-access \ --description "MemoryDB IAM auth application" \ --node-type db.r6g.large

[ステータス] フィールドの値が CREATING に設定されていることに注意してください。MemoryDB がクラスターの作成を完了するまで、数分かかる場合があります。

クラスターエンドポイントのコピー

describe-clusters コマンドを使用して MemoryDB がクラスターの作成を完了したことを確認します。

aws memorydb describe-clusters \ --cluster-name cluster-01

出力に表示されたクラスターエンドポイントアドレスをコピーします。Lambda 関数のデプロイパッケージを作成するときに、このアドレスが必要になります。

IAM ロールを作成する

  1. アカウントが新しいロールを引き継ぐことを許可するロール用の IAM 信頼ポリシードキュメントを以下に示すように作成します。ポリシーを trust-policy.json というファイルに保存します。このポリシーの account_id 123456789012 は account_id に置き換えてください。

    { "Version": "2012-10-17", "Statement": [{ "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::123456789012:root" }, "Action": "sts:AssumeRole" }, { "Effect": "Allow", "Principal": { "Service": "lambda.amazonaws.com" }, "Action": "sts:AssumeRole" }] }
  2. 以下に示すように、IAM ポリシードキュメントを作成します。ポリシーを policy.json というファイルに保存します。このポリシーの account_id 123456789012 は account_id に置き換えてください。

    { "Version": "2012-10-17", "Statement": [ { "Effect" : "Allow", "Action" : [ "memorydb:Connect" ], "Resource" : [ "arn:aws:memorydb:us-east-1:123456789012:cluster/cluster-01", "arn:aws:memorydb:us-east-1:123456789012:user/iam-user-01" ] } ] }
  3. IAM ロールを作成します。

    aws iam create-role \ --role-name "memorydb-iam-auth-app" \ --assume-role-policy-document file://trust-policy.json
  4. IAM ポリシーを作成します。

    aws iam create-policy \ --policy-name "memorydb-allow-all" \ --policy-document file://policy.json
  5. IAM ポリシーをロールにアタッチします。この policy-arn の account_id 123456789012 を account_id に置き換えてください。

    aws iam attach-role-policy \ --role-name "memorydb-iam-auth-app" \ --policy-arn "arn:aws:iam::123456789012:policy/memorydb-allow-all"

アクセスコントロールリスト (ACL) を作成します

  1. IAM を有効にしている新しいユーザーを作成します。

    aws memorydb create-user \ --user-name iam-user-01 \ --authentication-mode Type=iam \ --access-string "on ~* +@all"
  2. ACL を作成し、クラスターにアタッチします。

    aws memorydb create-acl \ --acl-name iam-acl-01 \ --user-names iam-user-01 aws memorydb update-cluster \ --cluster-name cluster-01 \ --acl-name iam-acl-01

ステップ 2: Lambda 関数を作成する

Lambda 関数を作成するには、以下の手順を実行します。

デプロイパッケージの作成

このチュートリアルでは、Lambda 関数のコード例を Python で示します。

Python

次の例の Python コードでは、MemoryDB クラスターに対して項目の読み取り/書き込みを行います。コードを app.py という名前のファイルに保存します。コード内の cluster_endpoint 値を、ステップ 1 でコピーしたエンドポイントアドレスに必ず置き換えてください。

from typing import Tuple, Union from urllib.parse import ParseResult, urlencode, urlunparse import botocore.session import redis from botocore.model import ServiceId from botocore.signers import RequestSigner from cachetools import TTLCache, cached import uuid class MemoryDBIAMProvider(redis.CredentialProvider): def __init__(self, user, cluster_name, region="us-east-1"): self.user = user self.cluster_name = cluster_name self.region = region session = botocore.session.get_session() self.request_signer = RequestSigner( ServiceId("memorydb"), self.region, "memorydb", "v4", session.get_credentials(), session.get_component("event_emitter"), ) # Generated IAM tokens are valid for 15 minutes @cached(cache=TTLCache(maxsize=128, ttl=900)) def get_credentials(self) -> Union[Tuple[str], Tuple[str, str]]: query_params = {"Action": "connect", "User": self.user} url = urlunparse( ParseResult( scheme="https", netloc=self.cluster_name, path="/", query=urlencode(query_params), params="", fragment="", ) ) signed_url = self.request_signer.generate_presigned_url( {"method": "GET", "url": url, "body": {}, "headers": {}, "context": {}}, operation_name="connect", expires_in=900, region_name=self.region, ) # RequestSigner only seems to work if the URL has a protocol, but # MemoryDB only accepts the URL without a protocol # So strip it off the signed URL before returning return (self.user, signed_url.removeprefix("https://")) def lambda_handler(event, context): username = "iam-user-01" # replace with your user id cluster_name = "cluster-01" # replace with your cache name cluster_endpoint = "clustercfg.cluster-01.xxxxxx.memorydb.us-east-1.amazonaws.com" # replace with your cluster endpoint creds_provider = MemoryDBIAMProvider(user=username, cluster_name=cluster_name) redis_client = redis.Redis(host=cluster_endpoint, port=6379, credential_provider=creds_provider, ssl=True, ssl_cert_reqs="none") key='uuid' # create a random UUID - this will be the sample element we add to the cluster uuid_in = uuid.uuid4().hex redis_client.set(key, uuid_in) result = redis_client.get(key) decoded_result = result.decode("utf-8") # check the retrieved item matches the item added to the cluster and print # the results if decoded_result == uuid_in: print(f"Success: Inserted {uuid_in}. Fetched {decoded_result} from MemoryDB.") else: raise Exception(f"Bad value retrieved. Expected {uuid_in}, got {decoded_result}") return "Fetched value from MemoryDB"

このコードは Python redis-py ライブラリを使用してアイテムをクラスターに格納し、取得します。このコードでは、cachetools を使用して、生成された IAM 認証トークンを 15 分間キャッシュします。redis-py および cachetools を含むデプロイパッケージを作成するには、次のステップを実行します。

app.py ソースコードファイルを含むプロジェクトディレクトリに、redis-py および cachetools ライブラリをインストールするフォルダを作成します。

mkdir package

pip を使用して redis-py および cachetools をインストールします。

pip install --target ./package redis pip install --target ./package cachetools

redis-py および cachetools ライブラリを含む zip ファイルを作成します。Linux および MacOS では、次のコマンドを実行します。Windows では、任意の zip ユーティティを使用して、redis-py および cachetools ライブラリをルートに置く .zip ファイルを作成します。

cd package zip -r ../my_deployment_package.zip .

.zip ファイルに関数コードを追加します。Linux および macOS では、次のコマンドを実行します。Windows では、任意の zip ユーティリティを使用して .zip ファイルのルートに app.py を追加します。

cd .. zip my_deployment_package.zip app.py

IAM ロール (実行ロール) を作成します

という名前 AWS の管理ポリシーをロールAWSLambdaVPCAccessExecutionRoleにアタッチします。

aws iam attach-role-policy \ --role-name "memorydb-iam-auth-app" \ --policy-arn "arn:aws:iam::aws:policy/service-role/AWSLambdaVPCAccessExecutionRole"

デプロイパッケージをアップロードします (Lambda 関数を作成する)

このステップでは、create-function AWS CLI コマンドを使用して Lambda 関数 (AccessMemoryDB) を作成します。

デプロイパッケージの.zip ファイルを含むプロジェクトディレクトリから、次の Lambda CLI create-function コマンドを実行します。

ロールのオプションには、前のステップで作成した実行ロールの ARN を使用します。vpc-config には、デフォルト VPC のサブネットとデフォルト VPC のセキュリティグループ ID をカンマで区切ったリストを入力します。これらの値は Amazon VPC コンソール にあります。デフォルトの VPC のサブネットを検索するには、VPCs を選択し、 AWS アカウントのデフォルト VPC を選択します。この VPC のセキュリティグループを確認するには、[セキュリティ] に移動して [セキュリティグループ] を選択します。us-east-1 リージョンが選択されていることを確認します。

aws lambda create-function \ --function-name AccessMemoryDB \ --region us-east-1 \ --zip-file fileb://my_deployment_package.zip \ --role arn:aws:iam::123456789012:role/memorydb-iam-auth-app \ --handler app.lambda_handler \ --runtime python3.12 \ --timeout 30 \ --vpc-config SubnetIds=comma-separated-vpc-subnet-ids,SecurityGroupIds=default-security-group-id

ステップ 3: Lambda 関数をテストする

このステップでは、invoke コマンドを使用して Lambda 関数を手動で呼び出します。Lambda 関数を実行すると、UUID が生成され、Lambda コードで指定した ElastiCache キャッシュにその UUID が書き込まれます。次に、Lambda 関数はキャッシュから項目を取得します。

  1. invoke コマンドを使用して Lambda 関数 (AccessMemoryDB) AWS Lambda を呼び出します。

    aws lambda invoke \ --function-name AccessMemoryDB \ --region us-east-1 \ output.txt
  2. Lambda 関数が正常に実行されたことを、次のように確認します。

    • output.txt ファイルを確認します。

    • CloudWatch コンソールを開き、関数のロググループ (/aws/lambda/AccessRedis) を選択して、CloudWatch ログの結果を検証します。ログストリームには、以下と同様のコマンドの出力が含まれます。

      Success: Inserted 826e70c5f4d2478c8c18027125a3e01e. Fetched 826e70c5f4d2478c8c18027125a3e01e from MemoryDB.
    • AWS Lambda コンソールで結果を確認します。

ステップ 4: クリーンアップする (オプション)

クリーンアップするには、以下の手順を実行します。

Lambda 関数を削除する

aws lambda delete-function \ --function-name AccessMemoryDB

MemoryDB クラスターの削除

クラスターを削除します。

aws memorydb delete-cluster \ --cluster-name cluster-01

ユーザーと ACL を削除します。

aws memorydb delete-user \ --user-id iam-user-01 aws memorydb delete-acl \ --acl-name iam-acl-01

IAM ロールとポリシーを削除する

aws iam detach-role-policy \ --role-name "memorydb-iam-auth-app" \ --policy-arn "arn:aws:iam::123456789012:policy/memorydb-allow-all" aws iam detach-role-policy \ --role-name "memorydb-iam-auth-app" \ --policy-arn "arn:aws:iam::aws:policy/service-role/AWSLambdaVPCAccessExecutionRole" aws iam delete-role \ --role-name "memorydb-iam-auth-app" aws iam delete-policy \ --policy-arn "arn:aws:iam::123456789012:policy/memorydb-allow-all"
プライバシーサイト規約Cookie の設定
© 2025, Amazon Web Services, Inc. or its affiliates.All rights reserved.