0
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

RDS/EC2/WAF/Cloud Watch/Route53/ALB/API Gateway/Lamda サーバー構築手順書

Last updated at Posted at 2021-06-26

この記事を書こうと思った目的

  • AWSの機能を、ひと通り触ってみたかったから
  • AWSがどんなものなのか、触ってAWSをわかりたかった
  • 暇だったから(実はこれが主な理由 ⇒ 不純な動機w)

AWSを触った感想

  • 個人だと、AWSを使う必要性はほとんどない
  • AWSは便利だけど、ずっと使い続けてたらかなりコストが
    かかる(サービスを3つ常時起動で、毎月1万とんでいった)
  • 楽しかった

システム構成

インスタンス図-3.jpg

作業手順

![説明図-3-2-2-2.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/628823/33e60316-9809-e9ad-e8ef-ed8678e180ac.jpeg)

目次

  • 1. RDSの作成
  • 2. 本番サーバーの作成
  • 3. 踏み台サーバーの作成
  • 4. ALBの作成
  • 5. CloudWatchの作成
  • 6. WAFの作成
  • 7. Slackチャンネルの作成
  • 8. Lamdaの作成
  • 9. API Gatewayの作成
  • 10. Route53の作成

このシステムの構成要素

  
OS環境 Mac OS Catalina 10.15.15
Laravel バージョン 8
PHP バージョン 7.3
mysql バージョン 8.0
インストール先ディレクトリ/usr/local/
ユーザー名ec2-user
EC2インスタンスの種類 Amazon Linux 2
EC2インスタンス名 通信方式 SSH接続

準備するもの

  • マイLaravelアプリ
  • Githubアカウントのアカウント名・マイリポジトリ名
  • EC2インスタンス2つ
  • 作成済みのVPC
  • ムームードメイン・スタードメインなどで取得したドメイン名

1. RDSの作成

プライベートサブネットを作成する

マネジメントコンソールでVPCと入力 → サブネット → サブネットの作成をクリック 下のように設定し、サブネットの作成をクリック ![スクリーンショット 2021-06-20 23.50.21.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/628823/2a9f7f8e-6c7d-15fd-74cb-796b16c7434e.png)

1.セキュリティグループを作成

セキュリティグループを、MySQL/Auroraにする ![スクリーンショット 2021-06-21 0.00.34.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/628823/266ecb29-ba89-db99-7a09-1e075bc6182b.png)

2.DBサブネットグループを作成

マネジメントコンソールでRDSと検索し、RDSを開く → サブネットグループをクリック ![スクリーンショット 2021-07-01 16.11.36.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/628823/bb757d62-14a7-0338-1927-4efaf894af46.png) サブネットグループを作成 ![スクリーンショット 2021-07-01 16.22.25.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/628823/8cbcc9b5-f5f4-71df-1c7a-d69281eb4543.png) アベイラビリティゾーン・サブネットは2つずつ選び、作成 ![スクリーンショット 2021-07-01 16.23.22.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/628823/96d554ec-dc1b-f5c2-21bc-1ef839bc6411.png)

3.DBパラメータグループを作成

RDSのパラメータグループ → パラメータグループの作成 ![スクリーンショット 2021-07-01 16.30.24.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/628823/75781dfe-4c61-219d-12ee-902631d49cdc.png)

4.DBオプショングループを作成

RDSのオプショングループ → グループを作成 ![スクリーンショット 2021-07-01 16.39.18.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/628823/294dbdad-8f86-28eb-590d-c9bb7a3086d9.png)

5.データベースを作成

マネジメントコンソールのRDS → データベース → データベースの作成 ![スクリーンショット 2021-07-01 16.48.27.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/628823/fdab831b-d9f7-97e9-4aa5-3c37ad71a7f3.png) ![スクリーンショット 2021-07-01 16.49.50.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/628823/250fea5f-d5e7-ce41-28f4-e099d09f5474.png)
設定したユーザー名/パスワード/DB名(DBインスタンス識別子)は、メモに書いておく ![スクリーンショット 2021-07-01 17.47.50.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/628823/45740ab5-2597-37a3-c864-9c87cf7e992d.png)

