ようへいの日々精進XP

よかろうもん

2020 年 02 月 17 日 (月)

アクティビティ (今までの走行 (歩行) 距離)

https://pixe.la/v1/users/inokappa/graphs/fitbit-activity

Fitibit Charge2 のアクティビティから走行 (歩行) 距離を Fitbit Web API で取得して Pixela で草生やしている. 色が濃くなれば濃くなる程強度が高い (歩行, 走行距離が長い) ということで. 実装の詳細はこちら.

ジョギング

  • 引き続き, お休み
  • はやく走りたい!!!!!!!!!!!
  • 病院にてリハビリ, 痛みがだいぶん和らいできて嬉しい, 右足の足底筋の痛みについても相談
  • 徒歩通勤

ギョーム

  • ECS の AMI update... だんだん苦行になってきたので早期に自動化を
  • AutoScaling の終了ポリシーについて, エー?って思うことがあったので検証したい
  • Amazon Elasticsearch Service の UltraWarm について調査
  • 負荷試験環境の整備

夕飯

  • 無水鍋の肉じゃが, 美味しかった!

2020 年 02 月 16 日 (日)

アクティビティ (今までの走行 (歩行) 距離)

https://pixe.la/v1/users/inokappa/graphs/fitbit-activity

Fitibit Charge2 のアクティビティから走行 (歩行) 距離を Fitbit Web API で取得して Pixela で草生やしている. 色が濃くなれば濃くなる程強度が高い (歩行, 走行距離が長い) ということで. 実装の詳細はこちら.

ジョギング

  • 引き続き, お休み
  • はやく走りたい!!!!!!!!!!
  • 右の脇腹肋骨あたりに痛み, 肋間神経痛かなあ

ギョーム

  • お休み
  • 久しぶりに AWS のコード三兄弟を色々といじっていた, とても学びになったが, 今後もいじっていかないとすぐに忘れるよな...

夕飯

またまたパスタを作った. 材料も分量もほぼ一緒

【俺の一行チップス】S3 バケットポリシーをミスるととても辛いが役に立つ

やりたいこと

  • S3 バケットポリシーにてオブジェクトに対する IP アドレス制御を施したい
  • でも, タイポなくポリシーを登録しないと 403 Forbidden が返ってくるのでデバッグが辛い

やったこと

以下のような S3 バケットポリシーを書いた.

{
    "Version": "2012-10-17",
    "Id": "Allow-from-IP",
    "Statement": [
        {
            "Sid": "Allow-from-IP-addresses",
            "Effect": "Allow",
            "Principal": "*",
            "Action": "s3:GetObject",
            "Resource": "arn:aws:s3:::your-bucket.example.com/*",
            "Condition": {
                "IpAddress": {
                    "aws:SourceIp": [
                        "xxx.xxx.xxx.1/32",
                        "xxx.xxx.xxx.2/32"
                    ]
                }
            }
        }
    ]
}

このバケットポリシーを書くことで, IP アドレスによるオブジェクトアクセス制限が設定される. また, 許可された IP アドレスからであれば, 以下のように, Website Hosting を有効にしなくても curl にてオブジェクトにアクセス出来るようにもなるので地味に便利.

$ curl -I https://s3-ap-northeast-1.amazonaws.com/your-bucket.example.com/test.txt
HTTP/1.1 200 OK
... 略 ...
Server: AmazonS3

設定に誤りがあればなんてこんとないバケットポリシーなんですが...

辛い

うっかり, 以下のようにバケットポリシーをタイポしてしまった場合... (xxx.xxx.xxx.2/32xxx.xxx.xxx.2/32/32 とタイポしてしまった...)

{
    "Version": "2012-10-17",
    "Id": "Allow-from-IP",
    "Statement": [
        {
            "Sid": "Allow-from-IP-addresses",
            "Effect": "Allow",
            "Principal": "*",
            "Action": "s3:GetObject",
            "Resource": "arn:aws:s3:::your-bucket.example.com/*",
            "Condition": {
                "IpAddress": {
                    "aws:SourceIp": [
                        "xxx.xxx.xxx.1/32",
                        "xxx.xxx.xxx.2/32/32"
                    ]
                }
            }
        }
    ]
}

マネジメントコンソールからポリシーを登録してもエラーにならず登録できてしまう. それに気付かずに許可しているはずの IP からアクセスしても 403 Forbidden になってしまう...

