mochikoAsTechのdig日記

当方好きなコマンドはdigです!お友達から!!よろしくお願いします!!!

Terraformを0.12にしたらterraform initが通らなくなった話

こんなことで困った

Terraformの 0.11 で動いてた main.tf を使って、0.12の環境で terraform init 流したら、モジュールのアドレス(pathのこと)が解決(resolv)出来ないようっておこらりた。

Error: Module not found

The module address "neko/kawaii" could not be resolved.

If you intended this as a path relative to the current module, use "./neko/kawaii" instead.
The "./" prefix indicates that the address is a relative filesystem path.

エラーメッセージをざっくり訳すと「モジュールのアドレスだけど、 今居るところからの相対パス を意図して書いてるんだったら、 neko/kawaii じゃなくて ./ つけた ./neko/kawaii って書いてね」って言われてる模様。

こうやって解決した

なのでエラーメッセージの言うとおり、モジュールの source = "neko/kawaii"source = "./neko/kawaii" にしたら 0.12 でも terraform init が通るようになったー。

Windows10でTerraformをインストールする方法

試した環境

インストール手順

>terraform version
Terraform v0.12.0

古いバージョンをインストールしたいときは?

WindowsでAWS CLIを使う方法

AWS CLIってなに?

AWSインスタンス立てたり、S3のバケット作ったりするには「ブラウザでマネジメントコンソール開いて、画面でぽちぽちして作る方法」と「コマンド叩いて作る方法」があるんだけど、後者がAWS CLIコマンドラインインタフェース)だよ。

たとえば aws s3 ls というコマンドを叩いて、s3のバケット一覧見たりとかできるよ。

AWS CLIってWindowsでも使えるの?

使える。私もLinuxとかMacのターミナルじゃなきゃ使えないと思い込んでたんだけど、なんとWindowsでもふつーにインストールしてコマンドプロンプトで使えるよ。

WindowsAWS CLIをインストールしよう

$ aws --version
aws-cli/1.14.44 Python/3.6.7 Linux/4.15.0-1039-aws botocore/1.8.48

AWS CLIのセットアップをしよう

  • インストールしたAWS CLIを使うにはクレデンシャル情報が必要だよ

    • クレデンシャル情報っていうのは、AWSAPIを操作のために必要なアクセスキーとシークレットキーのことだよ
    • アクセスキー?シークレットキー?なにそれ…マネジメントコンソールにログインするときのIDとパスワードじゃなくて?と思った人は、「AWSをはじめよう」の「2.5.2 IAMユーザーを作ろう」でP52、P53辺りを読んでみよう(宣伝)
  • クレデンシャル情報を設定するには、コマンドプロンプトaws configure を叩いて対話的に入力するだけ

$ aws configure
AWS Access Key ID [None]: ここにアクセスキー
AWS Secret Access Key [None]: ここにシークレットキー
Default region name [None]: ここにデフォルトのリージョン(東京リージョンなら「ap-northeast-1」)
Default output format [None]: json
  • この aws configure をたたくと %USERPROFILE%/.aws ディレクトリができて、その下に configcredentials のファイルができるよ

    • %USERPROFILE%Linuxで言うところの ~ (ホームディレクトリ)のこと
    • 具体的に書くと C:\Users\mochikoAsTech\.aws だよ
  • config

[default]
region = ap-northeast-1
output = json
  • credential
[default]
aws_access_key_id = ここにアクセスキーが入る
aws_secret_access_key = ここにシークレットキーが入る

AWS CLIの動作確認

動作環境

  • Windows 10 Proの環境で動作確認したよ

PHPでexplodeの後にarray_filterも通す理由を推察してみた

gistでPHPのコードを読んでいたらこんな個所があった。

$array = array_filter(explode(' ', $value)); 

$value には aaa bbb ccc みたいなテキストが入ってる。なので explode をつかって $value をスペースごとに分割して配列にするところまでは分かる。(explode については PHP: explode - Manual を参照)

こんな感じのコードを書いて、

<?php
$value = 'aaa bbb ccc';
$array = explode(' ', $value);
var_dump($array);

