【LINE Bot開発】CI/CD環境を構築してみた。
はじめに
先日、Udemyで講座を購入し、画像に写っている人の顔から感情を分析してくれるLINE Botを作り、
AWS環境でのLINE Bot開発について学びました。
その時の記事:【ハンズオン】 LINE Bot つくってみた!
今回は少しステップアップしCI/CD環境の構築に挑戦してみました。
GitHub Actionsを利用し構築したため、Git/GitHubの基礎もあわせて学びました。
↓Git/Githubの学習に利用したコンテンツ↓
【わかりやすい!Git操作】初心者向けのGitの基本 〜 30分で入門!
【GitHub入門】初心者向け!GitHubでチーム開発するための基本操作を解説!
構成図
やってみた
GitHubでリポジトリを作成
プライベートで"github_actions-aws_sam"という名前のリポジトリを準備しました。
IDプロバイダーの追加
OpenID Connect(OIDC)を使い、GitHub Actions ワークフローがAWS内のリソースにアクセスできるように設定していきます。
AWSにサインインし、IAMでIDプロバイダーを追加します。
プロバイダのタイプ:OpenID Connect
プロバイダの URL:https://token.actions.githubusercontent.com
対象者:sts.amazonaws.com
参考:AWS への ID プロバイダーの追加
IAMポリシーの作成
"TestGithubAction"という名前のポリシーを作成しました。
指定したjsonは以下です。
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "VisualEditor0",
"Effect": "Allow",
"Action": [
"cloudformation:*",
"s3:*",
"lambda:*",
"apigateway:*",
"iam:CreateRole",
"iam:DeleteRole",
"iam:GetRole",
"iam:PassRole",
"iam:DeleteRolePolicy",
"iam:GetRolePolicy",
"iam:AttachRolePolicy",
"iam:DetachRolePolicy",
"iam:TagRole",
"iam:PutRolePolicy"
],
"Resource": "*"
}
]
}
IAMロールの作成
作ったポリシーを使用してロールも作成します。
信頼されたエンティティタイプは”ウェブアイデンティティ”を選択します。
ウェブアイデンティティは以下の通り入力しました。
GitHubリポジトリにはさっき作成したリポジトリを指定します。
許可ポリシーはさっき作成したポリシーを選択します。
ロール名はポリシーと同じ"TestGithubAction"にしました。
GitHub Actionsのワークフローファイルを作成
GitHub Actionsにはワークフローファイルが必要になります。
このワークフローファイルには、GitHub Actionsで自動化する処理について書きます。
作成したワークフローファイルは、リポジトリの.github/workflows/ 配下に YML 形式で保存します。今は、ローカルで準備します。
準備したワークフローファイル
name: Deploy-AWS-CloudFormation
on:
push:
branches:
- 'main'
env:
TEMPLATE_FILE: template.yaml
jobs:
deploy:
runs-on: ubuntu-22.04
permissions:
id-token: write
contents: read
steps:
- name: Checkout
uses: actions/checkout@v3
- name: Setup python
uses: actions/setup-python@v3
- name: Setup aws-sam
uses: aws-actions/setup-sam@v2
- name: Configure AWS credentials
uses: aws-actions/configure-aws-credentials@v4
with:
aws-region: ap-northeast-1
role-to-assume: ${{ secrets.AWS_IAM_ROLE }}
- run: aws sts get-caller-identity
- name: Build & Deploy Cloudformation stacks
run: |
sam build --use-container
sam deploy --no-confirm-changeset --no-fail-on-empty-changeset --stack-name GithubActionAwsSam --s3-bucket ${{ secrets.S3_BUCKET_NAME }} --capabilities CAPABILITY_IAM --parameter-overrides LineChannelAccessToken=${{ secrets.LINE_CHANNEL_ACCESS_TOKEN }} LineChannelSecret=${{ secrets.LINE_CHANNEL_SECRET }}
GitHub シークレットを設定。
IAMロール、Lineチャンネルアクセストークン、チャンネルシークレット、S3バケット名はGitHub シークレットに設定します。
S3バケットは普段samのデプロイに使用しているバケットを指定してください。
「Settings」→「secrets and variables」から設定できます。
設定したシークレットは
ワークフローファイルの${{ secrets.** }}の記述箇所で取得しています。
参考:GitHub Actions でのシークレットの使用
GitHubにpushする。
以下のファイルをGitHubの"main"ブランチにpushします。
"mylinebot.py"と"template.yaml"以下の記事作成の際に構築したファイルで変更箇所はありません。
記事:【ハンズオン】 LINE Bot つくってみた!
├── .github
│ └── workflows
│ └── github-actions-workflow.yaml
├── functions
│ └── mylinebot.py
└── template.yaml
ワークフローをモニタリング
Actionsからモニタリングします。
pushすると、Actionsに追加されます。
クリックしていくと、何か実行されているかモニタリングできます。
どこでどんなエラーが起きたか確認もできました。
無事デプロイできたら、緑チェックになりました。
おわりに
AWS SAMとGitHub Actionsを使用してCI/CD環境の構築に挑戦してみました。
次回は以下のハンズオンに挑戦してみようと思います。
機械学習を使って魚の画像判定アプリを作ってみた !
Discussion