What is Amazon EBS?

Amazon Elastic Block Store (Amazon EBS) provides persistent block level storage volumes for use with Amazon EC2 instances in the AWS Cloud. Each Amazon EBS volume is automatically replicated within its Availability Zone to protect you from component failure, offering high availability and durability. Amazon EBS volumes offer the consistent and low-latency performance needed to run your workloads. With Amazon EBS, you can scale your usage up or down within minutes – all while paying a low price for only what you provision.

Elastic Block Store

スナップショットは作られてますね。
スナップショットとは… Amazon EBSボリュームのデータを Amazon S3 にバックアップ

volumeを作成してEC2にattachする。

actionからattachする

snapshotの作成でS3にバックアップされる。

modify

なるほど~

EBSスナップショット

ポイントインタイムスナップショットを作成することで、Amazon EBSボリュームのデータを Amazon S3 にバックアップできる。
スナップショットは増分バックアップ。
最後にスナップショットを作成した時点から、ボリューム上で変更のあるブロックだけが保存される。これにより、スナップショットを作成するのに要する時間が最小限に抑えられ、データを複製しないことで、ストレージコストが節約されます。スナップショットを削除すると、そのスナップショットに固有のデータだけが削除されます。各スナップショットには、(スナップショットを作成した瞬間から) データを新しい EBS ボリュームに復元するために必要な情報がすべて含まれる。

Amazon Elastic Block Store (Amazon EBS) は、AWS クラウド内で Amazon EC2 インスタンスと組み合わせて使用できる、永続的なブロックストレージボリューム

php artisan

[vagrant@localhost agile]$ php -v
PHP 7.1.21 (cli) (built: Aug 15 2018 18:11:46) ( NTS )
Copyright (c) 1997-2018 The PHP Group
Zend Engine v3.1.0, Copyright (c) 1998-2018 Zend Technologies

composerを入れてlaravelを入れます。
[vagrant@localhost agile]$ php composer.phar create-project –prefer-dist laravel/laravel

[vagrant@localhost agile]$ cd laravel
[vagrant@localhost laravel]$ php artisan –version
Laravel Framework 5.7.4

access時間をinsert

mysql> use redirect
Database changed
mysql> select * from url
-> ;
+—-+——+—————————+
| no | id | url |
+—-+——+—————————+
| 1 | 001 | https://www.facebook.com/ |
| 2 | 002 | https://www.amazon.com/ |
| 3 | 003 | https://www.apple.com |
| 4 | 004 | https://www.google.com |
+—-+——+—————————+
4 rows in set (0.00 sec)

mysql> create table accesstime (
-> no int unsigned auto_increment primary key,
-> id varchar(11),
-> time datetime
-> );
Query OK, 0 rows affected (0.21 sec)

$date = new DateTime();
$datetime = $date->format('Y-m-d H:i:s');
echo $datetime;

if(isset($_GET["id"])){
	$id = $_GET["id"];
} else {
	$id = "001";
}
try {
$pdo = new PDO('mysql:host=localhost;dbname=redirect;charset=utf8','root','',
array(PDO::ATTR_EMULATE_PREPARES => false));
} catch (PDOException $e) {
 exit('データベース接続失敗。'.$e->getMessage());
}
$stmt = $pdo->query("SELECT * FROM url where id = $id");
$row = $stmt -> fetch(PDO::FETCH_ASSOC);
$url = "location: " .$row["url"]. "";


$stmt1 = $pdo -> prepare("INSERT INTO accesstime (id, time) VALUES (:id, :time)");
$stmt1->bindParam(':id', $id, PDO::PARAM_STR);
$stmt1->bindParam(':time', $datetime, PDO::PARAM_STR);

$stmt1->execute();

header($url);

idとaccess時間がtable accesstimeに入ってますね♪
mysql> select * from accesstime;
+—-+——+———————+
| no | id | time |
+—-+——+———————+
| 1 | 001 | 2018-09-19 01:03:54 |
+—-+——+———————+
1 row in set (0.00 sec)

さあ、laravelをやりましょう。

idとurlを格納

mysql

