Pilih preferensi cookie Anda

Kami menggunakan cookie penting serta alat serupa yang diperlukan untuk menyediakan situs dan layanan. Kami menggunakan cookie performa untuk mengumpulkan statistik anonim sehingga kami dapat memahami cara pelanggan menggunakan situs dan melakukan perbaikan. Cookie penting tidak dapat dinonaktifkan, tetapi Anda dapat mengklik “Kustom” atau “Tolak” untuk menolak cookie performa.

Jika Anda setuju, AWS dan pihak ketiga yang disetujui juga akan menggunakan cookie untuk menyediakan fitur situs yang berguna, mengingat preferensi Anda, dan menampilkan konten yang relevan, termasuk iklan yang relevan. Untuk menerima atau menolak semua cookie yang tidak penting, klik “Terima” atau “Tolak”. Untuk membuat pilihan yang lebih detail, klik “Kustomisasi”.

Tutorial: Mengkonfigurasi Lambda untuk ElastiCache mengakses di VPC

Mode fokus
Tutorial: Mengkonfigurasi Lambda untuk ElastiCache mengakses di VPC - Amazon ElastiCache

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

Dalam tutorial ini Anda dapat mempelajari cara membuat cache ElastiCache tanpa server, membuat fungsi Lambda, lalu menguji fungsi Lambda, dan secara opsional membersihkan setelahnya.

Langkah 1: Membuat cache ElastiCache tanpa server.

Untuk membuat cache tanpa server, ikuti langkah-langkah ini.

Langkah 1.1: Buat cache tanpa server

Pada langkah ini, Anda membuat cache tanpa server di Amazon default di wilayah us-east-1 VPC di akun Anda menggunakan (). AWS Command Line Interface CLI Untuk informasi tentang membuat cache tanpa server menggunakan ElastiCache konsol atauAPI, lihat. Buat cache tanpa server Valkey

aws elasticache create-serverless-cache \ --serverless-cache-name cache-01 \ --description "ElastiCache IAM auth application" \ --engine valkey

Perhatikan bahwa nilai bidang Status diatur ke CREATING. Diperlukan waktu satu menit ElastiCache untuk menyelesaikan pembuatan cache Anda.

Langkah 1.2: Salin titik akhir cache tanpa server

Verifikasi bahwa ElastiCache untuk Redis OSS telah selesai membuat cache dengan describe-serverless-caches perintah.

aws elasticache describe-serverless-caches \ --serverless-cache-name cache-01

Salin Alamat Titik Akhir yang ditunjukkan pada output. Anda akan memerlukan alamat ini saat membuat paket deployment untuk fungsi Lambda Anda.

