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の完成です。
いやはやそんなに頻繁にやる作業じゃないので久々にすると時間がかかりますね。

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

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は悪くない選択肢だとお思います。

Dockerの基本コマンド

イメージ関連

イメージ検索
docker search
リモートからイメージの取得
docker pull イメージ名
イメージ一覧表示
docker images

イメージを起動しコンテナ化

docker run -it centos /bin/bash
-i = 標準入力開き続ける
-t = 擬似ターミナルの割り当て
-d = デタッチモード コンテナに入らないでバックグラウンドで動かす場合
-p = ポートの割り当て ホスト側 : コンテナ側
-v = ボリューム(ディレクトリの共有) ホスト側 : コンテナ側

イメージの作成方法

docker commit コンテナID イメージ名:タグ
docker build -t イメージ名: タグ .

Dockerfile

FROM centos
RUN yum update && yum install httpd
CMD /etc/init.d/httpd.start

Docker Hub

Docker Hubにログインする
docker login
dcoker tag イメージID Docker Hubアカウント名/イメージ名:タグ
Docker Hubにイメージを送る
docker push 上記イメージ

削除

コンテナ全削除
docker rm $(docker ps -aq)
イメージ全削除
docker rmi -f $(docker images -q)

GCPの概要

はじめに

GCPのお勉強会に参加したのでその時のメモ
普段AWSだけどGCPどんな感じなのか興味があり参加

GCP(概要)

googleは専用回線を持っていてそれと同じ専用線をGCPでは利用可能
世界展開する際にはこのネットワークを利用することができるので高速アクセスが可能

エッジキャッシュサーバー

CDN安くて許容度が高い

リージョンとゾーン

リージョン : データセンターの場所 asia-north-east1 東京とかとか
ゾーン : データセンターをメンテナンスするエリア 基本的にゾーン毎に3ヶ所
ここら辺はAWSと同じよね。

データセンター

日本にもある
電気代を抑えるためにgoogleは努力
冷却システム AIが行なっているらしい
サーバーのハードも自作、、、市販はしてないのね。

課金

分単位で課金が発生
ここはAWSと違う時間単位で課金が走るのでね。
サステンドユーズディスカウント : 同じインスタンスを使ってるとお安くしてくれる

App Engine

Paasなので基本的にお任せ
言語も限定的 Java, PHP, Pythonなど
ruby perlは使えないらしい 悲しい。

Compute Engine

IaaSなのでミドルウェアから作ってくれる
基本的にAWS的にはこれと同じかEC2でゴリゴリいつもやってるのと同じね。

IAMの管理

ここら辺は基本的にAWSと同じイメージユーザーに色々とroleで権限与えていく
1番の違いはgoogleアカウントと紐づいているところが違う

GCPへのアクセス

goole cloud platform console

GUIで使う管理画面

CloudのSDK/Shell

テーミナルの画面
gclou コマンドが使えるようになる

gcloud compute list
gsutil ls gs://hoge

cloud shellでは管理画面から操作可能

RESTful APIs

1番機能が画面やシェルはここのAPIを読みだしてる。
APIs Exploer からguiで確認可能

Google App Engine

Paasサービス
スケーラビリティが高い デフォルトでオートスケーリングができる 40msでインスタンスが立ち上がる
AWSの場合はオートスケーリングでスパイクがあると対応しきれないけどすごいな。
極端な話0台で設定してリクエストがあったらインスタンスが立ち上がるということができる。
AWSのlambdaよりもいいですねこりゃ。
しかもバージョン管理もしてくれる。
ミドルウェアの管理も不要つまり環境が不要!!!!
なんと!!!
snapchat、ingress、メルカリもApp Engineで運用してるらしい。
snapchatはインフラエンジニアなしでiOS&Androidエンジニア

Standard Enviroment

java, python, PHP&GOのみ
sshでは入れない
書き込み処理ができない。
image magicとかインストールする必要があるものはできない。
APP EngineのSDKを入れて開発できる。

無料枠

インスタンス1日28時間の無料枠あり。
プロジェクト毎に課金がされる。
よってテストと本番みたいにすればテストと本番のインスタンスにそれぞれ無料枠適用される。
夕方5時にリセットされる。
例) 2台動かす
A 14時間アクセスあり起動
B 15時間アクセスあり起動
計 29時間なので1時間課金される

Flexible Enviroment

Dockerベースでできている。
こちらはローカルにアクセスできる

失ったもの

スケーラビリティが失われている。
ms単位ではインスタンス立ち上がらないので0台運用できない1台設定して。
無料枠はない。

オートスケールで死ぬのを防ぐには

settings のDaily spending limitで金額を設定する。(ここでの金額はDatastore&App Engine)
これでアクセスできないと500エラーが返る。
DDOS攻撃受けたらipブロック登録しとけばよい。。。

Google Cloud Datastore

KVSのデータストア
スケーラビリティが高い
ポケモンGOもこれを利用している。
国毎にデータベース分けられてないのでこれ以上のものはない。
無料枠あり。
ストレージが1GBまで無料になっているらしい。