연습

람다 3

atteri 2025. 8. 15. 11:57

jwt시크릿이나 디비정보등을 가리고 배포하기 편하게 github action을 등록하려한다.

 

Environment:
  Variables:

에 적어놧던거 다 저장시키고

 

name: Deploy to Dev Environment

on:
  push:
    branches:
      - dev

jobs:
  build-and-deploy:
    runs-on: ubuntu-latest

    steps:
      - name: Checkout code
        uses: actions/checkout@v3

      - name: Setup Node.js
        uses: actions/setup-node@v3
        with:
          node-version: '22' # Node.js 버전에 맞게 수정

      - name: Configure AWS credentials
        uses: aws-actions/configure-aws-credentials@v1
        with:
          aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
          aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
          aws-region: ap-northeast-2 # AWS 리전에 맞게 수정

      - name: Setup SAM CLI
        uses: aws-actions/setup-sam@v2

      - name: Install dependencies manually
        run: |
          cd auth
          npm ci
          echo "Dependencies installed:"
          ls -la node_modules/

      - name: Build for dev
        run: sam build -t dev.yaml && sam deploy -t dev.yaml --config-env dev --parameter-overrides "ISSUER=${{ secrets.JWT_ISSUER }} SECRET=${{ secrets.JWT_SECRET }} DATABASE=${{ secrets.DATABASE }} HOSTNAME=${{ secrets.HOSTNAME }} USERNAME=${{ secrets.USERNAME }} PASSWORD=${{ secrets.PASSWORD }}"

dev 브런치에 적용되면 실행

Parameters:
  ISSUER:
    Type: String
    Default: "no_issuer"
  SECRET:
    Type: String
    Default: "no_secret"
  DATABASE:
    Type: String
    Default: "no_db"
  HOSTNAME:
    Type: String
    Default: "no_host"
  USERNAME:
    Type: String
    Default: "no_user"
  PASSWORD:
    Type: String
    Default: "no_pass"



    Environment:
      Variables:
        ISSUER: !Ref ISSUER
        SECRET: !Ref SECRET
        DATABASE: !Ref DATABASE
        HOSTNAME: !Ref HOSTNAME
        USERNAME: !Ref USERNAME
        PASSWORD: !Ref PASSWORD

dev.yaml수정

 

동작확인.

 

 

 

하면서 여러 문제가있었는데

 

처음에는 Parameters나 --parameter-overrides 없이 ${변수}로 시도했는데 적용이 안되서 이걸로 수정했다.

 

수정하고보니  jwt관련 변수명이 원래 JWT_붙었는데 배포 과정중 AWS CloudFormation에서 영문과 숫자만 사용해야 한다고 오류가 발생해 뒷부분만 사용하게 수정.

 

다시 시도하니 환경변수는 정삭적으로 등록된걸 확인

 

근데 서버에러가 발생해서 보니 node_modules가 생성이 안됬더라...

 

딜드를 시키고 디폴로이하는데 왜안생기나 따로 실행해보고 나눠보고 했는데 안생겨서

- name: Install dependencies manually
  run: |
    cd auth
    npm ci
    echo "Dependencies installed:"
    ls -la node_modules/

실행시키고 나서 빌드하고 배포하게 수정하니 진짜 성공하더라..

 

어쨋든 람다로 로그인 토큰 만들어주는 함수를 자동배포까지 만들었고

정작 로그인 할 화면이없으니 만들어야지

 

아니다 dynamodb까지 해보려고했구나

 

dev.yaml 에서

Parameters:
  ISSUER:
    Type: String
    Default: "no_issuer"
  SECRET:
    Type: String
    Default: "no_secret"
  DATABASE:
    Type: String
    Default: "no_db"
  HOSTNAME:
    Type: String
    Default: "no_host"
  USERNAME:
    Type: String
    Default: "no_user"
  PASSWORD:
    Type: String
    Default: "no_pass"
  DYNAMODB:
    Type: String

파라미터에 추가하고

Environment:
  Variables:
    ISSUER: !Ref ISSUER
    SECRET: !Ref SECRET
    DATABASE: !Ref DATABASE
    HOSTNAME: !Ref HOSTNAME
    USERNAME: !Ref USERNAME
    PASSWORD: !Ref PASSWORD
    DYNAMODB: !Ref DYNAMODB

추가하고

Resources:
  LoginFunction:
    Type: AWS::Serverless::Function
    Properties:
      CodeUri: ./auth
      Handler: app.login
      Policies:
        - DynamoDBCrudPolicy:
            TableName: !Ref DYNAMODB

추가하고

깃 액션이랑 시크릿에도 추가하고

 

타임아웃이 난다

 

람다에서 다이나모에 못붙어서 찾아보니

vpc > 엔드포인트에서 엔드포인트 생성이 필요하다고 한다.

 

이름 적고 

aws 서비스

com.amazonaws.ap-northeast-2.dynamodb gateway

vpc선택라우팅 테이블 체크엔드포인트 생성

 

하니

 

"message": "One or more parameter values were invalid: Missing the key user_idx in the item"

 

연결은됬는데 카멜케이스랑 스네이크케이스 다른거로 인식하니 통일시키래서 통일시키고 

다시 200응답 확인

 

다이나모 콘솔 들어가보니 정상적으로 저장됬다.

 

이제 진짜 화면만들어야지

'연습' 카테고리의 다른 글

api서버 & 람다 추가  (1) 2025.08.19
프론트  (0) 2025.08.16
람다 이어서  (3) 2025.08.14
람다  (1) 2025.08.12
환경  (4) 2025.08.02