最低限の設定でAmazon ECS(+EC2)なNginxを立ち上げる

aws.amazon.com

いまECSを使うならEC2インスタンスをホストとせずFargateを使うのが基本になりそう。
ここではFargateではなくEC2インスタンスを使う方法で進めます。

ちなみにECSは「Elastic Container Service」の略ですが、ひと昔前は「EC2 Container Service」でした。

大まかな流れ

  1. 新しいタスク定義の作成
  2. クラスターの作成
  3. サービスを作成してクラスターで実行・維持するタスク定義を指定

タスク定義

マネジメントコンソールでAmazon ECSの画面を開いたら左メニューから「タスク定義」を選択し「新しいタスク定義の作成」をします。
「起動タイプの互換性の選択」をする画面が表示されますが、ここではEC2を選択。

次は「タスクとコンテナの定義の設定」。 「タスク定義名」を適当に(nginx-taskとか)入力しましょう。

あと、少し下にスクロールして「コンテナの定義」から「コンテナの追加」をします。
「コンテナ名」はお好きにnginx-containerみたいに入力して。
「イメージ」は nginx:alpine とかするとDocker Hubからイメージをとってくるようになってます。

タグはドキュメントを参照してください。
https://hub.docker.com/_/nginx

「メモリ制限」は推奨されている最低値の300。
「ポートマッピング」はホスト、コンテナともに80としておきます。

これ以外の設定値は特に触らず、「作成」します。

クラスター作成

タスク定義できたらクラスターの作成です。

左メニューから「クラスター」を選んで「クラスターの作成」と進み、最初の「クラスターテンプレートの選択」は EC2 Linux + ネットワーキング を選びます。
「クラスター名」はなんでもいいです。nginx-clusterにしときます。
「EC2インスタンスタイプ」はお試し目的なのでt2.microとか小さいのにしとくといいでしょう。

最低限の設定はこれくらいです。
「作成」しましょう。

サービス作成

最後ですね。サービスの作成です。

クラスターの作成が終わると「クラスターの表示」というボタンが出てくるのでそれを押すか、クラスターの一覧から作成したクラスター選択します。
「サービス」というタブがあるので、そこから「作成」しましょう。

「起動タイプ」はEC2。
「タスク定義」と「クラスター」は先ほど作成したものが選択されていることを確認してください。
「サービス名」は例によってnginx-serviceとして、「タスクの数」は1としときます。

あとは触らずに「次のステップ」を押し続けます。
最後の確認画面で「サービスの作成」です。

動作確認

EC2インスタンスが作成されているので、そのパブリックIPを参照するか、クラスターの「タスク」タブを開いてタスクのリンクを押すと、下にコンテナが表示されており、そこに外部リンクが記載されています。

ブラウザからアクセスするとNginxのウェルカムページが表示されるはずです。やったね。

Serverless Frameworkを使ってTypeScriptなAWS Lambdaをセットアップ

マネジメントコンソール上でコードを書いていくのは辛い。
zipに固めてaws-cliでアップロードっていう方法もあるけれども、今回はServerless Frameworkを使います。

serverless.com

github.com

$ npm --version
6.10.3
$ npm install -g serverless
...
...
$ sls --help

Commands
* You can run commands with "serverless" or the shortcut "sls"
* Pass "--verbose" to this command to get in-depth plugin info
* Pass "--no-color" to disable CLI colors
* Pass "--help" after any <command> for contextual help
...

資格情報(credentials)を設定。もちろん事前にユーザーは作っておく。

$ sls config credentials --provider aws --key xxxxx --secret xxxxx
Serverless: Setting up AWS...
Serverless: Failed! ~/.aws/credentials already has a "default" profile. Use the overwrite flag ("-o" or "--overwrite") to force the update

おっと。設定済みだった。

$ cat ~/.aws/credentials
[default]
aws_access_key_id = dummy
aws_secret_access_key = dummy
...

さっきのコマンドに --profile オプションを追加して、デフォルトではなく別のプロファイルとして設定する。

$ sls config credentials --provider aws --key xxxxx --secret xxxxx --profile xxxxx

設定に成功したら ~/.aws/credentials に追加されてる。

Hello World

$ sls create --template aws-nodejs-typescript --path helloLambda
Serverless: Generating boilerplate...
Serverless: Generating boilerplate in "/path/to/helloLambda"
 _______                             __
|   _   .-----.----.--.--.-----.----|  .-----.-----.-----.
|   |___|  -__|   _|  |  |  -__|   _|  |  -__|__ --|__ --|
|____   |_____|__|  \___/|_____|__| |__|_____|_____|_____|
|   |   |             The Serverless Application Framework
|       |                           serverless.com, v1.52.0
 -------'

Serverless: Successfully generated boilerplate for template: "aws-nodejs-typescript"

$ cd helloLambda
$ sls deploy

  Serverless Error ---------------------------------------

  Serverless plugin "serverless-webpack" not found. Make sure it's installed and listed in the "plugins" section of your serverless config file.
...

なん、、だと、、

$ ls
handler.ts        package.json      serverless.yml    tsconfig.json     webpack.config.js

node_modules がない。

