WafCharmは、世界中のwebに対する攻撃パターンをAIによって学習し、AWS WAF/Azure WAFのルールを最適化させるWAF自動運用サービス
月額5000円~
サイバーセキュリティクラウド社が提供
なるほどー
随机应变 ABCD: Always Be Coding and … : хороший
WafCharmは、世界中のwebに対する攻撃パターンをAIによって学習し、AWS WAF/Azure WAFのルールを最適化させるWAF自動運用サービス
月額5000円~
サイバーセキュリティクラウド社が提供
なるほどー
リージョンはある地域を示しており、複数のAZ(アベイラビリティゾーン)で構成
AZはデータセンター
東京リージョンは4つのAZから構成されているため、複数のAZを併用するマルチAZ構成を採っていれば、複数データセンターにまたがる冗長構成になるため、あるAZで障害が発生しても、システムが致命的な影響を受ける可能性を低くできる。
リージョン障害: リージョンに対して1つのインスタンスとして配置される場合などで障害が起きた場合、リージョン全体に影響を受ける
なるほど、AZ構成と、リージョン障害に備えることは別物なのね。
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Document</title> </head> <body> Hello, <?php echo "Hpscript"; ?>! </body> </html>
### Smartyとは
テンプレートエンジン
高速コンパイルは一度だけ行われる
変更があったテンプレートファイルのみ再コンパイル
簡単に独自関数や変数の修飾子を作成できる
エンジン自体がカスタマイズできる
プラグイン機能も備えている
$ curl -sS https://getcomposer.org/installer | php
$ php composer.phar require smarty/smarty
index.php
<?php
require_once "vendor/autoload.php";
$smarty = new Smarty();
$smarty->setTemplateDir('templates')->setCacheDir('cache');
$smarty->display('index.tpl');
?>
template/index.tpl
{config_load file="test.conf" section="setup"}
{assign var="food" value="親子丼"}
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title></title>
</head>
<body style="background:{#grayBgColor#};">
<h1></h1>
<p><b>うまい店</b>教えて</p>
{$smarty.version}
</body>
</html>

なるほど、テンプレートエンジンの話か
tarとはtape archiveの略
複数ファイルを一つにまとめて格納するアーカイブ(書庫)ファイルの形式の一つ
同形式のファイルの操作を行うためのUNIX系OS標準のコマンドおよびプログラムの名前
Dockerfile
FROM php:7.0-apache COPY . /var/www/html
<?php
echo getenv('HOGE');
### build
$ sudo docker build -t envhoge .
### ECRへpush
$ aws ecr get-login-password –region ap-northeast-1 | sudo docker login –username AWS –password-stdin ******.dkr.ecr.ap-northeast-1.amazonaws.com
$ sudo docker tag envhoge:latest ******.dkr.ecr.ap-northeast-1.amazonaws.com/hpscript:latest
$ sudo docker push ******.dkr.ecr.ap-northeast-1.amazonaws.com/hpscript:latest
### ECS task definition
task definitionで環境変数を設定する
HOGE: “環境変数のテスト”

ENVIRONMENT VARIABLEにセットされていることを確認

### Serviceを起動
task definitionで定義した値が表示されていることを確認

なるほどー、環境変数を外だしすることができるのね…
実際にやってみると理解が違うな
Dockerfile
FROM php:7.0-apache ENV HOGE "hoge"
index.php
<?php
echo getenv('HOGE');
$ sudo docker build -t envhoge .
$ sudo docker run -dit –name myapp -p 8080:80 envhoge

