연습

Elastic Beanstalk & CloudFront

atteri 2025. 8. 22. 01:26

이제  운영에 배포한다고 생각하고 Elastic Beanstalk에 올릴거다.

 

환경 구성가서

애플리케이션 이름

환경이름

플랫폼은 서버니까 자바

샘플 애플리케이션으로 만들고

말이 운영이지 연습이니 단일 인스턴스

 

서비스 액세스는 새로만들어도되고 있던거 써도되고

vpc는 디비나 다른거 공유할거로 맞추고 

값싼 마이크로 ec2

 

롤링업데이트는 단일 인스턴스라 못하고

 

이건 환경을 미리 만들고 거기에 prod로 풀 리퀘스트 할때마다 배포하게 하는거니

yml이 아닌 빈스톡 환경에 변수를 전부 입력했다.

특별한 설정은 없었으니 잘 생성됫고 도메인누르면 샘플페이지 뜬다

 

이제 깃 액션

 

name: Deploy to AWS Elastic Beanstalk

on:
  push:
    branches:
      - prod

jobs:
  deploy:
    runs-on: ubuntu-latest
    
    steps:
    - name: Checkout code
      uses: actions/checkout@v4
      
    - name: Set up JDK 17
      uses: actions/setup-java@v4
      with:
        java-version: '17'
        distribution: 'temurin'
        
    - name: Grant execute permission for gradlew
      run: chmod +x gradlew
      
    - name: Build with Gradle
      run: ./gradlew clean bootJar
      
    - name: Configure AWS credentials
      uses: aws-actions/configure-aws-credentials@v4
      with:
        aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
        aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
        aws-region: ${{ secrets.AWS_REGION }}
        
    - name: Deploy to Elastic Beanstalk
      uses: einaregilsson/beanstalk-deploy@v22
      with:
        aws_access_key: ${{ secrets.AWS_ACCESS_KEY_ID }}
        aws_secret_key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
        application_name: ${{ secrets.EB_APPLICATION_NAME }}
        environment_name: ${{ secrets.EB_ENVIRONMENT_NAME }}
        version_label: ${{ github.sha }}
        region: ${{ secrets.AWS_REGION }}
        deployment_package: build/libs/board-api.jar

환경변수는 빈스톡에 입력해놧으니

빈스톡에 배포하고 배포되는 소스를 s3에 저장시키기 위해 iam을 만들고 

AdministratorAccess-AWSElasticBeanstalk
AmazonS3FullAccess
AWSCloudFormationFullAccess
IAMFullAccess

필요한 권한을 부여

 

깃 시크릿에 키 아디, 시크릿키, 레기온 저장하고

실행하니 바로 성공.

 

바로 route53에 board-api.prod로 좀 구린 레코드 생성하고  프록시 설정하니 정상적으로 설정한 도메인으로 응답 확인

아재 리액트를 운영배포한다고 생각하자

 

s3와 cloudeFront를 사용한다

 

먼저 s3를 생성하고 권한은 그냥 다 차단해둔다

 

빌드한 파일 올리고 클라우드 프론트로 가

 

 

 

저 빨간곳에 아까 만든 s3연결시키고 

뒤에 나오는 보안쪽은 돈나가니까 끄고 마지막으로 확인하고 생성

 

생성이 되면 설정에서

이렇게 추가해야 라우트가 정상적으로 된다고 하더라

 

이제 배포 도메인 이름으로 접속해보면 접속이 잘 되는걸 확인하고

 

name: Production S3 Deploy and CloudFront Invalidation

on:
  push:
    branches:
      - prod

env:
  NODE_VERSION: '22'
  AWS_REGION: ap-northeast-2

jobs:
  deploy:
    runs-on: ubuntu-latest
    environment: production
    
    steps:
      - name: Checkout repository
        uses: actions/checkout@v4

      - name: Setup Node.js
        uses: actions/setup-node@v4
        with:
          node-version: ${{ env.NODE_VERSION }}
          cache: 'npm'

      - name: Install dependencies
        run: npm ci

      - name: Build for production
        run: npm run build
        env:
          VITE_SERVER_URL: ${{ secrets.VITE_PROD_SERVER_URL }}
          VITE_AUTH_URL: ${{ secrets.VITE_PROD_AUTH_URL }}
          VITE_APP_ENV: production
          VITE_APP_COOKIE_DOMAIN: ${{ secrets.VITE_PROD_COOKIE_DOMAIN }}

      - name: Configure AWS credentials
        uses: aws-actions/configure-aws-credentials@v4
        with:
          aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
          aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
          aws-region: ${{ env.AWS_REGION }}

      - name: Deploy to S3
        run: |
          aws s3 sync ./dist s3://${{ secrets.S3_BUCKET_NAME }} --delete --cache-control max-age=31536000,public
          aws s3 cp s3://${{ secrets.S3_BUCKET_NAME }}/index.html s3://${{ secrets.S3_BUCKET_NAME }}/index.html --cache-control max-age=0,no-cache,no-store,must-revalidate --content-type text/html

      - name: Invalidate CloudFront
        run: |
          DISTRIBUTION_ID="${{ secrets.CLOUDFRONT_DISTRIBUTION_ID }}"
          INVALIDATION_ID=$(aws cloudfront create-invalidation --distribution-id $DISTRIBUTION_ID --paths "/*" --query 'Invalidation.Id' --output text)
          echo "CloudFront invalidation created with ID: $INVALIDATION_ID"
          echo "Waiting for invalidation to complete..."
          aws cloudfront wait invalidation-completed --distribution-id $DISTRIBUTION_ID --id $INVALIDATION_ID
          echo "✅ CloudFront invalidation completed!"

prod 브런치로 푸시되면 실행하는 액션이다.

 

개발서버와 중복되는 시크릿이 있으나

 

여기서 환경을 설정하고 해당 환경 내부에 시크릿값을 저장시키면

 

jobs:
  deploy:
    runs-on: ubuntu-latest
    environment: production

요기 액션에 설정한 환경에 우선순위가 되서 여기 환경에 설정한 시크릿값이 입력된다.

환경에 없는값은 원래 작성해둔 전역? 시크릿값을 참조한다고 하더라

 

이제 도메인 설정을 위해 클라우드프론트 배포에서

이친구를 누른다

 

 도메인을 입력하고

 

하단에 인증서 만들기 누르면 알아서 설정하고 만들어주더라

 

다하고

 

route53에서 

레코드생성 

클라우드프론트 선택하고 아래 누르면 방금만들었던 내용이 뜨니 그거선택하고 도메인설정되면 완료

 

쿠키도 잘만들어지고 로그인도 유지되는거보니 환경변수 오타도 없나보다

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

백 개발 배포  (0) 2025.08.20
백+프론트 연결  (0) 2025.08.19
api서버 & 람다 추가  (1) 2025.08.19
프론트  (0) 2025.08.16
람다 3  (3) 2025.08.15