WSでELBのSSL証明書を設定する

概要
サイトにSSL証明書を設定しようと思いAWSの認証局から発行を行いました。
流れとしてはAWSで証明書を発行しこの証明書をELBに設定します。

ACMで証明書を申請する

ELBに設定するための証明書を申請します。

SSLを設定するためのドメインを入力します。

ドメイン所有者を証明するために承認を受けます。
メールで承認をするための確認をする方法もありますがこの場合だとメールが受信できないといけません。
whoisに登録されているドメイン管理者に届くのですがドメイン管理者を代行している場合やそもそもメールを使えるようになっていないとできません。ネットで調べるとSESを使ってS3に一時的に保存する方法が出てきますがこれだと面倒です。
今回はこれを回避するためにDNSで設定を行います。
※ この方法はroute 53でドメインを設定している時のみ使えます。

証明書が出来上がったらelbに証明書をセットしたら完了です。

最後に

apacheとかに設定するときはわざわざ証明書を発行してセットしてという作業が必要ですが、
awsならelbにセットするだけなので簡単ですね。
証明書の更新も自動でやってくれるようなので安心です。

awsのcodecommitを始めた

概要

githubではプライベートなレポジトリを作るにはお金を払わないと使えません。
プライベートなレポジトリならbitbucketという手もありますが実はawsのcodecommitもある程度無料で使えます。
個人で使う程度ならawsで十分だと思います。

iamでユーザーを作成する

rootのユーザーではcodecommitを利用できないのでユーザーを作成しました。
あくまで個人利用前提なので直接ポリシーをアタッチしてしまいました。

秘密鍵の設定

awsの管理画面からiamで上記で作成したユーザーへ秘密鍵を接敵します。
まず開発するPCでssh-keygenで秘密鍵を生成します。
出来上がったらこの鍵を管理画面から登録します。

レポジトリを作成する

レポジトリを作成し設定を行います。
作成したレポジトリにrootのアカウントで設定しようとするとできないので最初に作成したユーザーでアクセスし設定します。
キーはアップロードしてあるので設定ファイルをローカルマシンに設定します。
場所は(~/.ssh/config)です。

Host git-codecommit.*.amazonaws.com
User Your-IAM-SSH-Key-ID-Here
IdentityFile ~/.ssh/Your-Private-Key-File-Name-Here

最後に

意外とコードの置き場所に困るたとがあると思いますがこれでプライペートなgitのレポジトリを置くことができるようになりました。

Ubuntsuを使い始めた

概要

残念なことに自宅のwindows端末が動かなくなりました。
仕方ないのでubuntsuを入れることにしました。
やり方は以前kali linuxを入れた時と同じusbから入れました。
というかこれ系の作業は毎回調べながらなのであくまで備忘録です。

ubuntsuをダウンロードしてイメージに変換

まずはubuntsu本体を本家サイトからダウンロードします。
https://www.ubuntulinux.jp/
ダウンロードした場所まで下りisoをイメージに変換します。

hdiutil convert -format UDRW -o ./ubuntu.img ./ubuntu-16.04.3-desktop-amd64.iso

usbに書き込む

macなので下記のコマンドでマウントしている場所を確認する。

diskutil list

確認したらアンマウントを行います。

diskutil unMountDisk /dev/disk2

最後に書き込を行い完成です。

kali linuxを起動できるlive usb作成方法

概要

毎回kali linuxのlive usbを作るもののusbが利用する必要になるとフォーマットしてデータを消してしまっていました。大体、日常的に使うようなディストリビューションじゃないですからね、、、。でも毎回調べ直していたのでは面倒なので一旦、自分の中でもまとめてみようと思いました。
ちなみに私の環境はmacですのでunix系だと共通してできるかなと思います。

kali linuxのイメージファイルをダウンロード

まずkali linuxのisoファイルをダウンロードします。
kali linuxをダウンロード
3ギガ近くあるので一般の家庭回線とかだと2時間くらいかかるかもしれません。
満喫とかでサクッと落とすと10分くらいで落ちてくると思います。

USBにイメージを入れ込む

