JJUG CCC 2018 Spring 行ってきました!レポート

今回は懇親会は不参加です。

http://www.java-users.jp/ccc2018spring/#/www.java-users.jp

セッション中に必死にコーディングしててレポートは少なめなんだ(´・ω・`)すまない
だから所感も含めて書いていくよ

レポート

10:00-10:45 JavaWebサービスを作り続けるための戦略と戦術

f:id:yasay:20180531214254j:plain

1.開発環境とCI戦略
  1. sh /.setup.shでミドルウェアは全部入る
  2. データベースもそれに含まれる
  3. AとBで干渉しないように
  • 当時、Docker for Macが不安定だったこともあり、Virtual Box + Dockerを利用。
  • Docker for MacだとPortとHostがmysqlとバッティングしたりもある。
    • 新人君が困るよね的な。
  • setup.shの内容
2.老朽化した技術からの脱却
  • Javaからtomcat.start()で起動できる。
    • Tomcatとは、インストールするものではなく、newするもの。
  • JasperReportはオワコン
    • flying-sourcer-pdfで作り直し
  • JSESSIONIDはオワコン
    • サブシステムをローカルで複数立ち上げた場合に、片方でしかログイン状態を保てない。エンジニアの生産低下
    • Tomcatでも変えられる。JavaConfigでも変えられる。
  • sticky-session-cookieもオワコン
    • 何が問題なのかと言うと、リリース後も片方系にアクセス集中したりする。
    • spring-session-redisのフィルタをかぶせるだけで、Redisにセッションを格納
3.フロントエンドと仲良くする
  • Swagger + SpringMVC大好評
    • @EnableSwagger2
4.手動テストも、自動テストも
  • テスト実行後にpushが大事。
    • プルリクごとにJenkinsが自動テスト
6.バージョンアップする
  • 銀の弾丸はない。
    • 金の弾丸はあるw
      • iMac Pro 136台wwwワロタwww
  • 目指す世界線は、誰でも環境構築できること。
所感

笑いを誘うセッション進行は本当に素晴らしい。話を聞いていて飽きない。
自然とこちらも笑いが込み上げてくる。
セッションの内容は参考になったが、既に私のプロジェクトで実践している点もあった。
とにかく今はVirtual Box + Vagrantによって仮想環境を持ち歩ける時代なので、
マイLinuxサーバーを常日頃利用することが多い。この利点は大きい。
これにより、CIも一人で回せる。一人で回して周りがいいと思ったらサーバーも立ち上げられる。
私の今の課題はもっとDockerを活用することなので、Vagrant環境でDockerをより使っていきたい。

11:00-11:45 Concourse CI入門 ライブ環境構築&ビルド

Concourse CI入門 ライブ環境構築&ビルド

所感

登壇者の方がConcourse CIの魅力と概要を語るセッション。
UIが次世代って感じでおらワクワクするぞ。
Docker composeで簡単に立ち上げられるので、個人で試す環境はすぐに作れそう。
プロジェクトの期間によってはCIははぶられることもあるが、
エンジニアとしてはいつでも準備できるようにしておいたほうがよいだろう。
登壇者の方はelmというaltJS押しでした。

11:45-13:30 普通の人のためのJavaコミュニティイベントのススメ

www.slideshare.net

所感

前回の2017 Fallの時もそうでしたが、ランチセッションはインプット重視の内容ではないので、
気軽に聞けて面白い。前回はJavaの歴史まで聞けて、初心者でなくても楽しめた。
今回の注目キーワードはDon't Be Shy。私もドントビーシャイになりたい。
初参加ではないのでランチはもらいませんでしたよ。今年もデューク弁当だったのかな?

13:30-14:15 Apache Tinkerpopとグラフデータベースの世界

www.slideshare.net

メモ
  • グラフ理論のグラフのこと
    • 不正検知、レコメンデーション/パーソナライズ、カスタマー360、マスターデータ管理
    • 用語的な:グラフ、バーテックス、エッジ、プロパティ
所感

Tinkerpopに興味があったからセッション見に行ってみました。
Gremlin言語を用いる。Tinkerpopはグラフ理論グラフのフレームワークという扱い。
概要は理解した感じ。日本の記事がググっても少ないのはお察し。
その中でも登壇者様の企業は異彩を放っていると思われる(思うだけ)。

14:30-15:15 Apache Kafkaとストリーム処理

speakerdeck.com

所感

そろそろ胃腸が働いていて眠くなる時間(ぉぃ
Apache Kafkaの概要は理解したぞ。
使う時がくれば、このスライドを思い出します。

15:45-16:30 古いフレームワークでもマイクロサービスアーキテクチャにしたい

docs.google.com

所感

古いフレームワークでもSpring Cloud ConfigとNetflix Eurekaを利用して恩恵を受けましょう的な話だったかと思うんですが、
すまない、Spring Cloud ConfigとNetflix Eurekaを利用するためのサーバー費用を上に相談するほうが
辛そうなんだが(´・ω・`)