スクリーンショット 2021-07-01 16.59.08.png

ストレージはそのままにする ![スクリーンショット 2021-07-01 17.03.48.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/628823/da76e79f-2846-c9a0-9656-a397fcf50b24.png)
vpcとサブネットグループの設定 ![スクリーンショット 2021-07-01 17.04.04.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/628823/5c090e18-857b-781f-0b7d-6655bc79c380.png) アベイラビリティーゾーンは1aにする → 追加の接続設定をクリック ![スクリーンショット 2021-07-01 17.33.48.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/628823/3a599c17-9fcd-e898-9261-6a6ff2e833aa.png) 作ったパラメータグループ・オプショングループを設定 →データベースの作成をクリック ![スクリーンショット 2021-07-01 17.55.56.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/628823/d54eaa5e-b59b-ecae-c7a7-2f77e14b0bb2.png)

2. 本番サーバーの作成

ElasticIPをEC2インスタンスにアタッチ ![スクリーンショット 2021-06-12 16.04.46.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/628823/b6cd62d8-e1e9-cbb5-5680-be9c3670c7ea.png)
ターミナルを立ち上げ、キーのあるディレクトリに移動し、
キーの権限を追加
chmod 400 キー名.pem
EC2インスタンスをsshで起動
ssh -i ~/キーがあるディレクトリ名/キー名.pem ec2-user@ElasticIPのアドレス
①apacheをインストール
sudo yum update
sudo yum install httpd
apacheが自動起動するように設定
sudo systemctl enable httpd.service

途中でこのコマンドが出たら、yと入力 ![スクリーンショット 2021-06-12 21.08.04.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/628823/45c1987b-922a-93ee-4eed-e6ababf92a22.png)
②php・phpのライブラリをインストールする
sudo amazon-linux-extras install -y php7.2
sudo yum install -y php php-mbstring
mysql8.0をインストールする
sudo yum remove mariadb-libs
sudo yum localinstall https://dev.mysql.com/get/mysql80-community-release-el7-3.noarch.rpm
sudo yum install --enablerepo=mysql80-community mysql-community-server
sudo touch /var/log/mysqld.log
sudo systemctl start mysqld 
sudo systemctl enable mysqld
ディレクトリ/usr/local/に権限を付与し、
composerをインストールする
cd /usr/local
sudo chmod 777 /usr/local
sudo curl -sS https://getcomposer.org/installer | php
composerのpathを通す
sudo mv composer.phar /usr/local/bin/composer
laravelをインストールし、Laravelアプリ作成
composer global require "laravel/installer:^4.0"
composer create-project laravel/laravel apple
Nodeのインストール
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.34.0/install.sh | bash
nvm install node
jestreamのインストール
composer require laravel/jetstream
php artisan jetstream:install livewire
npm install && npm run dev
php artisan serve
重要ファイルに、権限を追加する
sudo chmod 777 public
sudo chmod 777 storage
sudo chmod 777 bootstrap
sudo chmod 777 .env
envファイルを修正
vi .env

データベース名・パスワード・ユーザー名・エンドポイント(DB_HOST)を入力する ![スクリーンショット 2021-07-01 18.39.29.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/628823/2bd9af46-df2e-d07b-0e60-3cd72a21e2df.png) エンドポイントの確認方法 : RDS → データベース →作ったデータベース名をクリックし、確認する ![スクリーンショット 2021-07-01 18.19.24.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/628823/227408d4-cace-0d93-5f4d-2652219ed315.png)
httpd.confの修正
sudo vi /etc/httpd/conf/httpd.conf

httpd.confをこう修正する

<Directory "/usr/local/apple/resources/views/">
AllowOverride All
/Directory>
EC2を再起動する
sudo shutdown -r now

3. 踏み台サーバーの設定

AMIを作成する   コピーしたいAMIのインスタンスを選択 → アクション → イメージとテンプレート  → イメージを作成を選択 ![スクリーンショット 2021-06-13 19.34.50.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/628823/37e39fd1-fe28-5efd-2575-9dc2f1d3fc16.png) AMIの名前を入力する ![スクリーンショット 2021-07-07 23.56.19.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/628823/2255b562-a442-d064-0e52-40734519ae3f.png)
タグを追加 → AMIの名前を入力 → イメージを作成 ![スクリーンショット 2021-07-07 23.56.19.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/628823/58a72f21-473e-dcc8-4758-20f70e151090.png)