インストールする予定のUSBをmacにさした状態で下記のコマンドを実行しどこにマウントされているか確認します。
diskutil list
通常だとdisk2とかそこらへんかと思います。
実はここが一番大事な気がします。
ここの確認を間違えると後で悲劇が生まれる気がします。
次にアンマウントします。
diskutil unmountDisk /dev/disk2
そのあとに先ほどダウンロードしたisoファイルのディレクトリまで降りていきインストールを行います。
sudo dd if=kali-linux-2017.2-amd64.iso of=/dev/disk2 bs=1m
ここは結構時間がかかるのでもう諦めて放っておくといいと思います。
下手したら30分くらいかかりますから。

さて出来上がったらこれをPCにさして起動すれば出来上がりですがこれだとkali linuxを起動するたびに設定やデータが消えてしまうので書き込み領域を作ます。

書き込み領域を作成する

先ほど作成したlive usbでkalilinuxを起動して書き込み領域を作成します。
ターミナルからGpartedを起動します。
公式にもこのやり方は書いてありますね。本家サイト
公式にあるようにコマンドラインでもいいですしGUIでやってもいいと思います。
Gparted
余計なパーティションがあれば削除します。
fdiskで確認して見ます。
fdisk -l
mkdir -p /mnt/usb/
mount /dev/sdb2 /mnt/usb
echo "/ union" > /mnt/usb/persistence.conf
umount /dev/sdb2 /mnt/usb
reboot

これで出来上がりです。
最後にデスクトップなどにファイルを作成して再起動して見ましょう。
そうするとファイルが残ったママになっていると思います。

最後に

これでkali linuxを入れたliveusbの完成です。
いやはやそんなに頻繁にやる作業じゃないので久々にすると時間がかかりますね。

deploygateが便利になっていた

概要

通常iOSやAndroidの場合に実機でテストする場合にPC端末に繋いだ上でビルドする必要があります。
それでもAndroidの場合は、apkをメール等で配布すればいいのですがiOSの場合はそうはいきません。そこで
deploy gate で開発段階のアプリを配布する必要があります。その他にもiOSの場合はxcodeのバージョンによってビルドできない事があるのでそれを避ける事ができます。

ipaを配布する方法

deploy gate にログインし管理画面からipaもしくはapkをアップロードします。
実はこの部分が便利になっていました。

curl -sSL https://deploygate.com/cli/install/自分のid | bash
dg deploy

上記の方法で code deploy のdgコマンドが使えるようになりプロジェクトファイルまで移動してdeployコマンドを使えば自動的にdeploy gateにアップロードしてくれるようです。便利ですね。
ちなみにインストール中にgemをいくつかインストールしていたのでrubyを事前に入れておく方がいいと思います。

AWS Route53にサブドメインを追加する

概要

AWSで運用しているサイトでサブドメインを追加するにはどうしたらいいんだろう?と思い調べて試してみました。
ちなみに独自ドメインは取得してありなおかつelbは設定済みという前提です。
ネットとかでみたら?な部分が多かったのですがやってみたら簡単でした。

Route53に管理画面ページへ遷移


AWSコンソールからRoute53へ移動します。
ちなみに1年くらい前にAWSコンソール画面のデザイン変わりましたよね、、、、、。
最初は使いにくいなと思いましたが慣れると悪くないですね。
デザイン変更が嫌ならaws-cliでやりなさいってことなんだろうな〜

サブドメインの追加


自分の場合はすでにドメインを設定しているので登録しているドメインの createrecordsetを押下してサブドメインを追加しました。elbを設定してるので alias target にはelbを指定します。

終わり

上記後にブラウザから新しく作成したサブドメインにアクセスすればページが表示されるかと思います。
あとはelbにぶら下がっているec2内のnginxなどでルーティングしてあげればドメイン毎に別々のページを表示できますね。

cloudSQLにmacのローカルから接続する方法

はじめに

GAEを使ってwordpressを構築したいと思ったのがきっかけで、GCPを使っていてcloudSQLへローカルから繋ぎたくなりました。
この方法は2つあり特定のipからの許可を行う方法とproxyを使う方法の2種類あります。
特定のipから許可する方法はAWSでSGの解放と考え方は同一なのでわかりやすいと思います。
むかしip許可をする方法は管理画面から行うだけでできたのですがproxyの方法は?な部分があったのでできなかったのを覚えています。
今回はこのprxoyを使う方法を自分の備忘録として記録します。

cloud SDKのインストール

cloud sdkは簡単に言うとaws-cliのようなもの?これを入れると簡単にローカル端末からGCPへアカウントのログインが行うことができます。ただむかしハマったのがこれpythonのバージョンが3系だと動かないのでローカルでpython3系の人はpyenvなどでこれを動かす時だけ2.7系にしないとダメな気がします。
下記はgoogle公式にあるものと同一です。


