AWS Lambda
개발자 가이드

자습서: Amazon VPC에서 Amazon ElastiCache에 액세스하도록 Lambda 함수 구성

이 자습서에서는 다음 작업을 수행합니다.

  • 기본 Amazon Virtual Private Cloud에 Amazon ElastiCache 클러스터를 생성합니다. Amazon ElastiCache에 대한 자세한 내용은 Amazon ElastiCache를 참조하십시오.

  • ElastiCache 클러스터에 액세스하기 위해 Lambda 함수를 생성합니다. Lambda 함수를 생성할 때 Amazon VPC 및 VPC 보안 그룹에 서브넷 ID를 제공하여 Lambda 함수가 VPC의 리소스에 액세스할 수 있도록 합니다. 이 자습서의 설명에서는 함수가 UUID를 생성하여 이를 캐시에 기록한 다음, 캐시에서 이를 검색합니다.

  • Lambda 함수를 호출하고 VPC의 ElastiCache 클러스터에 액세스했는지 확인합니다.

Amazon VPC에서 Lambda 사용에 대한 자세한 내용은 VPC에서 리소스에 액세스하도록 Lambda 함수 구성 단원을 참조하십시오.

사전 조건

이 자습서는 사용자가 Lambda 작업과 Lambda 콘솔에 대한 기본 지식을 알고 있다고 가정합니다. 그렇지 않은 경우 AWS Lambda 시작하기의 지침에 따라 첫 Lambda 함수를 생성합니다.

이 설명서의 절차에 따르려면 명령을 실행할 셸 또는 명령줄 터미널이 필요합니다. 명령은 프롬프트 기호($)와 해당하는 경우 현재 디렉터리의 이름이 앞에 붙은 상태로 목록에 표시됩니다.

~/lambda-project$ this is a command this is output

긴 명령의 경우 이스케이프 문자(\)를 사용하여 명령을 여러 행으로 분할합니다.

Linux 및 macOS는 선호 셸과 패키지 관리자를 사용합니다. Windows 10에서 Linux용 Windows Subsystem을 설치하여 Ubuntu와 Bash의 Windows 통합 버전을 가져옵니다.

실행 역할 만들기

함수에 AWS 리소스에 액세스할 수 있는 권한을 제공하는 실행 역할을 만듭니다.

실행 역할을 만들려면

  1. IAM 콘솔에서 역할 페이지를 엽니다.

  2. 역할 생성을 선택합니다.

  3. 다음 속성을 사용하여 역할을 만듭니다.

    • 신뢰할 수 있는 개체 – Lambda.

    • 권한AWSLambdaVPCAccessExecutionRole.

    • 역할 이름lambda-vpc-role.

AWSLambdaVPCAccessExecutionRole은 함수가 VPC에 대한 연결을 관리하는 데 필요한 권한을 가집니다.

ElastiCache 클러스터 생성

기본 VPC에 ElastiCache클러스터를 생성합니다.

  1. 다음 AWS CLI 명령을 실행하여 Memcached 클러스터를 생성합니다.

    $ aws elasticache create-cache-cluster --cache-cluster-id ClusterForLambdaTest \ --cache-node-type cache.m3.medium --engine memcached --num-cache-nodes 1 \ --security-group-ids sg-0897d5f549934c2fb

    [Security Groups] 아래 VPC 콘솔에서 기본 VPC 보안 그룹을 조회할 수 있습니다. 예제 함수는 이 클러스터에서 항목을 추가하고 검색합니다.

  2. 실행한 캐시 클러스터의 구성 엔드포인트를 적어둡니다. 이 정보는 Amazon ElastiCache 콘솔에서 얻을 수 있습니다. 다음 단원에서는 함수 코드에서 이 값을 지정해 보겠습니다.

배포 패키지 만들기

다음의 예제 Python 코드는 항목을 읽어서 ElastiCache 클러스터에 기록합니다.

예 app.py

from __future__ import print_function import time import uuid import sys import socket import elasticache_auto_discovery from pymemcache.client.hash import HashClient #elasticache settings elasticache_config_endpoint = "your-elasticache-cluster-endpoint:port" nodes = elasticache_auto_discovery.discover(elasticache_config_endpoint) nodes = map(lambda x: (x[1], int(x[2])), nodes) memcache_client = HashClient(nodes) def handler(event, context): """ This function puts into memcache and get from it. Memcache is hosted using elasticache """ #Create a random UUID... this will be the sample element we add to the cache. uuid_inserted = uuid.uuid4().hex #Put the UUID to the cache. memcache_client.set('uuid', uuid_inserted) #Get item (UUID) from the cache. uuid_obtained = memcache_client.get('uuid') if uuid_obtained.decode("utf-8") == uuid_inserted: # this print should go to the CloudWatch Logs and Lambda console. print ("Success: Fetched value %s from memcache" %(uuid_inserted)) else: raise Exception("Value is not the same as we put :(. Expected %s got %s" %(uuid_inserted, uuid_obtained)) return "Fetched value from memcache: " + uuid_obtained.decode("utf-8")

종속성

  • pymemcache - Lambda 함수 코드가 이 라이브러리를 사용하여 memcache에서 항목을 설정 및 가져올 수 있도록 HashClient 객체를 생성합니다.

  • elasticache-auto-discovery - Lambda 함수가 이 라이브러리를 사용하여 Amazon ElastiCache 클러스터에서 노드를 가져옵니다.

Pip를 사용하여 종속성을 설치하고 배포 패키지를 생성합니다. 지침은 AWS Lambda 배포 패키지(Python) 단원을 참조하십시오.

Lambda 함수 생성

create-function 명령을 사용하여 Lambda 함수를 만듭니다.

$ aws lambda create-function --function-name AccessMemCache --timeout 30 --memory-size 1024 \ --zip-file fileb://function.zip --handler app.handler --runtime python3.8 \ --role arn:aws:iam::123456789012:role/lambda-vpc-role \ --vpc-config SubnetIds=subnet-0532bb6758ce7c71f,subnet-d6b7fda068036e11f,SecurityGroupIds=sg-0897d5f549934c2fb

VPC 콘솔에서 VPC의 서브넷 ID와 기본 보안 그룹 ID를 찾을 수 있습니다.

Lambda 함수 테스트

이 단계에서는 invoke 명령을 사용하여 Lambda 함수를 수동으로 호출합니다. 실행 시 Lambda 함수는 UUID를 생성하고 Lambda 코드에 지정했던 ElastiCache 클러스터에 이를 기록합니다. 그런 다음 함수는 캐시에서 해당 항목을 검색합니다.

  1. invoke 명령을 사용하여 Lambda 함수를 호출합니다.

    $ aws lambda invoke --function-name AccessMemCache output.txt
  2. 다음과 같이 Lambda 함수가 성공적으로 실행되었는지 확인합니다.

    • output.txt 파일을 검토합니다.

    • AWS Lambda 콘솔에서 결과를 검토합니다.

    • CloudWatch Logs에서 결과를 확인합니다.

VPC에서 ElastiCache 클러스터를 액세스하는 Lambda 함수를 생성하고 나면, 이제 이벤트에 대한 응답으로 함수를 호출할 수 있습니다. 이벤트 소스 구성에 대한 자세한 내용과 예제를 보려면 다른 서비스와 함께 AWS Lambda 사용 단원을 참조하십시오.