16:45-17:30 REST APIに疲れたあなたへ贈るGraphQL 入門

www.slideshare.net

所感

さすがAWSJのソリューションアーキテクトを担当されているだけあって、
プレゼンの進行や話し方などしってかりしていてとても聞きやすい、見やすい。
内容としては「GraphQL概要理解したぜ!」、「Appsync使いたいぜ!」と自分の中で
盛り上がる内容だった。ここまでくるとAppsync使わない実装も調べたいんだぜ。
トレンド来るのいつですか?もう来てる?

17:45-18:30 DDDとクリーンアーキテクチャでサーバーアプリケーションを作っている話

www.slideshare.net

所感

最初のレガシーシステム構成つらたんな状況から、
さっとDDDとクリーンアーキテクチャによる実装例を紹介してて、
サーバーたくさんあってむしろマイクロサービス+DDD+クリーンアーキテクチャじゃねって
感じでわくてかしながら見てました。
笑いを誘う進行も楽しく、見てよかったと感じました。

全体所感

今年も楽しませてもらいました。ありがとうございました。
またFallにお会いしましょう。(Winterか?)
f:id:yasay:20180531222857j:plain

(小ネタ)Spring Bootを2.0にアップグレードする時のGradle Wrapperのアップグレード手順

本エントリーは下記環境で検証しています。

移行元Java バージョン 1.8
移行元Spring Boot バージョン 1.5.2
移行先Java バージョン 9
移行先Spring Boot バージョン 2.0.1

私が学習用に用意しているリポジトリはまだ大したことはしていない(ぉぃ)ので、
Spring Bootを2.0にアップグレードする際は、Gradleのバージョンを上げて、
build.gradleを修正するだけで対応できました。

./gradlew wrapper --gradle-version=4.5.1


変更差分はこちら↓
https://github.com/x-blood/xblood-spring-boot/commit/8addb65dcce53056f7ef04191b171fe9407b9e5a#diff-c197962302397baf3a4cc36463dce5eagithub.com

これからも上記のような作業は定期的に発生しそうなので、備忘録としてエントリーを残しました。
最近業務でもSpring Bootを使う機会があり、ノウハウが増えていい経験になっていると思います。

## 参考資料
Gradleを使ってビルドしているSpring BootのアプリケーションをJava9に移行してみた話 | Developers.IO

(AWS)S3 SelectがGAされたようなので早速Lambdaから呼んでみた

本エントリーは下記環境で検証しています。

Lambda ランタイム Python 3.6
boto3 バージョン 1.7.4


S3 SelectがGAになりましたね!
aws.amazon.com


しかしながら、やってみた系サイトの情報はプレビュー版が多く、
GAだと仕様が変わっているので注意が必要です。詳しくはboto3公式を参照。
http://boto3.readthedocs.io/en/latest/reference/services/s3.html#S3.Client.select_object_content

コード例

        s3test = boto3.client('s3')
        s3SelectResponse = s3test.select_object_content(
            Bucket=env_s3_bucketName,
            Key=key,
            ExpressionType='SQL',
            Expression="select * from s3object s",
            InputSerialization={
                'CSV': {
                    "FileHeaderInfo": "NONE",
                    'RecordDelimiter': '\n',
                    'FieldDelimiter': ',',
                }
            },
            OutputSerialization={
                'CSV': {
                    'RecordDelimiter': '\n',
                    'FieldDelimiter': ',',
                }
            },
        )

        for event in s3SelectResponse['Payload']:
            if 'Records' in event:
                records = event['Records']['Payload'].decode('utf-8')
                print('s3SelectTestRecord:%s' % records)
            elif 'Stats' in event:
                statsDetails = event['Stats']['Details']
                print("Stats details bytesScanned: ")
                print(statsDetails['BytesScanned'])
                print("Stats details bytesProcessed: ")
                print(statsDetails['BytesProcessed'])

所感

