코드형 인프라(IaC)와 함께 Lambda 사용 - AWS Lambda

코드형 인프라(IaC)와 함께 Lambda 사용

Lambda는 코드를 배포하고 함수를 생성하는 여러 가지 방법을 제공합니다. 예를 들어, Lambda 콘솔 또는 AWS Command Line Interface(AWS CLI)를 사용하여 Lambda 함수를 수동으로 생성하거나 업데이트할 수 있습니다. 이러한 수동 옵션 외에도 AWS는 코드형 인프라(IaC)를 사용하여 Lambda 함수 및 서버리스 애플리케이션을 배포하기 위한 다양한 솔루션을 제공합니다. IaC로 수동 프로세스와 설정을 사용하는 대신 코드를 사용하여 Lambda 함수 및 기타 AWS 리소스를 프로비저닝하고 유지할 수 있습니다.

대부분의 경우 Lambda 함수는 격리되어 실행되지 않습니다. 대신 데이터베이스, 대기열, 스토리지와 같은 다른 리소스와 함께 서버리스 애플리케이션의 일부를 구성합니다. IaC로 배포 프로세스를 자동화하여 많은 개별 AWS 리소스를 포함하는 전체 서버리스 애플리케이션을 빠르고 반복적으로 배포하고 업데이트할 수 있습니다. 이 접근법을 사용하면 개발 주기가 단축되고 구성 관리가 쉬워지며 리소스가 매번 같은 방식으로 배포될 수 있습니다.

Lambda용 IaC 도구

IaC를 사용하여 Lambda 함수 및 서버리스 애플리케이션을 배포할 수 있도록 AWS는 다양한 도구와 서비스를 제공합니다.

AWS CloudFormation은 클라우드 리소스를 생성하고 구성하기 위해 AWS에서 제공한 첫 번째 서비스입니다. AWS CloudFormation로 인프라와 코드를 정의하는 텍스트 템플릿을 생성할 수 있습니다. AWS가 새로운 서비스를 더 많이 도입하고 AWS CloudFormation 템플릿 생성의 복잡성이 증가함에 따라 두 가지 도구가 추가로 출시되었습니다. AWS SAM은 서버리스 애플리케이션을 정의하기 위한 새로운 템플릿 기반 프레임워크입니다. AWS Cloud Development Kit (AWS CDK)은 널리 사용되는 여러 프로그래밍 언어의 코드 구조를 사용하여 인프라를 정의하고 프로비저닝하기 위한 코드 우선 접근법입니다.

AWS SAM, AWS CDK 모두를 사용하면 AWS CloudFormation은 백그라운드에서 작동하여 인프라를 구축하고 배포할 수 있습니다. 다음 다이어그램은 이러한 도구 간의 관계를 보여주며 다이어그램 다음 단락에서 주요 기능을 설명합니다.

AWS SAM 및 AWS CDK가 AWS CloudFormation을 사용하여 AWS 리소스와 코드를 배포하는 방법을 보여주는 다이어그램
  • AWS CloudFormation - CloudFormation을 사용하면 리소스와 해당 속성을 설명하는 YAML 또는 JSON 템플릿을 사용하여 AWS 리소스를 모델링하고 설정할 수 있습니다. CloudFormation은 안전하고 반복 가능한 방식으로 리소스를 프로비저닝하므로 수동 단계 없이 인프라와 애플리케이션을 자주 빌드할 수 있습니다. 구성을 변경하면 CloudFormation이 스택 업데이트를 위해 수행할 적절한 작업을 결정합니다. CloudFormation은 변경 사항을 롤백할 수도 있습니다.

  • AWS Serverless Application Model(AWS SAM) - AWS SAM은 서버리스 애플리케이션을 정의하기 위한 오픈 소스 프레임워크입니다. AWS SAM 템플릿은 속기 구문을 사용하여 리소스당 몇 줄의 텍스트(YAML)만으로 함수, API, 데이터베이스 및 이벤트 소스 매핑을 정의합니다. 배포 중에 AWS SAM은 AWS SAM 구문을 AWS CloudFormation 구문으로 변환하고 확장합니다. 그렇기 때문에 모든 CloudFormation 구문을 AWS SAM 템플릿에 추가할 수 있습니다. 이를 통해 AWS SAM에 CloudFormation의 모든 기능을 제공하지만, 구성 라인 수는 더 적습니다.

  • AWS Cloud Development Kit (AWS CDK)- AWS CDK를 사용하면 코드 구조를 사용하여 인프라를 정의하고 AWS CloudFormation을 통해 그것을 프로비저닝할 수 있습니다. AWS CDK는 기존 IDE, 테스트 도구 및 워크플로 패턴을 사용하여 TypeScript, Python, Java, .NET 및 Go(개발자 미리 보기)로 응용 프로그램 인프라를 모델링할 수 있게 합니다. 반복 가능한 배포, 간편한 롤백, 드리프트 감지를 비롯한 AWS CloudFormation의 모든 이점을 얻을 수 있습니다.

