C #을 사용하는 사일로 모델을 위한 SaaS 아키텍처의 테넌트 온보딩 및 AWS CDK - AWS 권장 가이드

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

C #을 사용하는 사일로 모델을 위한 SaaS 아키텍처의 테넌트 온보딩 및 AWS CDK

제작: 태비 워드 (AWS), 수스미타 레디 간키디 (), 비자이 아난드 라말링암 () AWS AWS

코드 리포지토리: 테넌트 온보딩 사일로

환경: PoC 또는 파일럿

기술: 현대화, DevOps

워크로드: 오픈 소스

AWS서비스: AWS CloudFormation; 아마존 DynamoDB; 아마존 DynamoDB 스트림; Lambda; 아마존 게이트웨이 AWS API

요약

서비스형 소프트웨어(SaaS) 애플리케이션은 다양한 아키텍처 모델을 사용하여 구축할 수 있습니다. 사일로 모델은 테넌트에게 전용 리소스가 제공되는 아키텍처를 말합니다.

SaaS 애플리케이션은 마찰 없는 모델을 사용하여 환경에 새로운 테넌트를 도입합니다. 이를 위해서는 새 테넌트를 생성하는 데 필요한 모든 요소를 성공적으로 프로비저닝하고 구성하기 위해 여러 구성 요소를 오케스트레이션해야 하는 경우가 많습니다. SaaS 아키텍처에서는 이 프로세스를 테넌트 온보딩이라고 합니다. 온보딩 프로세스에서 인프라를 코드로 활용하여 모든 SaaS 환경에서 온보딩을 완전히 자동화해야 합니다.

이 패턴은 Amazon Web Services (AWS) 에서 테넌트를 생성하고 테넌트를 위한 기본 인프라를 프로비저닝하는 예를 안내합니다. 패턴은 C #과 AWS Cloud Development Kit (AWSCDK) 를 사용합니다.

이 패턴은 결제 경보를 생성하므로 미국 동부 (버지니아 북부) 또는 us-east-1 지역에 스택을 배포하는 것이 좋습니다. AWS 자세한 내용은 설명서를 참조하십시오. AWS

사전 조건 및 제한 사항

필수 조건

제한 사항

  • AWSCDKAWS CloudFormation용도이므로 AWS CDK 응용 프로그램에는 CloudFormation 서비스 할당량이 적용됩니다. 자세한 내용은 할당량을 참조하십시오 AWS CloudFormation . 

  • 테넌트 CloudFormation 스택은 작업 (sns* 및sqs*) 에 와일드카드 문자가 있는 CloudFormation 서비스 infra-cloudformation-role 역할로 생성되지만 리소스는 접두사로 고정됩니다. tenant-cluster 프로덕션 사용 사례의 경우 이 설정을 평가하고 이 서비스 역할에 필요한 액세스 권한만 제공합니다. 또한 InfrastructureProvision Lambda 함수는 와일드카드 문자 cloudformation* () 를 사용하여 스택을 프로비저닝하지만 리소스는 CloudFormation 접두사로 고정됩니다. tenant-cluster

  • 이 예제 코드의 docker 빌드는 linux/amd64 기반 이미지를 강제 실행하는 데 --platform=linux/amd64를 사용합니다. 이는 최종 이미지 아티팩트가 기본적으로 x86-64 아키텍처를 사용하는 Lambda에 적합하도록 하기 위한 것입니다. 대상 Lambda 아키텍처를 변경해야 하는 경우 Dockerfile과 코드를 모두 변경해야 합니다. AWS CDK 자세한 내용은 AWSLambda 함수를 ARM 기반 Graviton2 프로세서로 마이그레이션하기 블로그 게시물을 참조하십시오. AWS

  • 스택 삭제 프로세스는 스택에서 생성된 CloudWatch 로그 (로그 그룹 및 로그) 를 정리하지 않습니다. AWS관리 콘솔 Amazon CloudWatch 콘솔 또는 를 통해 로그를 수동으로 정리해야 합니다API.

