이 튜토리얼에서는 데이터베이스 트리거를 생성합니다. 트리거는 문서 컬렉션 에 삽입될 때 타사 API 호출합니다. 트리거의 함수는 공식 AWS 소프트웨어 개발 키트(SDK)를 외부 종속성으로 추가합니다. 그런 다음 함수는 SDK를 사용하여 삽입된 문서 S3 버킷에 확장 JSON 객체 로 쓰기 (write) .
이 작업에 관한 정보
이 튜토리얼의 AWS S3 예시 Node.js 라이브러리가 있는 모든 타사 서비스에 적용되는 패턴 보여줍니다.
서비스의 npm 패키지 외부 종속성으로 추가합니다.
필요한 자격 자격 증명 시크릿으로 저장하고 함수의 값에서 참조하세요.
함수 내에서
require()가 포함된 패키지 가져오고 저장한 자격 증명 사용하여 호출합니다.
시작하기 전에
이 튜토리얼을 완료하려면 다음이 필요합니다.
테스트 컬렉션 있는 Atlas cluster 입니다. 시작하려면 Atlas Infinite 또는 Atlas Core Cluster 생성을 참조하세요.
AWS S3 버킷. 버킷을 생성하는 방법을 학습 AWS 설명서에서 범용 버킷 생성을 참조하세요. 나중에 사용할 수 있도록 다음 사항에 유의하세요.
전체 버킷 이름
AWS 리전
버킷의
inserted-documents/*접두사에s3:PutObject를 허용하는 AWS IAM 정책입니다. 정책을 생성하는 방법을 학습 AWS 설명서에서 IAM 정책 생성을 참조하세요.정책이 연결된 AWS IAM 사용자입니다. 생성 방법을 학습 AWS 설명서의 AWS 계정에서 IAM 사용자 생성을 참조하세요.
IAM 사용자의 액세스 키 및 보안 액세스 키입니다. 생성 방법을 학습 AWS 설명서에서 액세스 키 생성을 참조하세요.
단계
AWS 자격 증명을 값과 비밀로 저장
다음 값과 비밀을 생성하여 AWS 자격 증명 저장 .
AwsAccessKeyId: Value that contains your AWS access key ID.AwsSecretAccessKeySecret: Secret that contains your AWS secret access key.AwsSecretAccessKey: Secret에 연결되는 값입니다. 이를 통해 함수의 시크릿 액세스 키에 액세스 하면서 시크릿으로 안전하게 저장할 수 있습니다.
값 페이지로 이동합니다.
Atlas에서 Triggers 페이지로 이동합니다.
아직 표시되지 않은 경우 탐색 표시줄의 Organizations 메뉴에서 프로젝트가 포함된 조직을 선택합니다.
아직 표시되지 않은 경우 내비게이션 바의 Projects 메뉴에서 프로젝트를 선택합니다.
사이드바에서 Streaming Data 제목 아래의 Triggers를 클릭합니다.
트리거 페이지가 표시됩니다.
View All Apps 버튼을 클릭합니다.
트리거를 생성하려는 앱 클릭합니다.
사이드바에서 Build 제목 아래의 Values를 클릭합니다.
시크릿 액세스 키를 저장합니다.
참고
시크릿 값에는 직접 액세스할 수 없으므로 시크릿에 연결되는 두 번째 값을 생성해야 합니다.
Create a Value를 클릭합니다.
Value Name(으)로
AwsSecretAccessKey을(를) 입력합니다.Value 유형을 선택합니다.
Link to Secret 옵션을 선택합니다.
AwsSecretAccessKeySecret을 입력하고 Create "AwsSecretAccessKeySecret"을 클릭하여 시크릿의 이름을 지정합니다.AWS 시크릿 액세스 키를 시크릿 이름 아래에 표시되는 필드 에 붙여넣습니다.
Save Draft 를 클릭하여 Secret과 Value를 모두 생성합니다.
데이터베이스 트리거 및 해당 함수 만들기
문서 삽입될 때 새 함수를 호출하는 데이터베이스 트리거를 생성합니다. aws-sdk 종속성을 추가하고 동일한 형식으로 함수 코드를 정의합니다.
트리거 페이지로 이동합니다.
Atlas에서 Triggers 페이지로 이동합니다.
아직 표시되지 않은 경우 탐색 표시줄의 Organizations 메뉴에서 프로젝트가 포함된 조직을 선택합니다.
아직 표시되지 않은 경우 내비게이션 바의 Projects 메뉴에서 프로젝트를 선택합니다.
사이드바에서 Streaming Data 제목 아래의 Triggers를 클릭합니다.
트리거 페이지가 표시됩니다.
트리거를 생성합니다.
Add Trigger을 클릭하여 트리거 구성 페이지를 엽니다.
Database 트리거 유형을 선택한 후 다음 값을 사용하여 트리거를 구성합니다:
설정값Trigger NameWriteDocumentToS3TriggerWatch AgainstCollectionCluster Name테스트 클러스터 의 이름
Database Name테스트 데이터베이스 의 이름
Collection Name테스트 컬렉션 의 이름
Operation TypeInsert만 선택합니다.Event TypeFunctionFunction 섹션에서 + New Function를 선택합니다.
다음 코드를 입력하여 함수를 정의합니다.
YOUR_AWS_REGION 및 YOUR_S3_BUCKET_NAME를 AWS Management Console의 자체 AWS 리전과 전체 버킷 이름으로 바꿉니다.
1 /* 2 * Write a newly-inserted document to an S3 bucket as an Extended JSON object. 3 */ 4 exports = async function writeDocumentToS3(changeEvent) { 5 const { fullDocument } = changeEvent; 6 7 // require calls must be in the exports function 8 const S3 = require("aws-sdk/clients/s3"); 9 const s3 = new S3({ 10 accessKeyId: context.values.get("AwsAccessKeyId"), 11 secretAccessKey: context.values.get("AwsSecretAccessKey"), 12 region: "YOUR_AWS_REGION", 13 }); 14 15 const key = `inserted-documents/${fullDocument._id.toString()}.json`; 16 17 // https://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/S3.html#putObject-property 18 await s3.putObject({ 19 Bucket: "YOUR_S3_BUCKET_NAME", 20 Key: key, 21 Body: EJSON.stringify(fullDocument), 22 ContentType: "application/json", 23 }).promise(); 24 25 return `Wrote document ${fullDocument._id} to ${key}`; 26 };
문서 삽입될 때마다 함수는 다음을 수행합니다.
변경 이벤트의
fullDocument필드 에서 삽입된 문서 읽습니다.값에 저장된 AWS 자격 증명 으로 인증하는 S3 클라이언트 생성합니다.
버킷의
inserted-documents/접두사에 문서<_id>.json(으)로 씁니다.
참고
함수는 문서의 _id를 S3 객체 키의 일부로 사용합니다. 문서가 ObjectId 이외의 _id 유형을 사용하는 경우, 키가 예상한 것과 다를 수 있습니다.
트리거 테스트
트리거가 감시하는 컬렉션 에 테스트 문서 삽입합니다. 해당 확장 JSON 객체 S3 버킷의 inserted-documents/ 접두사 아래에 나타나는지 확인합니다.
mongosh을(를) 사용하여 클러스터 에 연결합니다.
트리거가 감시하는 컬렉션 에 문서 삽입합니다.
다음 예시 에서는 테스트 컬렉션 에 문서 하나를 삽입합니다. YOUR_DATABASE_NAME 및 YOUR_COLLECTION_NAME을 트리거를 생성할 때 입력한 데이터베이스 및 컬렉션 으로 바꿉니다.
// Replace YOUR_DATABASE_NAME and YOUR_COLLECTION_NAME with the // database and collection that the Trigger watches. use YOUR_DATABASE_NAME db.YOUR_COLLECTION_NAME.insertOne({ tutorialTest: "atlas-trigger-s3", createdAt: new Date() })
출력에서 insertedId 값을 확인합니다. 함수는 이 값을 S3 객체 의 이름으로 사용합니다.
Confirm that the object exists in your S3 bucket.
AWS Management Console에서 S3 버킷을 열고 inserted-documents/ 접두사로 이동합니다. <insertedId>.json라는 객체 표시되며, 여기서 <insertedId>는 이전 단계의 insertedId 값입니다.
참고
객체 나타나지 않으면 트리거의 실행 로그를 검토 . 방법을 학습 트리거 로그를 참조하세요.