$ curl -I https://s3-ap-northeast-1.amazonaws.com/your-bucket.example.com/test.txt
HTTP/1.1 403 Forbidden
... 略 ...
Server: AmazonS3

二行でまとめると...

  • CIDR の記述まではチェックしてくれないので, typo してても警告しない
  • 許可しているはずの IP からアクセスしても 403 Forbidden になってしまうので原因が分かり辛い

ということで, バケットポリシーを登録する際には注意しましょう.

2020 年 02 月 15 日 (土)

アクティビティ (今までの走行 (歩行) 距離)

https://pixe.la/v1/users/inokappa/graphs/fitbit-activity

Fitibit Charge2 のアクティビティから走行 (歩行) 距離を Fitbit Web API で取得して Pixela で草生やしている. 色が濃くなれば濃くなる程強度が高い (歩行, 走行距離が長い) ということで. 実装の詳細はこちら.

ジョギング

  • 引き続き, お休み
  • はやく走りたい!!!!!!!!!
  • 病院にて電気治療, だいぶん良くなってきた感

ギョーム

  • お休み
  • 検証用に社内向けシステムに ImageMagick の convert コマンドをラップした API サーバーを追加してリリースした

二度寝

早起きしすぎて二度寝してしまい起きたら 9 時だった...orz

博多をウロウロ

所用があり博多界隈をウロウロ. 思いの外暖かくて T シャツでウロウロ

clifton6

まだ走れないけど, 復旧後にゆっくりとジョギングから始めたいと思い HOKAONEONE の clifton6 を買った.

#hokaoneone #clifton6 1日でも早く走れるようになりたい。#故障中

夕飯

またパスタを作った. ソース感もしっかりしていて久しぶりに満足した味だった.

2020 年 02 月 14 日 (金)

アクティビティ (今までの走行 (歩行) 距離)

https://pixe.la/v1/users/inokappa/graphs/fitbit-activity

Fitibit Charge2 のアクティビティから走行 (歩行) 距離を Fitbit Web API で取得して Pixela で草生やしている. 色が濃くなれば濃くなる程強度が高い (歩行, 走行距離が長い) ということで. 実装の詳細はこちら.

ジョギング

  • 引き続き, お休み
  • はやく走りたい!!!!!!!!
  • 明日, 病院に電気をあてに行く予定

ギョーム

  • 自宅作業
  • ウィークリーレポート作成
  • 隔週で開催される会議にリモートで参加
  • 画像変換の仕組みについて調査 (サービスで提供されているもの, OSS で提供されているものなど)
  • 画像変換の仕組みについて簡単なサンプルアプリケーションを実装 (ImageMagickデファクトスタンダードっぽい)

奥さん

明け方に咳がとてもひどかったので病院に連れていく. 病院に行った後, 薬を飲んだりしていたら症状が落ち着いてきたようで良かった.

夕飯

久しぶりにパスタを作った. 豚もも肉とプチトマトのパスタ. 即興で作った割には美味しかった.

2020 年 02 月 13 日 (木)

アクティビティ (今までの走行 (歩行) 距離)

https://pixe.la/v1/users/inokappa/graphs/fitbit-activity

Fitibit Charge2 のアクティビティから走行 (歩行) 距離を Fitbit Web API で取得して Pixela で草生やしている. 色が濃くなれば濃くなる程強度が高い (歩行, 走行距離が長い) ということで. 実装の詳細はこちら.

ジョギング

  • 引き続き, お休み
  • はやく走りたい!!!!!!!
  • 通院, リハビリ
  • 自宅マンションのエレベーターを使うの止めて階段の上り下り, 今日は 2 往復, 通勤で徒歩往復

ギョーム

  • 今季の目標設定等, 頑張ろう
  • RDS のサブネット配置に違和感があったので調査, 案の定, メンテが必要な状況であることを確認, この際だからキレイに整理
  • カスタマーサービスのお手伝い
  • ちょこちょこ関わった案件のインフラ構成を確認して整理
  • いよいよ GKE 案件, 調査等

夕飯

鍋. 引き続き, 奥さんの体調が悪いので.

2020 年 02 月 12 日 (水)

アクティビティ (今までの走行 (歩行) 距離)

https://pixe.la/v1/users/inokappa/graphs/fitbit-activity

Fitibit Charge2 のアクティビティから走行 (歩行) 距離を Fitbit Web API で取得して Pixela で草生やしている. 色が濃くなれば濃くなる程強度が高い (歩行, 走行距離が長い) ということで. 実装の詳細はこちら.

