Perl Hackers Hub
第61回 GitHub ActionsとAmazon ECSを使ったDockerアプリケーションの自動デプロイ(3)
2020年6月19日
初出:WEB+DB PRESS Vol.116(2020年4月24日発売)
Perl, プログラミング言語, GitHub Actions, Amazon ECS, Docker, 開発
GitHub Actions── ビルドとデプロイプロセスの自動化
(3)
GitHub Actionsとは,github.
に統合した形で提供するCI
今回はブランチモデルとして,master
を使い,devel
ブランチを使います。
cpanfile.snapshotを自動で生成しよう
cpanfile.
は,carton install
を実行する環境によっては異なるものが生成されます。そのため,cpanfile
とともにcpanfile.
をコミットする方法で開発している場合,cpafile.
が頻繁に変化してしまうことがあります。これを防ぐために,cpanfile.
を集中的に生成しましょう。
ワークフローの定義
では,.github/
にワークフローを定義しましょう。
on:
push:
branches:
- devel
pull_request:
branches:
- devel
jobs:
cpan:
runs-on: ubuntu-latest
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
steps:
- uses: actions/checkout@v2
- name: Generate cpanfile.snapshot
working-directory: ./application
run: |
./generate-cpanfile-snapshot.sh
- uses: stefanzweifel/git-auto-commit-action@v3.0.0
with:
commit_message: Updated cpanfile.snapshot
file_pattern: application/cpanfile.snapshot
前半のon
ブロックでは,devel
ブランチにpushされたときと,devel
宛てのPull Requestで変更を検知したときを指定しています。
後半のjobs
ブロックが,checkout
アクションを使ってソースコードをGitHub Actions上の仮想環境にチェックアウトしたあと,cpanfile.
を生成するgeneratecpanfile-snapshot.
というシェルスクリプトを呼び出します。そして,git-auto-commit-action
アクションによって,cpanfile.
が変更されていればコミットし,
cpanfile.snapshotを生成するシェルスクリプトの作成
前述したgenerate-cpanfile-snapshot.
では,carton install
を実行してcpanfile.
を生成しています。簡潔なコードなのでここでは割愛します。WEB+DB PRESS Vol.
いざ生成
これで,cpanfile.
を生成する準備ができました。perl.
とgenerate-cpanfilesnapshot.
をコミットしてpushすると,cpanfile.
が生成されます。
Amazon ECSへデプロイしよう
GitHubには,
ワークフローの定義
GitHubのテンプレートを使ってワークフローを作成しましょう。GitHubでリポジトリを開き,
編集を行う前に,
- アプリケーションのイメージが格納されるECRリポジトリ
(URIではなく名前を記入する) - リポジトリのリージョン名
- ECSクラスタ
YAMLファイルの各項目を次のように埋め,.github/
として保存します。
(省略)
- name: Build, tag, and push image to Amazon ECR
id: build-image
env:
ECR_REGISTRY: ${{ steps.login-ecr.outputs.registry }}
ECR_REPOSITORY: ECRリポジトリ
IMAGE_TAG: ${{ github.sha }}
run: |
docker build -t $ECR_REGISTRY/$ECR_REPOSITORY:$IMAGE_T
AG ./application/
docker push $ECR_REGISTRY/$ECR_REPOSITORY:$IMAGE_TAG
echo "::set-output name=image::$ECR_REGISTRY/$ECR_REPO
SITORY:$IMAGE_TAG"
- name: Fill in the new image ID in the Amazon ECS task de
finition
id: task-def
uses: aws-actions/amazon-ecs-render-task-definition@v1
with:
task-definition: task-definition.json
container-name: app # ここではコンテナ名をappとする
image: ${{ steps.build-image.outputs.image }}
- name: Deploy Amazon ECS task definition
uses: aws-actions/amazon-ecs-deploy-task-definition@v1
with:
task-definition: ${{ steps.task-def.outputs.task-defin
ition }}
service: サービス名
cluster: クラスタ名
wait-for-service-stability: true
(省略)
今回は,master
ブランチにマージなどの変更が発生したときにデプロイしたいので,master
ブランチへのpushかマージがあったときにワークフローを起動するよう,
Amazon ECSタスク定義の作成
GitHub Actionsを使ってデプロイする場合,task-definition.
を用意する必要があります。手動で作成することもできますが,
Amazon ECSのトップ画面からecs-cli
コマンドを使ったときと同じに設定しておきます。こうして作成したタスク定義をrequiresAttributes
といったプロパティが自動で追加されていますが,
IAMユーザーのクレデンシャルの登録
イメージのpushやデプロイにはIAM
そして,AWS_
という名前で,AWS_
という名前で保存しましょう。
いざデプロイ
これで準備ができました。devel
ブランチからのPullRequestをmaster
ブランチにマージすると,
まとめ
今回は,
さて,
本誌最新号をチェック!
WEB+DB PRESS Vol.128
2022年4月23日発売
B5判/160ページ
定価1,628円
(本体1,480円+税10%)
ISBN978-4-297-12789-3
- 特集1
演習で慣れる!
データベース入門
SQL操作,テーブル設計,分析用データ処理 - 特集2
クラウド構築ツールの大本命!
ゼロから学ぶTerraform - 特集3
チャットやIssueでちゃんと伝えたい!
エンジニアのための英語
バックナンバー
Perl Hackers Hub
- 第71回 ISUCONの実装から最近のPerlを学ぶ ―わかりやすく変更しやすいコードを実現する考え方と方法(2)
- 第71回 ISUCONの実装から最近のPerlを学ぶ ―わかりやすく変更しやすいコードを実現する考え方と方法(1)
- 第70回 Raisin入門 ―Rest APIマイクロフレームワークを使ってみよう!(2)
- 第70回 Raisin入門 ―Rest APIマイクロフレームワークを使ってみよう!(1)
- 第69回 表形式データを操るUNIXシェル型Perl製コマンド群 ―ビッグデータ時代の汎用的なデータ整備と分析のために(2)
- 第69回 表形式データを操るUNIXシェル型Perl製コマンド群 ―ビッグデータ時代の汎用的なデータ整備と分析のために(1)
- 第68回 他言語のライブラリをPerlに移植する(2)
- 第68回 他言語のライブラリをPerlに移植する(1)
- 第67回 GitHub APIによるチーム開発の効率化 ―基本操作から,GitHub Webhooksの活用まで(2)
- 第67回 GitHub APIによるチーム開発の効率化 ―基本操作から,GitHub Webhooksの活用まで(1)