AWS는 또한 간단한 그래픽 인터페이스를 사용하여 IaC 템플릿을 개발하기 위한 AWS Application Composer이라는 서비스를 제공합니다. Application Composer를 사용하여 시각적 캔버스에서 AWS 서비스를 드래그, 그룹화 및 연결하여 애플리케이션 아키텍처를 설계합니다. 그런 다음 Application Composer는 디자인을 기반으로 응용 프로그램을 배포하는 데 사용할 수 있는 AWS SAM 템플릿 또는 AWS CloudFormation 템플릿을 생성합니다.

아래 Lambda용 IaC 시작하기 섹션에서는 Application Composer를 사용하여 기존 Lambda 함수를 기반으로 서버리스 애플리케이션을 위한 템플릿을 개발합니다.

Lambda용 IaC 시작하기

이 자습서에서는 기존 Lambda 함수에서 AWS SAM 템플릿을 생성한 다음 다른 AWS 리소스를 추가하여 Application Composer에서 서버리스 애플리케이션을 구축함으로써 Lambda와 함께 IaC를 사용하기 시작할 수 있습니다.

Application Composer를 사용하지 않고 템플릿을 사용하는 방법을 배우기 위해 AWS SAM 또는 AWS CloudFormation 자습서를 실행하여 시작하려는 경우 이 페이지 끝에 있는 다음 단계 섹션에서 다른 리소스로 연결되는 링크를 찾을 수 있습니다.

이 자습서를 수행하면서 AWS 리소스가 AWS SAM에 지정되는 방식과 같은 몇 가지 기본 개념을 배우게 됩니다. 또한 Application Composer를 사용하여 AWS SAM 또는 AWS CloudFormation을 사용하여 배포할 수 있는 서버리스 애플리케이션을 빌드하는 방법도 배우게 됩니다.

이 자습서를 완료하려면 다음 단계를 수행하게 됩니다.

  • Lambda 함수 예를 생성합니다.

  • Lambda 콘솔을 사용하여 함수의 AWS SAM 템플릿 확인

  • 함수 구성을 AWS Application Composer으로 내보내기하고 함수 구성을 기반으로 간단한 서버리스 애플리케이션 설계

  • 서버리스 애플리케이션을 배포하기 위한 기반으로 사용할 수 있는 업데이트된 AWS SAM 템플릿 저장

다음 단계 섹션에서는 AWS SAM 및 Application Composer에 대해 자세히 알아보는 데 사용할 수 있는 리소스를 찾을 수 있습니다. 이러한 리소스에는 AWS SAM을 사용하여 서버리스 애플리케이션을 배포하는 방법을 알려주는 고급 자습서 링크가 포함되어 있습니다.

사전 조건

이 자습서에서는 Application Composer의 로컬 동기화 기능을 사용하여 템플릿과 코드 파일을 로컬 빌드 컴퓨터에 저장합니다. 이 기능을 사용하려면 웹 애플리케이션이 로컬 파일 시스템에서 파일을 읽고 쓰고 저장할 수 있도록 하는 File System Access API를 지원하는 브라우저가 필요합니다. 구글 크롬이나 Microsoft Edge를 사용하는 것이 좋습니다. 파일 시스템 액세스 API에 대한 자세한 내용은 파일 시스템 액세스 API란 무엇일까요?를 참조하세요.