結局のところRecordsのPayloadを取り出す時に改行コードでsplitしなきゃいけないので、
この辺りをもうちょっと改善できると使いやすいんですが、いい方法を考えたいですね。
マネージメントコンソールからクエリー投げれるところが気に入りました!JSONもいけるようです。

以上です!

WindowsのコマンドプロンプトからSlackに通知してみた

本エントリーは下記環境で検証しています。

Windows OS Windows 10 Pro
BunBackup Ver 5.0 64bit

BunBackupの実行完了通知をSlackに送りたかったので、
WindowsコマンドプロンプトでSlackのWebHook URLにリクエストを送ってみました。

具体的なやり方は、GitHubに書いちゃってるんですが、
もしよければご覧になってください。
github.com

Slack連携処理抜粋

特に難しいことはしていないです。
チャンネル、メッセージ文言、ボット名、アイコンなどを指定してcurlコマンドを叩くだけ!
ただし、ダブルクォーテーションをエスケープしています。
下記の記述ルールを守ればいけるとのこと。

  • スペースを含むパラメータはダブルクォート「"」でくくる。
  • ダブルクォートの中にあるダブルクォートは、バックスラッシュ・円記号「\」でエスケープする
rem ### Send to Slack
SET SLACK_CHANNEL=#notifications
SET SLACK_TEXT=[Office]Successful backup process with BunBackup.
SET SLACK_BOTNAME=BunBackup Notification
SET SLACK_FACEICON=:bunbackup:
SET SLACK_WEBHOOKURL=%BB_SLACK_WEBHOOKURL%

curl -X POST --data-urlencode ^
payload="{\"channel\":\"%SLACK_CHANNEL%\", \"username\": \"%SLACK_BOTNAME%\", \"icon_emoji\": \"%SLACK_FACEICON%\", \"text\":\"%SLACK_TEXT%\"}" %SLACK_WEBHOOKURL%

f:id:yasay:20180319181454p:plain
無事にSlackに通知を送れました!

JAWS DAYS 2018 行ってきました!レポート

JAWS DAYS 2018行ってきました!
jawsdays2018.jaws-ug.jp

実は今回が初参加なので、
他のイベントと比べてどうなのか、わくわくして参加しましたよ!
レポート、書き殴っていきますっ!!

レポート

【ALL】10:10~11:00:A story of cloud journey with Community

  • 内容としては主に登壇者の方が経験したコミュニティ変遷。
  • 100回の参加より1回の登壇〜。
  • 明後日の方向から飛んでくる変化。

【A】11:10~12:00:Enterprise Serverlessを実現するための信頼性エンジニアリング

speakerdeck.com

  • Serverlessってなんだっけ?
    • CNCF Serverless Whitepaper
      • サーバの管理を必要としない。サーバーオペレーションがなくなる。
  • サーバーレスの信頼性は、FaaSに依存してしまうので、ビジネスの継続性を担保できない可能性。Reliabilityを保証できない?
  1. Faas・・・コンテナ内で非同期に呼び出される関数
  2. Baas・・・フルマネージドかつ抽象化されたライブラリやMW
  • Serverless is...抽象化されている関数やMW
  • 信頼性の考え方
    • ネジネスの信頼性を保つ努力をするのは変わらない。
    • Think simple, Keep simple(いいね)
  • 設計
    • イベントは同じ方向に流す。(逆流させない。)
    • 結果が必要なら同期で返す
    • 取りに行かせる
    • 一連の処理には同じIDを付与
      • それを引き回すことでIDでトレースできる
      • IDは様々な制御に使える
    • DynamoDB 結果整合性
      • 非正規化テーブルの、dynamodbはトランザクションの整合性
        • 保てる方法:条件付き書き込み、asid trunsaction
    • RDBとlambdaの相性の悪さについて
      • VPC lambdaで起動すると遅い。遅延発生厳しい。
      • 書き込みは非同期にすれば問題ない。
    • Functionのテストはユニットテストでちゃんとやろう
  • 監視
    • serverlessでやるべき監視はapplicationからのエラー通知を作り込むこと
      • ちゃんとエラーはキャッチして通知すること
      • メトリクスはちゃんと見ましょう。メトリクスを集約できるのかもIaaSの選定のポイント。
  • まとめ
    • サーバレスは特別なことではない。
    • 信頼性が必要な部分はちゃんと作り込む
