部屋を掃除したら漫画が沢山出てきたので書く日記

漫画とか合唱とかUNIXとかLinuxとかについて書く日記です。

Amazon S3 静的ウェブサイトをAWS CLIとgitで管理 2021年夏

所属しているアマチュア合唱団のWebサイトをAWSのサービス「Amazon S3」で2年ほど運用しています。Amazon S3はオブジェクトストレージのサービスですが静的ウェブサイトをホスティングする(ホームページを公開できる)機能がありまして、今まで利用していた、所属団員の契約しているプロバイダのホームページサービスから移行しました。
月0.5ドル程度とはいえ有償ではありますが、個人的な学習を兼ねてやっております。

で、更新したHTMLファイルのアップロードは、従来のホームページサービスとかだと「FFFTP」を用いたFTPとか「WinSCP」を用いたscp/sftpでやってましたが、S3の場合はAWSで用意されたCLI(コマンドラインインターフェース)のツール、「AWS CLI」を利用することが出来ます。
2019年に一度セットアップしましたがパソコンの環境が変わったので改めてセットアップしたら色々と手続きが新しくなっていたので手順を書いておきます。

パソコンの環境

OS: Ubuntu 20.04.3

AWS CLI のインストール

公式サイトはドキュメントが充実しています。まずはこのとおりやってみました。

docs.aws.amazon.com

2021年8月現在、バージョン 2 とバージョン 1 があるそうです。今まで使っていたものはバージョン1だった模様。
今回はせっかくなので新しいものということでバージョン 2 を選びます。Linuxのインストール手順は以下のとおりです。

docs.aws.amazon.com


やったことは以下の通り。

$ curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip"
$ unzip awscliv2.zip
$ sudo ./aws/install

以下の通り、インストールが成功したか確認します。どうやら2.2.33というバージョンのようです。

$ /usr/local/bin/aws --version
aws-cli/2.2.33 Python/3.8.8 Linux/5.4.0-81-generic exe/x86_64.ubuntu.20 prompt/off

あと、PATHがうまく通ってなかったので.bashrcにPATH変数上/usr/local/binが設定されるよう記載しておきました。念の為書くと以下のような感じです。

export PATH="/usr/local/bin:$HOME/.plenv/bin:$PATH"
管理者IAMユーザを作成

AWS CLIをインストール後、自分が利用しているAWSの情報を紐付けるためにアクセスキーとシークレットアクセスキーを取得して登録する必要がありますが、以前は管理ユーザで直接作っていましたが今はIAMユーザを作ってそちらからアクセスキー/シークレットアクセスキーを生成することが推奨されています。
AWSをなんとなく使っている中で極力避けて通ってきたIAMに、ついに向き合うときがやってきた!と観念してやってみることにしました。
が、以下の公式サイトのドキュメントのとおりやればオッケーでした。

docs.aws.amazon.com

強いて言えば、ドキュメント記載の英文を訳した日本語と、日本語版マネジメントコンソールの日本語が微妙に違うということくらいです。文言が全く同じでなくてもなんとなくこれかな?というのを選んで進めて行ったら成功しました。

AWS CLIのセットアップ

AWS CLIをインストールしたUbuntuにて端末を開き、以下を実行します。

$ aws configure

表示される画面で以下の通り入力します。

アクセスキー・・・作成したIAMユーザのマネジメントコンソールで生成されたテキストをペースト
シークレットアクセスキー・・・同じく作成したIAMユーザのマネジメントコンソールで生成されたテキストをペースト
リージョン・・・利用しているのは「ap-northeast-1」なのでそれを入力
format・・・特にこだわりないのでデフォルトのjsonを入力


これで使えるようになります。

$ aws s3 ls

と実行すると、lsコマンド実行結果ライクなS3のバケット一覧が表示されます。

ホームページの更新

静的なWebサイトのコンテンツはほぼテキストファイルである、ということでgitで管理し、commitしたらgithubにpushするようにしています。
という事でまずは該当のリポジトリgithubから取得(clone)します。

$ git clone https://github.com/XXXXX/myWebsite.git ./

しかる後HTMLファイルをお好みのエディタで更新、問題なければS3にアップロードします。ここではhistory.htmlを更新したとして、

事前確認
$ aws s3 ls example.com
アップロード
$ aws s3 cp ./history.html s3://example.com
事後確認(タイムスタンプが更新されていること)
$ aws s3 ls example.com

とします。
ブラウザからホームページのURL、http://example.com/history.html にアクセスし、更新が反映されていることを確認できたらオッケーです。

更新をgitにてcommit、githubにpushする

更新した内容をリポジトリにcommitし、マスターのあるgithubに反映(push)します。
commitはVisualStuidoCode使ってたらGUIから出来ますが、コマンドだったら

$ git commit -a

を実行し、エディタの画面でcommit logを書いて更新、終了すればcommit完了です。

その後

git push

をすればマスターへの反映も完了です。

が、2021年8月21日以降、パスワードでのgithubの認証はできなくなってしまったらしく、パスワード認証でのpushは失敗してしまいました。
こちらに書いてあるとおりです。

zenn.dev

こちらからも辿れる、以下の日本語のgithubのドキュメント記載のとおりに設定を進めました。

docs.github.com


ドキュメントの通りアクセストークンを生成したら、gitコマンド実行時の認証の際のパスワードの代わりにアクセストークンの文字列を利用すれば認証に成功します。
認証時にいちいちアクセストークン入力するのはかったるいので、そこは今後改善させていこうと思います。

では。