ヤサイブログ

徒然と。I'll keep hacking on fun.

「AWS Dev Day Tokyo 2018」のLT大会に参加します!



AWSが主催する公式イベント、AWS Dev Day Tokyo 2018のLT大会に参加することになりました!
2018年10月31日(水)の18:00~20:00に実施されるLT大会になります!

当日はAWS Database Migration Serviceを利用したデータ移行について
5分間に凝縮した内容を共有いたします!
興味がありましたら、イベントに参加してみてはいかがでしょうか♪

以上、告知的な何かでした!

「AWS認定デベロッパー - アソシエイト」試験に合格したよ!

AWS認定デベロッパー - アソシエイトに合格しました!
AWS 認定デベロッパー – アソシエイト

去年の2017年5月頃にはAWS認定ソリューションアーキテクト - アソシエイトに
合格していました。同じ位の難易度になりますが、出題分野が異なります。
xblood.hatenablog.com

受験の動機

私はサーバーサイドのプログラマーとしての経験が長いので、
クラウドインフラの知識を証明できるソリューションアーキテクトだけではなく、
クラウドによる開発の知識を証明できるデベロッパーの資格を取得したかったんです。

受験したのは古い試験です

2018年9月30日時点で、新しい試験と古い試験を受験できましたが、
今回は古い試験のほうになります。2018年11月19日以降は新しい試験しか
受験できなくなります。詳しくは公式サイトにて。
AWS 認定デベロッパー – アソシエイト

結構のんびり受験した

前回のAWS認定ソリューションアーキテクト - アソシエイトは、
いろいろなタイミングが重なり急ぎ足で受験しましたが、今回はまったく急ぎませんでした。
どちらかというと、今回は受験が目的というよりもデベロッパーとしての知識が
ちゃんと備わっているかどうかの腕試しという位置づけでした。
なので、業務でAWSを利用した開発に従事しながら受験のタイミングを伺っていました。

まぁ、合格するよね(´・ω・`)でも課題も出たよ

合格しましたが、けっこう間違ったので凹む(´・ω・`)
DynamoDBはAWS が提供する新しいタイプのDBなので、
業務においても試験においても重点的にチェックしていました。
しかしながら、SWFやSNSでもかなり細かい知識を問われる試験なので、
受験中は頭を悩ませました。

おさらいポイント

AWS CLIによるami一覧の取得コマンドについて

"describe-images"だった(´;ω;`)ぶわっ
Linux AMI の検索 - Amazon Elastic Compute Cloud

SNSのPublish Requestで利用できる項目

多分この辺りの項目(´・ω・`)
https://docs.aws.amazon.com/cli/latest/reference/sns/publish.html

S3のサーバーサイドのデフォルト暗号化方法について

Triple DESとかどこにも記載ないやん(´;ω;`)うぅ・・
S3 バケットの Amazon S3 デフォルト暗号化 - Amazon Simple Storage Service

DynamoDBで複数項目を取得する方法

"BatchGetItem"のようだな(´;ω;`)ぶわっ
BatchGetItem - Amazon DynamoDB

BeanStalkで構築できるAWSリソース

うーん、これは手を動かしてみるしか・・。
ELBとかAutoScalingは鉄板ですが。

S3のアカウント毎のデフォルトの最大バケット