実行するとこうなるんだよね。わかる。 aaa bbb cccexplode で分割されて配列になった。

array(3) {
  [0]=>
  string(3) "aaa"
  [1]=>
  string(3) "bbb"
  [2]=>
  string(3) "ccc"
}

でもこれにさらに array_filter かけても、

<?php
$value = 'aaa bbb ccc';
$array = array_filter(explode(' ', $value));
var_dump($array);

実行結果はまったく同じ…んんん? array_filter なにしてるんだ…?( array_filter についてはこちら PHP: array_filter - Manual を参照)

$ php test.php 
array(3) {
  [0]=>
  string(3) "aaa"
  [1]=>
  string(3) "bbb"
  [2]=>
  string(3) "ccc"
}

array_filter って 第2引数に「奇数だったらtrueを返すメソッド」みたいなのを指定して、配列の中から奇数の要素だけをフィルタリングする 的なメソッドだと思ってたので、そもそも第2引数が指定されてないと何してるの…?と。

うーんうーんと考えた結果、恐らく次の2つのケースのときに array_filter が役に立つから使ってるんじゃないかな?と推察したので書いておく。

ケース1. $value が空文字だったときに empty の結果が変わる

次のように $value が空文字だった場合、

<?php
$value = '';

$array = explode(' ', $value);
var_dump($array);
var_dump(empty($array));

$array = array_filter(explode(' ', $value));
var_dump($array);
var_dump(empty($array));

explode だけだと配列に「値が空の要素」が1件入るけど、 array_filter を組み合わせれば要素は0件になる。

array(1) {
  [0]=>
  string(0) ""
}
bool(false)

array(0) {
}
bool(true)

こういうケースなら empty で空かどうかチェックしたときの結果が truefalse で分かれるので、 array_filter がいる意味わかるー。( empty についてはこちら PHP: empty - Manual を参照)

ケース2. $value にスペースが沢山あったときに詰められる

あとは aaa bbb ccc みたいに $value にスペースがたくさんあったとき! こういうときも explode だけだと要素数が7つになっちゃうけど、array_filter を通せばフィルタリングされて値のある3つだけになる。

<?php
$value = ' aaa  bbb   ccc';

$array = explode(' ', $value);
var_dump($array);
var_dump(count($array));

$array = array_filter(explode(' ', $value));
var_dump($array);
var_dump(count($array));
array(7) {
  [0]=>
  string(0) ""
  [1]=>
  string(3) "aaa"
  [2]=>
  string(0) ""
  [3]=>
  string(3) "bbb"
  [4]=>
  string(0) ""
  [5]=>
  string(0) ""
  [6]=>
  string(3) "ccc"
}
int(7)

array(3) {
  [1]=>
  string(3) "aaa"
  [3]=>
  string(3) "bbb"
  [6]=>
  string(3) "ccc"
}
int(3)

こういうケースでも array_filter は有用そう!

ただし falsenull があるときには要注意

explode で配列にしたときは、要素はすべて「文字列」として値に入るので、例えば -1 false null を渡した際に、

<?php
$value = '-1 false null';

$array = explode(' ', $value);
var_dump($array);

$array = array_filter(explode(' ', $value));
var_dump($array);

こんな感じで array_filter を通しても全く問題ないのですが、

array(3) {
  [0]=>
  string(2) "-1"
  [1]=>
  string(5) "false"
  [2]=>
  string(4) "null"
}

array(3) {
  [0]=>
  string(2) "-1"
  [1]=>
  string(5) "false"
  [2]=>
  string(4) "null"
}

配列に null やbooleanの false が入る場合は注意が必要そう。

<?php
$value = [ -1, false, null ];
var_dump($value);

$array = array_filter($value);
var_dump($array);

実行してみると、こんな感じでさらっと falsenull の要素がフィルタリングされて消えたー。

array(3) {
  [0]=>
  int(-1)
  [1]=>
  bool(false)
  [2]=>
  NULL
}

array(1) {
  [0]=>
  int(-1)
}

-1 みたいなの負の数は消えないんだね。なるほど。