Lambda 함수 생성

이 첫 단계에서는 자습서의 나머지 부분을 완료하는 데 사용할 수 있는 Lambda 함수를 생성합니다. 작업을 단순화하기 위해 Lambda 콘솔을 사용하여 Python 3.11 런타임을 사용하여 기본 'Hello world' 함수를 생성합니다.

콘솔을 사용하여 'Hello world' Lambda 함수 생성
  1. Lambda 콘솔을 엽니다.

  2. 함수 생성(Create function)을 선택합니다.

  3. 처음부터 작성을 선택한 상태로 두고, 기본 정보에서 LambdaIaCDemo함수 이름에 입력합니다.

  4. 런타임에서 Python 3.11을 선택합니다.

  5. 함수 생성(Create function)을 선택합니다.

함수에 대한 AWS SAM 템플릿 보기

함수 구성을 Application Composer로 내보내기 전에 Lambda 콘솔을 사용하여 함수의 현재 구성을 AWS SAM 템플릿으로 확인합니다. 이 섹션의 단계를 수행하면 AWS SAM 템플릿의 구조 및 Lambda 함수와 같은 리소스를 정의하여 서버리스 애플리케이션 지정을 시작하는 방법을 알아볼 수 있습니다.

함수에 대한 AWS SAM 템플릿 보기
  1. Lambda 콘솔의 함수 페이지를 엽니다.

  2. 앞에서 생성한 함수(LambdaIaCDemo)를 선택합니다.

  3. 함수 개요 창에서 템플릿을 선택합니다.

    함수 구성을 나타내는 다이어그램 대신 함수의 AWS SAM 템플릿이 표시됩니다. 템플릿은 다음과 같아야 합니다.

    # This AWS SAM template has been generated from your function's # configuration. If your function has one or more triggers, note # that the AWS resources associated with these triggers aren't fully # specified in this template and include placeholder values.Open this template # in AWS Application Composer or your favorite IDE and modify # it to specify a serverless application with other AWS resources. AWSTemplateFormatVersion: '2010-09-09' Transform: AWS::Serverless-2016-10-31 Description: An AWS Serverless Specification template describing your function. Resources: LambdaIaCDemo: Type: AWS::Serverless::Function Properties: CodeUri: . Description: '' MemorySize: 128 Timeout: 3 Handler: lambda_function.lambda_handler Runtime: python3.11 Architectures: - x86_64 EventInvokeConfig: MaximumEventAgeInSeconds: 21600 MaximumRetryAttempts: 2 EphemeralStorage: Size: 512 RuntimeManagementConfig: UpdateRuntimeOn: Auto SnapStart: ApplyOn: None PackageType: Zip Policies: Statement: - Effect: Allow Action: - logs:CreateLogGroup Resource: arn:aws:logs:us-east-1:123456789012:* - Effect: Allow Action: - logs:CreateLogStream - logs:PutLogEvents Resource: - >- arn:aws:logs:us-east-1:123456789012:log-group:/aws/lambda/LambdaIaCDemo:*

함수의 YAML 템플릿을 살펴보고 몇 가지 주요 개념을 이해하는 시간을 갖도록 하겠습니다.

템플릿은 Transform: AWS::Serverless-2016-10-31 선언으로 시작합니다. AWS SAM 템플릿은 백그라운드에서 AWS CloudFormation을 통해 배포되기 때문에 이 선언이 필요합니다. Transform 문을 사용하면 템플릿이 AWS SAM 템플릿 파일로 식별됩니다.

Transform 선언 다음에는 Resources 섹션이 나타납니다. AWS 리소스가 함께 배포하려는 AWS SAM 템플릿과 여기에 정의됩니다. AWS SAM 템플릿에는 AWS SAM 리소스와 AWS CloudFormation 리소스의 조합이 포함될 수 있습니다. 배포 중에 AWS SAM 템플릿이 AWS CloudFormation 템플릿으로 확장돼, 유효한 모든 AWS CloudFormation 구문을 AWS SAM 템플릿에 추가할 수 있기 때문입니다.

