LoginSignup
0
1

More than 1 year has passed since last update.

AWS導入からEC2 LAMP環境でCodePipelineによる自動ビルドまでざっくり手順書

Last updated at Posted at 2021-09-29

自分用です。間違っている部分があるかも。わからないところは検索してね。

// 導入

注: 様々な名称にはシステムが付けるものに似た名称を付けないこと。sg-で始まるセキュリティグループを作成しようとしてエラーになったことがある。

  1. AWS アカウントを作成する。

  2. コンソールにルートユーザ(1で作ったアカウント)でサインイン

  3. 料金発生アラームを設定する
    billingで検索→「請求情報とコスト管理ダッシュボード」を開く
    「請求設定」メニューを開く
    「無料利用枠の使用アラートを受信する」「請求アラートを受け取る」にチェック。前者にメールアドレスを入力。
    「設定の保存」ボタンを押す

  4. CloudWatchを設定する
    サービス一覧>ガバナンスにあるCloudWatchをクリック
    リージョンを「米国東部(バージニア北部)」に変更。
    アラーム>アラーム状態を選択。
    「アラームの作成」を押す。
    「メトリクスの選択」を押す。
    「メトリクス」から「請求」を押す。
    「概算合計請求額」を押す。
    「USD」にチェックを入れ、「メトリクスの選択」を押す。
    条件を設定。5ドル以上など。
    「SNSトピックの選択」から「新しいトピックの作成」を選択。
    トピック名を入力。
    メールアドレスを入力。
    「トピックの作成」を押す。
    「SNSコンソールで表示」を押す。
    承諾メールが来ていることを確認し、メールに記載されているリンクをクリックすることで承諾する。
    承諾すると、SNSコンソールのサブスクリプションのステータスが「確認済み」になる。
    AWSコンソールに戻り、「次へ」を押す。
    アラーム名と説明を入力して「次へ」を押す。
    「アラームの作成」を押す。

  5. IAMユーザログインURLの設定
    サービスメニュー>セキュリティ、ID、およびコンプライアンス>IAMを選択。
    AWSアカウント>アカウントエイリアス>作成を押す。
    わかりやすい名前を入力し、作成を押す。

  6. 管理者IAMユーザグループを作成
    「ユーザーグループ」を選択。
    「グループを作成」ボタンを押す。
    ユーザーグループ名を入力。
    ポリシーをアタッチする。(adminならAdministratorAccess)
    「グループを作成」ボタンを押す。

  7. 管理者IAMユーザを作成
    「ユーザー」を選択
    「ユーザーを追加」を押す。
    ユーザー名を入力。
    認証タイプを選択。(プログラムからのアクセスかユーザのアクセスか)
    ユーザパスワードなどを入力
    「次のステップ」を押す。
    所属するグループを選択し、「次のステップ」を押す。
    タグが必要なら入力して「次のステップ」を押す。
    内容が良ければ「ユーザの作成」を押す。
    ルートユーザをサインアウトして、5で作成したサインインURLから管理者IAMユーザで入り直す。

  8. 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とインターネットゲートウェイを関連付ける。

  1. EC2用CodeDeployロールを準備
    IAMから「ロール」を選択。「ロールの作成」ボタンを押す。ユースケースとしてEC2を選択。
    AmazonEC2RoleforAWSCodeDeployポリシーを付けたRoleを作成。

  2. EC2の作成
    サービス>コンピューティング>EC2を選択。
    「インスタンス」を選択。
    「インスタンスを起動」を押す。
    例としてAmazon linux2を選択。
    例としてt2.microを選択。
    「次のステップ」を押す。
    基本設定で使用するVPC、EC2用CodeDeployロールを付与し「次のステップ」を押す。
    ストレージ設定を確認し「次のステップ」を押す。
    タグを確認し「次のステップ」を押す。
    アップロードに使用するセキュリティグループ名を入力し、「確認と作成」を押す。
    確認し、「起動」を押す。
    キーペアを作成を選択し、キーペア名を入力(リージョンなど)し、「キーペアのダウンロード」を押し、pemファイルを保存する。
    EC2に名前を付ける。デプロイ時にデプロイ先を見つけるのに使用される。
    「インスタンスの起動」を押す。
    「インスタンスの表示」を押す。
    ステータスチェックが「2/2のチェックに合格しました」と表示されるまで待つ。
    「接続」ボタンを押す。
    「SSHクライアント」を選択。
    表示されているアカウント情報でSSHクライアントからアクセスする。
    gitをインストールするとgit for bashがVSCodeに追加される。ここからssh接続することも可能。
    「状態」から「終了」を選択するとEC2自体が削除されるので注意。

  3. WinSCPからEC2にアクセス
    SCPプロトコルで接続。
    パスワードには入力せず、「設定」ボタンを押し、環境>SCP/シェルでシェルを「sudo su-」に変更することによってroot権限が必要なディレクトリでファイル操作が行えるようになる。
    SSH>認証を選択、秘密鍵で作成したpemファイルを指定。自動的にppkファイルを生成してくれる。

  4. 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などを確認

  5. 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

  6. php7.4のインストール
    sudo amazon-linux-extras install php7.4を実行。

  7. 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を再起動する。

  8. php.iniの設定
    /etc/php.iniの設定を行う。比較ツールを使うと良い。
    理由: Amazon linux2は PHP-FPM 環境を使用しており、.htacess内のphp_valueおよびphp_flagを使用できない。
    また代替としての.user.iniも/etc/httpd/conf.d/php.confで禁止されている。
    よってphp.iniに書くのが最も単純。(ただし回避方法があるかも)

  9. 作業ディレクトリの権限設定
    phpからファイルを作成する場合、置き場の権限が正しくないと失敗する。
    mkdir ディレクトリ名
    chown apache:apache ディレクトリ名
    chmod 777 ディレクトリ名
    ls -laで確認。

  10. MySQL(RDSサービス)のインストール
    VPCでDB用セキュリティグループを作成。
    名称・説明を入力。(sg-から始まる名称を付けるとunknownエラーになるのでやらない)
    インバウンドルールを追加、タイプに「MYSQL/Aurora」、ソースにWebアクセス用セキュリティグループを指定して「セキュリティグループを作成」ボタンを押す。
    サービスから「RDS」を選択。
    「サブネットグループ」を選択。
    「DBサブネットグループを作成」ボタンを押す。
    名前と説明を入力して「作成」を押す。
    VPCを選択。(デフォルトで選択されているように見えるがされていない)
    アベイラビリティゾーン・サブネットを選択。
    「作成」ボタンを押す。
    「ダッシュボード」を選択。
    「データベースの作成」を押す。
    MySQL・無料利用枠を選択。
    識別子・ユーザーパスワードを入力。
    VPC・作成したDBサブネットグループ・作成したDBアクセス用セキュリティグループを選択。
    「データベースを作成」を押す。数分後に使用可能になる。
    データベース名をクリックすると詳細が表示される。エンドポイント文字列をコピーする。

  11. 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

  12. 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のユーザでログインする。

  13. gitリポジトリを用意。
    アプリのルートにbuildspec.ymlファイルとappspec.ymlを作成する。buildspecはビルドの挙動、appspecは生成物の配置を指示する。
    ymlファイルはインデントを正確に揃えなくてはならないので注意。タブは使えない。
    -のあとはスペース必須。

  14. デプロイ用ロールの作成
    IAMを開き、Roleの作成を押す。ユースケースからCodeDeployを選択。
    次へを押して行き、ロール名を入力。「ロールの作成」を押す。

  15. アプリケーションの作成
    CodeDeployを開き、「アプリケーション」を選択。EC2アプリケーションを作成する。

  16. デプロイグループの作成
    アプリケーションページ下部にある、デプロイグループを作成。 名称、ロール、デプロイタイプ(インプレースはデプロイ中オフラインになる。Blue-Greenは検証・本番を都度交代する。これを使用するにはロードバランサの設定が必要)
    環境設定でEC2インスタンス、タグからインスタンス名を選択。
    デプロイエージェント設定で更新を選択

  17. パイプラインを作成。
    新しいサービスロールを選択してパイプライン名を入力 ソースプロバイダをGithubバージョン2(会社のgithubなどでアプリをインストールする権限がない場合はgithubバージョン1を選択)、接続を作成、リポジトリとブランチ名を選択。
    ビルドステージでAWSCodeBuildを選択。プロジェクトを作成
    デプロイプロバイダにAWS CodeDeploy、アプリケーション名、デプロイグループを選択。
    パイプラインを作成を押すと最初のビルドが走る。失敗する場合はbuildspec.yml,appspec.ymlを見直してみよう。

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1