質問内容メモ
  • サーバーレスでもたちあげっぱなしだとEC2より高くなる・・
    • コストを下げるコツとして・・間にAPIゲートウェイを挟んでキャッシュできるデータをキャッシュすれば、lambdaが実行されないのでやすくなる
  • CI環境はコードビルドを使って、AmazonLinuxのイメージを作ってそこでテストする。
    • Githubからソースを取得して、Pythonの関数をテストする。
    • 登壇者の現在の仕事はbackendが複雑なパターンが多い。frontが重要なサービスならfrontからのテストをちゃんとやったほうがいいよね的な。
  • 監視の方法は?
    • 死活監視は外側から叩く方法と、Cloudwatchのデータをdatadogにつっこんでる。datadogはserverlessだとお金取られないので便利。(なにー!そうなのか!)
    • TraceIDのチェックで10分以上途切れていたらメトリクスに上げるとか。

【ALL】13:00~13:50:「AWS Technical Evangelists Special talk session -スペシャトークセッション AWSとユーザーコミュニティが生み出すNo borderな未来-」

  • 認定エンジニアになるための勉強方法
    • associateの試験は結構簡単。少なくとも2回目はパスできる。
    • ネットワーキングのプロフェッショナルスキルは大変。85%しか正解率はない。
    • API, SDKだけでなく、Architectureを見る必要がある。どうやってAWSを使っているのか事例を見ることが大事。
    • 認定とプロジェクトでは違う。認定で学んだことは使わないことがある。プロジェクトは主流を学ぶ。
    • 認定は重箱の隅をつつくような内容が出てくる。模擬試験などをこなして進めるしかない。
    • ハンズオンを利用することが最も重要。たくさんの試験があるけど、単語や用語などの明確な理解が必要。
    • 認定に関して:8つの認定のうち、2つの認定は日本語化されていない。
  • 一番最初に学ぶべきのプログラミング言語は?
    • 同僚の方を見てどの言語に投資しているのかを見て学ぶべき
    • プログラミング言語はただのツールなので、言語を選ぶのは重要ではなくて、問題を解決することにフォーカスを置くべき。
    • 右手でビルド言語、左でスクリプト言語というまぁ、両刀使いになるとか。
  • 今何が起きているのかを正しく理解すること。
    • 日本はまだEC2の利用が圧倒的に多い。だんだんサーバーレスを進めていくというカルチャーに違いはない。
    • テクノロジーを使う準備ができているのか、人の成熟度などが国によって違ってくる。
  • コミュニティの特徴について
    • 韓国のコミュニティはクレイジーだった。すごく飲むので。
  • 今後のトレンドについて
    • ハンズオンによる経験が何よりも重要。codeを書くことから卒業していく段階になっても、それでもハンズオンを続けて学び、アウトプットを出す。それによりトレンドを予測できる。
    • リージョンの境を越えたグローバルなアーキテクチャ構築
    • 仮想通貨やブロックチェーン
    • ユーザーインターフェースは今後もあまり変わらないと思う。
  • ラーンアンドビーキュリアス
    • 学んで明日やる。今後やるとでは雲泥の差がある。
    • learn and be curious

【G】14:00~14:50:ユーザー企業におけるサーバレスシステムへの移行

