Laravelに管理画面用認証追加

qiita.com

 

coinbaby8.com

 

1.  Admins テーブル作成

php artisan make:migration Admins

 

<?php

use Illuminate\Support\Facades\Schema;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;

class Admins extends Migration
{
    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        Schema::create('Admins'function (Blueprint $table) {
                $table->increments('id');
                $table->string('name');
                $table->string('email')->unique();
                $table->integer('role');
                $table->string('password');
                $table->rememberToken();
                $table->timestamps();
            });
    }

    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down()
    {
        //
    }
}

 

php artisan migrate

 

2.  モデル作成

php artisan make:model Admin

※User.phpをコピーしてclass名をAdminに変更する

class Admin extends Authenticatable
{
    use Notifiable;

    /**
     * The attributes that are mass assignable.
     *
     * @var array
     */
    
    protected $table = 'Admins';
  protected $fillable = [
        'name''email''password''role'
    ];

    /**
     * The attributes that should be hidden for arrays.
     *
     * @var array
     */
    protected $hidden = [
        'password''remember_token',
    ];

}

 

3.  config/auth.phpの編集

    'guards' => [
        'web' => [
            'driver' => 'session',
            'provider' => 'users',
        ],

        'api' => [
            'driver' => 'token',
            'provider' => 'users',
        ],
 
        //管理者用追加
        'admin' => [
            'driver' => 'session',
            'provider' => 'admins',
        ],
    ],

 

    'providers' => [
        'users' => [
            'driver' => 'eloquent',
            'model' => App\User::class,
        ],
        //管理者用追加
        'admins' => [
            'driver' => 'eloquent',
            'model' => App\Admin::class,
        ],
    ],

 

4.  ログインしていない時のリダイレクト先の設定

 app/Exceptions/Handler.php に以下を追記。

これで、web.phpで、'middleware' => 'auth:admin'で設定したページに、ログインせずにアクセスすると、admin/loginにリダイレクトされる。

(こちらも参考)

https://readouble.com/laravel/5.6/ja/authentication.html

 

//管理画面用に追加
    public function unauthenticated($requestAuthenticationException $exception)
    {
        if($request->expectsJson()){
            return response()->json(['message' => $exception->getMessage()], 401);
        }
 
        if (in_array('admin'$exception->guards())) {
            return redirect()->guest(route('admin.login')); ←★ルーティングで設定したログインページ
        }
 
        return redirect()->guest(route('login'));
    }

 

ログイン後に、再度認証が必要なページにアクセスした際のリダイレクト先は、

/var/www/html/app/laravel/app/Http/Middleware/RedirectIfAuthenticated.php

に追記する。

 

<?php

namespace App\Http\Middleware;

use Closure;
use Illuminate\Support\Facades\Auth;

class RedirectIfAuthenticated
{
    /**
     * Handle an incoming request.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  \Closure  $next
     * @param  string|null  $guard
     * @return mixed
     */
    public function handle($requestClosure $next, $guard = null)
    {
        //変更。オリジナルは以下。
        //if (Auth::guard($guard)->check()) {
        //    return redirect('/home');
        //}
        if (Auth::guard($guard)->check()) {
            if ($guard=='admin') { //config/auth.phpで追加した管理者用のguards名
                return redirect('/admin/home');
            } else {
                return redirect()->intended('/home');
            }
        }
        
        return $next($request);
    }
}

 

5.  ルーティングの設定

管理者用に以下をweb.phpに追加

 

/*--------------------------------------------------------------------------
| Admin 認証不要
|--------------------------------------------------------------------------*/
Route::group(['prefix' => 'admin'], function() {
    Route::get('/',         function () { return redirect('/admin/login'); });
    Route::get('login',     'Admin\LoginController@showLoginForm')->name('admin.login');
    Route::post('login',    'Admin\LoginController@login');
});
 
/*--------------------------------------------------------------------------
| Admin ログイン後
|--------------------------------------------------------------------------*/
Route::group(['prefix' => 'admin''middleware' => 'auth:admin'], function() {
    Route::post('logout',   'Admin\LoginController@logout')->name('admin.logout');
    Route::get('home',      'Admin\HomeController@index')->name('admin.home');
});

 

 