AMIの画面で、起動をクリックし、EC2インスタンスを作成する
スクリーンショット 2021-06-13 19.41.47.png

Elastic IP を踏み台EC2にアタッチ

4. ALBの作成

マネジメントコンソールに ロードバランサーと入力 → ロードバランサー → ロードバランサーの作成をクリック ![スクリーンショット 2021-06-19 22.15.47.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/628823/710d2467-1b18-df35-7b94-ca128a12f8e9.png) Application Load Balancerの作成をクリック ![スクリーンショット 2021-06-19 22.19.04.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/628823/7e3e8ba4-ecf6-3a08-e138-228404a7ab58.png)
アベイラビリティーゾーン二つにチェックする ![スクリーンショット 2021-06-19 22.21.51.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/628823/c13f7cb7-ab6c-15d1-81bc-db072db64bf0.png) セキュリティグループを作成する ![スクリーンショット 2021-06-13 20.52.17.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/628823/317f65e2-6138-c5dc-91fd-db4dbb1347a6.png) ターゲットグループに名前を入力し、次の手順へ ![スクリーンショット 2021-06-19 22.37.01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/628823/31ea25e1-0794-5fe6-fd68-43db9106ea69.png) 設定したいインスタンスにチェックを入れ、登録済みに追加をクリック → 作成をクリック ![スクリーンショット 2021-06-19 22.43.13.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/628823/394c249a-66be-7919-4acf-1ac190465a48.png)

5. CloudWatchの作成

1. ロールの作成

ロールの作成をクリックし、Systems Managerをクリック ![スクリーンショット 2021-06-15 20.18.16.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/628823/22edc217-1dea-fe20-6105-fa3860397bbf.png)
SSMと入力し、AmazonEC2RoleforSSMを選ぶ ![スクリーンショット 2021-06-15 20.16.21.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/628823/576e96e9-6b38-4763-df1e-e914e092174b.png) ロールを作成したら、コンソール画面からec2-start-stopRoleを選び、信頼関係 →信頼関係の編集をクリック ![スクリーンショット 2021-06-15 20.21.25.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/628823/b01f88a9-cca2-cf6b-0d02-46364628e0c1.png) Serviceのところを、こう修正する ![スクリーンショット 2021-06-15 20.23.07.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/628823/9c8954aa-6a21-5864-8234-e509271cd410.png)

2. 自動終了の設定をする

イベントのルールを選択
スクリーンショット 2021-06-15 18.27.31.png

ルールの作成を選択
スクリーンショット 2021-06-15 18.35.31.png

スケジュールを選び、Cron式に終了したい時間をUTCの時間で入力する ![スクリーンショット 2021-06-15 18.51.41.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/628823/9d1eba53-4c52-adb2-e643-bc959a9721aa.png)

・UTCの時間で参考にしたURL
https://blog.mukairiku.net/2013/07/協定世界時utcと日本標準時jstの対応表.html

ターゲットの追加をクリック ![スクリーンショット 2021-06-15 18.53.59.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/628823/15545247-3d03-1607-5e37-24da1185e641.png) ドロップダウンリストから、SSM Automationを選ぶ ![スクリーンショット 2021-06-15 18.57.06.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/628823/6734d9bf-d203-a5b3-426b-0fd88632111d.png) ドロップダウンリストの下の、ドキュメントに、AWS-StopEC2Instanceと入力し、AWS-StopEC2Instanceをクリック ![スクリーンショット 2021-06-15 19.00.49.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/628823/ef4044e2-d998-ef9e-7311-bec2d00f87e4.png) 設定する自分のインスタンスIDと、既存のロールを選択し、作ったロール『ec2-start-stop Role』を選ぶ ![スクリーンショット 2021-06-15 19.17.54.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/628823/eb0a9e75-0eb5-a171-9f42-dfe20f68dded.png) 設定の詳細をクリック ![スクリーンショット 2021-06-15 19.24.23.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/628823/708957c0-b60c-bb33-e332-f04fe65a6d66.png)

