Github Actions ์ codeDeploy ๋ก EC2์ ๋ฐฐํฌํ๊ธฐ
github actions introduction
์๋ก ์์ํ ํ๋ก์ ํธ๋ฅผ ๋ฐฐํฌํ์ฌ ํ ์คํธ ์ ์ ๋ค์๊ฒ ๋ณด์ฌ์ค ํ์๊ฐ ์๊ฒผ์ต๋๋ค. ๋ฐฐํฌ ํด์ด ์ฌ๋ฌ๊ฐ์ง๊ฐ ์๊ธฐ ๋๋ฌธ์ ๋ฌด์์ ์ฌ์ฉํ ๊น ๋๋ฃ์ ๊ณ ๋ฏผ์ ๋๋์์ต๋๋ค. ๋๋ฃ์ ์ ๋ ํ์ฌ์์๋ ์ ํจ์ค๋ฅผ ์จ์ ๋ฐฐํฌ๋ฅผ ํ๊ณ ์์๊ณ , ์ฌ์ด๋ ํ๋ก์ ํธ์์ ๋ฐฐํฌ ์์ ์ ํ ๋๋ heroku ๋ฐ์ ์จ ๋ณธ ์ ์ด ์์์ต๋๋ค. ์ ๋ ์ ํจ์ค๋ฅผ ์ ์ํ๊ณ , ๋๋ฃ๋ Github Actions ๋ฅผ ์ ์ํ์ต๋๋ค.
๋ด๊ฐ ์ ํจ์ค๋ฅผ ์ ์ํ ์ด์
๊ฐ์ฅ ์น์ํ๊ณ , dev => feature => production ์ผ๋ก ์ด์ด์ง๋ flow ๋ฅผ ๊ด๋ฆฌํ๊ธฐ์ ์ ํจ์ค๊ฐ ์ ๊ณตํ๋ ๊ธฐ๋ฅ์ด ์ข์๊ธฐ ๋๋ฌธ์ ๋๋ค.
๋๋ฃ๊ฐ Github Actions ๋ฅผ ์ ์ํ ์ด์
์ผ๋จ ๋น๊ต์ ์๋ก ๋์จ ์๋น์ค์ด๋ฉฐ github ์์ ์์ค์ฝ๋๋ฅผ ๊ด๋ฆฌํ๊ธฐ ๋๋ฌธ์ ๋ฐฐํฌ๊น์ง ๊ฐ์ ๊ณณ์์ ํ๋ฉด ํธ๋ฆฌํ๊ณ , ์ง๊ธ ๋น์ฅ์ ํ๋ก๋์ ๋ฐฐํฌ๋ง ํ ๊ฒ์ด๋ผ ์๋น์ค๊ฐ ์ด๋ ์ ๋ ์ปค์ง๋ฉด ๊ทธ ๋ ๋ฐฐํฌ ๋จ๊ณ๋ฅผ ๋๋ ๋ ๊ด์ฐฎ์ ๋ฏ ํ๋ค๋ ์ด์ ์์ต๋๋ค.
๋๋ฃ์ ์๊ฒฌ์ ์ค๋๋์๊ณ , ์ง๊ธ๊ณผ ๊ฐ์ ์๋น์ค ๊ฐ๋ฐ ์ด์ฐฝ๊ธฐ์์๋ ๋น ๋ฅธ ์๋๊ฐ ๊ฐ์ฅ ์ค์ํ๋ค๊ณ ์๊ฐํ์ต๋๋ค. ๋ํ ์๋ก์ด ๊ฒ์ ์จ๋ณด๊ณ ์ถ์ ๋ง์์ด ๋ค์ด ์ฐ๋ฆฌ๋ Github Actions ๋ฅผ ์ฌ์ฉํด๋ณด๊ธฐ๋ก ํ์ต๋๋ค.
์์ ๋ชฉํ
์์ ํ ์ฝ๋๋ฅผ main ์ push ํ๋ฉด AWS codeDeploy ๋ฅผ ์ฌ์ฉํด ec2 ์ ์ฝ๋๋ฅผ ๋ฐฐํฌํฉ๋๋ค.
ํ์ํ ์ฌ์ ์์ (์ด ๊ณผ์ ์ ์ด ํฌ์คํธ์์ ์์ธํ ๋ค๋ฃจ์ง ์์ต๋๋ค.)
- ec2 ์์ฑ
- AWS codeDeploy ์ ๋ค์ด๊ฐ ์๋ก ์ ํ๋ฆฌ์ผ์ด์
์ ์์ฑํ๊ณ , ๋ฐฐํฌ ๊ทธ๋ฃน์ ์์ฑํฉ๋๋ค.
github actions introduction
github actions ์์ ํ๋ก์ธ์ค
-
Actions ๋ฉ๋ด์์ New workflow ๋ฅผ ํด๋ฆญํฉ๋๋ค.
github actions introduction
-
popular service ์๋ ec2 ๊ฐ ์์ผ๋ฏ๋ก Manual workflow ๋ฅผ ์ ํํฉ๋๋ค.
github actions introduction
-
.github/workflows/ ์ ์์ฑ๋ yml ํ์ผ์ ๋ด์ฉ์ ์ฑ์๋๋ค.
name: // workflow ์ ์ด๋ฆ. ํ๊ณ ์ถ์๋๋ก ์ ๋ ฅํ๋ฉด ๋ฉ๋๋ค. on: push: // ์ด workflow ๋ฅผ ํธ๋ฆฌ๊ฑฐํ github action ์ ์ ๋ ฅํฉ๋๋ค. branches: [ main ] workflow_dispatch: jobs: deploy: // workflow ์์ ์คํ๋ job ์ ์ด๋ฆ์ ๋๋ค. runs-on: ubuntu-latest // default ๋๋ก ์ฌ์ฉํด๋ ๊ด์ฐฎ์์ต๋๋ค. steps: - uses: actions/checkout@v2 // default ๋๋ก ์ฌ์ฉํด๋ ๊ด์ฐฎ์์ต๋๋ค. // codeDeploy ๋ฅผ ํตํด ec2 ์ ๋ฐฐํฌํ๊ธฐ ์ ์, ec2 access configuration ์ ํด์ผ ํฉ๋ค. - name: Configure AWS credentials from Production account uses: aws-actions/configure-aws-credentials@v1 with: aws-access-key-id: ${{ secrets.PROD_AWS_ACCESS_KEY_ID }} // repo settings ์ secrets ๋ฉ๋ด์ ๋ค์ด๊ฐ๋ฉด secrets ์ ๋ฑ๋กํ ์ ์์ต๋๋ค. AWS credential access key ์ key id ๋ฅผ ๋ฃ์ด์ค๋๋ค. aws-secret-access-key: ${{ secrets.PROD_AWS_SECRET_ACCESS_KEY }} aws-region: ap-northeast-2 // aws cli ๋ฅผ ์ค์นํ๊ณ ์๋์ ๊ฐ์ ๋ช ๋ น์ด๋ฅผ ์ ๋ ฅํด์ค๋๋ค. // GITHUB_REPOSITORY ์ GITHUB_SHA ๋ ์ด๋๋ก ์ ๋ ฅํ๋ฉด push ํ ๋น์์ repo ์ commit_id ๋ก ์๋ ๋ฐ์๋ฉ๋๋ค. - name: deploy with aws codeDeploy run: aws deploy create-deployment --application-name ${CODEDEPLOY์์ ๋ง๋ ์ ํ๋ฆฌ์ผ์ด์ ์ด๋ฆ} --deployment-group-name ${๋ฐฐํฌ๊ทธ๋ฃน๋ช } --deployment-config-name CodeDeployDefault.AllAtOnce --github-location repository=${GITHUB_REPOSITORY},commitId=${GITHUB_SHA}
์ ๊ณผ์ ์ด ์ ์คํ๋๋ ์ง ํ ์คํธํด๋ด ๋๋ค. repo ์ Actions ๋ฉ๋ด์ ๋ค์ด๊ฐ๋ฉด ์งํ ์ํฉ์ ๋ณผ ์ ์์ต๋๋ค.