際限ないと思ってた(´;ω;`)ぶわっ
デフォルトで100な。
バケットの制約と制限 - Amazon Simple Storage Service

重点的に勉強した箇所の紹介

SQSの設定項目名について

ぱっと見分かりづらいんだよなぁ。

  • Visibility Timeout
    • 受信されたメッセージを一定時間見えなくする。(他のワーカーインスタンスがメッセージを掴まないようにする
  • Receive Message Wait Time
    • Long Polling. コスト効率のために、メッセージが取得出来るまで待つ時間を設定できる。
    • Short Pollingとの使い分けが大事。
dynamoDBのキャパシティユニットの計算について
  • キャパシティユニットの計算について
    • 書き込み:1キャパシティユニット = 1KB, 例:10キャパシティユニットで10KB/秒のスループットを確保
    • 読み込み:1キャパシティユニット = 4KB, 例:10キャパシティユニットで40KB/秒のスループットを確保
    • 例:3,000台が30秒おきに512バイトで書き込む(負荷を平坦化する前提の記述あり)
      • -> 書き込みキャパシティユニットは切り上げのため、1KB * (3000 / 30) = 100
  • 効率的に使用するためのハッシュキーの設計について
    • ハッシュとした場合に、パーティションへの保管先が分散するような設計(シーケンシャルな設計など)が望ましい

試験場の所感:受験用のアプリケーションがよく落ちる・・

受験中にアプリケーションがダウンして試験官を呼び出すことが2回もありました。
これはどうなんだろう・・マシンスペックの問題なら改善して欲しいんですが・・。

受験の最後にはチャットで試験官に英語で、
俺「終わったよ。」
試験管「おつかれー。」
俺「ありがとうございました。バイバイ。」
試験管「どういたしましてー。」
という会話をして、カメラに向かって手を振って去ったwww

これから

より上位の資格を取得するとなると、
私の場合はSysOpsに合格して、デベロッパー - プロフェッショナルを
目指したほうがいいのかなと思います。

その前に違う分野に寄り道するかもです。
マルチクラウドももっと試していきたい!

以上です!

Raspberry Pi3にsambaをインストールしてさくっとファイルサーバーとして利用する

Raspberry Pi3をどんどん活用していきたいと思います。
今回はsambaのインストールとクライアント端末からの接続です。
自宅内ネットワークだけで利用する前提ですので、
フルアクセス且つゲストユーザーを許可しています。
さくっといきます。

sambaのインストール

sudo apt-get install samba

共有ディレクトリの作成

cd ~
mkdir samba

設定ファイルの編集

# 設定ファイルを編集する
sudo vi /etc/samba/smb.conf

# 下記の記述を最後尾に記述する。
[pi]
    comment = Raspberry Pi
    path = /home/pi/samba
    guest ok = yes
    read only = no
    public = yes
    browsable = yes
    force user = pi

再起動

sudo service smbd restart
sudo service nmbd restart

Macから接続してみる

下記バージョンで動作確認しています。

Mac OS Version High Sierra
  1. Finderで「移動」→「サーバへ接続」を選択
  2. アドレスに「smb://プライベートIPアドレス」を入力して接続
  3. ユーザの種類はゲストを選択
  4. ネットワークドライブとしてマウントされる
    f:id:yasay:20180926032824p:plain

接続できました!

Windowsから接続してみる

下記バージョンで動作確認しています。

Windows OS Version Windows 10
  1. エクスプローラーのアドレスバーで「¥¥プライベートIPアドレス」を入力
  2. samba上のディレクトリが参照できるため、ネットワークドライブに割り当てる
    f:id:yasay:20180926032939p:plain

接続できました!!

Androidから接続してみる

下記バージョンで動作確認しています。

Android Version 8.0.0

ESファイルエクスプローラーを使います。
play.google.com

  1. 左上のメニューボタンから「ネットワーク」→「LAN」を選択
  2. 「スキャン」を実行すると「RASPBERRYPI」のディレクトリが見つかる
    f:id:yasay:20180926034619j:plain:w320

接続できました!!!

iOSから接続してみる

下記バージョンで動作確認しています。

iOS Version 12.0

GoodReaderを使いました。
www.goodreader.com

  1. 右上のメニューから「Connect」→Connect to Servers「Add」を選択
  2. 「SMB Server」を選択して、必要な情報を入力
    f:id:yasay:20180926041119p:plain:w320
  3. 接続後にフォルダにアクセスしてみる
    f:id:yasay:20180926041310p:plain:w320

iOSをしばらく使ってなかったので操作に戸惑いましたが、接続できました!!!!

所感

本当にさくっとファイルサーバーをセットアップできちゃいました!
外出先から利用するならOwnCloudとかになると思うんですが、
今の所そういった用途はDropboxやOneDriveで間に合っているのでいらないかなー。

以上です!

AWS Innovate Japan 2018でINNOVATE CHAMPION バッジを取得した話

書く場所が思いつかないからここで(´・ω・`)
PS3のトロフィーというのはご存知でしょうか。
トロフィーは達成項目のようなもので、ゲームタイトル毎に存在します。
例えば、ゲームを最初にクリアするとそれを表明するトロフィーが獲得できます。