mysql> insert into url(id, url) values
-> (‘001’, ‘https://www.facebook.com/’),
-> (‘002’, ‘https://www.amazon.com/’),
-> (‘003’, ‘https://www.apple.com’),
-> (‘004’, ‘https://www.google.com’);
Query OK, 4 rows affected (0.15 sec)
Records: 4 Duplicates: 0 Warnings: 0

mysql> select * from url;
+—-+——+—————————+
| no | id | url |
+—-+——+—————————+
| 1 | 1 | https://www.facebook.com/ |
| 2 | 2 | https://www.amazon.com/ |
| 3 | 3 | https://www.apple.com |
| 4 | 4 | https://www.google.com |
+—-+——+—————————+
4 rows in set (0.00 sec)

あら、idが001ではなく、1になってますね。
drop tableしてvarchar(11)に変更します。

create table url (
no int unsigned auto_increment primary key,
id varchar(11),
url varchar(255)
);

パラメーターのURLをfetchする。

if(isset($_GET["id"])){
	$id = $_GET["id"];
} else {
	$id = "001";
}
try {
$pdo = new PDO('mysql:host=localhost;dbname=redirect;charset=utf8','root','',
array(PDO::ATTR_EMULATE_PREPARES => false));
} catch (PDOException $e) {
 exit('データベース接続失敗。'.$e->getMessage());
}
$stmt = $pdo->query("SELECT * FROM url where id = $id");
$row = $stmt -> fetch(PDO::FETCH_ASSOC);
echo $row["url"];

リダイレクト処理。awsでキャッシュさせれば、少し早くなるか。

if(isset($_GET["id"])){
	$id = $_GET["id"];
} else {
	$id = "001";
}
try {
$pdo = new PDO('mysql:host=localhost;dbname=redirect;charset=utf8','root','',
array(PDO::ATTR_EMULATE_PREPARES => false));
} catch (PDOException $e) {
 exit('データベース接続失敗。'.$e->getMessage());
}
$stmt = $pdo->query("SELECT * FROM url where id = $id");
$row = $stmt -> fetch(PDO::FETCH_ASSOC);
$url = "location: " .$row["url"]. "";
header($url);

Amazon ElastiCache:Amazon ElastiCache は、クラウドでのインメモリデータストアまたはキャッシュのデプロイ、運用、およびスケールを容易にするウェブサービスです。このサービスは、低速のディスクベースのデータベースに完全に依存せずに、高速のマネージド型インメモリデータストアから情報を取得できるようにすることで、ウェブアプリケーションのパフォーマンスを向上させます。
これか?
>メモリはディスク (磁気または SSD) よりも桁違いに高速であるため、インメモリキャッシュからのデータ読み取りは非常に高速 (ミリ秒以下) です。このきわめて高速なデータアクセスにより、アプリケーションの全体的なパフォーマンスが向上します。

TinyMCE

文章を見たまま編集(WYSIWYG。What you see is what you get)できるエディタのライブラリ

-プラグインなどによる機能が豊富
-WordPressに採用
-ツールバーの追加、ボタン位置の入替や削除、独自ボタンの追加などカスタマイズが柔軟

tinyMCEのself hostedからdownloadする
https://www.tiny.cloud/download/self-hosted/

4.8.2が最新版
CDNもあるようですが、今回は最新版パッケージをダウンロードします。

minifiedされた jquery.tinymce.min.jsを使うようですな。
プラグインはthemesなどバリエーションが豊富ですね。

githubはこちら
https://github.com/tinymce/tinymce
とりあえずforkしておきましょう。

早速vagrantで使ってみましょう。

<!Doctype html>
<html>
<head>
	<meta charset="UTF-8">
	<script src="tinymce/js/tinymce/tinymce.min.js"></script>
	<script>
	tinymce.init({
		selector: "#foo",
	});
</script>
</head>
<body>
	<h1>TinyMCEの動作テスト</h1>
	<textarea id="foo" name="foo">最初に入力する文章</textarea>
	<h2>入力チェック</h2>
</body>
</html>

devtoolで見てるが、仕組みがようわからん。。。

RDS リードレプリカを追加する

リードレプリカの作成を押下すると、
– 送信先リージョン
– サブネットグループ
– アベイラビリティーゾーン
– 暗号化
– インスタンスの仕様

インスタンスのクラスも設定できる

レプリケーションロールがマスタとレプリカとなる。

CPU クレジット残高は、CPU 利用率がベースラインを上回り、前の 5 分間に消費したクレジットが獲得したクレジットよりも多かった場合に減少します。

パラメーターの値を取得する

$_GET[“id”] で取得できます。

-サンプル

if(isset($_GET["id"])){
	$id = $_GET["id"];
}

echo $id;

次に、mysqlにidと紐づくURLを格納します。

まず、create tableします。
mysql> create database redirect;
Query OK, 1 row affected (0.11 sec)

続いてtableを作ります。
create table url (
no int unsigned auto_increment primary key,
id int,
url varchar(255)
);

次に、insert tableしていきます。

プルリク

[vagrant@localhost dev]$ git init
Initialized empty Git repository in /home/vagrant/dev/.git/
[vagrant@localhost dev]$ git add .
[vagrant@localhost dev]$ git commit -m “first commit”
[master (root-commit) 2b3c0b9] first commit
2 files changed, 8 insertions(+)
create mode 100644 .htaccess
create mode 100644 index.php
[vagrant@localhost dev]$ git remote add origin https://github.com/hoge/hoge.git

[vagrant@localhost dev]$ git push -u origin master
Password for ‘https://hoge@github.com’:
Counting objects: 4, done.
Compressing objects: 100% (4/4), done.
Writing objects: 100% (4/4), 420 bytes | 0 bytes/s, done.
Total 4 (delta 0), reused 0 (delta 0)
remote:
remote: Create a pull request for ‘master’ on GitHub by visiting:
remote: https://github.com/hoge/hoge/pull/new/master
remote:
To https://github.com/hoge/hoge.git
* [new branch] master -> master
Branch master set up to track remote branch master from origin.

プルリクとは?
開発者のローカルリポジトリでの変更を他の開発者に通知する機能です。 プルリクエストは次のような機能を提供します。 機能追加や改修など、作業内容をレビュー・マージ担当者やその他関係者に通知します。