speakerdeck.com

  • なぜ、サーバーレスに至ったのか
    • 大規模システムは嫌です。システム変更による影響範囲が広くて、テストが大きくなる。
    • 密結合はいやです。固有のインターフェースに基づいて接続。一方が他方を容易に取り替えられない。
    • インフラ管理は嫌です。プログラムに注力できるつまり、ビジネスに注力できる。
    • 処理の考え方としてスケールアップは嫌。159億データさばくなら、必然的にスケールアウト
  • システムを小さく、疎結合で、インフラを持たず、スケールアウト型で開発しよう。
  • サーバーレス使って見た
    • S3
      • ファイル移動が失敗する時がある。All moveでなぜか残っている。ポーリング
      • ファイル名を意識する。日付とかつけちゃうとアクセス効率が悪い(公式アナウンスはない)。
      • ハッシュ値 + ファイル名をつけることでパーティションかを回避的な。
        • 1秒間に800リクエストある以上の場合に採用した。
    • SQS
      • Queuing chain クラウドデザインパターン
      • 実行保証、複数回うごくことがある。この時の工夫方法。冪統制。
      • スケーラベル、順番保証されない。-> 結果整合性で設計する。FIFOオプションという選択肢もある。
      • Pub Subによる拡張を見越した設計。Fanoutパターン。SNSとSQS
    • Lambda
      • イベント駆動でスケーラブルで無駄がない。EC2の場合時間帯によって無駄があるとパターンが出てくるよね的な。お金に直結する的な。
      • 最大5分問題 -> 前処理を切り出すとか、処理時間を掴むとか。
      • ソース容量足りません問題。解決策なし。
    • DynamoDB
      • 結果整合性(並列と相性が良い)
      • 書き込みキャパ問題(お金はかけたくない)-> lambda同時起動数を制御しキャパシティ超えをおこさせない。
  • 開発手法
    • コーディング:Cloud9を採用。atom+sam、eclipse+samも検討したがマシンスペックに左右されるのでクラウドを利用した。
    • ソース管理:GitHub 細かいプルリクで差分を確認し、ナレッジ共有。いいよね。
    • CI/CD:circle ci使ってる。cloud formationの欠点?:Lambdaの同時実行数が設定できなかった。-> AWS CLIの実行で解決。
  • 感想
    • 苦労しましたか?
      • インフラはらくちんになった。0ではないが。
      • アプリは苦労した。新しいことをやることは当然、苦労するのでそうだよね。今は0.8。awsは制約があるから、迷わないからいい。優秀な先生がたくさんいる。
    • 作られたシステムの出来は?
      • インフラいいことだらけ。AWSが結構サーバ落ちたりする。落ちる前提のデザインで作らないとダメですってこと。
      • アプリもいいことだらけ。クラウドのメリットを簡単に、大きく享受。

【A】15:00~15:50:コンテナを守る技術 2018

speakerdeck.com

  • DockerHub 2015年の状況
    • コンテナは、Officialだから安全というわけでもない。
  • コンテナを運用する不安
    • アプリケーションの詳細な挙動、把握できてる?
    • AWSでのセキュアな構成、設計できていますか?
    • セキュリティポリシーをテストする仕組み、ありますか?
  • これまではホストごとの管理が基本
    • これからは、SGはAllow nothing, コンテナ毎に必要なroleを付与
  • アプリの挙動を把握しよう
    • どれくらいのリソースが必要?
    • どこと通信する?
    • ファイル書き込みはする?どのディレクトリ以下?
    • 内部的にセキュアな構成になっているか?
  • ホストまで管理する?
    • いろいろと規定がある場合に、管理するかも。
    • ECSがいい。ホスト管理したいなら。
    • メリットとしてアプリケーション毎にSGを振ることが可能。
  • ホストは忘れたい場合
    • fargateがいい。
  • ECSタスク定義
    • dockerが本来持つセキュリティオプションも数多く使える
  • セキュリティのチェック
    • 都度テスト:継続的にポリシー上問題がないことを確認する
    • 定期テスト
    • 実行時スキャン

(コンテナ内の脆弱性を考えるって本当に大事だよね。
パッチ当てなどの作業もコンテナ単位でやることになるのかしら。)

  • ホストとコンテナ
    • 守りやすい環境を整える
  • ホスト
    • これまで通りに守る
    • インスタンスハードニング、堅牢化
    • セキュリティ製品のインストール
      • aws inspector試してみて
  • docker-bench-security
    • コンテナを本番で動かす場合、best practiceをスクリプトで確認するためのツールになる
    • Lambdaで自動化をすれば、コストがとても安い
  • ECSエージェント
    • 特権を持つコンテナの起動を許可しない
    • コンテナ起動時にdocker security optionを使いたいケース
  • リソースの分離について
    • きちんとリソース制約 - 巻き込み事故を防ぐために
    • unlimitsで利用できる上限を決める
    • memoryを指定して、それを超えたらコンテナを落とす など
  • READ ONLY
    • 書き込めなく手段を利用する。AppArmorとか
  • ルートユーザは使わない
    • システムコールに正しく権限チェックがかかるように
    • 面倒がらずちゃんと適切なユーザを作りましょう
    • アプリケーションにあった方法で
  • 実行ファイルの管理
    • 利用するバイナリだけイメージに入れる
    • できれば静的リンクにしておく
  • ビルド
    • CI
      • static application security testingツールの利用
      • Dockerイメージのポリシーを定義&チェック
      • GoogleCloudPlatform/container-structure-test
  • 新たな脅威への対応
    • イメージの静的解析
    • SaaS:aqua, NeuVecor,
  • SSM Parameter Store & KMS & IAM Role
  • チームで意識するセキュリティ