自動起動の設定をする

ドロップダウンリストの下の、ドキュメントに、AWS-StartEC2Instanceと入力し、AWS-StartEC2Instanceをクリック ![スクリーンショット 2021-06-15 19.11.15.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/628823/fd3b397d-4360-878d-bd06-d26db23304c2.png)

6. ALBを紐付けたWAFの作成

マネジメントコンソールでWAFと入力し、WAF &Shieldをクリック ![スクリーンショット 2021-06-18 16.34.36.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/628823/9f7a3484-a6b2-c072-a9a6-746c04518311.png) 左のメニューから、Web ACLsを選ぶ ![スクリーンショット 2021-06-17 19.57.55.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/628823/11a09c1d-1ef0-fd6c-2d1d-36c9f96277a3.png) Create Web ACLをクリック ![スクリーンショット 2021-06-18 16.31.35.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/628823/00515cc5-5875-a315-33d7-a2d2068385fd.png)
名前を入力し、Regional resourcesを選び、Nextをクリック ![スクリーンショット 2021-06-18 16.43.32.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/628823/85e3b681-a4bc-4226-87e0-925a9eaadcf6.png)
Nextをクリック ![スクリーンショット 2021-06-18 16.46.13.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/628823/c04f2cea-bfd4-c707-5330-7a6f3091b8d5.png) Nextをクリック ![スクリーンショット 2021-06-18 16.48.24.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/628823/d4147d78-a593-5234-a49b-20736f791c39.png) Enable sampled requestsを選び、Nextをクリック![スクリーンショット 2021-06-18 16.48.34.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/628823/9e2520a0-9800-d43c-1db2-11bbae8c0150.png) 作ったWebACLの、Rulesをクリック → Add rules → Add managed rule groupsをクリック ![スクリーンショット 2021-06-18 21.12.22.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/628823/c12e72f7-7c2d-2718-bb85-683241be71ce.png) AWS managed rule groupsをクリック ![スクリーンショット 2021-06-18 21.14.39.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/628823/a5b9038c-56c3-43f9-d31d-ef3b0dccc5f6.png)
Add managed rule groupsで `Anonymous IP list Linux operating system PHP application SQL database`を ![スクリーンショット 2021-06-18 21.26.11.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/628823/55bcdaa1-bfd9-937f-cfd0-574758667c6d.png) にする
add rules → Saveをクリック ![スクリーンショット 2021-06-18 21.54.59.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/628823/fe3b5645-b7c2-e5cc-b6fd-7e202024b3ea.png)

7. Slack の作成

こちらのリンクをクリック https://slack.com/intl/ja-jp/help/articles/206845317-Slack-ワークスペースを作成する
ワークスペースを作成するをクリック → サイトに書いてある作業をする ![スクリーンショット 2021-07-11 17.43.28.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/628823/ac8c3d69-daf6-4f14-e588-bc8862e451df.png)

8. Lamdaの作成

1. Lamdaのポリシーを作成

マネジメントコンソールでIAM → ポリシー → ポリシーを作成 → サービスの選択をクリック → EC2を選ぶ ![スクリーンショット 2021-07-11 17.58.59.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/628823/28b1f2af-8c45-7fae-0d2e-b74685fb5f83.png) 書き込みにチェック ![スクリーンショット 2021-07-11 18.06.28.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/628823/087e9a65-928f-92aa-ef90-783e0eed654f.png) 294が選択されましたをクリック ![スクリーンショット 2021-07-11 18.07.59.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/628823/96084b1e-2630-5585-a8c5-4d0e87974157.png) 書き込みの、この3つだけにチェックする ![スクリーンショット 2021-07-11 18.11.52.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/628823/6fea1c67-9b17-0232-8490-ccbb4b6b55ee.png) 赤字の部分をクリック ![スクリーンショット 2021-07-11 18.14.48.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/628823/ccd243fa-954a-289d-4eef-c108025ded63.png) すべてのリソースを選ぶ ![スクリーンショット 2021-07-11 18.17.59.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/628823/995adabd-f4d0-87a8-4706-e3af8a799ed7.png) さらにアクセス許可を追加する → サービスの選択 → Cloud WatchLogs → 書き込みにチェック ![スクリーンショット 2021-07-11 18.20.48.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/628823/f45b78a5-2b52-e4e6-ca3e-84ebb04100a1.png) 赤字の部分をクリック → すべてのリソースを選択を選ぶ → 次のステップへをクリック タグを追加 → 名前を入力する ![スクリーンショット 2021-07-11 18.25.57.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/628823/207995b8-56cc-ac0c-17ac-c5fa67767f2c.png) ポリシーの名前を入力 → ポリシーの作成をクリック ![スクリーンショット 2021-07-11 18.28.13.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/628823/ebe8cebc-1eaf-618a-0027-411ce3518a0f.png)

