インフラ初学者がAWSでポートフォリオを公開するまでに独学で学んだこと


先日、転職向けに作ったポートフォリオをAWSで公開したのですが、思い返すと公開までにかなり(無駄な?)試行錯誤を繰り返したので、備忘としてポイントを残しておきます。

筆者は、インフラ知識は独学なので、かなり使用技術に偏りがあるかもしれませんが、ご容赦ください。対象の読者は同じく独学でAWSを動かしており、アプリケーションの公開に悩んでいる初学者を想定しています。

進め方の反省点

アプリケーションの作成とインフラの構築を分けてポートフォリオ作成を進めてしまった点。デバッグ環境では動いていたのに、本番環境に移行すると動かない、とかあるあるなので、インフラ構築はアプリケーションの一部として考えるべきでした。

Hello Worldした時点で、ある程度時間をかけてでもインフラ公開できる仕組みを構築しておいて、アプリケーションを作り込みながら、インフラ周りの知識を深めていく、といった進め方が理想的だったと思います。

AWSを動かすのに必要な前提知識

とりあえず、公開できる程度まではAWSを触ってみた筆者の感想として、TCP/IPなどの通信の仕組み、Linux、Webサーバの知識は、ある程度ベースを固めておくべきだと感じました。

普段使わない知識を3種類も勉強するのは非常に負荷が高いのですが、最低限の知識がない状態で、アプリケーションを公開したい一心でAWSを動かしても、体系だった知識をベースに物事を考えられないので、ひたすら謎のエラーと格闘する不毛な時間に心が折れてしまうかと思います。

通信

HTTP、TCP/IPなどの知識がないと、AWSのセキュリティ設定(インバウンドルールなど)で相当苦労するはずです。ここが理解できないと、デバッグ環境では動いていたのに本番環境ではファイアウォールでブロックされて動かない、などのトラブル原因が切り分けできないというのも辛いです。

筆者の経験上、通信エラーに関しては、F12の開発者ツールでエラー内容を確認してもあまり有用な情報が落ちていないことが多く、通信が阻害される原因の仮説を立てて、開発を進めていくことが非常に重要です。

勉強するなら、マスタリングTCP/IP―入門編―(第6版)が知識としてよくまとまっているので、良いと思います。

Linux

仕事でLinuxを使う人は少数派だと思いますが、インフラの構築を行う上ではLinuxがまだまだ主流なので、AWSでもLinuxを選択しなるべく操作には慣れておいた方が良いと思います。

勉強するなら、本よりも実際にAWS EC2のLinux AMIなどの環境を手で動かして慣れてみた後、余裕があれば知識を網羅する為に、後述するLinuCという資格試験の勉強をしてみると良いかもしれないです。

筆者も普段Windowsを使用しており、GUIに慣れきっている状態だったのでLinuxのコンソール画面に当初かなり違和感を覚えていたのですが、使用しているうちに少しずつ勘所がつかめてきた気がします。

Linuxを動かす上で意識していたポイント

  • コマンドに慣れる(特にls、cd、pwdコマンド)

    • lsは現在いるディレクトリのファイルやフォルダを一覧表示するコマンド。
    • cdはディレクトリの移動のためのコマンド。
    • pwdは自分が存在するディレクトリを確認する為のコマンド。
  • 階層構造に慣れる。

    • 最初のうちはCUIに慣れないと思うので、迷ったらpwdコマンドで自分がどこにいるのか確認して進めていた。
  • 環境変数に慣れる。

    • .bashrcなど、基本的な環境変数周りの知識はあった方がいい。
  • VIMの操作に慣れる。

    • confファイル(後述)の編集にはVimを使用する為、苦手意識を持たない方が良い。
  • Linuxにも種類があることを理解する。

    • 混乱するかもしれないが、Linuxにもさまざまな種類があり使えるコマンドも若干異なる。Qiitaなどの記事内容をコマンド入力してエラーが出ても、放り出さずにエラー内容を確認する。(ここが一番辛かったかもしれない)

コツとして書いてみたものの、独学で知識の偏りがあることは否めないので、LinuCという資格試験には今後挑戦してみたいと思います。

Webサーバ(今回はNginxを使用)

Webサーバも、普段インフラ運用を行う人でなければ、設定を行うのが難しい所だと思います。

Webサーバを動かす上で意識していたポイント

  • Confファイルの変更箇所をメモしながら進めた点。

    • Nginx.confなど、Linux上でWebサーバの設定を行う機会は多い。
    • その分ネット上の参考記事も多く、却って混乱することが多かった。記事の内容を鵜呑みにせず、何を行いたいのか、その為にどこを編集したのか、振り返って後からでもわかるようにしておくことが重要だと思う。
  • Linux上でWebサーバのモジュール(Confファイル等)がどこにあるのか

    • 慣れている人ならともかく、初心者はLinuxのどこに何があるのか分からず、作業の大きなボトルネックになると思うので、Confファイルの場所は常にメモに書いてわかるようにしておいた。
  • 変更したらとにかく再起動

    • Webサーバに限らず、ツール系の再起動コマンドは暗記するくらい使いこなす。設定がうまく行っていないのか、再起動待ちで変更が反映されていないのか、考える時間が一番無駄だと感じた。

その他

細かいテクニックやハマリ所は別記事にもまとめてみました。

Vue.jsのアプリケーションをAWS上のNginxで公開する。(404エラーの罠)

GolangのWebAPIをsupervisorでデーモン化して公開する。