【H】16:00~16:50:[DeepDive] AWS Japan SA Lightnings!

  • Lambda@Edgeでできること
  • aws guard duty
  • remak.js
  • cfn-flip
  • cross stack reference
  • Systems Manager Parameter Store
  • StackSetsで複数アカウント&リージェンへ一括展開

所感

初めてのJAWS DAYS!コミュニティの温度感の違いを感じました。

コミュニティは所属している人達によって文化やノリが変わるものだと感じました。
特に今回はテーマが「no border」ということで国際的な交流と、それに伴う親切心を感じ取れました。
全てのJAWS支部が同じ温度を保っているわけではないと思いますが、
今まで参加したコミュニティとは違う雰囲気を感じました。素晴らしいことです。

AWSはカテゴリが多岐に渡るので、ひたすらに技術要素をキャッチアップできる

今回の登壇資料を全て見ることだってまだ追いつかないくらい。
そしてそのカテゴリも多岐に渡る。AWSは進化が止まらないので、飽きることもなく本当に楽しいと思います。

各セッションは部屋ではない。間仕切りがある程度。

これは今までの勉強会と比較してのことですが、間仕切り程度でセッションエリアが区切られていました。
これについては特に問題ないのですが、当然のごとく周りの音で登壇者の声が聞き取りづらい場合があるので、
レシーバーの利用は必須ですね♪

以上です!
参加した皆様方、スタッフの皆様方、お疲れ様でした!

WindowsでもAnsibleを利用する!Vagrant + Ansibleのセットアップ

残念ながらAnsibleをWindowsでネイティブに動かす方法は見つかりませんでした。
ですので、Vagrantによって動かしましたので、エントリーとして残します。

本エントリーは下記環境で実施しています。

Windows OS Windows 10 Pro
Vagrant Version 2.0.1
Virtual Box Version 5.2.2 r119230 (Qt5.6.2)
Box Image ubuntu/trusty64

必要なソフトウェアのインストールとセットアップ

Downloads | Vagrant by HashiCorp

  • Virtual Box

Oracle VM VirtualBox - Downloads | Oracle Technology Network | Oracle

Vagrantによる仮想サーバの起動

1. 必要なboxの取得

今回はUbuntuを利用しました。下記のサイトからboxイメージを取得。(今ならxenialのほうがいいかもしれません)
Vagrant box ubuntu/trusty64 - Vagrant Cloud

# trusty64
vagrant box add ubuntu/trusty64 https://app.vagrantup.com/ubuntu/boxes/trusty64
# xenial64
vagrant box add ubuntu/xenial64 https://app.vagrantup.com/ubuntu/boxes/xenial64
2. 仮想サーバの初期化
rem Vagrantfileの配置先は任意
cd /D d:\vagrant
mkdir ubuntuTrusty64-20170920.0.0
vagrant init ubuntu/trusty64
3. Vagrantfileの修正

指定したプライベートIPアドレスでアクセスできるように下記の35行目辺りをコメントアウトを外す。

  config.vm.network "private_network", ip: "192.168.33.10"
4. Vagrantの起動
vagrant up
5. 仮想サーバに接続
vagrant ssh

無事に仮想サーバに接続できればOK!

(2018/7/5追記)6. PasswordAuthenticationの有効化

vagrantサーバーにsshクライアントから接続することに時間をかけたくないので、
今回はPasswordAuthenticationを有効にします。
これにより、vagrantのデフォルトユーザーでsshクライアントをすぐに利用することが可能

# 仮想サーバーに接続
vagrant ssh

# ここからbashなどの操作になる。
# Ubuntuの場合、sshd_configを修正
sudo su
cd /etc/ssh/
vi sshd_config

# 52行目付近 PasswordAuthenticationをyesに
PasswordAuthentication yes

# sshdの再起動
/etc/init.d/ssh restart

Ansibleのセットアップ

1. インストール

今回はUbuntuサーバにインストールするため、下記サイトを参考にしました。
Installing Ansible — Ansible Documentation

sudo apt-get update
sudo apt-get install software-properties-common
sudo apt-add-repository ppa:ansible/ansible
sudo apt-get update
sudo apt-get install ansible

下記コマンドを実行して、無事にAnsibleがインストールされていることを確認

ansible --version

仮想サーバ環境をPackage化する

これまでセットアップした仮想サーバ環境をPackage化して保存しておく。
Vagrantの真髄ですね。