$ npm install
$ ls
handler.ts        node_modules      package-lock.json package.json      serverless.yml    tsconfig.json     webpack.config.js
$ sls deploy
...
  Serverless Error ---------------------------------------

  The security token included in the request is invalid.
...

おっと。多分デフォルトのプロファイルが使われてるな。。
どのプロファイルの資格情報を使うか、指定してあげないとだった。

$ vim serverless.yml
...
provider:
  name: aws
  runtime: nodejs10.x
  # profileにプロファイル名を指定
  profile: profile-name
...
$ sls deploy
...
  Serverless Error ---------------------------------------

  User: arn:aws:iam::xxxxx is not authorized to perform: cloudformation:CreateStack on resource: arn:aws:cloudformation:xxxxx
...

今度は権限がない、と。マネジメントコンソールから権限追加。

$ sls deploy
...
Serverless: Stack update finished...
Service Information
service: hellolambda
stage: dev
region: us-east-1
stack: hellolambda-dev
resources: 10
...

できたけどリージョンが us-east-1 になってますな。

$ vim serverless.yml
...
provider:
  name: aws
  runtime: nodejs10.x
  profile: profile-name
  # リージョン指定追加
  region: ap-northeast-1
...

もう一度 sls deploy
コンソールから無事東京リージョンにLambda関数を作成できていること確認。
別のリージョンに作ってしまった関数は削除。

作成時に出力されたエンドポイントに対してcurlを叩いてみる。

$ curl -X GET https://xxxxxxx.ap-northeast-1.amazonaws.com/xxxxx
{
  "message": "Go Serverless Webpack (Typescript) v1.0! Your function executed successfully!",
  ...

ちゃんと動作している。

sls invoke でもええよ。

$ sls invoke -f hello
{
    "statusCode": 200,
    "body": "{\n  \"message\": \"Go Serverless Webpack (Typescript) v1.0! Your function executed successfully!\",\n  \"input\": {}\n}"
}

【レビュー】ソニーのヘッドホンWH-1000XM3のノイズキャンセリング性能が凄すぎた

半年くらいソニーのノイズキャンセリングヘッドホンWH-1000XM3を使ってます。

結論として、ノイズキャンセリングヘッドホンの購入を検討しているなら 『間違いなく買い』 です。
確かにヘッドホンに4万弱払うのは躊躇してしまうかもしれませんが、中途半端な価格でノイズキャンセリングヘッドホンを買っても「なんだこんなもんか、、」ってなります(実際、僕がそうでした)し、その経験があるからこそ、 出し惜しみせずにお金払って良いモノを買ったほうが絶対後悔しない と思っています。

WH-1000XM3

本当に外からの音が消える

普段在宅で仕事しているのですが、リビングの隣が仕事部屋になっていて、間仕切り的に引き戸があるだけなのでリビングからの音はほぼ筒抜けです。
大抵は気にならないのですが、子どもが遊んでいるときや、とにかく集中したいときは、ちょっとした生活音でも気になってしまうときがあります。

WH-1000XM3はそういった外音をほとんど遮断してくれます。
もちろん、全ての音を遮断して完全な無音状態というわけではありませんが、間違いなく気にならないという状態まで騒音をカットしてくれます。
さらに、ノイズキャンセリング状態で音楽を流せば、呼びかけられても全く聞こえなくなります(よく怒られます)。

軽量でスタイリッシュなデザイン

オーバーイヤーのヘッドホンは結構ゴツいイメージがあったのですが、WH-1000XM3はシンプルでスッキリとしたデザインです。
軽量で付け心地もよく、結構長い時間つけてても辛くならないなと感じています。

また、結構コンパクトに折りたたむことができて、

WH-1000XM3折りたたみ

専用ケース付きで持ち運びも便利です。

WH-1000XM3ケース収納

iPhone 6との比較。

WH-1000XM3ケース大きさ比較

音質やバッテリーもち・Bluetooth接続も問題なし

音質も非常に良いと感じています。
BOSEの方が、という声もありますが、好みにもよるのかなと思いますので、レビューを見比べたり実際に店頭で試聴してみたりしてもいいかもです。

ちなみに、専用に提供されている公式アプリにはイコライザーがついていて、自分好みに音質調整できます。

また、バッテリーもちも良く、2, 3日は充電しなくても十分にもつという印象ですし、Bluetooth接続に関しても、いまのところ問題は感じてないです。

ヘッドホンよりもイヤホンが良いんだけど

WH-1000XM3に不満はありません。
が、状況によってはイヤホンがいいなと思うときもあったりします。

僕自身、良いイヤホンないかなーと思っていたのですが、つい先日ソニーからノイズキャンセリングイヤホンWF-1000XM3が発売されました。

まだ発売開始されて間もないのですが、かなり評判が良いようなので、ヘッドホンよりイヤホンが良いという方はこちらを検討してみてもいいかもですね。
僕もかなり欲しいです。。。

まとめ

WH-1000XM3は本当に買って損はしないノイズキャンセリングヘッドホンです。
それなりのお値段でしたが、価格以上の価値は十分にあったと感じています。

もし、ノイズキャンセリングヘッドホンの購入を検討されているのであれば、WH-1000XM3でなくても、お金の出し惜しみをせずに良いモノを買うべきだと思います。
妥協して買ったあとに後悔しちゃったら、もったいないですからね。