이 패턴은 예시로 설정되었습니다. 프로덕션 용도로 사용하려면 다음 설정을 평가하고 비즈니스 요구 사항에 따라 변경합니다.

  • 이 예제의 AWS심플 스토리지 서비스 (Amazon S3) 버킷에는 단순화를 위해 버전 관리가 활성화되어 있지 않습니다. 필요에 따라 설정을 평가하고 업데이트합니다.

  • 이 예시에서는 간편성을 위해 인증, 권한 부여 또는 스로틀링 없이 Amazon API Gateway REST API 엔드포인트를 설정합니다. 프로덕션 용도로는 시스템을 비즈니스 보안 인프라와 통합하는 것이 좋습니다. 이 설정을 평가하고 필요에 따라 필요한 보안 설정을 추가합니다.

  • 이 테넌트 인프라 예제의 경우 Amazon 단순 알림 서비스 (AmazonSNS)Amazon 단순 대기열 서비스 (AmazonSQS) 에는 최소 설정만 있습니다. 각 테넌트의 AWS키 관리 서비스 (AWSKMS) 는 계정의 Amazon CloudWatch 및 Amazon SNS 서비스를 열어 AWSKMS키 정책에 따라 사용할 수 있습니다. 설정은 플레이스홀더 예제일 뿐입니다. 비즈니스 사용 사례의 필요에 따라 설정을 조정합니다.

  • API엔드포인트와 백엔드 테넌트 프로비저닝 및 사용에 AWS CloudFormation 따른 삭제를 포함하나 이에 국한되지 않는 전체 설정에서는 기본적인 해피 패스 사례만 다룹니다. 비즈니스 요구 사항에 따라 필요한 재시도 로직, 추가 오류 처리 로직, 보안 로직으로 설정을 평가하고 업데이트합니다.

  • 예제 코드는 본 작성 시점의 정책을 확인하기 위해 up-to-date cdk-nag로 테스트되었습니다. 향후 새로운 정책이 시행될 수 있습니다. 이러한 새 정책에 따라 스택을 배포하기 전에 권장 사항에 맞춰 스택을 수동으로 수정해야 할 수도 있습니다. 기존 코드를 검토하여 비즈니스 요구 사항에 맞는지 확인합니다.

  • 코드는 생성된 대부분의 리소스에 대해 AWS CDK 정적으로 할당된 물리적 이름을 사용하는 대신 를 사용하여 임의의 접미사를 생성합니다. 이 설정은 이러한 리소스가 고유하고 다른 스택과 충돌하지 않도록 하기 위한 것입니다. 자세한 내용은 설명서를 참조하십시오. AWS CDK 비즈니스 요구 사항에 따라 이를 조정합니다.

  • 이 예제 코드 패키지. NETLambda 아티팩트를 Docker 기반 이미지로 변환하고 Lambda가 제공한 컨테이너 이미지 런타임으로 실행됩니다. 컨테이너 이미지 런타임은 표준 전송 및 저장 메커니즘(컨테이너 레지스트리)과 보다 정확한 로컬 테스트 환경(컨테이너 이미지를 통한)의 이점을 제공합니다. 제공된 Lambda를 사용하도록 프로젝트를 전환할 수 있습니다. NET런타임을 사용하여 Docker 이미지의 빌드 시간을 단축하지만, 그런 다음 전송 및 저장 메커니즘을 설정하고 로컬 설정이 Lambda 설정과 일치하는지 확인해야 합니다. 사용자의 비즈니스 요구 사항에 맞게 코드를 조정합니다.

제품 버전

  • AWSCDK버전 2.45.0 이상

  • Visual Studio 2022

아키텍처

기술 스택

  • 아마존 API 게이트웨이

  • AWS CloudFormation

  • 아마존 CloudWatch

  • Amazon DynamoDB

  • AWSID 및 액세스 관리 (IAM)

  • AWS KMS

  • AWS람다

  • Amazon S3

  • 아마존 SNS

  • 아마존 SQS

아키텍처

다음 다이어그램은 테넌트 스택 생성 흐름을 나타냅니다. 컨트롤 플레인 및 테넌트 기술 스택에 대한 자세한 내용은 추가 정보 섹션을 참조하세요.

테넌트를 생성하고 테넌트를 위한 기본 인프라를 프로비저닝하는 워크플로우AWS.

