Re:ゼロから始めるAWSサーバレス生活(Amplify編)

Amazon Web Service Cloud How To

時代はデジタルトランスフォーメーションということで、AWSやAzureGCPなどのパブリッククラウド環境へのシフトが徐々に行われています。
しかし、AWS環境のEC2に単にサーバを移すだけでは、クラウド利用と言うよりはオンプレミスの置き換えにしかすぎず、
環境構築後の運用管理はsshで接続しているのであれば、オンプレミス時の運用管理と変化はなく、サーバ設置先がAWS上に移っただけです。
これでは結局オンプレミス時代の延長上でしかなく、何も変わりません。

コスト面についてもAWS環境はコストも安価で抑えられるとは言え、長期に使用するとそれなりにコストもかかってきます。

真のクラウドシフトとはEC2から脱却し、AWSのマネージドの各種サービスを組み合わせて使い倒して、サーバレス環境を構築し、従量課金制のプランで使っていくことだと考えます。
インフラ系のエンジニアに求められるスキルとしてもこのようなクラウドネイティブ環境へシフトしていくと思います。

サーバレスと言えば、筆者はこれまでにS3を使った静的サイトのWEBホスティング環境の構築経験がありましたが、今回は別のサービスであるAmplifyを使ってサーバレスな静的サイトのWEBホスティングを行いました。

AWS Amplifyを使ってみる

AWSのAmplifyではデータの格納先として、以下のGit環境が選択可能です。

・github
・bitbucket
・codecommit
・gitlab

Git環境と紐付けておくと、Gitにファイルをプッシュしただけで、Amplify側に自動的にデプロイされ、WEBサイトに反映されます。
尚、Gitを使わない環境(Deploy without Git Provider)としては、
awsのs3、Drag & Drop、他Webサイト)となっていました。

今回は、筆者はGithub(akimitwo)のプライベートリポジトリで作成してみました。

GitHub環境と接続する

LinuxやMacなどのローカル環境からGitHubにSSH接続するにあたって事前にsshkeyを生成し紐付けておきます。
ローカル環境で以下を実行します。

ssh-keygen -t rsa -b 4096 -C "xxxxxx@gmail.com"

今回は以下のファイル名で生成しました。

github_id_rsa
github_id_rsa.pub

github_id_rsa.pubの方はGithubの管理画面のSSH項目(Settings→SSH and GPG keysでNew SSH Key)で登録、github_id_rsaはローカル環境の方で使用します。

$ssh-add ~/.ssh/github_id_rsa

また、「.ssh/config」ファイルへ以下を追記します。

#
Host github
HostName github.com
IdentityFile ~/.ssh/github_id_rsa
User git
#

次にgithubのWEBサイト側で新たにamplifytest1というリポジトリを作成します。
その後、ローカル環境で開発作業を行うディレクトリを作成、そこに移動して以下を実行します。

$git init
$git remote add origin git@github.com:akimitwo/amplifytest1.git
$vi index.html
$git add index.html
$git commit -m "1st  Comment"
$git push origin master

コードの量にもよると思いますが、簡単なページであれば2〜3分でデプロイ完了し、WEBサイトへも反映されます。

<追記>
その後、再接続時してのプッシュ時に以下のようなエラーが発生しました。

$ git push origin master

! [rejected]        master -> master (fetch first)
error: failed to push some refs to 'git@github.com:xxxxx/xxxxxx.git'
hint: Updates were rejected because the remote contains work that you do
hint: not have locally. This is usually caused by another repository pushing
hint: to the same ref. You may want to first integrate the remote changes
hint: (e.g., 'git pull ...') before pushing again.
hint: See the 'Note about fast-forwards' in 'git push --help' for details.

一度プルしてやる必要があるようで、以下を実施してからのpushで解決しました。

$ git pull origin master

カスタムドメインを作成する

WEBサイトはhttps://master.d31c74106lj4gh.amplifyapp.comというURLが生成されますが、これが実体になりますが、以下のようにカスタムドメイン(別名URL)も使うことができます。
https://amplify.1banzaka.com/

カスタムドメインの作成はCDNのCloudFrontやSSLなども含まれるため、反映は約30分くらいかかっていました。
このSSLやCloudFrontとの紐付けはS3で行う場合は全て手動で実施だったのに対してAmplifyは自動化されており、楽に作業できました。

Basic認証の作成も簡単にできるぞ

WEBサイトの正式公開前などでBASIC認証をかけておくケースがありますが、
Amplifyでもアクセスコントロール画面より、ユーザID/PASSが必要なサイトの認証も利用可能です。以下で「Apply a global password – on 」でOKです。
(※Basic認証のように作成可能です。)

Amplifyのコストは?

さて駆け足で紹介してきましたが、気になるのはAmplifyで静的なWEBサイトをホスティングした際のコストですね、実際どれくらいなの?と。

<料金表>
ビルド & デプロイ機能 :ビルド1分あたりの料金は 0.01 USD/分
ホスティング機能   :1GB あたりの料金は 0.15 USD/月
保存容量        :1GB あたりの料金は 0.023 USD/月

(例として、1GB以下)
デプロイ:約2分 = 2円
ホスティング:約1GB/月 = 16円
保存容量:約1GB/月 = 2.53円

1GB利用でAmplifyだけなら1ヶ月20円程度ということですね。
上記に加えて独自ドメインでRoute53を利用していれば、約53円で約73円。
つまり、AWSのAmplifyを使うと静的WEBサイトは約100円で維持可能になります。

次回はNodeを使ったAmplifyでのサーバレスなWEBアプリケーション環境の構築にトライします。