こういう「人が書いたコードの意図や、どんなケースを想定しているのかを考える」のは楽しいなー。

なお上記は CentOS 6.10PHP 5.6.40CLI環境で確認しました。

php -Sをたたくだけで動作確認用のウェブサーバが立てられる

PHPビルトインウェブサーバーのこと知らなかったので書いとく。

PHP 5.4.0 から、CLI SAPI にはウェブサーバーの機能が組み込まれるようになりました。 URI リクエストの処理は、PHP を開始した時点の作業ディレクトリから行われます。 -t オプションを使えば、ドキュメントルートを明示的に指定することができます。

まじか!Apacheいなくても $ php -S localhost:80 -t /var/www/html/ とかでさっとウェブサーバ立つのか!

PHPのビルトインウェブサーバーって何よ?

PHPには「ビルトインウェブサーバー」という機能があって、それを使うと「ちょっとしたソースをPHPで書いて、ブラウザで動作確認したい!」というとき、わざわざApachePHP(mod_php)を入れてバーチャルホスト作らなくても、PHPだけでウェブサーバが立てられるようだ。

どうやって使うの?

たとえばサーバ上でこんな感じの index.php というソースが /var/www/test/ にあるとする。

<?php
 echo "neko";

んで自サーバにグローバルIP(203.0.113.222)がくっついているなら、以下のコマンドをたたくだけ。

# php -S 203.0.113.222:80 -t /var/www/test/

たたくとこんな感じでビルトインウェブサーバが立ち上がる。

# php -S 203.0.113.222:80 -t /var/www/test/
PHP 5.6.40 Development Server started at Thu May 15 19:33:14 2019
Listening on http://203.0.113.222:80
Document root is /var/www/test
Press Ctrl-C to quit.

そして手元のブラウザで http://203.0.113.222/ を開くと index.php が表示されたー! / でアクセスしたときにちゃんと index.php とか index.html が出るのね。

f:id:mochikoAsTech:20190516132305p:plain
index.phpが見られた!

ターミナル側はアクセスログも表示される。

[Thu May 15 19:33:21 2019] 203.0.113.111:60374 [200]: /
[Thu May 15 19:33:26 2019] 203.0.113.111:60375 [200]: /index.php
[Thu May 15 19:33:50 2019] 203.0.113.111:60859 [404]: /favicon.ico - No such file or directory

あとindex2.php みたいに存在しないページにアクセスすると、次のような404ページが表示された。

f:id:mochikoAsTech:20190516132444p:plain
404 not found出た!

Not Found
The requested resource /index2.php was not found on this server.

ターミナル側のアクセスログでもちゃんと404って出てる。

[Thu May 15 19:34:29 2019] 203.0.113.111:60376 [404]: /index2.php - No such file or directory

立ち上がってるウェブサーバを落としたいときは、Ctrl+Cを押せばそれだけで終了する。

どんなときに使うもの?

「ちょっとしたソースをPHPで書いて、ブラウザで動作確認したい!」ときに便利!確認してないけどMacなら $ php -S localhost:80 -t /var/www/html/ って書いて、ブラウザで http://localhost/ 見ればよさそうだし。

ただphp.netにも 

このウェブサーバーは、アプリケーション開発の支援用として設計されたものです。 テスト用に使ったり、制約のある環境でアプリケーションをデモするために使ったりすることもできるでしょう。 あらゆる機能を兼ね備えたウェブサーバーを目指したものではないので、 公開ネットワーク上で使ってはいけません。

と書いてあるように、「これでウェブサイト公開しちゃおう!!」じゃなくて、あくまで自分の動作確認用にさっと使うものなんだね。   地味だけど便利だー。

PHP: ビルトインウェブサーバー - Manual

#技術書典 6で頒布した「技術をつたえるテクニック」と「技術同人誌を書いたあなたへ」の書籍版を販売開始しました

BOOTHで書籍版(PDF付き)の販売を開始しました!

PDF版は先に出していたのですが、BOOTH倉庫に送った書籍版(紙の本)もようやく入荷完了となったので販売開始しましたー!