Langkah 1.3: Buat IAM Peran

  1. Buat dokumen kebijakan IAM kepercayaan, seperti yang ditunjukkan di bawah ini, untuk peran Anda yang memungkinkan akun Anda mengambil peran baru. Simpan kebijakan ini ke file bernama trust-policy.json.

    { "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. Buat dokumen IAM kebijakan, seperti yang ditunjukkan di bawah ini. Simpan kebijakan ke file bernama policy.json.

    { "Version": "2012-10-17", "Statement": [ { "Effect" : "Allow", "Action" : [ "elasticache:Connect" ], "Resource" : [ "arn:aws:elasticache:us-east-1:123456789012:serverlesscache:cache-01", "arn:aws:elasticache:us-east-1:123456789012:user:iam-user-01" ] } ] }
  3. Buat IAM peran.

    aws iam create-role \ --role-name "elasticache-iam-auth-app" \ --assume-role-policy-document file://trust-policy.json
  4. Buat IAM kebijakan.

    aws iam create-policy \ --policy-name "elasticache-allow-all" \ --policy-document file://policy.json
  5. Lampirkan kebijakan IAM pada peran tersebut.

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

Langkah 1.4: Buat cache tanpa server

  1. Buat pengguna default baru.

    aws elasticache create-user \ --user-name default \ --user-id default-user-disabled \ --engine redis \ --authentication-mode Type=no-password-required \ --access-string "off +get ~keys*"
  2. Buat pengguna baru IAM yang diaktifkan.

    aws elasticache create-user \ --user-name iam-user-01 \ --user-id iam-user-01 \ --authentication-mode Type=iam \ --engine redis \ --access-string "on ~* +@all"
  3. Buat grup pengguna dan lampirkan pengguna.

    aws elasticache create-user-group \ --user-group-id iam-user-group-01 \ --engine redis \ --user-ids default-user-disabled iam-user-01 aws elasticache modify-serverless-cache \ --serverless-cache-name cache-01 \ --user-group-id iam-user-group-01

Langkah 2: Buat fungsi Lambda untuk ElastiCache

Untuk membuat fungsi Lambda untuk mengakses ElastiCache cache, lakukan langkah-langkah ini.

Langkah 2.1: Buat fungsi Lambda

Dalam tutorial ini, kami memberikan contoh kode dalam Python untuk fungsi Lambda Anda.

Python

Contoh kode Python berikut membaca dan menulis item ke cache Anda ElastiCache . Salin kode tersebut dan simpan ke dalam file bernama app.py. Pastikan untuk mengganti elasticache_endpoint nilai dalam kode dengan alamat titik akhir yang Anda salin pada langkah sebelumnya.

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 ElastiCacheIAMProvider(redis.CredentialProvider): def __init__(self, user, cache_name, is_serverless=False, region="us-east-1"): self.user = user self.cache_name = cache_name self.is_serverless = is_serverless self.region = region session = botocore.session.get_session() self.request_signer = RequestSigner( ServiceId("elasticache"), self.region, "elasticache", "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} if self.is_serverless: query_params["ResourceType"] = "ServerlessCache" url = urlunparse( ParseResult( scheme="https", netloc=self.cache_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 # Elasticache 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 cache_name = "cache-01" # replace with your cache name elasticache_endpoint = "cache-01-xxxxx.serverless.use1.cache.amazonaws.com" # replace with your cache endpoint creds_provider = ElastiCacheIAMProvider(user=username, cache_name=cache_name, is_serverless=True) redis_client = redis.Redis(host=elasticache_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 cache 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 cache and print # the results if decoded_result == uuid_in: print(f"Success: Inserted {uuid_in}. Fetched {decoded_result} from Valkey.") else: raise Exception(f"Bad value retrieved. Expected {uuid_in}, got {decoded_result}") return "Fetched value from Valkey"

Kode ini menggunakan pustaka redis-py Python untuk memasukkan item ke dalam cache Anda dan mengambilnya. Kode ini menggunakan cachetools untuk menyimpan token IAM Auth yang dihasilkan selama 15 menit. Untuk membuat paket penerapan yang berisi redis-py dan cachetools, lakukan langkah-langkah berikut.

Di direktori proyek Anda yang berisi file kode sumber app.py, buat paket folder untuk menginstal pustaka redis-py dan cachetools ke dalamnya.

mkdir package

Instal redis-py, cachetools menggunakan pip.

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

Buat file.zip yang berisi pustaka redis-py dan cachetools. Di Linux atau macOS, jalankan perintah CLI berikut. Di Windows, gunakan utilitas zip pilihan Anda untuk membuat file.zip dengan pustaka redis-py dan cachetools di root.

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

Tambahkan kode fungsi Anda ke file .zip. Di Linux atau macOS, jalankan perintah CLI berikut. Di Windows, gunakan utilitas zip pilihan Anda untuk menambahkan app.py ke root file.zip Anda.

cd .. zip my_deployment_package.zip app.py

Langkah 2.2: Buat IAM peran (peran eksekusi)

Lampirkan kebijakan AWS terkelola yang diberi nama AWSLambdaVPCAccessExecutionRole ke peran.

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

Langkah 2.3: Unggah paket deployment (buat fungsi Lambda)

Pada langkah ini, Anda membuat fungsi Lambda (AccessValkey) menggunakan perintah AWS CLI create-function.

Dari direktori proyek yang berisi berkas .zip paket penyebaran Anda, jalankan perintah Lambda berikut. CLI create-function

Untuk opsi peran, gunakan peran eksekusi yang Anda buat di langkah sebelumnya. ARN Untuk vpc-config masukkan daftar yang dipisahkan koma dari subnet default Anda dan VPC ID grup keamanan default Anda. VPC Anda dapat menemukan nilai-nilai ini di VPC konsol Amazon. Untuk menemukan subnet default VPC Anda, pilih Your VPCs, lalu pilih default AWS VPC akun Anda. Untuk menemukan grup keamanan untuk iniVPC, buka Keamanan dan pilih Grup keamanan. Pastikan Anda memilih wilayah us-east-1.

aws lambda create-function \ --function-name AccessValkey \ --region us-east-1 \ --zip-file fileb://my_deployment_package.zip \ --role arn:aws:iam::123456789012:role/elasticache-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

Langkah 3: Uji fungsi Lambda dengan ElastiCache

Pada langkah ini, Anda menjalankan fungsi Lambda secara manual menggunakan perintah pemanggilan. Ketika fungsi Lambda dijalankan, ia menghasilkan UUID dan menulisnya ke ElastiCache cache yang Anda tentukan dalam kode Lambda Anda. Fungsi Lambda kemudian mengambil item dari cache.

  1. Memanggil fungsi Lambda AccessValkey () menggunakan perintah pemanggilan AWS Lambda .

    aws lambda invoke \ --function-name AccessValkey \ --region us-east-1 \ output.txt
  2. Verifikasikan bahwa fungsi Lambda berhasil dijalankan sebagai berikut:

    • Tinjau file output.txt.

    • Verifikasi hasil di CloudWatch Log dengan membuka CloudWatch konsol dan memilih grup log untuk fungsi Anda (/aws/lambda/AccessValkey). Log stream akan berisi output seperti yang berikut ini:

      Success: Inserted 826e70c5f4d2478c8c18027125a3e01e. Fetched 826e70c5f4d2478c8c18027125a3e01e from Valkey.
    • Tinjau hasilnya di AWS Lambda konsol.

Langkah 4: Bersihkan (Opsional)

Untuk membersihkan, ambil langkah-langkah ini.

Langkah 4.1: Hapus fungsi Lambda

aws lambda delete-function \ --function-name AccessValkey

Langkah 4.2: Hapus cache Tanpa Server

Hapus cache.

aws elasticache delete-serverless-cache \ --serverless-cache-name cache-01

Hapus pengguna dan grup pengguna.

aws elasticache delete-user \ --user-id default-user-disabled aws elasticache delete-user \ --user-id iam-user-01 aws elasticache delete-user-group \ --user-group-id iam-user-group-01

Langkah 4.3: Hapus IAM Peran dan kebijakan

aws iam detach-role-policy \ --role-name "elasticache-iam-auth-app" \ --policy-arn "arn:aws:iam::123456789012:policy/elasticache-allow-all" aws iam detach-role-policy \ --role-name "elasticache-iam-auth-app" \ --policy-arn "arn:aws:iam::aws:policy/service-role/AWSLambdaVPCAccessExecutionRole" aws iam delete-role \ --role-name "elasticache-iam-auth-app" aws iam delete-policy \ --policy-arn "arn:aws:iam::123456789012:policy/elasticache-allow-all"
PrivasiSyarat situsPreferensi cookie
© 2025, Amazon Web Services, Inc. atau afiliasinya. Semua hak dilindungi undang-undang.