테넌트 스택 생성 흐름

  1. 사용자가 Amazon API Gateway에서 JSON REST API 호스팅하는 새 테넌트 페이로드 (테넌트 이름, 테넌트 설명) 가 포함된 POST API 요청을 보냅니다. API게이트웨이는 요청을 처리하여 백엔드 Lambda 테넌트 온보딩 함수로 전달합니다. 이 예시에서는 권한 부여 또는 인증이 없습니다. 프로덕션 설정에서는 이를 SaaS 인프라 보안 시스템과 API 통합해야 합니다.

  2. 테넌트 온보딩 기능은 요청을 확인합니다. 그런 다음 테넌트 이름, 생성된 테넌트 범용 고유 식별자 (UUID) 및 테넌트 설명이 포함된 테넌트 레코드를 Amazon DynamoDB 테넌트 온보딩 테이블에 저장하려고 시도합니다. 

  3. DynamoDB가 레코드를 저장한 후 DynamoDB 스트림은 다운스트림 Lambda 테넌트 인프라 함수를 시작합니다.

  4. 테넌트 인프라 Lambda 함수는 수신된 DynamoDB 스트림을 기반으로 작동합니다. 스트림이 INSERT 이벤트용인 경우 함수는 스트림의 NewImage 섹션 (최신 업데이트 레코드, 테넌트 이름 필드) 을 사용하여 S3 버킷에 저장된 템플릿을 사용하여 새 테넌트 인프라를 CloudFormation 생성하도록 호출합니다. CloudFormation 템플릿에는 테넌트 이름 파라미터가 필요합니다. 

  5. AWS CloudFormation CloudFormation 템플릿 및 입력 매개 변수를 기반으로 테넌트 인프라를 생성합니다.

  6. 각 테넌트 인프라 설정에는 CloudWatch 경보, 청구 경보 및 경보 이벤트가 있습니다.

  7. 알람 이벤트는 SNS 주제에 대한 메시지가 되며, 이 메시지는 테넌트의 AWS KMS 키로 암호화됩니다.

  8. SNS주제는 수신된 경보 메시지를 대기열로 전달하며, SQS 대기열은 테넌트의 AWS KMS 암호화 키로 암호화됩니다.

다른 시스템을 Amazon과 SQS 통합하여 대기열에 있는 메시지를 기반으로 작업을 수행할 수 있습니다. 이 예시에서는 코드를 일반화하기 위해 수신 메시지가 대기열에 남아 있으므로 수동으로 삭제해야 합니다.

테넌트 스택 삭제 흐름

  1. 사용자가 Amazon Gateway에서 JSON REST API 호스팅하는 곳으로 새 테넌트 페이로드 (테넌트 이름, 테넌트 설명) 가 포함된 DELETE API 요청을 보내면 Amazon API Gateway가 요청을 처리하고 테넌트 온보딩 기능으로 전달합니다. 이 예시에서는 권한 부여 또는 인증이 없습니다. 프로덕션 설정에서는 SaaS 인프라 보안 시스템과 API 통합됩니다.

  2. 테넌트 온보딩 기능은 요청을 확인한 다음 테넌트 온보딩 테이블에서 테넌트 레코드(테넌트 이름)를 삭제하려고 시도합니다. 

  3. DynamoDB가 레코드를 성공적으로 삭제하면(레코드가 테이블에 존재하고 삭제됨), DynamoDB 스트림은 다운스트림 Lambda 테넌트 인프라 함수를 시작합니다.

  4. 테넌트 인프라 Lambda 함수는 수신된 DynamoDB 스트림 레코드를 기반으로 작동합니다. 스트림이 REMOVE 이벤트용인 경우 함수는 레코드 OldImage 섹션 (레코드 정보 및 테넌트 이름 필드, 최근 변경 이전, 즉 삭제) 을 사용하여 해당 레코드 정보를 기반으로 기존 스택의 삭제를 시작합니다.

  5. AWS CloudFormation 입력에 따라 대상 테넌트 스택을 삭제합니다.

도구