현재 템플릿 Resources 섹션에 정의된 리소스는 Lambda 함수 LambdaIaCDemo뿐입니다. AWS SAM 템플릿에 Lambda 함수를 추가하려면 AWS::Serverless::Function 리소스 유형을 사용합니다. Lambda 함수의 Properties 리소스는 함수의 런타임, 함수 핸들러 및 기타 구성 옵션을 정의합니다. 함수를 배포하는 데 AWS SAM이 사용해야 하는 함수 소스 코드의 경로도 여기에 정의되어 있습니다. AWS SAM의 Lambda 함수 리소스에 대해 자세히 알아보려면 AWS::Serverless::Function을 AWS SAM 개발자 안내서에서 참조하세요.

템플릿은 함수 속성 및 구성뿐만 아니라 함수에 대한 AWS Identity and Access Management(IAM) 정책도 지정합니다. 이 정책은 Amazon CloudWatch Logs에 로그를 작성할 수 있는 권한을 함수에 제공합니다. Lambda 콘솔에서 함수를 생성하면 Lambda는 이 정책을 함수에 자동으로 연결합니다. AWS SAM 템플릿의 함수에 대한 IAM 정책을 지정하는 방법에 대해 자세히 알아보려면 policies 속성을 AWS::Serverless::Function 페이지, AWS SAM 개발자 안내서에서 참조하세요.

AWS SAM 템플릿 구조에 대한 자세한 내용은 AWS SAM 템플릿 분석을 참조하세요.

AWS Application Composer을 서버리스 애플리케이션을 설계하는 데 사용합니다.

함수의 AWS SAM 템플릿을 출발점으로 사용하여 간단한 서버리스 애플리케이션을 구축하려면 함수 구성을 Application Composer로 내보내고 Application Composer의 로컬 동기화 모드를 활성화해야 합니다. 로컬 동기화는 함수의 코드와 AWS SAM 템플릿을 로컬 빌드 컴퓨터에 자동으로 저장하고, Application Composer에 다른 AWS 리소스를 추가할 때 저장된 템플릿이 동기화된 상태로 유지됩니다.

함수를 Application Composer로 내보내기
  1. 함수 개요 창에서 Application Composer로 내보내기를 선택합니다.

    함수의 구성 및 코드를 Application Composer로 내보내기 위해 Lambda는 계정에 Amazon S3 버킷을 생성하여 이 데이터를 임시로 저장합니다.

  2. 대화 상자에서 확인 및 프로젝트 생성을 선택하여 이 버킷의 기본 이름을 수락하고 함수의 구성 및 코드를 Application Composer로 내보내기합니다.

  3. (선택 사항) Lambda가 생성하는 Amazon S3 버킷의 다른 이름을 선택하려면 새 이름을 입력하고 확인 및 프로젝트 생성을 선택합니다. Amazon S3 버킷에 이름은 전역적으로 고유해야 하며 버킷 이름 지정 규칙을 따라야 합니다.

    프로젝트 확인 및 생성을 선택하면 애플리케이션 컴포저 콘솔이 열립니다. 캔버스에서 Lambda 함수를 확인할 수 있습니다.

  4. 메뉴 드롭다운에서 로컬 동기화 활성화를 선택합니다.

  5. 이때 열리는 대화 상자에서 폴더 선택을 선택하고 로컬 빌드 머신에서 폴더를 선택합니다.

  6. 활성화를 선택하여 로컬 동기화를 활성화합니다.

함수를 Application Composer로 내보내려면 특정 API 작업을 사용할 권한이 필요합니다. 함수를 내보낼 수 없는 경우 필요한 권한 섹션을 참조하고, 필요한 권한이 있는지 확인합니다.

참고