なんと「技術をつたえるテクニック」と「技術同人誌を書いたあなたへ」は、書籍版を買うとフルカラーのPDF版も付いてくるので、「紙で欲しいな、でも今すぐに読みたいな」という方も書籍版がおすすめです。(価格は書籍版もPDF版も同じです)

mochikoastech.booth.pm

mochikoastech.booth.pm

書籍版を買うと支払い完了から1~2営業日以内に本がネコポス(送料400円)で送られてきてポストに投函されるようです。(ポストに入らない&不在の場合はクロネコヤマトさんが持ち帰って再配達)

書籍版のこだわりポイント

技術同人誌を書いたあなたへ」の方は、本の中身や表紙に合わせて表紙用紙をハーフエアコットンというざらっとした特殊紙にしてもらいました。表紙から背表紙を通って裏表紙へ、赤い毛糸がつながっている様子は書籍版でないと確認できないので、ぜひ紙の本で見てほしいーー!めっちゃ可愛いんだよー! 

技術をつたえるテクニック」は過去の「DNSをはじめよう」や「AWSをはじめよう」と同じく、PPマット加工を施しているのでさらっとした表紙です。前ペラ(表紙と本文1枚目の間にある遊び紙)は、表紙に合わせた黄色のトレーシングペーパーとなっております!

読んでくださった方の感想はこちらにまとめてます!

togetter.com

「技術をつたえるテクニック」は新卒エンジニアにお勧め

技術をつたえるテクニック」は教える側だけでなく、教わる側のコツも書いているので特に新卒エンジニアの皆さんにお勧めです。

  • とりあえず会議の議事録を書いてと言われたが書き方が分からない
  • 新卒が持ち回りで講師になって勉強会を開催することになった
  • 先輩の教え方が分かりにくい
  • 知らないことを正直に知らないと言えない

などで5月病になってしまいそうな駆け出しエンジニアの皆さんへ届けー。

#技術書典 6に当選したので #技術をつたえるテクニック とタイトル未定の新刊2冊を持っていくよ

4月14日(日)の技術書典6に当選しました!
会場は前回と同じく池袋サンシャインシティです。

技術書のお祭りー!初参加からもう1年が経ったのか、という気持ちです。

今回は「mochikoAsTech」というサークル名で、出口付近の「あ02」にいます!

f:id:mochikoAsTech:20190314150150p:plain

今回は新刊を2冊持っていきます!

新刊1冊目:「技術をつたえるテクニック」

「技術をつたえるテクニック」は「DNSをはじめようAWSをはじめようを書くとき、こんなことに気を付けて書いたら分かりやすいって言ってもらえたよ!」という、技術を分かりやすくつたえるためのテクニックをぎゅぎゅっと詰め込んだ一冊です。

エンジニアが技術書やドキュメントを書くときの「もっと分かりやすくて伝わる文章が書きたい!」という気持ちや、勉強会で登壇するときの「もっと技術を分かりやすく説明できるようになりたい!」という気持ちの両方に応える内容となっています。

 新刊2冊目:技術同人誌のハッピーエンドは「出版社の編集者に見初められて商業出版!」だけとは限らないという話(仮題)

先日noteで公開したばかりの『技術同人誌のハッピーエンドは「出版社の編集者に見初められて商業出版!」だけとは限らないという話』を加筆修正した一冊を持っていきます。

技術書典4でDNSをはじめようが750冊売れた後に、私が波に飲まれそうになった話とか、個人事業主として確定申告した話とか、出版社さんに契約条件を確認したら思いがけない反応が返ってきた話とか、大っぴらに言うにはちょっとはばかられて削った部分を入れようかなと思ってます。

note.mu

ちなみに既刊のDNS本やAWS本は持ち込まない予定です

既刊のDNSをはじめようAWSをはじめようは、もうダウンロードカードしかないので持ち込まないつもりです。既刊はBOOTHでダウンロード版を購入できますので、そちらでお求めください。

mochikoastech.booth.pm

mochikoastech.booth.pm

それでは技術書典6で、みなさんとお会いできるのを楽しみにしています!!