自分用です。間違っている部分があるかも。わからないところは検索してね。
// 導入
注: 様々な名称にはシステムが付けるものに似た名称を付けないこと。sg-で始まるセキュリティグループを作成しようとしてエラーになったことがある。
-
AWS アカウントを作成する。
-
コンソールにルートユーザ(1で作ったアカウント)でサインイン
-
料金発生アラームを設定する
billingで検索→「請求情報とコスト管理ダッシュボード」を開く
「請求設定」メニューを開く
「無料利用枠の使用アラートを受信する」「請求アラートを受け取る」にチェック。前者にメールアドレスを入力。
「設定の保存」ボタンを押す -
CloudWatchを設定する
サービス一覧>ガバナンスにあるCloudWatchをクリック
リージョンを「米国東部(バージニア北部)」に変更。
アラーム>アラーム状態を選択。
「アラームの作成」を押す。
「メトリクスの選択」を押す。
「メトリクス」から「請求」を押す。
「概算合計請求額」を押す。
「USD」にチェックを入れ、「メトリクスの選択」を押す。
条件を設定。5ドル以上など。
「SNSトピックの選択」から「新しいトピックの作成」を選択。
トピック名を入力。
メールアドレスを入力。
「トピックの作成」を押す。
「SNSコンソールで表示」を押す。
承諾メールが来ていることを確認し、メールに記載されているリンクをクリックすることで承諾する。
承諾すると、SNSコンソールのサブスクリプションのステータスが「確認済み」になる。
AWSコンソールに戻り、「次へ」を押す。
アラーム名と説明を入力して「次へ」を押す。
「アラームの作成」を押す。 -
IAMユーザログインURLの設定
サービスメニュー>セキュリティ、ID、およびコンプライアンス>IAMを選択。
AWSアカウント>アカウントエイリアス>作成を押す。
わかりやすい名前を入力し、作成を押す。 -
管理者IAMユーザグループを作成
「ユーザーグループ」を選択。
「グループを作成」ボタンを押す。
ユーザーグループ名を入力。
ポリシーをアタッチする。(adminならAdministratorAccess)
「グループを作成」ボタンを押す。 -
管理者IAMユーザを作成
「ユーザー」を選択
「ユーザーを追加」を押す。
ユーザー名を入力。
認証タイプを選択。(プログラムからのアクセスかユーザのアクセスか)
ユーザパスワードなどを入力
「次のステップ」を押す。
所属するグループを選択し、「次のステップ」を押す。
タグが必要なら入力して「次のステップ」を押す。
内容が良ければ「ユーザの作成」を押す。
ルートユーザをサインアウトして、5で作成したサインインURLから管理者IAMユーザで入り直す。 -
Cliのインストール
aws cli version 2で検索し、インストール。linuxの場合はcurlが入っていなければインストールしてから。 sudo snap install curl ついでに sudo snap install jqも snapはドッカー方式のパッケージ。 aptは通常のインストール方式。
// 環境構築
9. Virtual Private Cloud(VPC)の確認
「サービス」>「ネットワーキングとコンテンツ配信」>VPCを選択。
リージョンを使用するリージョンに変更。
「VPC」を選択。
「ルートテーブル」を選択。0.0.0.0/0はインターネットへとルートされる。
NACLはファイアウォールのような役割を果たし、セキュリティグループはVPC内でのアクセス管理に利用される。
publicとprivateサブネットがあり、publicはインターネットにアクセスできる。privateはpublicにNATを用意すれば間接的にインターネットにアクセスできる。
//作成する場合
VPCから作成する。サブネット・インターネットゲートウェイも作成する必要がある。
VPC設定でDNSホスト名とDNS解決を有効にするとパブリックURLが作られるようになる。
publicにするには「サブネット」からサブネットを選択し、アクション>IP4の自動割り当てを選択。
ルートテーブルにサブネットを明示的に関連付ける。
インターネットゲートウェイを作成して、VPCに関連付ける。
ルートテーブルにインターネット行きルート0.0.0.0/0とインターネットゲートウェイを関連付ける。
-
EC2用CodeDeployロールを準備
IAMから「ロール」を選択。「ロールの作成」ボタンを押す。ユースケースとしてEC2を選択。
AmazonEC2RoleforAWSCodeDeployポリシーを付けたRoleを作成。 -
EC2の作成
サービス>コンピューティング>EC2を選択。
「インスタンス」を選択。
「インスタンスを起動」を押す。
例としてAmazon linux2を選択。
例としてt2.microを選択。
「次のステップ」を押す。
基本設定で使用するVPC、EC2用CodeDeployロールを付与し「次のステップ」を押す。
ストレージ設定を確認し「次のステップ」を押す。
タグを確認し「次のステップ」を押す。
アップロードに使用するセキュリティグループ名を入力し、「確認と作成」を押す。
確認し、「起動」を押す。
キーペアを作成を選択し、キーペア名を入力(リージョンなど)し、「キーペアのダウンロード」を押し、pemファイルを保存する。
EC2に名前を付ける。デプロイ時にデプロイ先を見つけるのに使用される。
「インスタンスの起動」を押す。
「インスタンスの表示」を押す。
ステータスチェックが「2/2のチェックに合格しました」と表示されるまで待つ。
「接続」ボタンを押す。
「SSHクライアント」を選択。
表示されているアカウント情報でSSHクライアントからアクセスする。
gitをインストールするとgit for bashがVSCodeに追加される。ここからssh接続することも可能。
「状態」から「終了」を選択するとEC2自体が削除されるので注意。 -
WinSCPからEC2にアクセス
SCPプロトコルで接続。
パスワードには入力せず、「設定」ボタンを押し、環境>SCP/シェルでシェルを「sudo su-」に変更することによってroot権限が必要なディレクトリでファイル操作が行えるようになる。
SSH>認証を選択、秘密鍵で作成したpemファイルを指定。自動的にppkファイルを生成してくれる。 -
Apacheのインストール
インスタンス作成時に基本設定のユーザーデータに以下のコマンドを付ける。上手くいかなければsshで接続して手動で実行。
#!bin/bash
yum update -y
yum install httpd -y
systemctl start httpd
systemctl enable httpd
cd /var/www/html
echo "テスト用ページ" > index.html
セキュリティグループを選択
紐付けたセキュリティグループにチェックを入れ、「編集」を押す。
「ルールを追加」を押す。
タイプでHTTPを選択。必要ならHTTPSも選択。
リソースタイプでanywhere-IPv4を選択。
「ルールを保存」を押す。
EC2にssh接続する。
.htaccessを使用する場合、sudo vim /etc/httpd/conf/httpd.confを実行。またはWinSCPで編集。
vimの場合、iで編集モード。
AllowOverride None → ALLに変更。
vimの場合escでコマンドモード。:wq[Enter]で保存して閉じる。
systemctl restart httpdでリスタート。
ページなどは/var/www/htmlにおく。
エラーは/var/log/httpd/conf/httpdなどを確認 -
CodeDeployエージェントをインストール。
yum update
yum install ruby // rubyが必要
cd /home/ec2-user
wget https://aws-codedeploy-ap-northeast-1.s3.ap-northeast-1.amazonaws.com/latest/install
chmod +x ./install
./install auto
実行確認はservice codedeploy-agent status
スタートしていない場合はservice codedeploy-agent start -
php7.4のインストール
sudo amazon-linux-extras install php7.4を実行。 -
phpに必要なパッケージのインストール
日本語処理用にmbstring、phpMyAdmin用にphp-xmlをインストールする。
yum list installed |grep フィルタ(phpなど)で一覧表示。
インストール可能パッケージを探すには、yum search キーワード|grep フィルタ
例えば yum search mbstring|grep php
インストールするには yum install パッケージ名
systemctl restart httpdでapacheを再起動する。
systemctl restart php-fpmでphpを再起動する。 -
php.iniの設定
/etc/php.iniの設定を行う。比較ツールを使うと良い。
理由: Amazon linux2は PHP-FPM 環境を使用しており、.htacess内のphp_valueおよびphp_flagを使用できない。
また代替としての.user.iniも/etc/httpd/conf.d/php.confで禁止されている。
よってphp.iniに書くのが最も単純。(ただし回避方法があるかも) -
作業ディレクトリの権限設定
phpからファイルを作成する場合、置き場の権限が正しくないと失敗する。
mkdir ディレクトリ名
chown apache:apache ディレクトリ名
chmod 777 ディレクトリ名
ls -laで確認。 -
MySQL(RDSサービス)のインストール
VPCでDB用セキュリティグループを作成。
名称・説明を入力。(sg-から始まる名称を付けるとunknownエラーになるのでやらない)
インバウンドルールを追加、タイプに「MYSQL/Aurora」、ソースにWebアクセス用セキュリティグループを指定して「セキュリティグループを作成」ボタンを押す。
サービスから「RDS」を選択。
「サブネットグループ」を選択。
「DBサブネットグループを作成」ボタンを押す。
名前と説明を入力して「作成」を押す。
VPCを選択。(デフォルトで選択されているように見えるがされていない)
アベイラビリティゾーン・サブネットを選択。
「作成」ボタンを押す。
「ダッシュボード」を選択。
「データベースの作成」を押す。
MySQL・無料利用枠を選択。
識別子・ユーザーパスワードを入力。
VPC・作成したDBサブネットグループ・作成したDBアクセス用セキュリティグループを選択。
「データベースを作成」を押す。数分後に使用可能になる。
データベース名をクリックすると詳細が表示される。エンドポイント文字列をコピーする。 -
MySQLアクセス機能のインストール
EC2にssh接続。
sudo yum install mysqlを実行。
mysql -h エンドポイント -P 3306 -u ユーザ名 -pを実行。パスワードを入力すると接続できる。
ログイン後、create database データベース名;でデータベース作成。
ログアウト後、mysql -h エンドポイント -P 3306 -u ユーザ名 -p データベース名 < エクスポートしたsqlファイル を実行するとインポートできる。
再度ログインし、use データベース名 で選択。desc テーブル名; でインポートされているか確認できる。
php からRDSへ接続するには、以下の接続文字列をpdoに渡す。
mysql:host=エンドポイント;port=3306;dbname=データベース名;charset=utf8mb4 -
phpMyAdminのインストール
ダウンロード&解凍する。
cd /var/www/html
wget https://www.phpmyadmin.net/downloads/phpMyAdmin-latest-all-languages.tar.gz
mkdir phpMyAdmin && tar -xvzf phpMyAdmin-latest-all-languages.tar.gz -C phpMyAdmin --strip-components 1
rm phpMyAdmin-latest-all-languages.tar.gz
設定ファイルを作成して書き換える。
cd /var/www/html/phpMyAdmin
cp config.sample.inc.php config.inc.php
$cfg['Servers'][$i]['host'] = 'RDSのエンドポイント' に変更。
RDSのユーザでログインする。 -
gitリポジトリを用意。
アプリのルートにbuildspec.ymlファイルとappspec.ymlを作成する。buildspecはビルドの挙動、appspecは生成物の配置を指示する。
ymlファイルはインデントを正確に揃えなくてはならないので注意。タブは使えない。
-のあとはスペース必須。 -
デプロイ用ロールの作成
IAMを開き、Roleの作成を押す。ユースケースからCodeDeployを選択。
次へを押して行き、ロール名を入力。「ロールの作成」を押す。 -
アプリケーションの作成
CodeDeployを開き、「アプリケーション」を選択。EC2アプリケーションを作成する。 -
デプロイグループの作成
アプリケーションページ下部にある、デプロイグループを作成。 名称、ロール、デプロイタイプ(インプレースはデプロイ中オフラインになる。Blue-Greenは検証・本番を都度交代する。これを使用するにはロードバランサの設定が必要)
環境設定でEC2インスタンス、タグからインスタンス名を選択。
デプロイエージェント設定で更新を選択 -
パイプラインを作成。
新しいサービスロールを選択してパイプライン名を入力 ソースプロバイダをGithubバージョン2(会社のgithubなどでアプリをインストールする権限がない場合はgithubバージョン1を選択)、接続を作成、リポジトリとブランチ名を選択。
ビルドステージでAWSCodeBuildを選択。プロジェクトを作成
デプロイプロバイダにAWS CodeDeploy、アプリケーション名、デプロイグループを選択。
パイプラインを作成を押すと最初のビルドが走る。失敗する場合はbuildspec.yml,appspec.ymlを見直してみよう。