Lamdaのロールを作成

マネジメントコンソールでIAM → ロール → ロールの作成 → Lamda ![スクリーンショット 2021-07-11 17.51.13.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/628823/80831b30-7621-004e-0759-1e062253c8be.png) 先ほど作ったポリシー名を入力し、チェックする → 次のステップ ![スクリーンショット 2021-07-11 18.33.51.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/628823/2f810866-9580-1628-589e-18ac2088998c.png) 名前を入力し、ロールの作成をクリック ![スクリーンショット 2021-07-11 18.36.46.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/628823/a2000b6c-9ec5-2ce3-ed1e-6cdea9c08601.png)

Lamda関数を作成

AWSマネジメントコンソールでLamdaと入力 → 関数の作成をクリック
ランタイムはnode.jsを選び、デフォルトの実行ロールの変更をクリック → 既存のロールを使用する → 作ったロールを選ぶ → 関数の作成 ![スクリーンショット 2021-07-11 10.59.08.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/628823/7db60ed1-2bc7-603e-75ae-2e6aaa09af3d.png) index.jsをクリックし、コードにこれを入力する
'use strict';

const AWS = require('aws-sdk');

// 操作したいEC2インスタンスIDを入力する。※各自が入力する
const instance_list = ["i-xxxxxxxxxxxxxxxxx", "i-xxxxxxxxxxxxxxxxx"]

// EC2 インスタンスを起動する
function startEC2Instance(region, instanceId) {
    const ec2 = new AWS.EC2({ region: region });
    const params = {
        InstanceIds: instance_list,
        DryRun: false,
    };
    return new Promise((resolve, reject) => {
        ec2.startInstances(params, (err, data) => {
            if (err) reject(err);
            else     resolve(data);
        }); 
    });
}

// EC2 インスタンスを停止する
function stopEC2Instance(region, instanceId) {
    const ec2 = new AWS.EC2({ region: region });
    const params = {
        InstanceIds: instance_list,
        DryRun: false,
    };
    return new Promise((resolve, reject) => {
        ec2.stopInstances(params, (err, data) => {
            if (err) reject(err);
            else     resolve(data);
        }); 
    });
}

// EC2 インスタンスのステータスを確認する
function describeStatusEC2Instance(region, instanceId) {
    const ec2 = new AWS.EC2({ region: region });
    const params = {
        InstanceIds: instance_list,
        DryRun: false,
    };
    return new Promise((resolve, reject) => {
        ec2.describeInstanceStatus(params, (err, data) => {
            if (err) reject(err);
            else     resolve(data);
        }); 
    });
}

// 関数指定してインスタンスを制御します。
function executeControl(ec2Function) {
    const result = { EC2: null};
    const a = ec2Function(process.env.EC2_REGION, process.env.EC2_INSTANCE_ID)
        .then(data => {
            result.EC2 = { result: 'OK', data: data };
        }).catch(err => {
            result.EC2 = { result: 'NG', data: err };
        });
    const b = null
    return Promise.all([a, b]).then(() => result );
}

function getSuccessfulResponse(message, result) {
    return {
        "response_type": "in_channel",
        "attachments": [
            {
                "color": "#32cd32",
                "title": 'Success',
                "text": message,
            },
            {
                "title": 'Result',
                "text": '```' + JSON.stringify(result, null, 2) + '```',
            },
        ],
    };
}