함수를 Application Composer로 내보낼 때 Lambda가 생성하는 버킷에는 표준 Amazon S3 요금이 적용됩니다. Lambda가 버킷에 넣은 객체는 10일 후에 자동으로 삭제되지만 Lambda는 버킷 자체를 삭제하지 않습니다.

AWS 계정에 추가되어 추가 요금이 부과되지 않도록 하려면 함수를 Application Composer로 내보내기한 후 버킷 삭제의 지침을 따릅니다. Lambda가 생성하는 Amazon S3 버킷에 대한 자세한 내용은 AWS Lambda와 함께 AWS Application Composer 사용를 참조하세요.

Application Composer에서 서버리스 애플리케이션 설계하기

로컬 동기화를 활성화한 후 Application Composer에서 변경한 내용은 로컬 빌드 컴퓨터에 저장된 AWS SAM 템플릿에 반영됩니다. 이제 추가 AWS 리소스를 Application Composer 캔버스에 드래그 앤 드롭하여 애플리케이션을 빌드할 수 있습니다. 이 예시에서는 Lambda 함수의 트리거로 Amazon SQS 단순 대기열을 추가하고, 데이터를 쓸 함수의 DynamoDB 테이블을 추가합니다.

  1. 다음 작업을 수행하여 Lambda 함수에 Amazon SQS 트리거를 추가합니다.

    1. 리소스 팔레트의 검색 필드에 SQS를 입력합니다.

    2. SQS Queue 리소스를 캔버스로 드래그하여 Lambda 함수 왼쪽에 배치합니다.

    3. 세부 정보를 선택하고 논리적 IDLambdaIaCQueue를 입력합니다.

    4. Save(저장)를 선택합니다.

    5. SQS 대기열 카드에서 구독 포트를 클릭하고 Lambda 함수 카드의 왼쪽 포트로 드래그하여 Amazon SQS와 Lambda 리소스를 연결합니다. 두 리소스 사이에 선이 표시되면 연결이 성공했다는 의미입니다. Application Composer는 또한 캔버스 아래쪽에 두 리소스가 성공적으로 연결되었음을 알리는 메시지를 표시합니다.

  2. 다음을 수행하여 Lambda 함수가 데이터를 작성할 수 있도록 Amazon DynamoDB 테이블을 추가합니다.

    1. 리소스 팔레트의 검색 필드에 DynamoDB를 입력합니다.

    2. DynamoDB 테이블 리소스를 캔버스로 드래그하여 Lambda 함수 오른쪽에 배치합니다.

    3. 세부 정보를 선택하고 논리적 IDLambdaIaCTable를 입력합니다.

    4. Save(저장)를 선택합니다.

    5. Lambda 함수 카드의 오른쪽 포트를 클릭하고 DynamoDB 카드의 왼쪽 포트로 드래그하여 DynamoDB 테이블을 Lambda 함수에 연결합니다.

이제 이러한 추가 리소스를 추가했으니 Application Composer가 생성한 업데이트된 AWS SAM 템플릿을 살펴보겠습니다.

업데이트된 AWS SAM 템플릿 보기
  • 응용 프로그램 작성기 캔버스에서 템플릿을 선택하여 캔버스 보기에서 템플릿 보기로 전환합니다.

