구현 기록용
1. AWS IAM(Identity and Access Management) 셋팅
IAM 역할 생성 단계
1. AWS Management Console 로그인
AWS Management Console에 로그인합니다. IAM 서비스를 검색하거나 대시보드에서 찾아서 엽니다.
2. 역할 생성
- IAM 대시보드에서 역할 섹션을 선택하고 역할 만들기 버튼을 클릭합니다.
- 신뢰할 수 있는 엔티티 유형 선택 화면에서 AWS 서비스를 선택하고, 사용할 서비스 유형을 선택합니다. CodeDeploy의 경우 CodeDeploy를, EC2 인스턴스의 경우 EC2 서비스를 선택합니다.
3. 권한 정책 연결
- 역할에 연결할 권한 정책을 선택합니다. 예를 들어:
- EC2 인스턴스를 위한 역할에는 AmazonEC2FullAccess, AmazonS3ReadOnlyAccess 등의 정책을 연결할 수 있습니다.
- CodeDeploy 역할의 경우 AWSCodeDeployRole 정책을 사용합니다. 이 정책은 CodeDeploy가 EC2 인스턴스에 애플리케이션을 배포하는 데 필요한 권한을 제공합니다.
- 필요에 따라 추가적인 정책을 선택할 수 있습니다.
4. 태그 추가 (선택 사항)
- 역할에 태그를 추가할 수 있습니다. 태그는 관리 및 추적을 용이하게 합니다.
5. 역할 이름 및 설명 입력
- 역할에 명확하고 구체적인 이름을 입력합니다. 예: CodeDeployServiceRole, EC2CodeDeployRole 등.
- 역할에 대한 설명도 추가합니다. 이는 나중에 역할을 식별하는 데 도움이 됩니다.
6. 역할 생성 완료
- 모든 설정을 검토한 후 역할 만들기를 클릭하여 역할을 생성합니다.
추가 정보
- EC2 인스턴스용 역할은 EC2 인스턴스가 다른 AWS 서비스(예: S3, DynamoDB)에 액세스할 수 있도록 설정하는 데 사용됩니다.
- CodeDeploy 역할은 AWS CodeDeploy가 AWS 리소스에 액세스하여 애플리케이션을 배포할 수 있도록 합니다.
2. EC2에 CodeDeploy 설치
sudo yum update
sudo yum install ruby
sudo yum install wget
cd /home/ec2-user
wget https://aws-codedeploy-{region}.s3.{region}.amazonaws.com/latest/install
chmod +x ./install
sudo ./install auto
또는
sudo apt-get update
sudo apt-get install -y ruby wget
cd /home/ubuntu
wget https://aws-codedeploy-{region}.s3.{region}.amazonaws.com/latest/install
chmod +x ./install
sudo ./install auto
sudo service codedeploy-agent status
3. AWS CodeDeploy 애플리케이션 및 배포 그룹설정
1. AWS CodeDeploy 애플리케이션 생성
- AWS Management Console에 로그인하고, 서비스 메뉴에서 CodeDeploy를 선택합니다.
- CodeDeploy 대시보드에서 애플리케이션 생성을 클릭합니다.
- 애플리케이션 이름을 입력하고, 계산 플랫폼으로 EC2/온프레미스를 선택합니다. 애플리케이션 이름은 프로젝트를 명확하게 식별할 수 있는 이름이어야 합니다.
- 애플리케이션 생성 버튼을 클릭하여 애플리케이션을 만듭니다.
2. 배포 그룹 생성
- 새로 생성한 애플리케이션의 상세 페이지에서 배포 그룹 생성을 클릭합니다.
- 배포 그룹 이름을 입력합니다. 이 이름은 배포를 관리할 때 사용됩니다.
- 서비스 역할에서 이전에 생성한 IAM 역할을 선택합니다. 이 역할은 CodeDeploy가 EC2 인스턴스에 접근하여 코드를 배포할 수 있게 허용합니다.
- 배포 유형에서 원하는 배포 설정을 선택합니다. 일반적으로 현재 위치에 배포가 가장 많이 사용됩니다.
- 환경 구성에서 배포할 EC2 인스턴스를 지정합니다. 인스턴스를 태그, Auto Scaling 그룹, 또는 직접 선택 방식으로 지정할 수 있습니다.
- 예를 들어, Amazon EC2 인스턴스를 선택하고 인스턴스에 설정한 특정 태그로 필터링할 수 있습니다.
- 로드 밸런서 설정은 선택 사항입니다. 로드 밸런서를 사용하는 경우, 해당 섹션에서 로드 밸런서를 설정할 수 있습니다.
- 배포 설정에서 배포 방법을 선택할 수 있습니다. 예를 들어, CodeDeployDefault.AllAtOnce (한 번에 모든 인스턴스에 배포), CodeDeployDefault.HalfAtATime (절반씩 순차적 배포) 등의 옵션이 있습니다.
- 배포 그룹 생성을 클릭하여 배포 그룹을 완성합니다.
3. 설정 검토 및 저장
- 모든 설정을 검토하고, 최종적으로 확인한 후에 저장 버튼을 클릭합니다.
4. 프로젝트에 appspec.yml 파일 생성
우분투 예시
version: 0.0
os: linux
files:
- source: /
destination: /home/ubuntu/your-app-directory
hooks:
ApplicationStop:
- location: scripts/stop_server.sh
timeout: 300
runas: ubuntu
AfterInstall:
- location: scripts/install_dependencies.sh
timeout: 300
runas: ubuntu
ApplicationStart:
- location: scripts/start_server.sh
timeout: 300
runas: ubuntu
ValidateService:
- location: scripts/validate_server.sh
timeout: 300
runas: ubuntu
start_server.sh, stop_server.sh 등 파일 커스텀 예시
#!/bin/bash
# 이 스크립트는 Node.js 애플리케이션을 시작합니다.
cd /home/ubuntu/your-app-directory # 애플리케이션 디렉토리로 이동
npm install # 필요한 패키지 설치
npm start # 애플리케이션 시작
#!/bin/bash
# 이 스크립트는 Node.js 애플리케이션을 중지합니다.
# 'killall node'는 모든 Node 프로세스를 중지합니다. 더 세밀한 제어가 필요한 경우 다른 방법을 사용하세요.
pkill node
5. GitHub Actions 설정
1. 필요 조건
- AWS 계정이 필요합니다.
- AWS IAM 사용자를 생성하고, CodeDeploy 및 S3에 접근할 수 있는 적절한 권한을 부여받은 Access key ID와 Secret access key가 필요합니다.
- GitHub 저장소에 프로젝트 코드가 있어야 하며, GitHub Actions를 사용할 수 있어야 합니다.
2. GitHub Secrets 설정
- GitHub 저장소에서 Settings > Secrets > Actions로 이동합니다.
- 다음과 같은 Secrets을 추가합니다:
- AWS_ACCESS_KEY_ID: AWS IAM 사용자의 액세스 키 ID.
- AWS_SECRET_ACCESS_KEY: AWS IAM 사용자의 시크릿 액세스 키.
- AWS_REGION: 예를 들어, us-east-1.
- AWS_S3_BUCKET: 배포 파일을 저장할 S3 버킷의 이름.
- CODEDEPLOY_APPLICATION: CodeDeploy 애플리케이션 이름.
- CODEDEPLOY_GROUP: 배포 그룹 이름.
3. GitHub Workflow 파일 생성
- .github/workflows 디렉토리 내에 deploy.yml 파일을 생성합니다.
- 이 파일은 GitHub Actions의 설정을 담고 있으며, 다음과 같이 구성할 수 있습니다:
name: Deploy to AWS CodeDeploy
on:
push:
branches:
- main # main 브랜치에 push될 때마다 실행됩니다.
jobs:
build-and-deploy:
runs-on: ubuntu-latest
steps:
- name: Checkout Code
uses: actions/checkout@v2
- name: Zip the project
run: zip -r deploy.zip . # 전체 프로젝트를 zip 파일로 압축
- name: Upload to S3
uses: jakejarvis/s3-sync-action@master
with:
args: --acl public-read --follow-symlinks --delete
env:
AWS_S3_BUCKET: ${{ secrets.AWS_S3_BUCKET }}
AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }}
AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
AWS_REGION: ${{ secrets.AWS_REGION }}
SOURCE_DIR: './deploy.zip'
- name: Deploy to CodeDeploy
id: deploy
uses: webfactory/create-aws-codedeploy-deployment@v1
with:
application: ${{ secrets.CODEDEPLOY_APPLICATION }}
deployment-group: ${{ secrets.CODEDEPLOY_GROUP }}
s3-bucket: ${{ secrets.AWS_S3_BUCKET }}
s3-key: deploy.zip
region: ${{ secrets.AWS_REGION }}
wait-until-deployed: true
- name: Output deployment status
run: echo "Deployment ${{ steps.deploy.outputs.deployment-id }} status ${{ steps.deploy.outputs.status }}"
IAM 사용자 엑세스키 만드는법
1. IAM 사용자 생성
- AWS Management Console 로그인: AWS Management Console에 로그인합니다.
- IAM 대시보드 접속: 상단 메뉴에서 "서비스"를 선택하고, 보안, 자격 증명 및 준수 섹션에서 "IAM"을 클릭합니다.
- 사용자 추가:
- 좌측 메뉴에서 "사용자"를 클릭하고, 화면 상단의 "사용자 추가" 버튼을 클릭합니다.
- 사용자 이름을 입력하고, "프로그래밍 방식 액세스"를 활성화합니다. 이 옵션은 해당 사용자에게 API, CLI, SDK 등을 통한 접근을 가능하게 해줍니다.
- 권한 설정:
- 기존 정책 직접 연결: 사용자에게 필요한 정책을 검색하여 선택합니다. 예를 들어, CodeDeploy 작업을 수행하려면 AWSCodeDeployFullAccess 권한을 부여할 수 있습니다.
- 권한 부여에 대한 좋은 방침은 최소 권한 원칙을 따르는 것입니다. 필요한 권한만큼만 부여하세요.
2. 액세스 키 생성
- 액세스 키 생성:
- 사용자 생성 과정의 마지막 단계에서 "액세스 키 생성" 옵션을 볼 수 있습니다. 이 버튼을 클릭하면 새 액세스 키 ID와 비밀 액세스 키가 생성됩니다.
- 이 정보는 한 번만 표시되므로, 안전한 곳에 저장해야 합니다. "다운로드 .csv" 버튼을 클릭하여 키 정보를 담은 파일을 안전하게 저장할 수 있습니다.
- 액세스 키 사용:
- 이 키들은 AWS CLI, SDKs, 그리고 다른 개발 도구에서 AWS 서비스에 프로그래밍 방식으로 접근할 때 사용됩니다.
6. deploy.yml 파일 구성
파일위치 : 프로젝트 ROOT .github/workflows 디렉토리
name: Deploy to AWS EC2
on:
push:
branches:
- main
jobs:
deploy:
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v2
- name: Zip the repository
run: zip -r deployment-package.zip .
- name: Upload to S3
uses: jakejarvis/s3-sync-action@master
with:
args: --acl public-read --follow-symlinks --delete
env:
AWS_S3_BUCKET: ${{ secrets.AWS_S3_BUCKET }}
AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }}
AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
AWS_REGION: 'your-region' # 변경 필요
SOURCE_DIR: './'
- name: Deploy to AWS CodeDeploy
uses: webfactory/create-aws-codedeploy-deployment@v1
with:
application-name: 'YourApplicationName'
deployment-group: 'YourDeploymentGroupName'
s3-bucket: ${{ secrets.AWS_S3_BUCKET }}
s3-key: deployment-package.zip
region: 'your-region' # 변경 필요
'Programing' 카테고리의 다른 글
AI 기반 음성인식 기술 활용 사례 (0) | 2024.12.27 |
---|---|
맥북 Intel에서 M1칩 기종으로 바꾸면서.. (2) | 2023.12.04 |
ec2 nodejs forever 설치 안되는 경우 (0) | 2023.08.25 |
[Swift][iOS] Google 로그인 (최신) (0) | 2023.07.26 |
[XCODE][iOS][SWIFT] Storyboard 기반프로젝트에서 SwiftUI사용하기 (0) | 2023.07.20 |