function getErrorResponse(message) {
    return {
        "response_type": "ephemeral",
        "attachments": [
            {
                "color": "#ff0000",
                "title": 'Error',
                "text": message,
            },
        ],
    };
}

exports.handler = (event, context, callback) => {
    if (!event.token || event.token !== process.env.SLASH_COMMAND_TOKEN)
        callback(null, getErrorResponse('Invalid token'));
    if (!event.text)
        callback(null, getErrorResponse('Parameter missing'));
    if (event.text.match(/start/)) {
        executeControl(startEC2Instance)
        .then(result => { callback(null, getSuccessfulResponse('Starting...', result)); });
    } else if (event.text.match(/stop/)) {
        executeControl(stopEC2Instance)
        .then(result => { callback(null, getSuccessfulResponse('Stopping...', result)); });
    } else if (event.text.match(/status/)) {
        executeControl(describeStatusEC2Instance)
        .then(result => { callback(null, getSuccessfulResponse('Checking statuses...', result)); });
    } else {
        callback(null, getErrorResponse('Unknown parameters'));
    }
};
作成したLamda関数の設定をクリック → 環境変数 → 編集 ![スクリーンショット 2021-07-11 11.38.25.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/628823/17d03ce2-1e9f-1d41-81f1-0918c8f10216.png) これが次の画面 ![スクリーンショット 2021-07-11 11.38.35.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/628823/349737e6-240f-4cfa-87bd-c529f0532099.png) このデータを入力
キー
EC2_REGION ap-northeast-1
SLASH_COMMAND_TOKEN hogehoge

9. API Gatewayの作成

マネジメントコンソールでAPI Gateway → APIを作成でこう選択する → APIの作成 ![スクリーンショット 2021-07-13 19.37.14.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/628823/dc799779-89d2-121c-2e5e-e59357150398.png) メソッドの作成 ![スクリーンショット 2021-07-11 11.43.43.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/628823/59f404b3-88f1-1bc8-551e-2ef9f2a9dafb.png) GETを選ぶ ![スクリーンショット 2021-07-11 11.44.10.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/628823/718f91f7-c195-2938-8023-cc16c159ee9e.png) 関数名・リージョンを入力 → 保存 ![スクリーンショット 2021-07-11 11.45.10.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/628823/70c0a2b7-4f95-666d-6e09-2105d428d5bf.png) メソッドリクエストをクリック ![スクリーンショット 2021-07-11 11.51.07.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/628823/b2b60390-3fc2-d4f5-ebc6-7147cdb0ef09.png) リクエストの検証をクリック → クエリ文字列パラメータおよびヘッダーの検証を選択 → URL クエリ文字列パラメータのタブをクリック ![スクリーンショット 2021-07-11 11.52.14.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/628823/d43fe938-62c6-576b-b7f3-3b68ae451e06.png) 以下のデータを入力
text
token
入力したデータを選択する ![スクリーンショット 2021-07-11 11.53.14.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/628823/e4a6a3e1-b983-94fc-acca-46c6d263bd46.png) 前の画面に戻り、結合リクエストをクリック ![スクリーンショット 2021-07-11 11.57.48.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/628823/b001a3cc-a9c6-90df-d89d-3eda5d83db9c.png) 一番したの、マッピングテンプレートの画面をクリックし、このデータを入力
{
   "token": "$input.params('token')",
   "text": "$input.params('text')"
}
APIのデプロイをクリック ![スクリーンショット 2021-07-11 12.01.12.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/628823/f197f1cc-21be-5549-10c8-076e78560a29.png) ステージ名をdevと入力し、デプロイクリック ![スクリーンショット 2021-07-11 12.01.45.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/628823/fa5313af-decb-8783-e14d-b8c9d7c92197.png) エンドポイントのURLが画面に表示されるので、メモする ![スクリーンショット 2021-07-11 12.02.19.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/628823/ee63f447-d3ca-d18f-0237-28efcf3c7f4d.png) Slackの作成したチャンネルを開き、app → アプリの追加をクリック ![スクリーンショット 2021-07-13 20.14.43.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/628823/6bc17935-b712-8158-b03d-cdc11d84e1ad.png)
Slash Commandと入力し、Slash Commandを選んで追加をクリック ![スクリーンショット 2021-07-11 12.04.44.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/628823/e60c8567-4239-9065-33da-6183d876a98f.png)
ec2-devと入力 → スラックコマンドインテグレーションを追加するをクリック ![スクリーンショット 2021-07-11 12.06.05.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/628823/95d2bb3b-7aa3-8f5c-c9e2-e342715de600.png)
URLに、メモしていたAPI GatewayのURLを入力 + トークンをメモする → インテグレーションを保存するをクリック ![スクリーンショット 2021-07-11 12.07.29.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/628823/85ef4fce-2efd-41f8-802e-e68639bcc0c1.png) Lamda関数の環境変数を、Slackで取得したトークンに修正する
Lamda関数 → 新しいバージョンの発行をクリック ![スクリーンショット 2021-07-11 12.11.04.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/628823/3414c1dd-6a1e-8e94-652f-bc23add60a63.png) 自分の好きな名前を入力 ![スクリーンショット 2021-07-11 12.12.33.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/628823/299173e0-d116-8f34-6a21-302b4a4f7697.png) Slackチャンネルで /ec2-dev startと入力 → 成功すればこう表示される ![スクリーンショット 2021-07-13 20.33.13.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/628823/21dc00f3-11d8-695d-7edd-0c93fa7a3a6c.png) 停止は、/ec2-dev stop