이제 AWS SAM 템플릿에 다음과 같은 추가 리소스 및 속성이 포함되어야 합니다.

  • LambdaIaCQueue 식별자를 사용하는 Amazon SQS 대기열

    LambdaIaCQueue: Type: AWS::SQS::Queue Properties: MessageRetentionPeriod: 345600

    애플리케이션 컴포저를 사용하여 Amazon SQS 대기열을 추가하면 애플리케이션 컴포저가 MessageRetentionPeriod 속성을 설정합니다. FifoQueue 속성을 SQS 대기열 카드에서 세부 정보를 선택하고 Fifo 대기열을 선택하거나 선택 취소하여 설정할 수도 있습니다.

    대기열에 다른 속성을 설정하려면 템플릿을 수동으로 편집하여 추가할 수 있습니다. AWS::SQS::Queue 리소스 및 사용 가능한 속성에 대해 자세히 알아보려면 AWS::SQS::Queue를 AWS CloudFormation 사용 설명서에서 참조하십시오.

  • Amazon SQS 대기열을 함수에 대한 트리거로 지정하는 Lambda 함수 정의의 Events 속성입니다.

    Events: LambdaIaCQueue: Type: SQS Properties: Queue: !GetAtt LambdaIaCQueue.Arn BatchSize: 1

    Events 속성은 이벤트 유형과 유형에 따라 달라지는 속성 세트로 구성됩니다. Lambda 함수를 트리거하도록 구성할 수 있는 다른 AWS 서비스 및 설정할 수 있는 속성에 대해 알아보려면 EventSource를 AWS SAM개발자 안내서에서 참조하십시오.

  • LambdaIaCTable 식별자가 있는 DynamoDB 테이블

    LambdaIaCTable: Type: AWS::DynamoDB::Table Properties: AttributeDefinitions: - AttributeName: id AttributeType: S BillingMode: PAY_PER_REQUEST KeySchema: - AttributeName: id KeyType: HASH StreamSpecification: StreamViewType: NEW_AND_OLD_IMAGES

    Application Composer를 사용하여 DynamoDB 테이블을 추가할 때 DynamoDB 테이블 카드에서 세부 정보를 선택하고 키 값을 편집하여 테이블의 키를 설정할 수 있습니다. 또한 애플리케이션 컴포저는 BillingModeStreamViewType을 비롯한 여러 다른 속성에 대한 기본값을 설정합니다.

    AWS SAM 템플릿에 추가할 수 있는 이러한 속성과 기타 속성에 대해 자세히 알아보려면 AWS::DynamoDB::Table을 AWS CloudFormation사용 설명서에서 참조하십시오.

  • 추가한 DynamoDB 테이블에서 CRUD 작업을 수행할 수 있는 권한을 함수에 부여하는 새로운 IAM 정책입니다.

    Policies: ... - DynamoDBCrudPolicy: TableName: !Ref LambdaIaCTable

완성된 최종 AWS SAM 템플릿은 다음과 같아야 합니다.

AWSTemplateFormatVersion: '2010-09-09' Transform: AWS::Serverless-2016-10-31 Description: An AWS Serverless Specification template describing your function. Resources: LambdaIaCDemo: Type: AWS::Serverless::Function Properties: CodeUri: . Description: '' MemorySize: 128 Timeout: 3 Handler: lambda_function.lambda_handler Runtime: python3.11 Architectures: - x86_64 EventInvokeConfig: MaximumEventAgeInSeconds: 21600 MaximumRetryAttempts: 2 EphemeralStorage: Size: 512 RuntimeManagementConfig: UpdateRuntimeOn: Auto SnapStart: ApplyOn: None PackageType: Zip Policies: - Statement: - Effect: Allow Action: - logs:CreateLogGroup Resource: arn:aws:logs:us-east-1:594035263019:* - Effect: Allow Action: - logs:CreateLogStream - logs:PutLogEvents Resource: - arn:aws:logs:us-east-1:594035263019:log-group:/aws/lambda/LambdaIaCDemo:* - DynamoDBCrudPolicy: TableName: !Ref LambdaIaCTable Events: LambdaIaCQueue: Type: SQS Properties: Queue: !GetAtt LambdaIaCQueue.Arn BatchSize: 1 Environment: Variables: LAMBDAIACTABLE_TABLE_NAME: !Ref LambdaIaCTable LAMBDAIACTABLE_TABLE_ARN: !GetAtt LambdaIaCTable.Arn LambdaIaCQueue: Type: AWS::SQS::Queue Properties: MessageRetentionPeriod: 345600 LambdaIaCTable: Type: AWS::DynamoDB::Table Properties: AttributeDefinitions: - AttributeName: id AttributeType: S BillingMode: PAY_PER_REQUEST KeySchema: - AttributeName: id KeyType: HASH StreamSpecification: StreamViewType: NEW_AND_OLD_IMAGES

AWS SAM을 사용하여 서버리스 애플리케이션을 배포합니다(선택 사항).

