Github Actionsでワークフローを作成してAWS SAMでデプロイしてみる
Github Actionsでワークフローを作成して、AWS SAMへデプロイしてみます💻
今回のポイントとしては
- テストが通ったらデプロイする
- branchごとデプロイ先が違う
今回、「jobs.<job_id>.if」 で、デプロイ先をかえるようにしました。Github Actionsは今回使うのが初めてで、もし他によい方法あれば、ぜひ、教えてもらいたいです!🙏
やること
- リモートリポジトリへのPUSH時に実行
- テストは全branchで実行
- テストが通ったらデプロイを行う
- デプロイはbranchごと、デプロイ先をかえる
環境
構築
まずはテスト部分を作成
これは、Github Actionsのサンプロから作成しました。
「Actions」⇒「New workflow」⇒「Python application」を選択
commitすれば、これで完成!簡単😁
jobs: build: runs-on: ubuntu-latest steps: - uses: actions/checkout@v2 - name: Set up Python 3.6 uses: actions/setup-python@v1 with: python-version: 3.6 - name: Install dependencies run: | python -m pip install --upgrade pip pip install -e . pip install -e .[testing] - name: Lint with flake8 run: | pip install flake8 # stop the build if there are Python syntax errors or undefined names flake8 . --count --select=E9,F63,F7,F82 --show-source --statistics # exit-zero treats all errors as warnings. The GitHub editor is 127 chars wide flake8 . --count --exit-zero --max-complexity=10 --max-line-length=127 --statistics - name: Test with pytest run: | python -m pytest -v python -m pytest --cov=oc
デプロイのステップを追加
次にデプロイステップを追加していきます
まずは、テスト(「build」ステップ)が通ったらデプロイを実行したいので、「needs」を追加
これで、テストが通ったら、このdeployステップが実行されるようになります
deploy: needs: build
次にAWS SAMの実行に必要なライブラリ等をインストール
runs-on: ubuntu-latest steps: - uses: actions/checkout@v2 - name: Set up Python 3.6 uses: actions/setup-python@v1 with: python-version: 3.6 - name: Install dependencies run: | python -m pip install --upgrade pip pip install awscli pip install aws-sam-cli
これで、AWS SAMを実行する環境ができので、次にbranchごとのデプロイを実行します
- name: Configure AWS credentials for prod if: startsWith(github.ref, 'refs/heads/master') uses: aws-actions/configure-aws-credentials@v1 with: aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID_PROD }} aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY_PROD }} aws-region: ap-northeast-1 - name: deploy to prod if: startsWith(github.ref, 'refs/heads/master') run: bash deploy.sh shell: bash
↑はmasterへpushしたときに実行されます
デプロイに必要なキーの設定を「Configure AWS credentials for prod」のjobで行い、デプロイをするシェルの実行を「deploy to prod」のjobで行っています
各jobにある、↓のifが満たされた場合、jobが実行されます
if: startsWith(github.ref, 'refs/heads/master')
これで、yamlの準備はOK❗
あとは、AWSのアクセスキー、シークレットキーをシークレット変数に設定します
実行
各branchごとの実行結果はこちら
master
「master」へのPUSH時にprod(本番)環境へデプロイします
デプロイテスト(develop→master) (#2) · peacemaker07/sam_app_sample@6e7bed2 · GitHub
以下の本番へのデプロイのjobのみ実行されています!👏
- Configure AWS credentials for prod
- deploy to prod
develop
「develop」へのPUSH時にstg(ステージング)環境へデプロイします
デプロイテスト(feature→develop) (#1) · peacemaker07/sam_app_sample@8d7cca1 · GitHub
ステージングへのデプロイステップはこちら
開発ブランチ
「feature/*」へのPUSH時にdev環境へデプロイします
mod flows · peacemaker07/sam_app_sample@6199004 · GitHub
dev環境へのデプロイステップはこちら
- Configure AWS credentials for dev
- deploy to dev
アクションも自作できるようなので、またやってみたいと思いますー😃