GitHub Actions를 사용하여 애플리케이션 배포 자동화

GitHub Actions를 사용하면 모든 소프트웨어 워크플로를 쉽게 자동화할 수 있습니다. GitHub에서 바로 코드를 빌드, 테스트 및 배포할 수 있습니다. 이 게시물에서는 GitHub Actions를 사용하여 AWS에서 서버리스 애플리케이션 배포를 자동화하는 방법을 살펴봅니다. 또한 AWS 자체 CI/CD 서비스를 사용하여 동일한 결과를 얻을 수 있습니다. 하지만 여기에서는 논의를 GitHub Actions로 제한할 것입니다.

GitHub 작업을 사용하는 방법?



GitHub 작업을 만드는 것은 간단합니다. 자동화하려는 GitHub 리포지토리로 이동하고 "작업"을 클릭합니다.


새 빈 작업 흐름을 만들거나 Marketplace에서 기존 작업을 선택할 수 있는 작업 페이지로 이동합니다. 마켓플레이스의 작업은 워크플로에서 사용할 수 있는 재사용 가능한 작업입니다. 빈 작업을 만들고 마켓플레이스의 일부 작업도 사용할 것입니다.


YAML 파일의 이름을 workflow.yml로 바꾸겠습니다. 원하는 이름을 지정할 수 있습니다. SAM(Serverless Application Model) 템플릿에서 API 게이트웨이로 Lambda 함수를 생성하고 GitHub Actions를 사용하여 배포할 예정입니다.
아래는 SAM 템플릿입니다.

AWSTemplateFormatVersion: '2010-09-09'
Transform: AWS::Serverless-2016-10-31
Description: >
  GitHub Actions demonstration App
Resources:
  ApiGatewayApi:
    Type: AWS::Serverless::Api
    Properties:
      StageName: Prod
    Auth:
     UsagePlan:
      CreateUsagePlan: PER_API
      Description: Usage plan for this API
      Quota:
       Limit: 500
       Period: MONTH
      Throttle:
       BurstLimit: 100
       RateLimit: 50
  LamdbaFunction:
    Type: AWS::Serverless::Function
    Properties:
      CodeUri: ./    
      Handler: lambda.handler
      Runtime: python3.8
      Events:
        getCounter:
          Type: Api
          Properties:
            Path: /hello
            Method: get
            RestApiId: !Ref ApiGatewayApi

람다.py

def handler(event, context):
            return {
        'statusCode': 200,
        'headers': {
            'Content-Type': 'application/json',
            'Access-Control-Allow-Origin': '*'
        },
        'body':'Hello from Lambda!'
        ,
        "isBase64Encoded": False
    }

여기에는 하나의 Lambda 함수와 경로 hello가 있는 API가 포함됩니다. 먼저 SAM CLI를 사용하여 수동으로 배포한 다음 자동화하겠습니다. 아래 세부 정보로 samconfig.toml을 생성합니다.
samconfig.toml에서 SAM 배포 및 업데이트에 사용할 s3_bucket을 생성합니다.

version = 0.1
[default]
[default.deploy]
[default.deploy.parameters]
stack_name = "sam-github-actions-app"
s3_bucket = "aws-sam-cli-managed-default-samclisourcebucket-1xyg1t2j2ws5k"
s3_prefix = "sam-app"
region = "us-east-1"
confirm_changeset = false
capabilities = "CAPABILITY_IAM"

또한 template.yml과 함께 빈 requirements.txt를 만듭니다. CLI에서 SAM 빌드 및 SAM 배포 -g를 실행합니다.


API 게이트웨이로 이동하여 브라우저에서 URL을 누르십시오. "Hello from Lambda!"메시지가 표시되어야 합니다. 응답.


GitHub의 워크플로 파일로 돌아갑니다. 리포지토리에 업데이트를 푸시하는 즉시 배포합니다.
아래는 우리의 workflow.yml입니다.

# This is a basic workflow to help you get started with Actions
name: AWS Lambda & API gateway deployment demonstration
# Controls when the action will run. Triggers the workflow on push or pull request
# events but only for the master branch
on:
  push:
    branches: [ master ]
# A workflow run is made up of one or more jobs that can run sequentially or in parallel
jobs:
  # This workflow contains a single job called "build"
  build:
    # The type of runner that the job will run on
    runs-on: ubuntu-latest
    # Steps represent a sequence of tasks that will be executed as part of the job
    steps:
    # Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it
    - uses: actions/checkout@v2
    # Installs Python
    - name: Set up Python 3.8
      uses: actions/setup-python@v2
      with:
        python-version: 3.8
    # Installs PIP
    - name: Install dependencies
      run: |
        python -m pip install --upgrade pip
    # Configures AWS credentials from github secrets
    - 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: us-east-1
    # Build using SAM 
    - name: SAM Build
      uses: youyo/aws-sam-action/python3.8@master
      with:
        sam_command: build
      env:
          AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }}
          AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
          AWS_DEFAULT_REGION:  us-east-1
    # Deploy on AWS
    - name: sam deploy
      uses: youyo/aws-sam-action/python3.8@master
      with:
          sam_command: 'deploy --stack-name myApp --no-fail-on-empty-changeset'
      env:
          AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }}
          AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
          AWS_DEFAULT_REGION: us-east-1

먼저 마스터에 푸시할 때 이 작업을 실행하고 싶다는 것을 나타냅니다. 그런 다음 단계를 실행할 러너(Ubuntu)를 선택합니다. 단계에서 먼저 코드를 체크아웃한 다음 Python과 해당 종속 항목을 설치합니다. 그런 다음 마켓플레이스의 다른 작업을 사용하여 AWS 자격 증명을 구성한 다음 다른 작업을 사용하여 SAM 빌드 및 SAM 배포를 수행합니다. 명령이 작동하려면 작업에 AWS ACCESS KEY 및 SECRET ACCESS KEY를 제공해야 합니다. 여기서 GitHub Secrets를 설정합니다.



workflow.yml을 체크인하자마자 작업이 트리거됩니다.


스택 배포



이제 AWS 콘솔에 로그인하여 스택이 생성되었는지 확인할 수 있습니다.


리소스 탭으로 이동하여 API 게이트웨이에 액세스합니다. 단계로 이동하여 Prod 단계 API에 액세스합니다.
/hello 경로로 브라우저에서 URL을 열면 아래 출력이 표시됩니다!



축하합니다! GitHub Actions를 사용하여 AWS 배포를 성공적으로 자동화했습니다!
여기에서 코드를 다운로드할 수 있습니다.

좋은 웹페이지 즐겨찾기