GitHub Actions를 사용하여 AWS Lambda에 자동 배포
7388 단어 ServerlessFrameworkGitHubAWS
전치
소스 코드의 관리를 GitHub로 행하고 있으므로 CI/CD도 GitHub에 통일할 수 있으면 편하구나~라고 생각해, GitHub Actions를 여러가지 검증하거나, 실제로 스테이징·프로덕션 환경에 배치하는데 사용하기도 하고 있습니다.
그래서 이번에는 AWS Lambda에 자동 배포하는 방법을 설명하고 싶습니다.
개요
CD는 제목대로 GitHub Actions를 사용하고 배포에는 Serverless Framework을 사용합니다. 그냥 배포하기 쉽기 때문에 GitHub의 Secrets에서 Lambda의 환경 변수로 값을 설정합니다.
데모용 앱은 여기 에 놓여 있기 때문에 fork하여 GitHub의 Secrets에 AWS 인증 데이터와 Slack의 Incoming Webhooks URL을 설정하여 뭔가 편집하고 commit/push하면 자동 배포를 체험할 수 있도록 하고 있습니다. 배포에 성공하면 Lambda가 실행되어 Lambda에서 Slack에 알림이 가게 되어 있습니다.
자동 배포 방법
Serverless Framework
Slack Incoming Webhook URL은 호스트 환경 변수에서 가져옵니다.
serverless.ymlservice: auto-deploy-lambda
provider:
name: aws
region: ap-northeast-1
timeout: 120
environment:
SLACK_WEBHOOK: ${env:SLACK_WEBHOOK}
package:
exclude:
- Dockerfile
- docker-compose.yml
functions:
slack:
handler: src/index.post
description: "Post message to Slack"
timeout: 60
GitHub Actions
리포지토리에 있는 정의 파일 .github/workflows/deploy.yml
는 모두 코멘트 아웃하고 있으므로, 데모를 할 때는 코멘트 하지 않고 실시해 주세요.
해야 할 일은 GitHub의 Secrets에 세 가지 매개 변수 설정이 있습니다. AWS_ACCESS_KEY_ID
, AWS_SECRET_ACCESS_KEY
, SLACK_WEBHOOK
입니다. 이것들이 설정되어 있지 않으면 실패하므로 주의가 필요합니다. 일부러 실패시켜 보는 것도 좋지만 ...
.github/workflows/deploy.ymlon:
push:
branches:
- master
name: Auto Deploy to AWS Lambda
jobs:
deploy:
name: Auto Deploy
runs-on: ubuntu-18.04
steps:
- uses: actions/checkout@master
- name: Setup Node.js
uses: actions/setup-node@v1
with:
node-version: '10.x'
- name: Install Dependencies
run: |
npm install serverless -g
npm install
- name: Deploy to Lambda
run: sls deploy
env:
AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }}
AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
SLACK_WEBHOOK: ${{ secrets.SLACK_WEBHOOK }}
- name: Execute Lambda
run: sls invoke -f slack
env:
AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }}
AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
SLACK_WEBHOOK: ${{ secrets.SLACK_WEBHOOK }}
- name: Notify result to slack
uses: homoluctus/slatify@master
if: always()
with:
type: ${{ job.status }}
job_name: '*Deploy Lambda*'
env:
SLACK_WEBHOOK: ${{ secrets.SLACK_WEBHOOK }}
내용은 Serverless Framework를 사용하여 Lambda에 배포 한 후 함수를 실행합니다. 성공적으로 실행되면 다음과 같은 알림이 Lambda에서 Slack으로 날아갈 수 있습니다.
Job 결과
여러분이 즐겁게 하고 싶은 분들을 위해 GitHub Actions 자체의 Job 결과를 통지하는 job을 마지막에 추가하고 있습니다. name: Notify result to slack
로부터 아래의 부분이군요.
Job이 성공하면 ↓의 느낌의 통지가 Slack에 옵니다.
어떤 작업이 실패하면 사이드 바의 색상이 녹색에서 빨간색으로 바뀝니다. 링크에서 GitHub Actions의 실행 결과 화면에 녹음되어 있으므로 즉시 원인을 조사할 수 있습니다.
Reference
이 문제에 관하여(GitHub Actions를 사용하여 AWS Lambda에 자동 배포), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/homines22/items/75f84c4012a8f43260f9
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
CD는 제목대로 GitHub Actions를 사용하고 배포에는 Serverless Framework을 사용합니다. 그냥 배포하기 쉽기 때문에 GitHub의 Secrets에서 Lambda의 환경 변수로 값을 설정합니다.
데모용 앱은 여기 에 놓여 있기 때문에 fork하여 GitHub의 Secrets에 AWS 인증 데이터와 Slack의 Incoming Webhooks URL을 설정하여 뭔가 편집하고 commit/push하면 자동 배포를 체험할 수 있도록 하고 있습니다. 배포에 성공하면 Lambda가 실행되어 Lambda에서 Slack에 알림이 가게 되어 있습니다.
자동 배포 방법
Serverless Framework
Slack Incoming Webhook URL은 호스트 환경 변수에서 가져옵니다.
serverless.ymlservice: auto-deploy-lambda
provider:
name: aws
region: ap-northeast-1
timeout: 120
environment:
SLACK_WEBHOOK: ${env:SLACK_WEBHOOK}
package:
exclude:
- Dockerfile
- docker-compose.yml
functions:
slack:
handler: src/index.post
description: "Post message to Slack"
timeout: 60
GitHub Actions
리포지토리에 있는 정의 파일 .github/workflows/deploy.yml
는 모두 코멘트 아웃하고 있으므로, 데모를 할 때는 코멘트 하지 않고 실시해 주세요.
해야 할 일은 GitHub의 Secrets에 세 가지 매개 변수 설정이 있습니다. AWS_ACCESS_KEY_ID
, AWS_SECRET_ACCESS_KEY
, SLACK_WEBHOOK
입니다. 이것들이 설정되어 있지 않으면 실패하므로 주의가 필요합니다. 일부러 실패시켜 보는 것도 좋지만 ...
.github/workflows/deploy.ymlon:
push:
branches:
- master
name: Auto Deploy to AWS Lambda
jobs:
deploy:
name: Auto Deploy
runs-on: ubuntu-18.04
steps:
- uses: actions/checkout@master
- name: Setup Node.js
uses: actions/setup-node@v1
with:
node-version: '10.x'
- name: Install Dependencies
run: |
npm install serverless -g
npm install
- name: Deploy to Lambda
run: sls deploy
env:
AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }}
AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
SLACK_WEBHOOK: ${{ secrets.SLACK_WEBHOOK }}
- name: Execute Lambda
run: sls invoke -f slack
env:
AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }}
AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
SLACK_WEBHOOK: ${{ secrets.SLACK_WEBHOOK }}
- name: Notify result to slack
uses: homoluctus/slatify@master
if: always()
with:
type: ${{ job.status }}
job_name: '*Deploy Lambda*'
env:
SLACK_WEBHOOK: ${{ secrets.SLACK_WEBHOOK }}
내용은 Serverless Framework를 사용하여 Lambda에 배포 한 후 함수를 실행합니다. 성공적으로 실행되면 다음과 같은 알림이 Lambda에서 Slack으로 날아갈 수 있습니다.
Job 결과
여러분이 즐겁게 하고 싶은 분들을 위해 GitHub Actions 자체의 Job 결과를 통지하는 job을 마지막에 추가하고 있습니다. name: Notify result to slack
로부터 아래의 부분이군요.
Job이 성공하면 ↓의 느낌의 통지가 Slack에 옵니다.
어떤 작업이 실패하면 사이드 바의 색상이 녹색에서 빨간색으로 바뀝니다. 링크에서 GitHub Actions의 실행 결과 화면에 녹음되어 있으므로 즉시 원인을 조사할 수 있습니다.
Reference
이 문제에 관하여(GitHub Actions를 사용하여 AWS Lambda에 자동 배포), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/homines22/items/75f84c4012a8f43260f9
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
service: auto-deploy-lambda
provider:
name: aws
region: ap-northeast-1
timeout: 120
environment:
SLACK_WEBHOOK: ${env:SLACK_WEBHOOK}
package:
exclude:
- Dockerfile
- docker-compose.yml
functions:
slack:
handler: src/index.post
description: "Post message to Slack"
timeout: 60
on:
push:
branches:
- master
name: Auto Deploy to AWS Lambda
jobs:
deploy:
name: Auto Deploy
runs-on: ubuntu-18.04
steps:
- uses: actions/checkout@master
- name: Setup Node.js
uses: actions/setup-node@v1
with:
node-version: '10.x'
- name: Install Dependencies
run: |
npm install serverless -g
npm install
- name: Deploy to Lambda
run: sls deploy
env:
AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }}
AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
SLACK_WEBHOOK: ${{ secrets.SLACK_WEBHOOK }}
- name: Execute Lambda
run: sls invoke -f slack
env:
AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }}
AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
SLACK_WEBHOOK: ${{ secrets.SLACK_WEBHOOK }}
- name: Notify result to slack
uses: homoluctus/slatify@master
if: always()
with:
type: ${{ job.status }}
job_name: '*Deploy Lambda*'
env:
SLACK_WEBHOOK: ${{ secrets.SLACK_WEBHOOK }}
Reference
이 문제에 관하여(GitHub Actions를 사용하여 AWS Lambda에 자동 배포), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/homines22/items/75f84c4012a8f43260f9텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)