6.  コントローラーの作成

app/Http/Controllers/の下にAdminフォルダをつくって、

その中にapp/Http/Controllers/Authの中のLoginController.phpとHomeController.phpをコピーする。

 

<LoginController.php>

<?php

//namespace App\Http\Controllers\Auth;
namespace App\Http\Controllers\Admin;//変更

use App\Http\Controllers\Controller;
use Illuminate\Foundation\Auth\AuthenticatesUsers;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;


class LoginController extends Controller
{
    /*
    |--------------------------------------------------------------------------
    | Login Controller
    |--------------------------------------------------------------------------
    |
    | This controller handles authenticating users for the application and
    | redirecting them to your home screen. The controller uses a trait
    | to conveniently provide its functionality to your applications.
    |
    */

    use AuthenticatesUsers;

    /**
     * Where to redirect users after login.
     *
     * @var string
     */
    protected $redirectTo = '/admin/home';// 管理者のログイン後のリダイレクト先

    /**
     * Create a new controller instance.
     *
     * @return void
     */
    public function __construct()
    {
        $this->middleware('guest:admin')->except('logout');//変更
    }

    public function showLoginForm()
    {
        return view('admin.login');//変更
    }
    protected function guard()
    {
        return Auth::guard('admin');  //変更
    }
    
    public function logout(Request $request)
    {
        Auth::guard('admin')->logout();  //変更
        $request->session()->flush();
        $request->session()->regenerate();
 
        return redirect('/admin/login');  //変更
    }
}

 

 

 <HomeController.php>

<?php

namespace App\Http\Controllers\Admin//Adminに変更

use Illuminate\Http\Request;
use App\Http\Controllers\Controller;

class HomeController extends Controller
{
    /**
     * Create a new controller instance.
     *
     * @return void
     */
    public function __construct()
    {
        $this->middleware('auth:admin');//変更
    }

    /**
     * Show the application dashboard.
     *
     * @return \Illuminate\Http\Response
     */
    public function index()
    {
        return view('admin.home');//変更
    }

}

 

 7.  ビューの作成

resources/viewsの下にadminフォルダをつくって、resources/views/auth/

login.blade.phpとresources/views/home.blade.phpをコピー。

 

また、resources/views/layouts/app.blade.phpをコピーして

app_admin.blade.phpを作成。

route('login')

のように、route()の箇所を全て

route('admin.login')

のように修正する。

 

8.  管理者用アカウントの作成

php artisan tinker

$admin = new App\Admin;

$admin->name = "hogehoge";

$admin->email = "hoge@hoge.com";

$admin->password = bcrypt("hogehoge");

$admin->save();

ctrl+c で終了

 

9.  通常のユーザーとセッション変数を分ける

(参考サイト)

https://qiita.com/sola-msr/items/65634826bcedf3ea4ca4

 

<?php
//管理画面用にセッションを分ける

