WAFCharmとは

WafCharmは、世界中のwebに対する攻撃パターンをAIによって学習し、AWS WAF/Azure WAFのルールを最適化させるWAF自動運用サービス
月額5000円~
サイバーセキュリティクラウド社が提供

なるほどー

リージョン障害とAZ障害

リージョンはある地域を示しており、複数のAZ(アベイラビリティゾーン)で構成
AZはデータセンター

東京リージョンは4つのAZから構成されているため、複数のAZを併用するマルチAZ構成を採っていれば、複数データセンターにまたがる冗長構成になるため、あるAZで障害が発生しても、システムが致命的な影響を受ける可能性を低くできる。

リージョン障害: リージョンに対して1つのインスタンスとして配置される場合などで障害が起きた場合、リージョン全体に影響を受ける

なるほど、AZ構成と、リージョン障害に備えることは別物なのね。

smartyの書き方

<!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ファイルとは

tarとはtape archiveの略
複数ファイルを一つにまとめて格納するアーカイブ(書庫)ファイルの形式の一つ
同形式のファイルの操作を行うためのUNIX系OS標準のコマンドおよびプログラムの名前

[Docker] ECRで環境変数を使用する

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で定義した値が表示されていることを確認

なるほどー、環境変数を外だしすることができるのね…
実際にやってみると理解が違うな

CakePHPでのAWS-SDK-PHP実装の手順

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

なるほど、わかったようなわからんような…

aws-sdk-phpでs3のファイルを更新したい

$ 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);

できるか不安だったけど、割と簡単に実装できて安堵

[Docker] ホストマシンのvolume mountの設定方法

ホストマシンとコンテナのボリュームをマウント

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

なるほどー、少し見えなかったものが見えてきた

[Docker] ADDとCOPYの違い

### 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 を使うのか
少しずつ繋がっていく感じか…