1. Vagrantの起動状態を確認
rem Vagrantファイルがあるディレクトリで実行する
vagrant status
2. 起動中のVagrantを停止する
vagrant halt
3. boxを作成する
vagrant package --output ubuntuAnsible.box

↓Package化できた!これで配布できます!
f:id:yasay:20180123164818p:plain

ハマりポイント

1. Vagrantサーバからの各サーバにSSHアクセスする時に、passphraseを設定していないのに聞かれて、接続できない。

Ansibleの問題というより、自分のUbuntuサーバのセットアップ知識が足りないだけなのですが、
ssh-agentコマンドを実行することで、passphraseを聞かれないようにすることができます。

# 下記のコマンドを入力することで、SSHアクセス時にpassphraseを聞かれるのをスキップできる
ssh-agent bash
ssh-add

Ansible コマンド例

Pingを通してみる

コマンド例:

# IPアドレスと公開鍵を直接指定する方法
ansible {ホストIPアドレス} -m ping -u {接続先ホストのユーザー名} --private-key="{公開鍵のファイル名}"
# 予め用意したホストファイルを利用する方法
ansible {グループ} -i {ホストファイル名} -m ping
yum updateのdry runコマンドをplaybookから実行してみる

コマンド例:

# ホストファイルのみ指定して直接yum updateを実行する方法
ansible {グループ} -i {ホストファイル名} -K -m yum -a "name=* state=latest" --check
# 予め用意したPlayBookを利用する方法
ansible-playbook -i {ホストファイル名} -K {playbookファイル名} --check

yum updateのPlayBookの例:

- name: yum update
  yum:
    name: *
    state: latest
  notify: reboot by handler

handlerの例:
この場合、yum update完了後に再起動する。

- name: reboot by handler
  command: "/sbin/shutdown -r now"
接続先サーバのPythonのバージョンを確認してみる
ansible {グループ} -i {ホストファイル名} -K -m shell -b -a "python --version"

便利なVagrant自動起動設定

Windows

下記のbatファイルを作成し、タスクスケジューラにてログイン時に起動するよう設定しておくと便利

rem "%vagrant_startup_dir%"は環境変数
cd /D %vagrant_startup_dir%
vagrant up

感想

Ansibleは大量のPlayBookがGitHubなどに転がっており、
初回のサーバー接続設定さえ滞りなく完了させれば、その後の学習コストは低いと思います。

何より、エージェントレスであり、
ローカル環境のセットアップでも利用できますので、
普段から使っていきたいと思える構成管理ツールですね!
使っていて楽しいです!

これからも、Infrastructure As Codeを試み続けていきたいと思います!

Huawei Mate 10 Proを購入しました!

Huawei Mate 10 Proを購入したよ!
consumer.huawei.com
軽くレビューしていくよ!

よくある開封の儀

↓外箱は化粧箱のようでよく出来ていると思うが、
左上が既に凹んでいる。耐久度は低めなようだ。
f:id:yasay:20180115161453j:plain:w480

↓最近は高級スマホはどれもこういうパッケージですが、
もうちょっとメーカー毎の個性出したほうがいいんじゃないですかね。
f:id:yasay:20180115162314j:plain:w480

↓付属品。TPUケースがついてくるのは本当に助かる。
ただし、どれくらいの経年劣化で黄ばみが出てくるか知りたいところではある。
USB Type-C端子に接続して使えるイヤフォンジャックもいいね。
f:id:yasay:20180115162504j:plain:w480

↓TPUケースを付けた状態。
背面はテカテカで指紋が目立ちすぎてケース前提な所があるよね。
f:id:yasay:20180115162745j:plain:w480

↓初期セットアップを終えた状態。
有機ELディスプレイスマホは使ったことなかったので発色の違いに驚いています。
f:id:yasay:20180115163622j:plain

なぜMate 10 Proなのか

コストパフォーマンス

最近のスマホの値上がりにはついていけません。
今回、IIJmioのサプライサービスを通してMate 10 Proを79,800円(税抜)で購入したのですが、
私が比較した他の端末の中で圧倒的にコスパがよかったです。

iPhone X 64GB 112,800円(税抜)
iPhone 8 Plus 64GB 89,800円(税抜)
iPhone 7 Plus 128GB 85,800円(税抜)
Galaxy Note 8 sim Free Dual 10万円以上
Pixel 2(輸入) 9万円以上
Mate 10 Pro 79,800円(税抜)