ジョギング

  • 引き続き, お休み
  • はやく走りたい!!!!!!!
  • 自宅マンションのエレベーターを使うの止めて階段の上り下り, 今日は 3 往復

ギョーム

  • 奥さんの通院, 看病とかで自宅作業
  • NAT インスタンス使えば良かって案件 (自分で構築した NAT インスタンスの存在を忘れていた), RDS のサブネットグループが自分の意図しない動きで「アレって」なっていた

Apache 2.4 の gzip レスポンスについて調べてサーバーに反映, 設定自体は難しいものではなかったんだけど, 確認手順で curl -I を使っていたら反映を確認出来ずに悩みまくってブラウザで確認したらちゃんと Content-Encoding: gzip が返ってきてなんだんだ!って気分になった.

夕飯

鍋. 奥さんが体調を崩している. 病院に連れていったら少し落ち着いたので良かった.

2020 年 02 月 11 日 (火)

アクティビティ (今までの走行 (歩行) 距離)

https://pixe.la/v1/users/inokappa/graphs/fitbit-activity

Fitibit Charge2 のアクティビティから走行 (歩行) 距離を Fitbit Web API で取得して Pixela で草生やしている. 色が濃くなれば濃くなる程強度が高い (歩行, 走行距離が長い) ということで. 実装の詳細はこちら.

ジョギング

  • 引き続き, お休み
  • はやく走りたい!!!!!!
  • 自宅マンションのエレベーターを使うの止めて階段の上り下り

ギョーム

  • 色々としらべもの
  • HCL のパーサーがあるんだなって, terraform の定義ファイルから色々と情報を抜いたり出来るなあとか思ったり

夕飯

鍋. 奥さんが体調を崩している. 明日は病院に連れていく.

2020 年 02 月 10 日 (月)

アクティビティ (今までの走行 (歩行) 距離)

https://pixe.la/v1/users/inokappa/graphs/fitbit-activity

Fitibit Charge2 のアクティビティから走行 (歩行) 距離を Fitbit Web API で取得して Pixela で草生やしている. 色が濃くなれば濃くなる程強度が高い (歩行, 走行距離が長い) ということで. 実装の詳細はこちら.

ジョギング

  • 引き続き, お休み
  • はやく走りたい!!!!!
  • 通院, リハビリにて右肩が下がっていること, それによって右肋骨がよじれて下がっている旨を指摘される

ずっと右側の足の張りや右側の故障が続いていたので, 今日の指摘で色々とつながった気がした. 指示されたストレッチ等を頑張って続けて 3/15 のハーフマラソンに出走したい!

ギョーム

  • CloudWatch メトリクスを見てて違和感があったので色々と調査
  • Lambda のエラーハンドリングについて問い合わせがあり調査, ちゃんと仕様を把握出来ていなかったので改めて勉強になった (ちゃんと動かしてみて実際に挙動を確認してみたい)
  • 不要な Amazon Elasticsearch Service ドメインを葬り去るための準備 (スナップショット作成したり, レストアしたり, レストアを検証したりするツールを書いた) して, Amazon Elasticsearch Service ドメインを 2 ドメイン葬り去った

夕飯

鮭のムニエル, 皮がパリパリで美味しゅうございました.

明日は

嬉しい!

【俺の一行チップス】Elasticsearch 6.x の Docker イメージにプラグインをインストールして docker-compose で Elasticsearch 環境を構築したい

やりたいこと

  • Elasticsearch 6.x の Docker イメージを利用したい
  • docker build の途中で Elasticsearch プラグインをインストール docker-compose で Elasticsearch 環境を構築したい

やったこと

以下のような Dockerfile を用意. Dockerfile 名は Dockerfile.elasticsearch にしてみた.

FROM docker.elastic.co/elasticsearch/elasticsearch-oss:6.8.6
RUN bin/elasticsearch-plugin install --batch repository-s3

インストールしたい Elasticsearch プラグインはスナップショットを S3 に保存するプラグイン repository-s3 を.

以下のような docker-compose.yml を用意.

version: '3.7'

services:
  elasticsearch:
    build:
      context: .
      dockerfile: Dockerfile.elasticsearch
    container_name: elasticsearch
    environment:
      cluster.name: docker-cluster
      ES_JAVA_OPTS: "-Xms128m -Xmx128m"
      bootstrap.system_call_filter: "false"
      transport.host: localhost
    ulimits:
      memlock:
        soft: -1
        hard: -1
    ports:
      - 9200:9200

