見出し画像

完全自動化された自作ツールの作成記録

どうもこんばんは。

宅配で頼んだ料理が辛くて食べられなかったホソダです。

久しぶりに創作意欲が湧いたのでWEBサイトを作成しました。
今回は完全自動化して日々の面倒な運用業務を無くしました。

作成したものが以下にありますのでどうぞご覧ください。

経緯

僕はライオンズファンなのですが、TwitterのTLに栗山選手がヒットを打つたびに2000本安打への注目が集まるわけです。
栗山選手の2000本に向けて自分もカウントダウン(アップ?)に参加したいと思い、簡単ではありますが、静的なWEBサイトを作りました。

構成

ざっとキーワードを羅列すると以下のようになります。
AWS/S3/Lightsail/IAM/HTML/Bootstrap/Python3/スクレイピング/BeautifulSoup/cron/Shellscript/logrotate/git

S3の静的ホスティングを利用してHTMLファイルを公開します。
デザインはCSSを作成するのが手間なのでBootstrapにお任せしました。
ヒット数の情報は外部サイトをBeautifulSoupでスクレイピングします。
HTMLファイルの入れ替えはLightsailインスタンスのcronでシェルを叩きます。

画像1

手順

前提

AWSアカウントやLightsailのもろもろのセットアップが完了していること(雑)

コーディング内容

コードはgithubを参照してください。
PythonのライブラリであるBeautifulSoupを使用してスクレイピングします。
Udemyでスクレイピングの講座で学んだ内容を参考にしました。

シェルは3つの役割に分割

1.スクレイピング結果でHTMLファイルを書き換えるシェル

2.S3へファイルをアップロードするシェル

3.1,2を実行するシェル

LightsailからS3にアクセス

S3にアクセスするためにIAMの設定を行います。
Lightsailを使用していますが、
EC2でも同様な手順が使用できるのではないかと思います。

IAMユーザを作成して、
AmazonS3FullAccessポリシーをアタッチします。

AWS CLIの設定

ターミナルやTeraTermからコマンドでAWSを操作するためにはAWS CLIの設定を行います。
設定方法はブログよりも公式サイトの手順を見ておいたほうが良いです。

インストールが完了したら先ほど設定したIAMユーザで認証します。
アクセスキーとシークレットキーはIAMユーザを作成した時にメモしておきます。

$ aws configure
AWS Access Key ID [None]: XXXXXXXXXXXXXXXXXX
AWS Secret Access Key [None]: XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Default region name [None]: ap-northeast-1
Default output format [None]: json

S3のバケット、静的ホスティング設定

以下の記事を参考にしました。他にも参考になるサイトは多くあります。

cronの設定

時刻起動にするためにLightsailのcronを設定しました。
数点つまずいたのでメモ。

【設定編集】
-e 編集 -u ユーザ指定
$ sudo crontab -e -u 【実行ユーザ】

【設定確認】
$ sudo crontab -l -u 【実行ユーザ】

ユーザを指定しないとrootでの実行になります。
設定内容は省略します。
設定したらcronのプロセスを再起動します。

# systemctl restart crond

環境変数に関するエラーが起きるようなので以下のサイトを参考にしました。
crontabに直接環境変数を書き込みました。

ログ設計

シェルでログを吐かせるようにコーディングしています。
ログを書き込むことは特に問題ありませんでした。
しかし、ログローテの設定を初めてしたのでメモです。

他のログを参考にしながら作成しました。
dry-runでエラーが出たので権限周りを変更して調整。
再起動をする必要はありません。

つらつらと書いてきましたが、参考になることがあれば嬉しいです。

この記事が気に入ったらサポートをしてみませんか?