//return [
$sessConf = [

    /*
    |--------------------------------------------------------------------------
    | Default Session Driver
    |--------------------------------------------------------------------------
    |
 

    途中略

];

//以下、adminの場合はセッションん名を変える
$uri = isset($_SERVER['REQUEST_URI']) ? $_SERVER['REQUEST_URI'] : '';

// 管理者側用セッション
if (strstr($uri'/admin/') !== false || $uri === '/admin/login') {
    $sessConf['cookie'] = env(
        'SESSION_COOKIE_ADMIN',
        str_slug(env('APP_NAME''laravel'), '_').'_admin_session'
    );
}

return $sessConf;
 

 

.envに以下を追記

SESSION_COOKIE=hoge_user
SESSION_COOKIE_ADMIN=hoge_admin

 

以上

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

EC2を立ち上げてからFTP接続可になるまでの手順覚え書き

インスタンスの立ち上げ>
Amazon Linux AMI 2018.03.0を選択
キーペアは事前に新規で作成しておく

 

<Swapの作成> ←EC2のインスタンスタイプがmicroだとどこかでメモリ不足になる
sudo /bin/dd if=/dev/zero of=/var/swap bs=1M count=1024
sudo chmod 600 /var/swap
sudo /sbin/mkswap /var/swap
sudo /sbin/swapon /var/swap

 

<サーバーの時間変更>
cp /etc/localtime /etc/localtime.org
sudo ln -sf /usr/share/zoneinfo/Asia/Tokyo /etc/l
ocaltime

sudo cp /etc/sysconfig/clock /etc/sysconfig/clock
.org

sudo vi /etc/sysconfig/clock

ZONE="Asia/Tokyo"
UTC=false
に変更

一旦、AWSインスタンスを再起動し、
dateで日本時間になっているか確認

 

Apacheのインストール>
httpd -version
(もし2.2系が入っている場合は↓)
sudo yum remove -y httpd
sudo yum remove -y httpd-tools

 

sudo yum install httpd24
sudo service httpd start
sudo chkconfig httpd on

(参考サイト)
https://utano.jp/entry/2016/10/amazon-linux-apache-24-install/

 

<PHP72のインストール>
sudo yum install php72 php72-devel php72-gd php72-mbstring php72-mysqlnd php72-pdo php72-xml

 

とりあえずこれくらいオプションを入れておけば、事足りるのかな。

(参考サイト)
https://miyabi-lab.space/blog/16

 

php.iniの設定>
sudo cp /etc/php.ini /etc/php.ini.org
sudo vi /etc/php.ini

- error_log = php_errors.log
+ error_log = /var/log/php_errors.log

- date.timezone =
+ date.timezone = Asia/Tokyo

- ;mbstring.language = Japanse
+ mbstring.language = Japanese

- ;mbstring.detect_order = auto
+ mbstring.detect_order = auto

 

MySQLのインストール> ←RDSを使えば不要
sudo yum list available | grep mysql*
sudo yum install -y mysql57-server
sudo chkconfig mysqld on
mydql --version

 

<EC2側の設定>
(参考サイト)
https://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/install-LAMP.html

EC2のインスタンスを選択し、「セキュリティーグループ」の「launch-wizard-3」をクリック

アクションーインバウンドのルールの編集

ルールの追加で、HTTPとHTTPSを追加

以上で、ブラウザでIPアドレスでアクセスするとテストページが表示される

 

<FTPのインストール>
https://qiita.com/sakuraya/items/b7e513a6add1dfc198b5

sudo yum -y install vsftpd
sudo vi /etc/vsftpd/vsftpd.conf

// 以下の3行のコメントアウトを外す
chroot_local_user=NO
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd/chroot_list

// 以下の1行を追加
user_config_dir=/etc/vsftpd/user_conf

touch /etc/vsftpd/chroot_list ←↑はmkdirになっているが間違い。
sudo vi /et/vsftpd/chroot_list
ftp-userを追加して、:wq

sudo mkdir /etc/vsftpd/user_conf
sudo touch /etc/vsftpd/user_conf/ftp-user
sudo vi /etc/vsftpd/user_conf/ftp-user

local_root=/
を追加

ユーザー追加
sudo useradd ftp-user
sudo passwd ftp-user


sudo chown ftp-user /var/www
sudo chmod 755 /var/www

ポートを開ける
EC2のインスタンスを選択し、「セキュリティーグループ」の「launch-wizard-3」をクリック

アクションーインバウンドのルールの編集

ルールの追加で、
「カスタムTCPルール」
「ポート:6001-60010」
「ソース:0.0.0.0/0」

「カスタムTCPルール」
「ポート:21」
「ソース:0.0.0.0/0」

を追加。

FTP起動
sudo service vsftpd start
sudo chkconfig vsftpd on

以上で、FTP接続可能になる。

 

===== 以下、追加の設定 =====

<composerのインストール>

https://qiita.com/k-ando/items/b022fcea2cf76d9814a9

 

curl -sS https://getcomposer.org/installer | php

sudo mv composer.phar /usr/local/bin/composer

 

<EC2からRDSに接続>

1. RDSでデーターベースを作成し、セキュリティーグループ(タイプ:EC2 Security Group - Inbound)をクリック

 

2.  「インバウンド」ー「編集」を押し、

タイプ:「MYSQL/Aurora」

ルール:接続元のEC2インスタンスで「セキュリティーグループ」のリンクを押し、表示された『グループID』を入力

 

これでEC2を踏み台にして、RDSに接続できる。

 

以上 

laravelium/sitemap のインストール

gitlab.com

1.自分の環境はLaravel5.5のため、composer.jsonに以下を記述する。

"require": {
"php": ">=7.0.0",
"aws/aws-sdk-php": "~3.0",
  ・・・・
・・・・
"laravelium/sitemap": "2.7.*" ←★ここを追加
},

 

2.composer updateで必要なファイルをインストール

composer update laravelium/sitemap

 

3.必要なファイルを生成

php artisan vendor:publish --provider="Laravelium\Sitemap\SitemapServiceProvider"

 

ここまで出来れば後は簡単。

 

4.route/web.phpに以下を追加

Route::get('/sitemap', 'SiteMapController@sitemap');

 

5.コントローラーの作成

php artisan make:controller SiteMapController

 

6.後は作成したコントローラーにURLを書いていく

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use Illuminate\Support\Facades\App;
use Illuminate\Support\Facades\URL;
use Carbon\Carbon;

class SiteMapController extends Controller
{
    public function sitemap()
    {
        // create new sitemap object
        $sitemap = App::make("sitemap");
        $now = Carbon::now();

        //ここからサイトマップに追加
        $sitemap->add(URL::to('/'), $now, '1.0', 'daily');
        $sitemap->add(URL::to('/XXXXX'), $now, '1.0', 'daily');

 

        //必要があれば、DBからページを読み込み、サイトマップに追加する

       $books = Books::where('open', 2)->where('del', 0)->orderBy('id', 'desc')->get();
      foreach ($books as $book)
      {
            $sitemap->add(URL::to('/viewer/' . $book->book_id), $book->updated_at, '0.8', 'daily');
       }

        return $sitemap->render('xml');
    }
}

 

7.URL/sitemap にアクセスすると、サイトマップが表示される。

 

以上

 

 

 

 

 

 

 

 

 

ImagemagickでCPU100%回避

tech.clickyourstyle.com

 

まずは、自分の設定値を確認

identify -list resource 

 

/etc/httpd/conf/httpd.conf に以下を追記

SetEnv OMP_NUM_THREADS 1

その後、以下を実行

$ sudo service httpd configtest
Syntax OK
$ sudo service httpd reload

 

以上

 

確かに処理が早くなった。CPUの負荷はどうだろう。下がったのだろうか。

 

(メモサイト)

techlife.cookpad.com

 

policy.xmlで編集する場合

1.policy.xmlの場所を探す 

find /usr | grep "policy.xml"

/usr/local/etc/ImageMagick-7/policy.xml

 

2.sudo vi /usr/local/etc/ImageMagick-7/policy.xml で編集し、

<policymap>
</policymap>

の中に以下を追記

<policy domain="resource" name="thread" value="1"/>

 

これでもいい。

 

 

EC2からS3へ大容量ファイルのコピー

<駄目な例(メモリー食いまくり)>

Storage::disk('s3')->put($move_to, Storage::file_get_contents($file));

 

<いい例(メモリを食わない)>

Storage::disk('s3')->put($move_to, fopen($file, 'r+'));

 

 

https://blog.larapulse.com/laravel/handling-large-files-on-s3

 

以上

 

 

 

Laravel + Dropzonejs + pionl/laravel-chunk-upload で大容量ファイルのアップロード

https://github.com/pionl/laravel-chunk-upload

https://github.com/pionl/laravel-chunk-upload/wiki

 

===== インストール編  ======

1. SSHでサーバーにログインし以下のコマンドを打つ

composer require pion/laravel-chunk-upload

2.  Config/app.phpを開き、Providers[]の中に以下を追加

\Pion\Laravel\ChunkUpload\Providers\ChunkUploadServiceProvider::class

 3.  再びコマンドで以下を打つ

php artisan vendor:publish --provider="Pion\Laravel\ChunkUpload\Providers\ChunkUploadServiceProvider"

/configの下に、chunk-upload.phpが作成される。

 

===== プログラム編  ======

4. web.phpに以下を追加

Route::post('/upload', 'UploadController@upload');

 

5. UploadControllerを作成

php artisan make:controller UploadController.php

以下のURLからコピーし、作成したUploadController.phpに貼り付ける

https://github.com/pionl/laravel-chunk-upload-example/blob/master/app/Http/Controllers/UploadController.php

 

6.  Dropzone.jsの通常のコードに以下を追加

 Dropzone.options.bookImportDropzone = {
   maxFilesize: 1000, //1GB
   chunking: true, //chunkアップロードに変更
   method: "POST",
   chunkSize: 2000000, //2MB
   parallelChunkUploads: false, ←★trueにしないと駄目

           retryChunks: true,
           retryChunksLimit: 3,
           chunksUploaded: function (file, done) {

                var response = JSON.parse(file.xhr.response);←★Upload.phpからのレスポンスはこの形で受ける(公式ドキュメント書いといてくれよ)


                //console.log('response='+JSON.stringify(response));

                //chunksuploadedの最後に必ず必要
                done();
           },
   init: function() {

     途中略

           },

           this.on("success", function(file, data){

               //ここは、chunksUploadedのdone()が実行された後に呼ばれる

               //アップロード完了後の処理を書く

            }

}

 ※parallelChunkUploads: true にすると、分割されたファイルが全部揃う前にファイルが結合されてしまうバグが、pionl/laravel-chunk-uploadにあるのでtrueは駄目

 

以上で完了。

Dropzoneにより、大容量のファイルがChunkSizeで分割されてアップロードされる。

全ての分割がアップロードされると、pionl/laravel-chunk-uploadで1つにまとめられ、デフォルトでは、storage/app/uploadの下に保存される。

そして、Dropzoneにレスポンスが返り、success()が実行される。

 

以上

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

(CloudWatchエージェント利用) CloudWatchで、EC2のメモリ使用量とディスク容量をウォッチする

基本的には以下に書かれている。

https://docs.aws.amazon.com/ja_jp/AmazonCloudWatch/latest/monitoring/Install-CloudWatch-Agent.html

 

コマンドラインを使用して CloudWatch エージェントをダウンロードおよび設定する

https://docs.aws.amazon.com/ja_jp/AmazonCloudWatch/latest/monitoring/download-cloudwatch-agent-commandline.html

 

wget https://s3.amazonaws.com/amazoncloudwatch-agent/amazon_linux/amd64/latest/amazon-cloudwatch-agent.rpm

 

sudo rpm -U ./amazon-cloudwatch-agent.rpm 

 

※上記コマンドを実行すると、

create group cwagent, result: 0
create user cwagent, result: 0

となるが、これで正常らしい。

 

CloudWatch エージェントで使用する IAM ロールおよびユーザーを作成する

https://docs.aws.amazon.com/ja_jp/AmazonCloudWatch/latest/monitoring/create-iam-roles-for-cloudwatch-agent-commandline.html

1.「IAM コンソール」ー「ロール」ー「ロールの作成」ー「EC2」

[CloudWatchAgentServerPolicyにチェック→次へ

→ロール名:CloudWatchAgentServerRole で作成

 

2. IAM ユーザーを作成

IAMコンソールー[ユーザー]ー[ユーザーの追加]

ー「プログラムによるアクセス」ー「既存のポリシーを直接アタッチする」

→「CloudWatchAgentServerPolicy」にチェック

→次へ、次へでユーザーを作成し、アクセスキーとシークレットキーをメモる。

 

CloudWatch エージェントの AmazonCloudWatchAgent プロファイルを作成

https://docs.aws.amazon.com/ja_jp/AmazonCloudWatch/latest/monitoring/install-CloudWatch-Agent-commandline-fleet.html

1.次のコマンドを実行

sudo aws configure --profile AmazonCloudWatchAgent

2.アクセスキーとシークレットキーを聞かれるので、上記でメモしたものを入力

3.Default region Nmae: ap-northeast-1

4.Default output format:text

 

(EC2 インスタンスへのインストール) IAM ロールのアタッチ

https://docs.aws.amazon.com/ja_jp/AmazonCloudWatch/latest/monitoring/install-CloudWatch-Agent-commandline-fleet.html

 

EC2 マネジメントコンソール画面で対象の EC2 インスタンスを選び、作成したロールを割り当ててください。 下記の操作にて、 IAM ロールの割り当て/置換ができます。

アクション>インスタンスの設定> IAM ロールの割り当て/置換

→「CloudWatchAgentServerRole」を選択

 

 

CloudWatch エージェント設定ファイルを作成する

https://docs.aws.amazon.com/ja_jp/AmazonCloudWatch/latest/monitoring/create-cloudwatch-agent-configuration-file.html

 

1.以下でウィザード実行

sudo /opt/aws/amazon-cloudwatch-agent/bin/amazon-cloudwatch-agent-config-wizard

 

(難しそうな質問抜粋)

which user are you planning to run the agent?

→cwagent

Do you want to turn on StatsD daemon?

→no

Do you want to monitor metrics from CollectD?

->no

Do you want to monitor any host metrics? e.g CPU, memory, ect.

->yes

Do you want to monitor cpu metrics per core? Additional CloudWatch charges may apply.

->no

Do you want to add ec2 dimensions (ImageID, InstanceID, InstaceType AutoScalingGroupName) into all of your metrics is the info is available?

->yes

Whoud you like to collect your metrics at high resolution (途中略)

->60s

Which default metrics config do you want?

->Standard

Are you satisfied with the above config? (途中略)

->yes

Do you have any existing CloudWatch Log Agent () configuration file to import for migration?

->no

Do you want to monitor any log files?

->no

Do you want to store the config in the SSM parameter store?

->no

 

 

2.ウィザードが終わると以下に定義ファイルが作成される

/opt/aws/amazon-cloudwatch-agent/bin/

 

コマンドラインを使用して CloudWatch エージェントを起動する

https://docs.aws.amazon.com/ja_jp/AmazonCloudWatch/latest/monitoring/install-CloudWatch-Agent-commandline-fleet.html

 

1.起動

sudo /opt/aws/amazon-cloudwatch-agent/bin/amazon-cloudwatch-agent-ctl -a fetch-config -m ec2 -c file:/opt/aws/amazon-cloudwatch-agent/bin/config.json -s

 

以下はここのサイトがよくまとまっている

seq-blog.com

 

 

以上

CloudWatchで、EC2のメモリ使用量とディスク容量をウォッチする

https://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/mon-scripts.html

基本的には上に書いてあるが一部補足

 

1.以下のコマンドを実行

sudo yum install -y perl-Switch perl-DateTime perl-Sys-Syslog perl-LWP-Protocol-https perl-Digest-SHA.x86_64

 2.インストールする場所を作成&移動

mkdir ~/cron-script
cd ~/cron-script

 

3.ダウンロード

curl https://aws-cloudwatch.s3.amazonaws.com/downloads/CloudWatchMonitoringScripts-1.2.2.zip -O

4.スクリプトインストール

unzip CloudWatchMonitoringScripts-1.2.2.zip && \
rm CloudWatchMonitoringScripts-1.2.2.zip && \
cd aws-scripts-mon

5.AWSの管理画面から「IAM」→「ポリシー」→「ポリシー作成」へと進む

「サービス」ーCloudWatch

「アクション」ーPutMetricData、GetMetricStatistics、ListMetrics を探してチェック

 

「さらにアクセス許可を追加」をクリックし、

「サービス」ーEC2

「アクション」ーDescribeTags にチェック

→ポリシーの確認、作成

 

6.IAMに戻り、「ユーザー」ー「ユーザーを追加」

ユーザー名:Cloudwatch

アクセスの種類:プログラムによるアクセス

 

次画面で「既存のポリシーを直接アタッチ」をクリックし、5で作成したポリシーを割り当てる。

ユーザー作成後、アクセスキーとシークレットキーが表示されるので、メモっておく

 

7.コンソールに戻り、以下を実行

cp awscreds.template awscreds.conf 

 

 8.vi で編集

vi awscreds.conf

AWSAccesseyIdとAWSSecretKeyを入力し、

:wq!

 

9.メモリー関係とディスクスペースを調べる

./mon-put-instance-data.pl --disk-space-util --disk-path=/  --mem-used-incl-cache-buff --mem-util --mem-used --mem-avail --verify --verbose

 

10.cronに登録

crontab -e

 iを押して、insertモードに入り、以下を追加。

*/5 * * * * ~/cron-script/aws-scripts-mon/mon-put-instance-data.pl --mem-used-incl-cache-buff --mem-util --disk-space-util --disk-path=/ --from-cron

:wq!で終了。

 

 11.以上で設定は完了。

AWSのCloudWatch上で[メトリクス]->[すべてのメトリクス]->[Linuxシステム]->[Filesystem, InstanceId, MountPath]を開くと、各種値がグラフ化される。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

CloudFront 覚え書き

1.AWSのCloudFrontの設定で

Alternate Domain Names(CNAMEs)

の項目があるので、CloudFrontで使いたい名前を入れる。

 

2.ACM証明書で、上記の名前を登録する。

注意!この際、リージョンを「米国バージニア北部」にしておかないと、

CloudFrontのACM選択時に選択できない。

既に別のリージョンで証明書を作成済みの場合は、「米国バージニア北部」でも同じ証明書を作成する。

 

3.Roud53で、上記ドメインを登録する。

この際、CNAMEではなく、Aレコードに登録する。

Aレコードで「エイリアス」を選ぶと、「CloudFront」の選択肢が見えるので、それを選択する。

503エラーになった時の忘備録

httpdが止まっているか?

service httpd status

 

止まっている場合、エラーログを見る

sudo less /etc/httpd/logs/error_log

 

S3のマウントを一旦解除し、再マウントする

 

httpd 再開

sudo service httpd restart

 

これでも起動しない場合、AWSにログインして、EC2を再起動

S3を使ったリダイレクト

AドメインからBドメインへ変更した際、Aドメインにあったアクセスを

全てBドメインに振り分ける覚え書き

 

 <リダイレクトの流れ>

ドメインでアクセス→CloudFrontでS3に振り分け→S3で新ドメインにリダイレクト

 

--S3の設定--

(1)S3で、リダイレクト元のドメインと同じ名前のパケットを作成する

例)hogehoge.com

 