後は docker-compose build elasticsearch を実行するだけ. コンテナが起動したら, 以下のようにインストール済みのプラグインを確認する.

$ curl -s 'localhost:9200/_nodes?filter_path=nodes.*.plugins' | jq .
{
  "nodes": {
    "4Lf-rIhpTvq0b16LTYSLHA": {
      "plugins": [
        {
          "name": "repository-s3",
          "version": "6.8.6",
          "elasticsearch_version": "6.8.6",
          "java_version": "1.8",
          "description": "The S3 repository plugin adds S3 repositories",
          "classname": "org.elasticsearch.repositories.s3.S3RepositoryPlugin",
          "extended_plugins": [],
          "has_native_controller": false
        }
      ]
    }
  }
}

おつかれさんでした.

ハマった

当初は Dockerfile 内の repository-s3 インストール部分を以下のように書いていた.

RUN bin/elasticsearch-plugin install repository-s3

ところが, 以下のようなエラーとなってしまっていた.

Exception in thread "main" java.lang.IllegalStateException: unable to read from standard input; is standard input open and a tty attached?
        at org.elasticsearch.cli.Terminal$SystemTerminal.readText(Terminal.java:173)
        at org.elasticsearch.plugins.PluginSecurity.prompt(PluginSecurity.java:74)
        at org.elasticsearch.plugins.PluginSecurity.confirmPolicyExceptions(PluginSecurity.java:67)
        at org.elasticsearch.plugins.InstallPluginCommand.installPlugin(InstallPluginCommand.java:812)
        at org.elasticsearch.plugins.InstallPluginCommand.install(InstallPluginCommand.java:786)
        at org.elasticsearch.plugins.InstallPluginCommand.execute(InstallPluginCommand.java:232)
        at org.elasticsearch.plugins.InstallPluginCommand.execute(InstallPluginCommand.java:217)
        at org.elasticsearch.cli.EnvironmentAwareCommand.execute(EnvironmentAwareCommand.java:86)
        at org.elasticsearch.cli.Command.mainWithoutErrorHandling(Command.java:124)
        at org.elasticsearch.cli.MultiCommand.execute(MultiCommand.java:77)
        at org.elasticsearch.cli.Command.mainWithoutErrorHandling(Command.java:124)
        at org.elasticsearch.cli.Command.main(Command.java:90)
        at org.elasticsearch.plugins.PluginCli.main(PluginCli.java:47)
ERROR: Service 'elasticsearch' failed to build: The command '/bin/sh -c bin/elasticsearch-plugin install repository-s3' returned a non-zero code: 1

Elasticsearch の公式掲示板を見ていたところ, 以下の投稿が全く同じ内容だったので参考にして bin/elasticsearch-plugin-batch オプションを指定した.

実際に elasticsearch-plugin コマンドの install サブコマンドのオプションを確認してみる.

$ docker-compose exec elasticsearch bin/elasticsearch-plugin install --help
... 略 ...
Non-option arguments:
plugin id

Option             Description
------             -----------
-E <KeyValuePair>  Configure a setting
-b, --batch        Enable batch mode explicitly, automatic confirmation of
                     security permission
-h, --help         show help
-s, --silent       show minimal output
-v, --verbose      show verbose output

確かに, --batch オプションあるようですな. --batch モードをもう少し深堀りすると, 以下のドキュメントにたどり着いた.

github.com

Certain plugins require more privileges than those provided by default in core Elasticsearch. These plugins will list the required privileges and ask the user for confirmation before continuing with installation.

特定のプラグインでは特権が必要になる為, インストールのタイミングでインタラクティブに特権の付与を設定したりする必要があるけど, --batch オプションを付与すると, プラグインが確認応答をスキップして要求する特権を全て付与してプラグインをインストールするらしい. ふむふむ. 実際に --batch オプションを付与してインストールした際には以下のように出力された.

... 略 ...
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@     WARNING: plugin requires additional permissions     @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
* java.lang.RuntimePermission accessDeclaredMembers
* java.lang.RuntimePermission getClassLoader
* java.lang.reflect.ReflectPermission suppressAccessChecks
* java.net.SocketPermission * connect,resolve
* java.util.PropertyPermission es.allow_insecure_settings read,write
... 略 ...

参考

相変わらず, Elasticsearch の公式掲示板は役に立つ.