このような達成項目システムは、ハマる人はハマりますし、興味がない人は全く興味がありません。
AWSが開催しているAWS Innovate Japan 2018でも、
同じような機能でバッジというものが獲得できます。


今回、INNOVATE CHAMPIONバッジを取得できました。13番目らしい。
f:id:yasay:20180925104945p:plain

どうやったら取得できるのか

AWS Innovate Japan 2018で全てのバッジを取得し、
全てのセッションアンケートに答えることで取得できるらしいです。

"らしい"というのは、どうもバッジ取得システムに不具合があるような気がしています。
取得タイミングに不具合があると見受けられるケースがあります。
そして、最高10000スコアで設計されてたのに、
不具合で9500しか取得できないようになっているように見えます・・。
※Virtual Summit Osakaバッジが3種類取得できるケースがあるようです。

なので、INNOVATE CHAMPIONバッジを取得している人自体が少ないような気がします。

修了証明証がメールでもらえる。

この修了証明証をどうすればビジネスに活かせるのか皆目検討がつきませんが、なんかもらえます。
f:id:yasay:20180925110754p:plain

Ask The Expertで質問した内容をここで共有してみる。

1. CloudFormationで既存リソースを管理したい

Q:

CloudFormationで質問になります。
やりたいことは、マネージメントコンソールで作成したAWSリソースもスタック管理したいです。
CloudFormationはスタック作成時に、AWSリソースのIDが払い出されるとの認識です。
マネージメントコンソールから作成した(CloudFormationではない)既存リソースには既にAWSリソースIDが存在します。
この場合に、既存リソースのIDを指定して既存リソースのスタックを作成することは可能でしょうか。

A:

CloudFormation外で作成した既存リソースをStackに含めることはできません。一旦削除の上、そのリソースも含めた上でStackを再作成ください。

2. Raspberry PIによるAWS IoTの利用について

Q:

AWSのIoTサービスを利用していみたいと思っているのですが、
入門としてRaspberry piを利用してIoT Coreの利用や、Greenglassによるエッジコンピューティングの利用は可能でしょうか?
Raspberry piを利用したハンズオン資料などがあれば共有頂ければ幸いです。

A:

Raspberry Piを利用してAWS IoT CoreとGreengrassを利用することは可能です。こちらにそれぞれのチュートリアルがありますので、参考にしてみてくださ。https://docs.aws.amazon.com/ja_jp/iot/latest/developerguide/iot-sdk-setup.html https://docs.aws.amazon.com/ja_jp/greengrass/latest/developerguide/gg-gs.html

3. FREERTOSが利用できる端末

Q:

FREERTOSが利用できる端末は御社のページなどで紹介されていますでしょうか?

A:

現在Amazon FreeRTOSでサポートされているハードウエアはこちらから確認できます。https://aws.amazon.com/jp/freertos/getting-started/

4. AWS IoT Device Managementの無料枠について

Q:

AWS IoT Device Managementは無料枠を設けていますでしょうか?Lambdaなどと同様の永年無料枠はありますか?

A:

AWS IoT Device Managementには、複数の機能があり、それぞれ、料金が設定されております。Jobの機能は、一部、無料枠で提供しております。以下のURLを確認ください。(https://aws.amazon.com/jp/iot-device-management/pricing/

5. フリートのインデックス利用について

Q:

AWS IoT Device Managementに関する質問をさせて下さい。
フリートのインデックス作成で作成したインデックスはどのように利用できますか?
主にマネージメントコンソールからAWS IoT Device Management起動しての利用になりますか?
例えば、プログラマブルにアクセス可能なAPIなどの提供はしていますか?

A:

APIは用意されております。 https://docs.aws.amazon.com/ja_jp/iot/latest/apireference/Welcome.html APIを利用する際には、呼び出しの制限にご注意ください。 https://docs.aws.amazon.com/ja_jp/general/latest/gr/aws_service_limits.html#limits_iot

Innovate Japan 2018自体はとても良いイベント

良質なセッションをどこでも閲覧することができ、
Ask The Expertにより疑問点を質問することができました。
特に最近の技術的トレンドであるマシンラーニング、コンテナ、IoTに関して
注力して学ぶことができるのは大きなメリットでしょう。


以上です!

Mac mini 2011をサーバーとして使っていた時の設定をまとめる!

数ヶ月の間、
Mac mini 2011を外出先からアクセスできる
Webアプリケーションサーバーとして稼働していました。
理由としては・・・

  • Mac miniは省電力
  • Iaasの仮想マシンを利用する場合、安いプランだと性能が貧弱だったりする。
  • だったらメモリ8GB積んでるMac miniをサーバーとして利用すればいいんじゃね。

的な内容でした。しかしながら、無線LANで運用している状況で、
WiFiネットワークの切断がよく発生しました。さらに言うと、
Macファイアウォール機能を無効にしないと外部からアクセスできない状況が確認でき、
セキュリティ的にもどうなのかなということで、今はサーバーを停止しています。

その時にどのように設定したのかをまとめます。

ルーターの設定

ルーターの機種によって変更箇所は異なると思います。あくまでご参考までに。

プライベートIPアドレスの固定

Mac miniMACアドレスとプライベートIPを紐づけて、プライベートIPアドレスを固定する。
参考画像:
f:id:yasay:20180923190848p:plain

ポート転送の指定

グローバルIPアドレスにアクセスした場合に、Mac miniの80番ポートに転送するように設定する。
参考画像:
f:id:yasay:20180923191022p:plain

Nginxの設定

リバースプロキシの変更

Nginxはbrewを使ってインストールしました。
当初はSpring Bootで稼働するWebアプリケーションと
Kibanaに外部からアクセスしたかったので、Nginxでリバースプロキシの設定をしました。

/user/local/etc/nginx/nginx.confの修正

# 下記のようにリバースプロキシの設定を行なっていた。
# "/sb"がSpring Boot
# "/kibana"がKibana
# server_nameにはドメインを設定(多分不要な設定)
    server {
        listen       80; 
        server_name  .xxx.xx;

        access_log  /var/log/nginx/host.access.log  main;

        location / { 
            root   html;
            index  index.html index.htm;
        }   

        location /sb {
            proxy_pass  http://localhost:8080/;
        }   

        location /kibana/ {
                proxy_pass http://localhost:5601;
                proxy_http_version 1.1;
                proxy_set_header Upgrade $http_upgrade;
                proxy_set_header Connection "upgrade";
                proxy_set_header Host $host;
                rewrite /kibana/(.*)$ /$1 break;
        } 
    }

Dynamic DNSの設定

MyDNSというサービスを使います。
www.mydns.jp

ドメインの登録

画像を参考に、ドメインを初期登録する。
f:id:yasay:20180924020041p:plain

IPアドレスの登録

グローバルIPアドレスを登録する。
※この時、IPv6アドレスは適当でしたがWANからのアクセスは問題なくいけました。
f:id:yasay:20180924020052p:plain

Mailの設定

MyDNSにIPアドレスを通知する仕組みを作る必要があります。
私の場合、IPv4アドレスは固定のようですが、IPv6アドレスが固定ではありませんでした。
ですので、設定します。Macのメールアプリを使ってアカウント登録します。
メールアプリは起動しっぱなしにします。

アカウントの登録

f:id:yasay:20180924020418p:plain

  • メールアドレス:myDNS.JP の ID@mydns.jp
  • ユーザー名:myDNS.JP の ID
  • パスワード:myDNS.JP の PASSWORD
  • アカウントの種類:POP
  • メールサーバ:mail.mydns.jp

ドメインの設定

ネームサーバーの変更

取得したドメインのネームサーバーを変更します。
私の場合はムームードメインを利用。
f:id:yasay:20180924020514p:plain

  • ネームサーバ1:ns0.mydns.jp
  • ネームサーバ2:ns1.mydns.jp

Mac miniの設定

Firewallのオフ

Firewallをオフにしないと外部ネットワークから接続できなかった。
「設定」→「セキュリティとプライバシー」から、「ファイアウォール」を選択。
ファイアウォールを切に設定する。
参考画像:
f:id:yasay:20180923192004p:plain

上記の設定によりWANからWebアプリケーションサーバーにアクセスできるようになりました!
LAN内だとドメインで名前解決できないという現象が発生していましたが、
その場合はプライベートIPでアクセスすればよかったので特に不便を感じていませんでした。

以上です!

Alexaスキル「五月雨(さみだれ)の音」がスキルストアに公開されてから3ヶ月が過ぎました。

実は2018年6月にAlexa Skillを公開していました。
早いもので、もう3ヶ月が過ぎました。
www.amazon.co.jp

北米だと審査のフローが自動化されているようですが、
日本用のスキルの場合、審査をAlexaチームの審査担当者が行ってくれました。

初めてのスキル公開だったので3回くらいリジェクトされましたが、
審査担当者の方がとても丁寧に対応してくれましたので、無事に公開までこぎつけました。

やっていることは簡単で、雨の音をループして流すだけです。
個人的に仕事に集中する時などに欲しかったので、作りました。

SlideShare

SlideShareでデプロイ方法や運用費なども共有していますので、よろしければご参照下さい!

www.slideshare.net

GitHub

スキルはGitHubでソースを公開していますので、
その気になれば同じようなスキルを複製できますよ。試してみてください。
※その際はご連絡頂けると嬉しいです。
github.com

スキルを公開していいこともあった。Echo Dotをもらえた!

初月に100人以上のユニークユーザーに使ってもらえたので、
Echo Dotを無料もらえるクーポンをゲットできました。
ありがとうございます、ありがとうございます。m(_ _)m
もらったEcho Dotは勉強会とかに持っていく用途にしようと思います。

実際にスキルの統計レポートとか見ていると、
自分が作ったスキルがどれくらい利用されているのか見れるので、
結構ワクテカなんですよねー。

個人的に思うことは、これ以上利用者が増えても運用費が増えるだけなので、
課金の仕組みとか作らない限り困ったことになりそうってこと
ですw

できれば今後も何かしらスキルを作っていければと思います。
コードが負債にならないよう、リファクタリングもしていきたい・・。

以上です!

Spring Boot 2.0で、組み込みTomcatのSecure設定を有効にする

本エントリーは下記バージョンで動作確認しています。

Java 9.0.4
Srping Boot 2.0.1.RELEASE

動機

ALBをリバースプロキシのように利用して、
SSL証明書をALBに適用していました。
この状況下でSpring Securityによるログイン処理を行った場合に、
httpページに遷移してしまう現象が発生しました。

解決策:組み込みTomcatのSecure設定を有効にする

組み込みではない場合はTomcatのserver.xmlを編集し、
Secure設定を有効にすればよいのですが、
組み込みの場合はSpring BootにConfigクラスを用意して定義しなければいけません。

Spring Boot 2.0だと記述方法が若干異なりますので、
ちゃんと動作したコードを下記に記します!

このコードの場合、appication.ymlファイルにフラグを定義しておき、
特定の環境の場合secure設定を有効にしています。

上記の設定で無事に現象を解消することができ、httpsページに遷移するようになりました!

以上です!