※価格は2018年1月15日時点のものです。
こうやって比べるとiPhone Xとか頭のおかしい金額ですよね。
ノートPC買えるっつーの。

カメラの性能は外せなかった

私の場合、生活の中で写真を撮る機会が圧倒的に多いです。
スマホはいつでも持ち歩いているので、決定的な瞬間を撮ることに優れています。
つまり、カメラの画質が高ければ高いほど、私の生活における満足感は高くなります。

Mate 10 ProはDxomarkでiPhone Xに次ぐ高得点を獲得している機種で、
期待に答えてくれるであろうと考えました。
DXOMARK - Quality Testing, Scores and Reviews
f:id:yasay:20180115171448p:plain

内部ストレージ容量が128GBだった

Mate 10 Proは128GBの内部ストレージがあり、
比較対象と比べて、よりコスパが際立った製品です。
次は128GB以上のストレージにしようと決めたところ、
Mate 10 Proしか選択肢として存在しなかった。

iPhoneに飽きた

私はiPhone4からiPhoneシリーズを使い続けており、
iPhone歴は6年以上になります。正直、iPhoneに飽きました。
また、去年の1月にZenfone3を購入して1年間ほど使用し続けたところ、
思った以上に使い勝手が向上しており、Androidにより興味を示すようになりました。
xblood.hatenablog.com
※ただ、バックグラウンドの通信料は圧倒的にAndroidのほうが多いのでMVNO運用では少し辛いところ。

それに、iPhone 8 Plusは家族が購入したので、
なるべく同じものは使いたくなかったのです。
少なくとも2年は使いたいので、同じものを買うと面白くないですよね!

評価点

夜景撮影には大きなアドバンテージがある

Zenfone3はカメラ性能に特化しているわけではないので、
比べること自体が酷ではあると思うが、
二枚の画像を比べるとMate 10 Proの光を取り込む性能が段違いなのが分かる。

  • Zenfone3(オートモード)

f:id:yasay:20180117184626j:plain

  • Mate 10 Pro(写真モード)

f:id:yasay:20180117184648j:plain

他にも「夜間撮影」というモードがあり、
このモードはカメラを15秒ほど固定しなければいけないので三脚などが必要だ。
試してみたところ、ぶれぶれになってしまったが、
画像の明るさだけは、ぶれてもよく分かる結果だと思う。

  • Mate 10 Pro(夜間撮影モード)

f:id:yasay:20180117185023j:plain

最初から貼り付けられているフィルムは思ったよりよい

光沢フィルムなのだが、指のすべりがとてもよい
今までアンチグレアフィルムを使っていたのだが、
これだけ指のすべりがよいと光沢フィルムも悪くないと思う。

懸念点

音量調節の問題

Youtubeを再生してみたが、何故か音が出ていない。
音量を調節してみたところ、80%くらいでやっと音が出始めた。
デフォルトの音量調節がどうなっているのか定かではないが、
80%くらいまでボリュームを上げないと音が聞こえないのはダメだろと思う。
→[追記]その後、再起動後に音量調節が正しく機能するようになった模様。なんなんだ、Huawei

というか、試しにパズドラチャレンジ入れてみたら効果音は出るけど
BGMは全く鳴らないんだけど、なんなんだこれは。アプリ独自の問題なのか?
マナーモードを解除しても音が出ない。

WiFiアクセスポイントが見つからない問題

会社に持っていって社内WiFiのアクセスポイントを検索したがまったくヒットしない
SSIDを直接入力してもだめ。
「あぁ、はずれ端末を引いてしまったのかなー」と落胆しそうだったが、
端末の再起動をしたところ解決。なんなんだ、Huawei

自動識別による写真撮影が少し嘘っぽい

どうも空が普段見えるより強い青みがかかっているのが馴染めない。
できれば普段通りに撮影したいので、自動識別はオフで使用してみたいところ。
しかしながら、コストパフォーマンスとの兼合いも含めて、写真の画質には満足しています。

↓Mate 10 Proの自動識別により、空が強調された写真。明らかに目視で空を見るより色が濃くなっている。
f:id:yasay:20180115171011j:plain

TPUケースはクリアがよかった

ちょっとスモークかかってるような感じなので、
できればクリアがよかったかな。

総評

まだ商品が届いてから2日しか経っていないので、
Androidのハイエンド端末、そしてHuaweiがどれくらい信頼できるのか分からないですが、
使用感やカメラの画質など、エントリーを残していきたいと思います。

以上です!