AWS서비스

  • Amazon API Gateway를 사용하면 규모에 상관없이 생성, 게시, 유지 관리 RESTHTTP, 모니터링 및 WebSocket APIs 보안을 유지할 수 있습니다.

  • AWSCloud Development Kit (AWSCDK) 는 코드로 AWS 클라우드 인프라를 정의하고 프로비저닝하는 데 도움이 되는 소프트웨어 개발 프레임워크입니다.

  • AWSCDK툴킷은 Cloud Development Kit (AWSCDK) 앱과 상호 작용하는 데 도움이 되는 명령줄 AWS 클라우드 개발 키트입니다.

  • AWS명령줄 인터페이스 (AWSCLI) 는 명령줄 셸의 명령을 통해 AWS 서비스와 상호 작용하는 데 도움이 되는 오픈 소스 도구입니다.

  • AWS CloudFormationAWS리소스를 설정하고, 빠르고 일관되게 프로비저닝하고, AWS 계정 및 지역 전반의 라이프사이클 전반에 걸쳐 리소스를 관리할 수 있도록 도와줍니다.

  • Amazon DynamoDB는 완전관리형 데이터베이스 SQL 없음 서비스로서 빠르고 예측 가능하며 확장 가능한 성능을 제공합니다.

  • AWSIdentity and Access Management (IAM) 를 사용하면 리소스 인증 및 사용 권한을 부여받은 사용자를 제어하여 AWS 리소스에 대한 액세스를 안전하게 관리할 수 있습니다.

  • AWS키 관리 서비스 (AWSKMS) 를 사용하면 데이터를 보호하는 데 도움이 되는 암호화 키를 만들고 제어할 수 있습니다.

  • AWSLambda는 서버를 프로비저닝하거나 관리할 필요 없이 코드를 실행할 수 있는 컴퓨팅 서비스입니다. 필요할 때만 코드를 실행하며 자동으로 확장이 가능하므로 사용한 컴퓨팅 시간만큼만 비용을 지불합니다.

  • Amazon Simple Storage Service(Amazon S3)는 원하는 양의 데이터를 저장, 보호 및 검색하는 데 도움이 되는 클라우드 기반 객체 스토리지 서비스입니다.

  • Amazon Simple Notification Service (AmazonSNS) 를 사용하면 웹 서버 및 이메일 주소를 포함하여 게시자와 클라이언트 간의 메시지 교환을 조정하고 관리할 수 있습니다.

  • Amazon Simple Queue Service (AmazonSQS) 는 분산 소프트웨어 시스템 및 구성 요소를 통합하고 분리하는 데 도움이 되는 안전하고 안정적이며 사용 가능한 호스팅 대기열을 제공합니다.

  • AWSVisual Studio용 툴킷은 비주얼 스튜디오 통합 개발 환경 IDE () 을 위한 플러그인입니다. Visual Studio용 툴킷은 개발, 디버깅 및 배포를 지원합니다. NET서비스를 사용하는 응용 프로그램. AWS

기타 도구

  • Visual Studio는 컴파일러, 코드 완성 도구, 그래픽 디자이너 및 소프트웨어 개발을 지원하는 기타 기능을 포함합니다. IDE

코드

이 패턴의 코드는 사일로 APG 모델 예제 저장소용 SaaS 아키텍처의 테넌트 온보딩에 있습니다.

에픽

작업설명필요한 기술

Node.js 설치를 확인합니다.

로컬 시스템에 Node.js가 설치되었는지 확인하려면 다음 명령을 실행합니다.

node --version
AWS관리자, AWS DevOps

AWSCDK툴킷을 설치합니다.

로컬 컴퓨터에 AWS CDK 툴킷을 설치하려면 다음 명령을 실행합니다.

npm install -g aws-cdk

npm이 설치되지 않은 경우 Node.js 사이트에서 설치할 수 있습니다.

AWS관리자, AWS DevOps

AWSCDK툴킷 버전을 확인합니다.

AWSCDK툴킷 버전이 컴퓨터에 제대로 설치되었는지 확인하려면 다음 명령을 실행합니다. 

cdk --version
AWS관리자, AWS DevOps
작업설명필요한 기술

리포지토리를 복제합니다.

리포지토리를 복제하고 \tenant-onboarding-in-saas-architecture-for-silo-model-apg-example 폴더로 이동합니다.

Visual Studio 2022에서 \src\TenantOnboardingInfra.sln 솔루션 파일을 엽니다. TenantOnboardingInfraStack.cs 파일을 열고 코드를 검토합니다.

이 스택의 일부로 생성되는 리소스는 다음과 같습니다.

  • DynamoDB 테이블

  • S3 버킷 ( CloudFormation 템플릿을 S3 버킷에 업로드합니다.)

  • Lambda 실행 역할

  • Lambda 함수

  • API게이트웨이 API

  • Lambda 함수에 대한 이벤트 소스

AWS관리자, AWS DevOps

CloudFormation 템플릿을 검토하세요.

