AWS EC2 の AMI(マシンイメージ) で Amazon Linux 2 を選択してサーバ構築すると amazon-linux-extras コマンドが利用できます。
amazon-linux-extras は Amazon Linux 用のパッケージツールで、主要なソフトウェアをまとめてインストールできます。
ただし、amazon-linux-extras パッケージに含まれないソフトウェアは別途インストールする必要があります。
amazon-linux-extras のコマンドは単純で、以下の4つのコマンドが用意されています。
amazon-linux-extras でトピック一覧(パッケージ情報)を確認できます。 amazon-linux-extras list でも同様の動作をします。
数字の次にの項目が amazon-linux-extras のトピック名(パッケージ名)です。実際にインストールする Linux のパッケージ名とは違うので注意が必要です。
available はインストール可能な状態、enabled は実際にインストールされた状態です。
また、amazon-linux-extras info でパッケージ内容を確認できます。例えば、php7.4 のパッケージを確認してみます。
Amazon Linux 2 の Linux のディストリビューションは RHEL7 / CentOS7 を採用しています。よって、実際のパッケージインストールコマンドは yum install が実行されます。
amazon-linux-extras install でパッケージを管理者権限でインストールします。
トピック名 php7.4 をインストールする例です。
ヘルプにはありませんが amazon-linux-extras disable でパッケージの動作を無効にすることもできます。
実際にパッケージが削除されるわけでなく yum remove などで削除すると、パッケージ依存の問題が発生する可能性があるので注意が必要です。
amazon-linux-extras はよく利用するパッケージのインストールを少しだけ楽にしてくれるツールであることがわかりました。
AWS の無料枠では t2.micro でメモリ 1G のため、Cloud9 で Laravel のインストールなどでエラーになってしまうことがあります。
また EC2 のボリューム EBS(Amazon EBS Elastic Volumes)もデフォルト 10G のためプロジェクト作成で不足がちになります。
clound9 などでメモリ不足が発生すると以下のようなエラーになります。
この対処として Swap 領域を確保して対応すると良いでしょう。
AWS Console にログインし、EC2 対象のインスタンスを選択して「アクション > ボリューム変更」を選択します。
サイズに容量(GB)を入力し【変更】をクリックします。
※無料枠は 合計 30GB が上限なので注意が必要です
ボリュームの変更確認画面で【はい】をクリックします。
ボリュームが変更されたら【閉じる】をクリックします。
ボリュームが変更されているのを確認しましょう。
EC2 インスタンスを再起動しなくてもボリュームは反映されているかと思います。
Webプログラミング初心者にとって、最初につまずく「開発環境構築」ではないでしょうか。プログラム言語やサーバ、ツールのインストールには、それなりの知識と経験が必要になります。
そんな初心者のために近年、開発環境をクラウドで利用できるサービスが増えてきました。
「Cloud9」もブラウザ上でWeb開発できるクラウドサービスのひとつです。
あらかじめIDE(統合開発環境)が用意されており、面倒なサーバ設定をしなくても実際の現場で利用されているような開発環境を手に入れられます。
またブラウザで利用できるため、Windows、MacといったPCに関係なくプログラミングが可能です。
ブラウザ上でプログラムを書き、実行するので、自分のPCにツールをインストールする必要がありません。
Cloud9 以外にも、クラウドで学習専用のツールとして「Monaca」や 「Paiza」などがあります。
Cloud9 自体は無料で使うことができますが、Cloud9のサーバは AWS EC2 というサービスと連動しているため、EC2の起動時間分は料金がかかるので注意してください。
ちなみにAWSを初めて利用する場合は、1年間の無料枠があります。詳しくは AWS 無料利用枠 を参考にしてください。
またインターネットが利用できないと開発ができなくなるデメリットがありますので、最終的には自分のPC(ローカル)で開発環境をできる知識も身に付けるようにしましょう。
ローカル環境構築は、「VirtualBox 」「Vagrant」「Docker」といったツールを利用することが一般的です。 エディタは無料であれば、Microsoftの「VSCode」を利用するのをおすすめします。
まず、ブラウザ Google Chrome のインストール、AWSの決済に必要なクレジットカードを用意してください。
※ブラウザはChrome を利用することをおすすめ
それでは Cloud9 を利用してみましょう。
Chromeを開き、AWS にアクセスして、アカウントを作成する。
※AWSのアカウント作成には、クレジットカードの登録が必要
AWSにサインインする。
AWSコンソールにアクセスする。
「cloud9」で検索してアクセスする。
「Create Enviroment」をクリックする。
「Name」に任意の文字を入力し「Next step」をクリックする。
「Environment type」は「Create a new instance for environment (EC2)」を 「Instance type」は最小限にコストを抑える「t2.micro (1 GiB RAM + 1 vCPU)」を選択する。
「Platform」は RedHat系なら「Amazon Linux」Debian系なら「Ubuntu」を選択し「Next step」をクリックする。
内容を確認し「Create Enviloment」をクリックする。
Cloud9 が起動し画面表示される。
これで、Cloud9 を利用することができました。
Cloud9 ウィンドウの左には、ファイルやフォルダを管理するための画面があります。
この画面内で、ファイルやフォルダの作成、移動、削除など PC 同様のファイル操作ができます。
HTML/CSS, JavaScript, PHP, Ruby, Python といった言語がデフォルトで対応しているのですぐにプログラミングすることができます。 実際に Cloud9 のメニューからファイルを作成して、中央画面に表示して編集できるか試してみましょう。
Windows, Mac ではファイルやフォルダのマウスで操作する「GUI」が基本ですが、Webサーバではターミナル上でコマンド入力する「CUI」が基本です。 Cloud9 の画面下に表示されているのがターミナルです。
Webアプリ開発では Linux というサーバOSで構築されています。その Linux を操作するにはターミナルでコマンドが必須となります。 まだコマンドを利用したことがない人は、これから Linux のターミナルコマンドを少しずつ勉強してきましょう。
デフォルトでは未使用後に30分に EC2 が停止するようになっていますが、何かの拍子で Cloud9 に接続したままになるとEC2のインスタンスも起動したままになり、課金され続けることがあるかも知れません。
その場合、AWS EC2 を手動で停止することもできます。
ここでは、Cloud9 の起動方法について説明しました。
実際にWeb開発環境構築にチャレンジしてみると、用語の意味や動作しないなど大変なことがわかるかと思います。VirtualBox, Vagrant, Docker といったツールで楽になったとはいえ、サーバの知識が若干必要になります。
まずWebサーバを起動してプログラム動かしたい人は、Cloud9 を体験してみましょう。
awsコマンドの返り値はJSONで返ってきますが、見やすく整形するには色々とコマンドを記述しなければいけません。
そこでフィルタプログラム jq を利用すると少しだけ整形が楽になります。
Homebrew で jq をインストールします。
jEC2のインスタンスを「インスタンスID」「タグ」「インスタンスタイプ」で一覧表示してみます。
その際、jq のオプション -c(--compact-output)で圧縮出力します。
このようにパイプ(|)で連結させてフィルタリングします。
結果内容を揃える場合、Macの標準コマンド column を利用します。
その際、jq コマンドのオプションを -r(--raw-output)で生出力にします。
軽量JSONパーサー『jq』のドキュメント:『jq Manual』をざっくり日本語訳してみました
AWS ECR(Elastic Container Repository)を使ってみます。
Amazon Elastic Container Registry
ECRは、Dockerコンテナイメージを保存するレジストリサービスで、DockerHub の AWS版のような感じです。
AWS ECS 、AWS fargate と併用してコンテナを用いたサーバを運用します。
2020/3時点で、以下の枠で無料のようです
Amazon Elastic Container Registry の料金
マネジメントコンソールもしくは、AWS Client でリポジトリを作成します。
使用方法にアクセス
リポジトリ名を入力、プッシュ時にスキャンを有効にして、リポジトリを作成
リポジトリが作成される
aws コマンドでも、ECR リポジトリを作成できます。
AWS Client を利用して ECRのプロファイルを作成します。
リージョンは東京(ap-northeast-1)としています。
AWS ECR のリージョン(東京)を環境変数に設定(.bash_profile)します。
イメージが作成されたのを確認
別のバージョンの Python で AWS CLI をインストールする場合、Python の絶対パス指定してインストールスクリプトを実行が必要です。
ターミナルを再起動すれば、aws コマンドが利用できます。
AWS の Linux2 は最適化された(?)パッケージが用意されている
- CentOS7
- Apache2
- PHP7.3
- PostgreSQL *コマンドは sudo でなく root で実行している(root パスワードを別途設定済み)
*CentOS6系では chkconfig httpd on
/var/www/ を ec2-user が利用できるように設定する
デフォルトの DocumentRoot である /var/www の権限を ec2-user : apache に変更 ディレクトリ(775)とファイル(664) で利用できるようにする
*2775 の 2 は setgid
ec2-user で所属グループの確認
ec2-user を再ログインして確認
Amazon Linux2 用にパッケージが用意されており、PHP7.3 はここからインストールする。
amazon-linux-extras で足りないパッケージは、yum でインストールすると良い
composer.json が作成される
amazon-linux-extras では psql コマンドのみのインストールの模様
パスワードで制御するかIPで制御するか、はたまたその他の方式かはセキュリティポリシーによって違うので割愛 (postgres.conf & pg_hba.conf 設定など)
AWS はセキュリティグループで PostgreSQLのポート設定しないと一切アクセスできない。
セキュリティグループ > EC2 に紐付いたグループ > インバウンド > 編集
上記の設定は 5432 に全ての IPを許可(CIDR形式)しているので、必要であれば IP制限する
(postgresパスワードや、pg_hba.conf で制限しても良い)