10. Route53の作成

マネジメントコンソールで、Route53と検索し、ホストゾーンをクリック ホストゾーンの作成をクリック ![スクリーンショット 2021-06-16 22.31.39.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/628823/52b9fb10-ccb3-a055-8af7-1eeae87579eb.png) パブリックホストゾーンを選び、ドメイン名に作ったドメインを入力し、ホストゾーンの作成をクリック ![スクリーンショット 2021-06-16 22.33.52.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/628823/d4cef956-ed29-49d4-4e80-9edd5c16c18c.png) ホストゾーンにレコードを追加する マネジメントコンソール → Route53 → ホストゾーン →設定したホストゾーンをクリック ![スクリーンショット 2021-06-16 22.43.05.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/628823/6ca52afb-dad0-1e88-1cd5-e3f8945c4652.png) レコードを作成をクリック ![スクリーンショット 2021-06-16 22.48.20.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/628823/f0f04fdf-11a0-b341-c8d0-497ea102eef6.png) infoに、本番サーバーにアタッチしたインスタンスのElasticIPを入力 → 『レコードを作成』をクリック ![スクリーンショット 2021-06-16 22.56.56.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/628823/e5a87298-3ab6-2a15-81a2-481221d8333d.png) ドメインを契約しているネームサーバーに、Route53のネームサーバーを登録する マネジメントコンソール → Route53 → ホストゾーン →設定したホストゾーンをクリック → NSに書かれている URLを、ドメインのネームサーバーに登録する ![スクリーンショット 2021-06-16 23.00.55.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/628823/78d5531c-626f-0437-1be8-ccdacd8ec0a6.png)
DNSの設定確認をする
dig 自分が設定したドメイン名

 

参考資料

https://qiita.com/kyosuke5_20/items/b04813bb7ca26285d95e https://poppotennis.com/posts/ec2-laravel https://entsukablog.com/aws-laravel-deploy-github/ https://www.acrovision.jp/service/aws/?p=736 https://qiita.com/miriwo/items/eb09c065ee9bb7e8fe06 https://www.udemy.com/course/aws-and-infra/learn/ https://agohack.com/scheduled-start-and-stop-ec2-with-aws-cloudwatch-event/ https://avinton.com/academy/route53-dns-vhost/ https://noname.work/2254.html https://qiita.com/mogurinchu/items/9093d9ca4a341d2d6c4b https://fujison.xyz/entry/laravel-install-2 https://docs.aws.amazon.com/ja_jp/sdk-for-javascript/v2/developer-guide/setting-up-node-on-ec2-instance.html https://qiita.com/daisu_yamazaki/items/607ea579a374c4187562 https://ishitonton.hatenablog.com/entry/2020/11/15/170125 https://qiita.com/daisu_yamazaki/items/b946594896179abcd203 https://teratail.com/questions/29094
0
2
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
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?