curl https://sdk.cloud.google.com | bash
exec -l $SHELL
gcloud init

アカウントを切り替えたい時

余談ですがgoogleのアカウントは複数持っている人も多いとお思います。
その場合にアカウントの切り替えたい時は、ログインし直すといいと考えます。


gcloud auth list
gcloud auth login

リストでみてお目当のアカウントと違ったら切り替え。

cloudSQLへの接続

上記で基本的な準備が整っているのでcloudSQLへ進みます。

cloud_sql_proxyをダウンロード

こちらもgoogle公式と同一ですが記します。

curl -o cloud_sql_proxy https://dl.google.com/cloudsql/cloud_sql_proxy.darwin.amd64
chmod +x cloud_sql_proxy

cloud sqlへ接続

上記でダウンロードしたcloud sql prxoyのディレクトリの上に適当なディレクトリを作成(localsql)し下記のコマンドを実行すればコネクションはできるかと思います。
./cloud_sql_proxy -dir=localsql -instances=cloudsqlの接続インスタンス

終わりに

GCPはどうもAWSよりも情報が少なくハマると難しい部分がありますね。
ただ料金やサービス的に魅力的なものも多いのでこれからも色々試して行きたいなと思います。
特に個人が行うサービスはAWSよりもお財布に優しいしGCPが自動でやってくれるところもあっていいですね。

embulkの使い方

embulk 概要

embulkとは大量のログデータ等をbigQuery、redshift、elasticsearch等のデータウエアハウスに転送する際に使われるルーツです。
同じトレジャーデータのツールにfluentdがありますがこちらは逐次データ転送をするツールがあります。
対してこちらのembulkは大量のデータ転送を行います。
今回はこちらを使ってmysqlからbigqueryへデータを転送する方法を記します。

embulk インストール

こういうツール系は書いた時と後でやってみると違うことが多いのでコマンドというよりも公式のリンクと主に必要な物を記載します。
主に必要なのはjavaとrubyでしょう。
下記のURLを参考に各環境に応じて実施します。
embulkの公式インストール

embulk 必要なファイル

schema.json

実行ファイル
2週類のファイルが必要なファイルになります。
1つが読子きさきに作成するデータベースの設計jsonファイルです。
もう1つがembulkの実行内容のファイルです。

テーブル.json

[
  {
    "name": "id",
    "type": "INTEGER"
  },
  {
    "name": "カラム名",
    "type": "STRING"
  },
]

ここのjsonファイルは下記のデーターロード先で作成されるテーブルとカラム構造となります。
データ抽出元とここを合わせる必要があります。

実行.yml

in:
  type: mysql
  port: 3306
  user: データベース接続ユーザー
  password: データベースパスワード
  database: データベース名
  host: データベースの接続ホスト
  query: |
    SELECT *
    FROM テーブル名
    WHERE date BETWEEN '2017-07-01 00:00:00' AND '2017-07-31 23:59:59'

out:
  type: bigquery
  mode: append
  auto_create_table: true
  table: 作成されるテーブル名
  options: {connectTimeout: 720000} # 長目がいい
  ignore_unknown_values: 1 # 1行目はヘッダーだから無視
  auth_method: private_key
  schema_file: テーブルの設計jsonファイル
  service_account_email: GCPで作成してます
  p12_keyfile: GCPのキーファファイル通常はp12
  source_format: CSV
  file_ext: .csv
  delete_from_local_when_job_end: 1
  project: 'GCPのプロジェクトID'
  dataset: データセットここは自分の作る
  formatter:
    type: csv
    header_line: false
    timezone: Asia/Tokyo

上記ではmodeがappendになっています。
新規のテーブルの場合は新規にテーブルが参加されますがすでにテーブルがある場合はテーブルにデータが追加されます。
inのquery部分で実行しているSQLで抽出された結果を取得しています。
ちなみに他のサイトでここのembulkをバッチ化する際に月ごとのバッチ化する際にshllスクリプトで変数として実行時間の期間を設定してましたがmysqlの関数をここに書けば大丈夫ですね。

実行

こちらのコマンドにより実行できますが、データ量によって時間がかかります。
embulk run 実行ファイル.yml

React基礎

概要