うむ、使い方はわかった。
あとはECRでどう使うかやな
1. composer require aws/aws-sdk-php で、cakephpルートディレクトリでインストール
2. IAM資格情報をenvファイルに追記
3. S3Clinetコンポーネント生成
4. componentの中で、initialize, getList, putFile, getFile, moveFileなどの関数を書く
参考サイト: https://www.ritolab.com/entry/104
なるほど、わかったようなわからんような…
$ curl -sS https://getcomposer.org/installer | php
$ php composer.phar require aws/aws-sdk-php
ファイルの読み込み
require_once “vendor/autoload.php”;
$bucket = ‘hoge’;
$key = ”;
$secret = ”;
$file = “test.txt”;
$s3client = new Aws\S3\S3Client([
‘credentials’ => [
‘key’ => $key,
‘secret’ => $secret,
],
‘region’ => ‘ap-northeast-1’,
‘version’ => ‘latest’,
]);
$s3client->registerStreamWrapper();
$stream = fopen(‘s3://hoge/test.txt’, ‘r’);
if (FALSE === $stream){
exit(“Failed to open”);
}
while (!feof($stream)){
echo fread($stream, 1024);
}
fclose($stream);
[/code]
S3のファイルの追記
require_once "vendor/autoload.php";
$bucket = 'hoge';
$key = 'hogehoge';
$secret = 'ccccc';
$file = "aaa.txt";
$s3client = new Aws\S3\S3Client([
'credentials' => [
'key' => $key,
'secret' => $secret,
],
'region' => 'ap-northeast-1',
'version' => 'latest',
]);
$s3client->registerStreamWrapper();
$stream = fopen('s3://'. $bucket .'/test/' . $file, 'a');
fwrite($stream, 'hogehoge2' . PHP_EOL);
fclose($stream);
できるか不安だったけど、割と簡単に実装できて安堵
ホストマシンとコンテナのボリュームをマウント
e.g.
ホストマシンの ~/work と コンテナ内の /myapp を同期させる
~/work/file1.txt
/myapp/file2.txt
ファイル名が同じだった場合、ホストマシンがコンテナを上書きする
### Dockerにおけるマウント指定
Dockerによる環境構築をする際、ボリュームをマウントする方法はDockerfile, Composeファイル、コマンドラインの3つがある
### 1. Dockerfileによるマウント
Dockerfile内でVOLUME命令を書く。この命令では、引数としてコンテナ側のディレクトリしか指定することはできない
VOLUME /myapp
Dockerfile
FROM debian RUN mkdir /myapp && \ echo "Hello, World" > /myapp/file.txt VOLUME /myapp
$ sudo docker build -t hello .
$ sudo docker run -it hello bash
# cat /myapp/file.txt
Hello, World
Dockerfileにボリュームのマウント設定をする際は、ホストマシンのディレクトリを指定することができない
### 2. docker-composeによるマウント
composeファイルでは、ホストマシンのディレクトリも指定することができる
volumes: - ./work:/myapp
– ホストマシンのディレクトリ: Composeファイルから見た相対パスもしくは絶対パス
– コンテナのディレクトリ: 絶対パス
$ tree
.
├── docker-compose.yml
└── test
└── file.txt
$ cat test/file.txt
hello shinbashi!
docker-compose.yml
version: '3'
services:
web:
image: debian
volumes:
- ./test:/myapp
$ sudo docker-compose run web bash
Creating network “entrypoint_default” with the default driver
root@e8b020e943ae:/# cat /myapp/file.txt
hello shinbashi!
root@e8b020e943ae:/#
### DockerfileとComposeファイルを同じディレクトリに作成
$ tree
.
├── Dockerfile
├── docker-compose.yml
└── test
└── file.txt
dockerfile
FROM debian RUN mkdir /myapp && \ echo "It's a beautiful day." > /myapp/another_file.txt
docker-compose.yml
version: '3'
services:
web:
build: .
volumes:
- ./test:/myapp
なるほどー、少し見えなかったものが見えてきた
### ADD
– リモートからもファイル追加できる
– 圧縮ファイルが自動解凍
### COPY
– リモートからのファイル追加はできない
– 圧縮ファイルは自動解凍されない
FROM alpine # auto unarchive ADD add.txt.gz /tmp # Can add from remote ADD https://github.com/github/fetch/blob/master/README.md /tmp # Not auto unarchive COPY copy.txt.gz /tmp
なるほど、mountするときは、Add . /tmp を使って、buildする際は COPY を使うのか
少しずつ繋がっていく感じか…