\tenant-onboarding-in-saas-architecture-for-silo-model-apg-example\template폴더에서 CloudFormation 템플릿을 열고 infra.yaml 검토합니다. 이 템플릿은 테넌트 온보딩 DynamoDB 테이블에서 검색된 테넌트 이름으로 하이드레이트됩니다.

템플릿은 테넌트별 인프라를 제공합니다. 이 예시에서는 AWS KMS 키, Amazon SNSSQS, Amazon 및 CloudWatch 경보를 프로비저닝합니다.

앱 개발자, AWS DevOps

테넌트 온보딩 기능을 검토합니다.

Visual Studio AWS Lambda 프로젝트로 생성된 테넌트 온보딩 함수의 코드를 열고 Function.cs 검토합니다 (. NETCore- C#) 템플릿을 사용하십시오. NET6 (컨테이너 이미지) 청사진.

Dockerfile을 열고 코드를 검토합니다. Dockerfile은 Lambda 컨테이너 이미지를 빌드하기 위한 지침으로 구성된 텍스트 파일입니다.

다음 NuGet 패키지가 프로젝트에 종속 항목으로 추가된다는 점에 유의하세요. TenantOnboardingFunction

  • Amazon.Lambda.APIGatewayEvents

  • AWSSDK.DynamoDBv2

  • Newtonsoft.Json

앱 개발자, AWS DevOps

테넌트 InfraProvisioning 기능을 검토하십시오.

\tenant-onboarding-in-saas-architecture-for-silo-model-apg-example\src\InfraProvisioningFunction로 이동합니다.

Visual Studio AWS Lambda 프로젝트로 생성된 테넌트 인프라 프로비저닝 함수의 코드를 열고 Function.cs 검토합니다 (. NETCore- C#) 템플릿을 사용하십시오. NET6 (컨테이너 이미지) 청사진.

Dockerfile을 열고 코드를 검토합니다.

다음 NuGet 패키지가 프로젝트에 종속 항목으로 추가된다는 점에 유의하세요. InfraProvisioningFunction

  • Amazon.Lambda.DynamoDBEvents

  • AWSSDK.DynamoDBv2

  • AWSSDK.Cloudformation

앱 개발자, AWS DevOps
작업설명필요한 기술

솔루션을 빌드합니다.

솔루션을 구축하려면 다음 단계를 수행합니다.

  1. Visual Studio 2022에서 \tenant-onboarding-in-saas-architecture-for-silo-model-apg-example\src\TenantOnboardingInfra.sln 솔루션 파일을 엽니다. 

  2. 솔루션의 컨텍스트 메뉴(마우스 오른쪽 클릭)를 열고 솔루션 빌드를 선택합니다.

참고: 솔루션을 빌드하기 전에 \tenant-onboarding-in-saas-architecture-for-silo-model-apg-example\src\TenantOnboardingInfra 프로젝트에서 Amazon.CDK.Lib NuGet 패키지를 최신 버전으로 업데이트해야 합니다.

앱 개발자

AWSCDK환경을 부트스트랩하세요.

Windows 명령 프롬프트를 열고 cdk.json 파일을 사용할 수 있는 AWS CDK 앱 루트 폴더로 이동합니다 (\tenant-onboarding-in-saas-architecture-for-silo-model-apg-example). 부트스트래핑을 위해 다음 명령을 실행합니다.

cdk bootstrap

자격 증명용 AWS 프로필을 만든 경우 프로필과 함께 명령을 사용하십시오.

cdk bootstrap --profile <profile name>
AWS관리자, AWS DevOps

AWSCDK스택을 나열하세요.

이 프로젝트의 일부로 생성할 스택을 모두 나열하려면 다음 명령을 실행합니다.

cdk ls cdk ls --profile <profile name>

자격 증명에 대한 AWS 프로필을 만든 경우 프로필과 함께 명령을 사용하십시오.

cdk ls --profile <profile name>
AWS관리자, AWS DevOps

어떤 AWS 리소스가 생성될지 검토하세요.

이 프로젝트의 일부로 만들어질 모든 AWS 리소스를 검토하려면 다음 명령어를 실행하세요.

cdk diff

자격 증명을 위한 AWS 프로필을 만든 경우 프로필과 함께 명령을 사용하십시오.

cdk diff --profile <profile name>
AWS관리자, AWS DevOps

를 사용하여 모든 AWS 리소스를 AWS CDK 배포하십시오.

모든 AWS 리소스를 배포하려면 다음 명령을 실행합니다.

cdk deploy --all --require-approval never

자격 증명용 AWS 프로필을 만든 경우 프로필과 함께 명령을 사용하십시오.

cdk deploy --all --require-approval never --profile <profile name>

배포가 완료되면 다음 예와 같이 명령 프롬프트의 출력 섹션에서 를 복사합니다. API URL

Outputs: TenantOnboardingInfraStack.TenantOnboardingAPIEndpoint42E526D7 = https://j2qmp8ds21i1i.execute-api.us-west-2.amazonaws.com/prod/
AWS관리자, AWS DevOps
작업설명필요한 기술

새 테넌트 생성.

새 테넌트를 만들려면 다음 curl 요청을 보냅니다.

curl -X POST <TenantOnboardingAPIEndpoint* from CDK Output>tenant -d '{"Name":"Tenant123", "Description":"Stack for Tenant123"}'

다음 예와 같이 자리 <TenantOnboardingAPIEndpoint* from CDK Output> 표시자를 실제 값으로 변경합니다. AWS CDK

curl -X POST https://j2qmp8ds21i1i.execute-api.us-west-2.amazonaws.com/prod/tenant -d '{"Name":"Tenant123", "Description":"test12"}'

다음은 출력을 보여주는 예제입니다.

{"message": "A new tenant added - 5/4/2022 7:11:30 AM"}
앱 개발자, AWS 관리자, AWS DevOps

DynamoDB에서 새로 생성한 테넌트 세부 정보를 확인합니다.

DynamoDB에서 새로 생성된 테넌트 세부 정보를 확인하려면 다음 단계를 수행합니다.

  1. AWS관리 콘솔을 열고 Amazon DynamoDB 서비스로 이동합니다.

  2. 왼쪽 탐색 창에서 항목 탐색을 선택하고 TenantOnboarding 테이블을 선택합니다.

    참고: 테넌트 이름 앞에 tenantcluster-가 추가됩니다. 자세한 내용은 추가 정보 섹션을 참조하세요.

  3. 테넌트 세부 정보로 새 항목이 생성되었는지 확인합니다.

앱 개발자, 관리자, AWS AWS DevOps

새 테넌트의 스택 생성을 확인합니다.

새 스택이 성공적으로 생성되고 템플릿에 따라 새로 생성된 테넌트를 위한 인프라가 제공되었는지 확인합니다. CloudFormation

  1. 콘솔을 엽니다. CloudFormation

  2. 왼쪽 탐색창에서 스택을 선택하고 테넌트 이름이 포함된 스택이 성공적으로 생성되었는지 확인합니다.

  3. 새로 생성된 테넌트 스택을 선택한 다음 리소스 탭을 선택합니다. 알람 리소스와 Amazon SQS 리소스를 기록해 둡니다.

  4. AWS자격 증명이 구성된 새 터미널을 열고 올바른 지역을 가리키십시오. 테스트 경보를 발생시키려면 다음 코드를 입력하고 <alarm resource name>을 3단계에서 기록해 둔 경보 리소스 이름으로 대체합니다.

    aws cloudwatch set-alarm-state --alarm-name <alarm resource name> --state-value ALARM --state-reason 'Test setup'

    다음 예에서는 경보 리소스 이름이 있는 코드를 보여줍니다.

    aws cloudwatch set-alarm-state --alarm-name tenantcluster-tenant123-alarm --state-value ALARM --state-reason 'Test setup'
  5. 콘솔을 열고 Amazon SQS 콘솔로 이동합니다. 3단계에서 식별한 Amazon SQS 리소스 이름을 선택합니다. AWS설명서 지침에 따라 4단계에서 발생한 경보에서 테스트 메시지를 수신하고 삭제하십시오.

앱 개발자, AWS 관리자, AWS DevOps

테넌트 스택을 삭제합니다.

테넌트 스택을 삭제하려면 다음 curl 요청을 보냅니다.

curl -X DELETE <TenantOnboardingAPIEndpoint* from CDK Output>tenant/<Tenant Name from previous step>

다음 예와 같이 자리 <TenantOnboardingAPIEndpoint* from CDK Output> <Tenant Name from previous step> 표시자를 실제 값으로 변경하고 이전 테넌트 생성 단계의 실제 값으로 변경합니다. AWS CDK

curl -X DELETE https://j2qmp8ds21i1i.execute-api.us-west-2.amazonaws.com/prod/tenant/Tenant123

다음은 출력을 보여주는 예제입니다.

{"message": "Tenant destroyed - 5/4/2022 7:14:48 AM"}
앱 개발자 AWS DevOps, AWS 관리자

기존 테넌트의 스택 삭제를 확인합니다.

기존 테넌트 스택이 삭제되었는지 확인하려면 다음 단계를 수행합니다.

  1. 콘솔을 열고 CloudFormation 콘솔로 이동합니다.

  2. 왼쪽 탐색창에서 테넌트 이름이 있는 기존 스택이 더 이상 콘솔에 없거나 ( CloudFormation 콘솔이 활성 스택만 표시하도록 설정된 경우) 삭제 중인지 확인합니다. 스택이 콘솔에 더 이상 없는 경우 드롭다운 목록을 사용하여 CloudFormation 콘솔 설정을 Active에서 Deleted로 변경하여 삭제된 스택을 확인하고 스택이 성공적으로 삭제되었는지 확인합니다.

앱 개발자, AWS 관리자, AWS DevOps
작업설명필요한 기술

환경 파괴.

스택을 정리하기 전에 다음을 확인합니다.

  • DynamoDB의 모든 레코드는 이전 테넌트 삭제 작업이나 DynamoDB 콘솔 또는 을 통해 제거됩니다. API 각 테넌트 레코드 삭제는 해당 레코드의 정리를 시작합니다. AWS CloudFormation  

  • 모든 테넌트 기반 AWS CloudFormation 스택은 콘솔에서 정리됩니다 (DynamoDB 트리거 정리 로직이 실패할 경우). AWS CloudFormation

테스트가 완료되면 다음 명령을 실행하여 모든 스택과 관련 리소스를 제거하는 데 사용할 AWS CDK 수 있습니다.

cdk destroy --all;

자격 증명에 대한 AWS 프로필을 만든 경우 해당 프로필을 사용하십시오.

스택 삭제 프롬프트를 확인하여 스택을 삭제합니다.

AWS관리자, AWS DevOps

Amazon CloudWatch 로그를 정리하십시오.

스택 삭제 프로세스는 스택에서 생성된 CloudWatch 로그 (로그 그룹 및 로그) 를 정리하지 않습니다. CloudWatch 콘솔이나 를 사용하여 CloudWatch 리소스를 수동으로 정리합니다API.

앱 개발자 AWS DevOps, AWS 관리자

관련 리소스

추가 정보

컨트롤 플레인 기술 스택

에 기록된 CDK 코드. NET다음 리소스로 구성된 컨트롤 플레인 인프라를 프로비저닝하는 데 사용됩니다.

  1. API게이트웨이

    컨트롤 플레인 REST API 스택의 진입점 역할을 합니다.

  2. 테넌트 온보딩 Lambda 함수

    이 Lambda 함수는 Gateway에서 m 메서드를 API 사용하여 시작합니다.

    POST메서드 API 요청으로 인해 Tenant Onboarding DynamoDB 테이블에 (tenant name,tenant description) 가 삽입됩니다.

    이 코드 예제에서 테넌트 이름은 테넌트 스택 이름 및 해당 스택 내 리소스 이름의 일부로도 사용됩니다. 이는 이러한 리소스를 더 쉽게 식별할 수 있도록 하기 위한 것입니다. 충돌이나 오류를 방지하려면 설정에서 이 테넌트 이름이 고유해야 합니다. 자세한 입력 검증 설정은 IAM역할 설명서 및 제한 섹션에 설명되어 있습니다.

    DynamoDB 테이블에 대한 지속성 프로세스는 테넌트 이름이 테이블의 다른 레코드에서 사용되지 않는 경우에만 성공합니다.

    파티션 키만 PutItem 조건 표현식으로 사용할 수 있기 때문에 이 경우 테넌트 이름이 해당 테이블의 파티션 키입니다.

    테넌트 이름이 이전에 기록된 적이 없는 경우 레코드가 테이블에 성공적으로 저장됩니다.

    그러나 테이블의 기존 레코드에서 테넌트 이름을 이미 사용하고 있는 경우 작업이 실패하고 DynamoDB ConditionalCheckFailedException 예외가 시작됩니다. 이 예외는 테넌트 이름이 이미 존재함을 나타내는 실패 메시지(HTTP BadRequest)를 반환하는 데 사용됩니다.

    DELETE메서드 API 요청은 Tenant Onboardin g 테이블에서 특정 테넌트 이름에 대한 레코드를 제거합니다.

    이 예제의 DynamoDB 레코드 삭제는 레코드가 없더라도 성공적으로 삭제됩니다.

    대상 레코드가 존재하고 삭제되면 DynamoDB 스트림 레코드가 생성됩니다. 그렇지 않으면 다운스트림 레코드가 생성되지 않습니다.

  3. 테넌트 온보딩 DynamoDB(Amazon DynamoDB 스트림 사용)

    이렇게 하면 테넌트 메타데이터 정보가 기록되며, 모든 레코드 저장 또는 삭제가 Tenant Infrastructure Lambda 함수로 다운스트림을 전송합니다. 

  4. 테넌트 인프라 Lambda 함수

    이 Lambda 함수는 이전 단계의 DynamoDB 스트림 레코드에 의해 시작됩니다. INSERT이벤트용 레코드의 경우 S3 버킷에 저장된 CloudFormation 템플릿을 사용하여 새 테넌트 인프라를 AWS CloudFormation 생성하도록 호출됩니다. REMOVE를 위한 레코드의 경우 스트림 레코드의 Tenant Name 필드를 기반으로 기존 스택의 삭제를 시작합니다.

  5. S3 버킷

    CloudFormation 템플릿을 저장하기 위한 것입니다.

  6. IAM각 Lambda 함수의 역할 및 서비스 역할 CloudFormation

    각 Lambda 함수에는 작업을 수행하기 위한 최소 권한 권한을 가진 IAM 고유한 역할이 있습니다. 예를 들어, Tenant On-boarding Lambda 함수는 DynamoDB에 대한 읽기/쓰기 액세스 권한을 가지고 있으며 Tenant Infrastructure Lambda 함수는 DynamoDB 스트림을 읽기만 할 수 있습니다.

    테넌트 스택 프로비저닝을 위한 사용자 지정 CloudFormation 서비스 역할이 생성됩니다. 이 서비스 역할에는 CloudFormation 스택 프로비저닝을 위한 추가 권한 (예: AWS KMS 키) 이 포함되어 있습니다. 이렇게 하면 Lambda 간에 역할이 나뉘어 단일 역할 (인프라 Lambda CloudFormation 역할) 에 대한 모든 권한을 피할 수 있습니다.

    강력한 작업 (예: CloudFormation 스택 생성 및 삭제) 을 허용하는 권한은 잠겨 있으며 로 시작하는 리소스에만 허용됩니다. tenantcluster- 단 AWSKMS, 리소스 명명 규칙 때문입니다. 에서 수집된 테넌트 이름은 다른 검증 검사와 tenantcluster- 함께 앞에 API 추가됩니다 (대시가 포함된 영숫자만 사용, 대부분의 리소스 이름 지정에 맞게 30자 미만으로 제한). AWS 이렇게 하면 테넌트 이름으로 인해 실수로 핵심 인프라 스택이나 리소스가 중단되는 일이 발생하지 않습니다.

테넌트 기술 스택

템플릿은 S3 버킷에 저장됩니다. CloudFormation 템플릿은 테넌트별 AWS KMS 키, CloudWatch 경보, SNS 주제, SQS 대기열 및 정책을 제공합니다. SQS

이 AWS KMS 키는 SNS Amazon과 Amazon의 메시지 데이터 암호화에 사용됩니다. SQS Amazon SNS2및 AwsSolutions Amazon의 보안 관행에서는 암호화를 SQS 사용하여 Amazon SNS 및 Amazon을 설정하는 SQS2 것이 좋습니다. AwsSolutions 하지만 AWS 관리 키를 사용할 SNS 때는 Amazon에서 CloudWatch 경보가 작동하지 않으므로 이 경우에는 고객 관리 키를 사용해야 합니다. 자세한 내용은 AWS지식 센터를 참조하십시오.

Amazon SQS 대기열에서 SQS 정책을 사용하여 생성된 SNS 주제가 메시지를 대기열로 전송할 수 있도록 합니다. SQS정책이 없으면 액세스가 거부됩니다. 자세한 내용은 Amazon SNS 설명서를 참조하십시오.