React.jsとはFacebook謹製のjsフレームワークです。
似たようなjsフレームワークにangular.jsがありますが、htmlを拡張していくのがangularでjs自体を拡張していくのが私の印象でした。(angular2はType.scriptでないといけないのでなるべくピュアなES6を勉強す流には向いているのか?)加えてReact.jsはjsの関数型機能をベースにつくられています。そういう意味ではReactを単なるビューを司るフレームワークという一般的な紹介には疑問を感じています。今回はこのReactの基本的な部分を紹介します。

コンポーネント

コンポーネント(component)とは日本語にすると構成要素とかという意味になります。
要するに部品という意味です。イメージ的には、よくあるheaderやfooterの共通化のようなものです。
このコンポーネントには主に2種類あります。
なんで2種類あるのというお話ですが、functional componet はstateを保持できません。逆に class componentは state を保持することができるという違いがあります。

functional (or stateless) componet

関数でコンポーネントを作成するのがfunctional componet です。
下記のような形になります。

function Hello() {
    return(
        <div>
            こんにちは
        </div>
    )
}

class component

クラスを宣言してReact.Componentを継承してコンポーネントを作成します。

class Hello extends React.Component {
    render() {
    return (
        <div>
            こんにちは
        </div>
    )
    }
}

htmlをエスケープさせないようにする

変数に格納したhtmlはReactDOM.reder内部でエスケープされてしまうので下記のようにする必要があります。

const textHtml = {__html:'<h2>test</h2>'};

<span dangerouslySetInnerHTML = { textHtml } />

コンポーネントの値(stateとprops)

propsとは

propsとはコンポーネントに値を渡すときに利用されるものです。
上記した functional componet を利用して書くと下記のようになります。
ReactDOM.render内部でHelloコンポーネントにpropsを渡しています。
propsはデフォルトの値を与えたり必須チェックを行うこともできます。

function Hello(props) {
    return(
        <div>
            こんにちは{props.name}
        </div>
    )
}

---

ReactDOM.render(
    <Hello name="名前" />, document.getElementById('root'));
registerServiceWorker();

---

Hello.propTypes = {
    name: React.PropTypes.string.isRequired
}
---
Hello.defaultProps = {
    name: 'デフォルト'
}

stateとは

stateとはclassコンポーネントの中で保持する値のことを言います。
constructorを宣言しその中で値を保持して利用します。

constructor() {
    super();
        this.state = {
            name: 'ステート'
        };
    }

NewRelicの導入手順

newrelic概要

newrelicとはサーバーのパフォーマンス監視を行うことができるツールです。
全ての機能を使うためにはお金を払う必要がありますが、無料版でも多くの機能を使うことができます。
無料版でもサーバーのCPU利用率やメモリ使用料からインフラの応答反応やWEBパフォーマンスを確認することができます。
有料版でしたらスロークエリやエラーなどの詳細が見れるので、ELKでエラーログ解析環境を作らなくてもよくなります。
特にAWSを入れている方は、下記のURLよりキャンペーンで申し込むと通常の無料プランよりも多くの機能を使えます。
https://newrelic.com/partner/aws-monitoring

インストール方法

ここではNewRelicのAPMとserversのインストール方法を記します。

APMのインストール

APMは主にアプリケーションのパフォーマンスを監視するツールです。
こちらは下記の手順でど運輸が可能です。

sudo rpm -Uvh http://yum.newrelic.com/pub/newrelic/el5/x86_64/newrelic-repo-5-3.noarch.rpm
sudo yum install newrelic-php5
sudo newrelic-install install

newrelic-install installをするとライセンスキーが聞かれるので管理画面から確認できるライセンスキーを記入します。
そのあとにnginxやphp-fpmをリスタートしてしばらくするとnewrelicに表示されるようになります。

SERVERSのインストール

SERVERSは、サーバーのメモリやCPU利用率等を監視するツールです。

rpm -Uvh https://download.newrelic.com/pub/newrelic/el5/i386/newrelic-repo-5-3.noarch.rpm
yum install newrelic-sysmond
nrsysmond-config --set license_key=ライセンスキー
/etc/init.d/newrelic-sysmond start

終わりに

newrelicの使い方を簡単に紹介させていただきました。
この手順も慣れてしまえば5分ほどでできてしまい簡単にサーバー監視ができるのでとても便利です。
とりあえずサーバーパフォーマンスやエラー解析を行っていなくてという状況でしたら、まず最初の選択肢としてnewrelicは悪くない選択肢だとお思います。