Application Composer에서 방금 생성한 템플릿을 사용하여 AWS SAM을 서버리스 애플리케이션을 배포하는 데 사용하려면 먼저 AWS SAM 및 CLI를 설치해야 합니다. 그러려면 AWS SAM CLI 설치하기의 지침을 따릅니다.

애플리케이션을 배포하기 전에 Application Composer가 템플릿과 함께 저장한 함수 코드도 업데이트해야 합니다. 현재 애플리케이션 컴포저가 저장한 lambda_function.py 파일에는 함수를 생성할 때 Lambda가 제공한 기본 'Hello world' 코드만 포함되어 있습니다.

함수 코드를 업데이트하려면 다음 코드를 복사하여 Application Composer가 로컬 빌드 컴퓨터에 저장한 lambda_function.py 파일에 붙여넣습니다. 로컬 동기화 모드를 활성화할 때 Application Composer에서 이 파일을 저장할 디렉토리를 지정했습니다.

이 코드는 애플리케이션 컴포저에서 생성한 Amazon SQS 대기열의 메시지에 있는 키 값 쌍을 수락합니다. 키와 값이 모두 문자열인 경우 코드는 이를 사용하여 템플릿에 정의된 DynamoDB 테이블에 항목을 작성합니다.

import boto3 import os import json # define the DynamoDB table that Lambda will connect to tablename = os.environ['LAMBDAIACTABLE_TABLE_NAME'] # create the DynamoDB resource dynamo = boto3.client('dynamodb') def lambda_handler(event, context): # get the message out of the SQS event message = event['Records'][0]['body'] data = json.loads(message) # write event data to DDB table if check_message_format(data): key = next(iter(data)) value = data[key] dynamo.put_item( TableName=tablename, Item={ 'id': {'S': key}, 'Value': {'S': value} } ) else: raise ValueError("Input data not in the correct format") # check that the event object contains a single key value # pair that can be written to the database def check_message_format(message): if len(message) != 1: return False key, value = next(iter(message.items())) if not (isinstance(key, str) and isinstance(value, str)): return False else: return True
서버리스 애플리케이션 배포하기

AWS SAM 및 CLI를 사용하여 애플리케이션을 배포하려면 다음 단계를 수행하세요. 함수를 올바르게 빌드하고 배포하려면 Python 버전 3.11이 빌드 머신과 PATH에 설치되어 있어야 합니다.

  1. Application Composer가 template.yamllambda_function.py 파일을 저장한 디렉터리에서 다음 명령을 실행합니다.

    sam build

    이 명령은 응용 프로그램의 빌드 아티팩트를 수집하여 배포에 적합한 형식과 위치에 배치합니다.

  2. 애플리케이션을 배포하고 AWS SAM 템플릿에 지정된 Lambda, Amazon SQS 및 DynamoDB 리소스를 생성하려면 다음 명령을 실행합니다.

    sam deploy --guided

    --guided 플래그를 사용하면 배포 AWS SAM 프로세스를 안내하는 메시지가 표시됩니다. 이 배포의 경우 Enter를 눌러 기본 옵션을 수락합니다.

배포 프로세스 중에 AWS SAM은 다음 리소스를 AWS 계정 위치에 생성합니다.

  • AWS CloudFormation 스택의 이름은 sam-app입니다.

  • sam-app-LambdaIaCDemo-99VXPpYQVv1M 이름 형식으로 된 Lambda 함수의 이름입니다.

  • sam-app-LambdaIaCQueue-xL87VeKsGiIo 이름 형식을 사용하는 Amazon SQS 대기열

  • sam-app-LambdaIaCTable-CN0S66C0VLNV 이름 형식이 지정된 DynamoDB 테이블

AWS SAM은 또한 Lambda 함수가 Amazon SQS 대기열에서 메시지를 읽고 DynamoDB 테이블에서 CRUD 작업을 수행할 수 있도록 필요한 IAM 역할 및 정책을 생성합니다.

AWS SAM을 사용하여 서버리스 애플리케이션을 배포하는 방법에 대해 자세히 알아보려면 다음 단계 섹션의 리소스를 참조하세요.

