ブログ環境をGitHubからAWSに移行しました
今までの構成
今までは、静的CMSであるHexoを使ってローカル環境で各ページを生成し、生成されたページをGitHub Pagesで公開する、という構成を取っていました。
この構成を取っていた理由は以下の2つです。
- ブログ記事をMarkdown形式で書くことができ、HTMLを作るために必要なテンプレートや設定ファイルを
gitで管理できるため - GitHub Pagesは、リポジトリに
git pushさえすればページが公開され、かつ無料で気軽に使うことができるため
しかし思うところがあり、今回、この構成をAWSに移行することにしました。
新たに構築した構成
新たに構築した構成のイメージは以下の通りです。

ポイントは以下のとおりです。
- Chromebookで執筆した記事をCodeCommitに
git pushすると、CloudWatch EventsがCodePipelineを起動する - CodeBuildが、
/buildspec.ymlに記載された内容に基づき、hexo generateを実行する。そして、生成されたHTML(./public/配下)をS3バケットとaws s3 syncで同期する
これにより、(1)source/_pages/にMarkdown形式で記事を書いた記事を保存する、(2)git commitとgit pushを実行する、だけで、自動的にブログ記事が公開されるわけです。
ハマったポイント
git clone ssh://git-codecommit.ap-northeast1-amazonaws.com/v1/repos/...で、Permission denied (publickey).が発生し、cloneに失敗する
確認したポイントは以下です。
~/.ssh/id_rsa(秘密鍵)のパーミッションが400になっていること- Management Consoleの
IAM > ユーザー > 認証情報 > AWS CodeCommit の SSH キーに、~/.ssh/id_rsa.pubの内容が正しく登録されていること
これでもエラーが解消しなかったため、Troubleshooting SSH connections to AWS CodeCommitを参考に、git clone ssh://[my-key-id]@git-codecommit.ap-northeast1-amazonaws.com/v1/repos/...を実行したところ、git cloneできるようになりました。my-key-idは、IAMから確認できます。
buildspec.ymlに記載したaws s3 sync [src] [dest]の実行が、ListObjectsV2のAccess Deniedエラーで失敗する
Amazon S3 バケットで sync コマンドを実行すると、ListObjectsV2 で Access Denied (アクセス拒否) エラーが表示されるのはなぜですか?によると、ListObjectsV2の実行を許可するためには、IAMでs3:ListBucketsの実行を許可する必要があります。
と、ここまでは良いのですが、何を血迷ったのか、私は以下のように記載し、CodePipelineのサービスロールにアタッチして3時間ほど悩んでいました。
{
"Effect": "Allow",
"Action": [
"s3:ListBuckets",
"s3:PutObject",
"s3:GetObject",
"s3:DeleteObject"
],
"Resource": [
"arn:aws:s3:::.../*"
]
}
これをアタッチしてから何回もCodePipelineを実行しましたが、毎回毎回ListObjectsV2起因のエラーでパイプラインが止まりました。深夜になっていたこともあり、一旦そこで作業を中断しましたが、翌日、CodePipelineではなく、CodeBuildのサービスロールにアタッチしなければ意味が無いことに気が付きました。(aws s3 syncを呼び出すのはCodePipelineではなくCodeBuildのため)
なぜAWSに移行したのか
昨年、Chromebook hp 14aを購入したのをきっかけに、日常作業のほぼ全てをクラウド環境に移行しました。Windows環境が必要なScanSnapを使った書類のスキャンと、開発作業のためにWindows端末を残しています。
ただ、よくよく考えて見ると、Windows端末での作業もChromebookに移行できそうです。
- ScanSnapをWiFi対応のものに買い換えることで、クラウドストレージに直接スキャンデータを保存できるようになりそう
- Windowsで実施している開発も、AWSのサービスをうまく組み合わせればWindows環境なしでもいけそう。Cloud9 + なにか、で出来そう。
特に最近、開発に使っているPCのスペックが時代遅れになりつつあり、必要な時に必要なリソースが取れるクラウド環境での開発に興味が出始めています。開発環境をAWSに移行する際には、Codeシリーズの使い方を少しは知っておく必要があるので、研究を兼ねてAWSに移行しました。
今後の構想
以下の5点を年内目処くらいでやっておきたいなと思っています。
- Slackからコマンドを投げると、自動的にPipelineが動作するようにする。
- CloudFrontを使った配信
- S3の非公開化
- 独自ドメインを使ったアクセス
- 開発環境の移行。色々やり方はありそう。EC2/ CodeCatalyst/ Cloud9/ WorkSpacesなど。WorkSpacesを使うなら、Wyseの端末を買ってシンクライアント化するのも面白そうではある
ちなみに、
この記事は、富士通のChromebook(14F)で、下書きはDynalistを使って、最終的な整形とgit pushはCloud9を使って書いています。また、構成イメージはdiagrams.netで書きました。
2023/01/09追記
結局、GitHub Pagesに戻しました。