(2)作成したパケットのプロパティーを開き、

「リクエストをリダイレクトする」にチェック。

「ターゲットバケットまたはドメイン」にリダイレクト先のドメインを記載

 

--Rout53の設定--

(3)ホストゾーン作成で、リダイレクト元のドメインを作成

(4)リダイレクト元のドメインの設定で、NSレコードを設定

ムームードメインの場合、「取得したドメインで使用する」に4つのNSレコ―ドを記入

 

ーCertificate Managerの設定ー

(5)まず、リージョンで「バージニア北部」を選択。これをしないと、後の証明書の選択で自動で表示されないので注意

 

(6)証明書の作成で、リダイレクト元のドメインを設定

その際、ドメインの検証は、「Route53でのレコード作成」ボタンを押すと自動で行われる

 

ーCloudFrontの設定ー

(7)「Create distribution」を押す。「Web」→「Get started」と進む

Origin Domain Name:(1)で作成したS3のバケットを選択し、「プロパティ」→「Static website hosting」を押し、そこに表示されたエンドポイントを記載

※自動でプルダウンに表示されないので注意

Query String Forwarding and Caching: Forward all, cache based on all

Alternate Domain Names(CNAMEs) :リダイレクト元ドメイン

SSL Certificate: Custom SSL Certificate (example.com)

ここで(6)で作成した証明書をプルダウンから選択

 

ーRoute53ー

(9)再び、Route53に戻り、Aレコードの追加

エイリアス」:はい

エイリアス先」:CloudFront ディストリビューションで(7)で作成したものを選択

 

以上

 

(参考サイト)

https://qiita.com/takahiko/items/342f0726fe88987db93c