배포된 애플리케이션 테스트(선택 사항)

서버리스 애플리케이션이 올바르게 배포되었는지 확인하려면 키 값 쌍이 포함된 메시지를 Amazon SQS 대기열로 전송하고 Lambda가 이 값을 사용하여 DynamoDB 테이블에 항목을 기록하는지 확인합니다.

서버리스 애플리케이션 테스트하기
  1. Amazon SQS 콘솔의 대기열 페이지를 열고 AWS SAM가 템플릿에서 생성한 대기열을 선택합니다. 이름의 형식은 sam-app-LambdaIaCQueue-xL87VeKsGiIo입니다.

  2. 메시지 전송 및 수신을 선택하고 다음 JSON을 메시지 전송 섹션의 메시지 본문에 붙여넣습니다.

    { "myKey": "myValue" }
  3. 메시지 전송을 선택합니다.

    메시지를 대기열로 보내면 Lambda가 이벤트 소스 매핑을 통해 AWS SAM 템플릿에 정의된 함수를 간접 호출합니다. Lambda에서 예상대로 함수를 간접 호출했는지 확인하려면 항목이 DynamoDB 테이블에 추가되었는지 확인합니다.

  4. DynamoDB 콘솔의 페이지를 열고 표를 선택합니다. 이름의 형식은 sam-app-LambdaIaCTable-CN0S66C0VLNV입니다.

  5. 테이블 항목 탐색을 선택합니다. 반환된 항목 창에 IDmyKey이고 myValue인 항목이 표시되어야 합니다.

다음 단계

AWS SAM 및 AWS CloudFormation과 함께 애플리케이션 컴포저를 사용하는 방법에 대해 자세히 알아보려면 AWS CloudFormation 및 AWS SAM과 함께Application Composer 사용에서 시작합니다.

Application Composer에서 디자인한 서버리스 애플리케이션을 배포하는 데 AWS SAM을 사용하는 가이드 자습서를 보려면 AWS Application Composer자습서를 AWS 서버리스 패턴 워크숍에서 수행하는 것도 좋습니다.

AWS SAM은 명령줄 인터페이스(CLI)를 제공하며, 이는 AWS SAM 템플릿 및 지원되는 서드 파티 통합과 함께 사용하여 서버리스 애플리케이션을 빌드하고 실행할 수 있습니다. AWS SAM 및 CLI를 사용하여 애플리케이션을 빌드 및 배포하고, 로컬 테스트 및 디버깅을 수행하며, CI/CD 파이프라인을 구성하는 등의 작업을 수행할 수 있습니다. AWS SAM 및 CLI 사용에 대한 자세한 내용은 AWS SAM시작하기를 AWS Serverless Application Model개발자 안내서에서 참조하세요.

AWS SAM 템플릿로 AWS CloudFormation콘솔을 사용하여 서버리스 애플리케이션을 배포하는 방법을 알아보려면 AWS CloudFormation콘솔 사용을 AWS CloudFormation사용 설명서에서 시작하세요.

Application Composer와의 Lambda 통합이 지원되는 지역

Application Composer와의 Lambda 통합은 다음 AWS 리전에서 지원됩니다.

  • 미국 동부(버지니아 북부)

  • 미국 동부(오하이오)

  • 미국 서부(캘리포니아 북부)

  • 미국 서부(오레곤)

  • 아프리카(케이프타운)

  • 아시아 태평양(홍콩)

  • 아시아 태평양(하이데라바드)

  • 아시아 태평양(자카르타)

  • 아시아 태평양(멜버른)

  • 아시아 태평양(뭄바이)

  • 아시아 태평양(오사카)

  • 아시아 태평양(서울)

  • 아시아 태평양(싱가포르)

  • 아시아 태평양(시드니)

  • 아시아 태평양(도쿄)

  • 캐나다(중부)

  • 유럽(프랑크푸르트)

  • 유럽(취리히)

  • 유럽(아일랜드)

  • Europe (London)

  • 유럽(스톡홀름)

  • 중동(UAE)