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응답 확인

다이나모 콘솔 들어가보니 정상적으로 저장됬다.
이제 진짜 화면만들어야지