반응형
    
    
    
  AWS Lambda에서 Layer를 사용하여 Node.js로 샘플 코드를 구현하는 방법
Layer를 활용하면 라이브러리(예: axios)를 Lambda 코드와 분리하여 관리할 수 있어 효율적입니다.
1. Layer 생성 및 설정
작업 디렉토리 생성 및 이동
mkdir ~/lambda-slack-layercd ~/lambda-slack-layerLayer 디렉토리 구조 생성
- Layer는 Lambda 런타임에서 요구하는 구조로 만들어야 합니다.
mkdir -p layer/nodejs
cd layer/nodejs종속성 설치
- Slack Webhook 요청에 필요한 axios 라이브러리를 설치합니다.
npm init -y
npm install axiosLayer 압축
- Layer 파일을 .zip 형식으로 압축합니다.
cd ..
zip -r ../slack-layer.zip .
cd ..2. Layer 업로드
AWS Lambda Console을 사용
Lambda 서비스 > 계층 > 계층 생성
- 계층 이름 : slack-layer
- 압축 파일 : slack-layer.zip
- 호환 가능한 런타임: Node.js 22.x
계층 생성 합니다.
AWS CLI를 사용
Lambda의 목록 조회
aws lambda list-functions \
    --query 'Functions[].FunctionName' \
    --output json | jq -r 'to_entries | .[] | "\(.key + 1). \(.value)"'더보기
---
aws lambda list-functionsaws lambda list-functions \
	--region us-east-1 \
    --query 'Functions[].FunctionName' \
    --output json | jq -r '.[]'---
Lambda Layers(레이어)의 목록 조회
aws lambda list-layers \
    --region us-east-1 \
    --query 'Layers[].LayerName' \
    --output textLambda Layers를 업로드
aws lambda publish-layer-version \
	--region us-east-1 \
    --layer-name slack-layer \
    --compatible-runtimes nodejs22.x \
    --zip-file fileb://slack-layer.zip{
    "Content": {
        "Location": "https://layers.s3.us-east-1.amazonaws.com/snapshots/121234567890/slack-layer",
        "CodeSha256": "2hg8w0CV7Mvj0DmNCIeYsh7Pw8N37qRZ09uEkdZOLRU=",
        "CodeSize": 688538
    },
    "LayerArn": "arn:aws:lambda:us-east-1:121234567890:layer:slack-layer",
    "LayerVersionArn": "arn:aws:lambda:us-east-1:121234567890:layer:slack-layer:1",
    "Description": "",
    "CreatedDate": "2024-11-27T06:40:18.566+0000",
    "Version": 1,
    "CompatibleRuntimes": [
        "nodejs22.x"
    ]
}- 생성된 Layer의 ARN을 기록합니다. (예: arn:aws:lambda:region:account-id:layer:slack-layer:1)
Lambda Layers(레이어)의 목록 조회
aws lambda list-layers \
    --region us-east-1 \
    --query 'Layers[].LayerName' \
    --output textslack-layer3. Lambda 함수 구현
cd ~/lambda-slack-layerLambda 핸들러 파일 생성
- index.mjs 파일을 생성하고 Slack 메시지를 보내는 코드를 작성합니다.
vim index.mjsimport axios from 'axios'; // Layer에서 제공되는 axios 사용
export const handler = async (event) => {
    // 환경 변수로 관리된 Slack Webhook URL
    const webhookUrl = process.env.SLACK_WEBHOOK;
    // 전송할 메시지 페이로드
    const payload = {
        text: "Hello! This message is from AWS Lambda using Layers!",
        channel: process.env.SLACK_CHANNEL || "#your-channel", // 환경 변수로 관리
        username: "Lambda Bot"
    };
    try {
        // Slack Webhook으로 메시지 전송
        const response = await axios.post(webhookUrl, payload);
        // Slack 응답 상태 코드 확인
        if (response.status === 200) {
            console.log("Slack response:", response.data);
            return {
                statusCode: 200,
                body: JSON.stringify({
                    message: "Message sent to Slack successfully",
                    slackResponse: response.data
                }),
            };
        } else {
            throw new Error(`Slack responded with status: ${response.status}`);
        }
    } catch (error) {
        console.error("Error sending message to Slack:", error.message);
        return {
            statusCode: 500,
            body: JSON.stringify({
                message: "Failed to send message to Slack",
                error: error.message
            }),
        };
    }
};Lambda 함수 압축
- 코드 파일을 압축합니다.
zip function.zip index.mjs4. Lambda 함수 배포 및 Layer 연결
AWS Lambda 콘솔 사용
AWS Lambda 콘솔에서 "함수 생성" 클릭
- Lambda > 함수
- 함수 이름 : sendSlackMessage
- 런타임 : Node.js 22.x

함수 생성 후 function.zip 파일을 업로드합니다.
- 코드
- 코드 업로드 : function.zip

함수 생성 후 계층에 slack-layer를 추가합니다.
- 코드 > 계층
- "Add a layer" 버튼 클릭 후 slack-layer 선택

- 계층 소스 : 사용자 지정 계층
- 사용자 지정 계층 : slack-layer
- 버전 : 2

환경 변수 설정
- 구성 > 환경 변수
- SLACK_WEBHOOK : Slack Webhook URL
SLACK_WEBHOOK: https://hooks.slack.com/services/T00000000/B00000000/XXXXXXXXXXXXXXXXXXXXXXXX- SLACK_CHANNEL : Slack 채널 이름 (예: #general)
SLACK_CHANNEL: #alertsAWS CLI 사용
aws lambda create-function \
    --function-name send-slack-message \
    --runtime nodejs22.x \
    --role <execution-role-arn> \
    --handler index.handler \
    --code S3Bucket=<s3-bucket>,S3Key=function.zip \
    --layers <layer-arn>5. 함수 테스트
AWS Lambda 콘솔에서 테스트 이벤트를 생성합니다.
- 테스트
- 이벤트 이름 : TestSlack)
- 기본 템플릿으로 생성
테스트 실행
- Slack 채널에 메시지가 전송됩니다.

AWS Lambda Layer와 Node.js를 사용하여 Slack Webhook 메시지를 성공적으로 구현했습니다.
728x90
    
    
  반응형
    
    
    
  '퍼블릭 클라우드' 카테고리의 다른 글
| Amazon Route 53과 AWS Global Accelerator의 속도 및 비용 비교 (0) | 2025.01.02 | 
|---|---|
| 우분투에서 AWS CDK를 설치하고 간단한 샘플을 실행하는 방법 (0) | 2024.12.02 | 
| AWS Lambda에서 Node.js 샘플 코드를 실행하는 방법 (0) | 2024.11.27 | 
| 인스턴스 메타데이터에 액세스하는 방법 (0) | 2024.10.08 | 
| AWS EC2 인스턴스 메타데이터 서비스 v2를 사용하는 방법 (0) | 2024.09.25 | 
 
                  
                 
                  
                 
                  
                