helloworlds

not a noun, it's a verb

【LXD】爆速でLXD環境を構築する!!

LXDとは?

コンテナと言えばDockerが有名ですが、LXDというシステムコンテナマネージャーもあります。

イメージとしては、仮想マシンと認識していれば大丈夫でしょう。 LXDを使用すれば、多数のKinuxディストリビューションを使用し、容易に開発環境が構築できます。

無料で利用できることや、起動が高速なこと、Dockerを利用する際の1コンテナ1プロセスといったベストプラクティスはないのが特徴でしょうか。

ググってみると、"LXC"という単語もヒットしますが、これはLXDの機能強化前のものです。 なので、LXDでできることはLXCでも実現可能です。

使ってみる

ここでは、とりあえず早くローカル環境にLXDを構築し、試しにCentOSのコンテナをたててみることを目的としています。

(※ VirtualBoxなどのインストール方法は割愛していきます。)

わたしの環境は、macOSです。

用意する

VirtualBox

まず、VirtualBoxをインストールします。

Downloads – Oracle VM VirtualBox

vagrant

vagrantもインストールしておきます。

Download - Vagrant by HashiCorp

Boxの追加

UbuntuのBoxをインストールします。

ubuntu - Vagrant Cloud

推奨されているのは、xenial64ですがお好きなメーカーのヴァージョンを選択します。

選択したらURLを控えましょう。控えたら、以下のように修正します。

https://vagrantcloud.com/ubuntu/boxes/<xenial64>/versions/<20170929.0.0>/providers/virtualbox.box
※ "<>"で囲んだ部分が任意のものに変わります。

任意のディレクトリに移動し、以下を実行します。 ボックスの追加には、時間がかかるかもしれません。

$ vagrant box add ubuntu/xenial64 https://vagrantcloud.com/ubuntu/boxes/xenial64/versions/20170929.0.0/providers/virtualbox.box
$ vagrant init ubuntu/xenia164
※ ボックスの名前など、コマンドのオプションで指定可能


# vagrantコマンドで、ubuntuを起動
$ vagrant up

VagrantFIleが作成されていて、エラーが出ていなければ順調です。

LXDのインストール

Ubuntuに入って、lxdをsnapを使用してインストールします。

$ vagrnat ssh


## 以下、Ubuntuでの実行


# 最新にアップデート
$ sudo apt update


# インストール
$ sudo su - 
$ snap install lxd


# vagrantユーザーでもlxcコマンドが使用できるようにする(任意)
$ sudo gpasswd -a vagrant lxd 
$ id                     ## 確認
uid=1000(vagrant) gid=1000(vagrant) groups=1000(vagrant),110(lxd) 

LXDが動くか確認

なにも起動させていないので、空の表だけでればOK。

# コンテナ&イメージ確認
$ lxc list
| NAME | STATE | IPV4 | IPV6 | TYPE | SNAPSHOTS |


$ lxc image list
| ALIAS | FINGERPRINT | PUBLIC | DESCRIPTION | ARCH | SIZE | UPLOAD DATE |

LXDの初期設定

コンテナの起動の前に、設定をしてきます。 ここでは、細かい設定方法は省きます。

ただし、IPv6の設定のみnoを選択し、他はデフォルトを選択していきます。

# vagrantユーザーに戻っても、rootで実行しても大丈夫ですが、
# ここでは、vagrantユーザーで実行

# 途中の設定項目で、UIが変わって紫色の画面に移行しますが、表示されたIPなどをEnterで選択していきます。
$ sudo lxd init


LXD has been successfully configured.   ##  これが出たら完了

CentOSのコンテナをたてる

# リモートから取得できるイメージを確認
$ lxc image alias list images: | grep centos
| centos/6                            | 8b47ce0dd288 |                       |
| centos/6/amd64                      | 8b47ce0dd288 |               |
| centos/6/default                    | 8b47ce0dd288 |                 |
| centos/6/default/amd64              | 8b47ce0dd288 |         |
| centos/6/default/i386               | 4fc4ed167966 |             |
| centos/6/i386                       | 4fc4ed167966 |                   |
| centos/7                            | ef750fe8dd4c |                         |
| centos/7/amd64                      | ef750fe8dd4c |                 |
| centos/7/arm64                      | 2418b61d1c47 |               |
| centos/7/armhf                      | 4112b64d31c2 |                 |
| centos/7/default                    | ef750fe8dd4c |                    |
| centos/7/default/amd64              | ef750fe8dd4c |            |
| centos/7/default/arm64              | 2418b61d1c47 |          |
| centos/7/default/armhf              | 4112b64d31c2 |           |
| centos/7/default/i386               | 22f770b50316 |           |
| centos/7/default/ppc64el            | 91279dabc143 |        |
| centos/7/i386                       | 22f770b50316 |                |
| centos/7/ppc64el                    | 91279dabc143 |             |




# コンテナを起動 (今回はcentos/7を選択してみました)
$ lxc launch images:centos/7 centos7
Creating centos7
Starting centos7


# 確認 (作成されていればOK)
$ lxc list

これで完了です。

まとめ

Dockerとは違うコンテナを触ってみました。

私は業務の開発環境としても使用しています。(※ コスト面にも良いです笑 )

例えばAWSサービスを利用して、最小のインスタンスを建ててVPCにてセキュアなネットワークを構築。

LXDをインストールし、欲しい環境をインストール。

リモートからのアクセスを確立し、みんなで開発!

なんてことも、容易ですしVPCまわりをやったことない人にとっては勉強にもなりますし、みんなに喜んでもらえる環境にもなりそう!しかも、安い!

Ubuntuに依存してしまうということを除けば、扱いも共有も便利です。

作成した環境のイメージをエクスポートしたりすることも可能です。また、ホスト(自身のラップトップ)から、LXDで管理している環境に直でSSHすることも可能です。

LXDはDockerのイメージもありますので、コンテナonコンテナも可能。

Dockerよりは有名ではありませんが、この記事でやった環境を1回整えてしまえば開発も楽ちんですね!!

以上.

【AWS】かなり気になる! PartiQLを触ってみた! (入門)

今回は、2019年8月にAWS公式から発表された、

PartiQL を触ってみようと思います!

個人的にかなり気になるクエリ言語ですので、簡単にチュートリアル的な部分を見ていきます!

それでは、まずは概要からみていきましょう!

※ この記事を書いた当初の情報のみ記載しております。後ほどのアプデなどで変更されている点を考慮し、読んでください。

PartiQLとは??

一言で言うと、

データを効率的に問い合わせ可能にするSQL互換の問い合わせ言語 (引用: 下記ブログより)

らしいですな。

これはもしや.....

そう、会社でよくあるデータ移行や、先人達が勝手に(勝手ではないか!w)導入してきたDBなりファイルサーバー、またはデータをまとめたCSVファイル達を容易に操作できるものなのでは?

クエリエンジンがPartiQLをサポートしていれば、リレーショナルデータベース(トランザクションとアナリティクスのどちらも)、オープンなデータフォーマットの半構造化データや入れ子形式のデータ(Amazon S3データレイクなど)、そしてNoSQLのスキーマレスなデータや行ごとに異なる属性を持つことを許容するドキュメントデータベースなども対象となります。(引用: 下記ブログより)

やっぱり!!!これは期待できそうですね!

以下、公式の発表されたブログになります。(英語)

aws.amazon.com

f:id:o21o21:20190816105725p:plain

(図引用: 上記ブログより)

リリースの経緯

けっこう便利そうなサービス。

どうしてリリースしたのでしょうか?

これも上記ブログより引用ですが、Amazonの社内ではすでに使用されてるとのこと。

すごい。。。

ってことは、やはりEC事業として、部署間でのデータの相互性が問題だったのだろうか?

ブログの"Why we built it"に記載がありました。

Chris Suver率いるAmazonの小売事業は、SQLに似たクエリ言語を追求していた。

既存のSQLの知識を活かすようなものを開発する必要があったと書いてあります。

つまり、AWSはこれまでRDBなどたくさんのDBに関するサービスはリリースしてきたが、より互換性を保つために、

ネストされたデータや半構造化されたデータを処理するのに必要な能力を備えながら、SQLに非常に近いままで使用できるクエリ言語を開発したのでしょう。

PartiQLAWS(Amazon)社内の問題解決のために開発されたツールといってもいいでしょう。

非常に感激してしまいます。さすが世界の頭脳集団があつまっている組織です。

では、発表された特徴を見てみましょう。

特徴

  • SQL compatibility (SQLの互換性)
  • First-class nested data (ネストされたデータに特化)
  • Optional schema and query stability (オプションのスキーマとクエリの安定性)
  • Minimal extensions (最小限の拡張)
  • Format independence (フォーマットの独立)
  • Data store independence (データストアの独立)

なんとなくイメージできますかね?

とりあえず触れてみるのは良さそうです!

さわってみる

とりあえず触ってみよう!ということで、チュートリアル的なものがGithubにて公開されています。

インストールして動かしてみるところまでが、この記事のゴールです。

わたしの環境は、macOSです。 また、JVMがインストールされている環境であることが前提になります。

え!最近mac買ってまだJavaインストールしてないわ!

あ!OracleJDK有償化で手順違うやんけ!なんかめんどくさ!

って方は、以下の記事を参考にしてみてください!!

o21o21.hatenablog.jp

こちらPartQLの公式サイトです。

PartiQL

インストール

こちらより、手動でもwgetでもいいので、ローカルに展開します。

github.com

wgetをインストールしてない場合は、 $ brew install wgetwgetをインストールしましょう。

$ wget https://github.com/partiql/partiql-lang-kotlin/releases/download/v0.1.0-alpha/partiql-cli-0.1.0.tgz
$ tar -zxvf partiql-cli-0.1.0.tgz

$ ll
README  
Tutorial   # pdfおよびhtml形式のチュートリアルが含まれています。サブフォルダーコードには、3種類のファイルが含まれる
bin          # macOSおよびUnixシステム用の起動スクリプトpartiqlおよびWindowsシステム用のpartiql.batが含まれる
lib           # PartiQLの実行に必要なすべてのJavaライブラリ

起動してみる

では、PartiQLを起動してみます。

$ ./bin/partiql
Welcome to the PartiQL REPL!

PartiQL>

こんなかんじで起動できたらOKです!

OK! (0 ms) って出てくるのは、クセでEnterを連打すると出てくるようです。

これは、Enterを2回連打でクエリが実行される仕様なのだそうです。

終了は、ctr + d です。

ちょっと試してみる

チュートリアルにもあるのですが、少しクエリを実行してみます。

  • SELECTしてみる
PartiQL> SELECT * FROM [1,2,3]
   | 
===' 
<<
  {
    '_1': 1
  },
  {
    '_1': 2
  },
  {
    '_1': 3
  }
>>
--- 
OK! (114 ms)
  • ファイルを読み込む( -e )

Tutorialディレクトリにサンプルファイルをあります。

それを読み込んで、環境変数!global_envにロードされているものを参照することが可能です。

$ ./bin/partiql -e Tutorial/code/q1.env

Welcome to the PartiQL REPL!
PartiQL> !global_env
   | 
===' 
{
  'hr': {
    'employees': <<
      {
        'id': 3,
        'name': 'Bob Smith',
        'title': NULL
      },
      {
        'id': 4,
        'name': 'Susan Smith',
        'title': 'Dev Mgr'
      },
      {
        'id': 6,
        'name': 'Jane Smith',
        'title': 'Software Eng 2'
      }
    >>
  }
}
--- 
OK! (12 ms)

少しこのサンプルファイル(q1.env)の内容をみてます。

{ 
    'hr': { 
        'employees': <<
            -- a tuple is denoted by { ... } in the PartiQL data model
            { 'id': 3, 'name': 'Bob Smith',   'title': null }, 
            { 'id': 4, 'name': 'Susan Smith', 'title': 'Dev Mgr' },
            { 'id': 6, 'name': 'Jane Smith',  'title': 'Software Eng 2'}
        >>
    }
} 
  • このようなJSON形式のデータの場合、hr.employeesのようにしてテーブルとして扱いが可
  • --でコメントを記述
  • <<>>は、データが順不同のコレクション(バッグ)。コレクション=配列のようなイメージ(タブル間の順序はなし)
  • PartiQLリテラルは単一引用符で囲まれていますが、JSONリテラルは二重引用符で囲まれる
  • ↑ PartiQL( 'employees': <<..... )とJSON( "employees": [... )

では、上記のサンプルデータを元に参照してみます。

PartiQL> SELECT e.id, 
   | e.name AS employeeName, 
   | e.title AS title
   | FROM hr.employees e
   | WHERE e.title = 'Dev Mgr'
   | 
===' 
<<
  {
    'id': 4,
    'employeeName': 'Susan Smith',
    'title': 'Dev Mgr'
  }
>>
--- 
OK! (6 ms)

すごい!

  • ジョイン
PartiQL> SELECT e.id AS id, 
   | e.name AS employeeName,
   | e.title AS title,
   | p.name AS projectName
   | FROM hr.employeesNest AS e LEFT JOIN e.projects AS p
   | 
===' 
<<
  {
    'id': 3,
    'employeeName': 'Bob Smith',
    'title': NULL,
    'projectName': 'AWS Redshift Spectrum querying'
  },
  {
    'id': 3,
    'employeeName': 'Bob Smith',
    'title': NULL,
    'projectName': 'AWS Redshift security'
  },
  {
    'id': 3,
    'employeeName': 'Bob Smith',
    'title': NULL,
    'projectName': 'AWS Aurora security'
  },
  {
    'id': 4,
    'employeeName': 'Susan Smith',
    'title': 'Dev Mgr'
  },
  {
    'id': 6,
    'employeeName': 'Jane Smith',
    'title': 'Software Eng 2',
    'projectName': 'AWS Redshift security'
  }
>>
--- 
OK! (65 ms)

同様にして、サブクエリもできました!

まとめ

PartiQLのチュートリアルを元にして触ってみました。

データもサンプルデータをもとにして簡単に用意して色々触ることができそうです。

今後利用可能なAWSサービスもどんどんできてくると思うので、覚えておいて損はなさそうです。

学習コストもそんな高くないと思うので、今後の情報もキャッチアップしていくと良さそうです!

以上.

【Java】OpenJDK(無償)をmacOSにインストールする

今回は短い記事(メモ)です。

macOSJava(JVM)をインストールするといった内容になります。

どうして今頃Javaのインストールなのか

今年2019年にはいって、OracleJDKが有償化されました。(個人開発目的は無償)

なので、 macOS java インストール のように検索すると、

OracleJDKのインストール手順はけっこう出てくるのですが、OpenJDK の手順が出てこないので(別に記事自体少なくはないです!)今回メモとして残します!

個人開発(デモ目的)は無償となっていますが、なんかOracleのライセンス適用ログイン画面に遷移したり面倒なので、一気にOpenJDKに移行ということで残します。

OpenJDKをインストール

OpenJDK は無償です!

以下の公式サイトで、任意のヴァージョンを選択します。 ここでは12を選択しています。

http://jdk.java.net/12/

展開

$ tar xvzf <ダウンロードしたtarファイル>

ファイルの移動

$ sudo mv <展開したファイル> /Library/Java/JavaVirtualMachines/

環境変数の設定

$ export JAVA_HOME=`/usr/libexec/java_home -v <選択したヴァージョン 例: 12>`

確認

$ java -version

openjdk version "12.0.2" 2019-07-16
OpenJDK Runtime Environment (build 12.0.2+10)
OpenJDK 64-Bit Server VM (build 12.0.2+10, mixed mode, sharing)

このようにヴァージョンの確認で、インストールしたヴァージョンがでてくれば完了です。

以上.

【ネットワーク】VPNについて簡単におさえる!!

今回はネットワーク系の記事になります。

主に VPN についてです。

IT業界にいなくとも、会社で1回は聞いたことがあったり、なにかは知らないけど利用はしている!なんて方は多いのではないでしょうか。

社外から社内へのネットワークにアクセスする際に利用している手段かもしれませんね。

合わせて、セキュアな通信を行うための手段についても簡単に書いていければと思います! (具体的な導入は除く)

VPNとは

VPN とは、「 Virtual Private Network 」を略したものです。

だいたいイメージはつくのではないでしょうか?

なんかプライベートとあるので、セキュリティ高めの通信方式かなんか?みたいな。

単純に言うと(wikipedia引用)、

インターネットに跨って、プライベートネットワークを拡張する技術、およびそのネットワークである。

f:id:o21o21:20190726120841p:plain

わたしはここで疑問に思ったことがあります。

「インターネットを経由するってことは、けっこう危ないんじゃね?」

単純のVPNときくとセキュリティ的に高めの印象を持ちますが、結局インターネットを経由するのであれば、怖い....

そこで、VPNには主に2種類の方法があるようです。

  • インターネットVPN
  • IP-VPN

インターネットVPNは、インターネット等のネットワークを利用したVPNのことです。

IP-VPNは、通信事業者などが提供している閉じられた(クローズド)ネットワークを介したVPNのことです。

これで少し疑問が解消されました。IP-VPNは第三者(拠点間以外)が提供している閉域網を利用して、よりセキュアな通信を可能にできそうです。

では、インターネットVPNの方はどんな接続方法があるのでしょうか?みていきます。

インターネットVPN

インターネットVPNには、2つの接続の仕方があるようです。

  • サイト間VPN
  • リモートアクセスVPN

サイト間VPNは、VPNを実装したルータ同士を接続する方法。

リモートアクセスVPNは、ラップトップやスマホなどの機器にインストールVPNにクライアントソフトを利用し拠点のLANに接続する方法。

なんとなくイメージできてきました。

例えば、本社から支社間の相互接続が必要な場合など、クライアントソフトウェアをインストールしないでネットワーク間をVPNゲートウェイを経由して接続するのが、サイト間VPN

VPNゲートウェイの役割として、送信トラフィックカプセル化する。また、暗号化も担当している。

そして、インターネットに構築してある(構築する必要がある)トンネルと呼ばれる仮想回路なるものを通過し、送信先VPNゲートウェイに送られる。

受け取り手であるVPNゲートウェイは、非カプセル化を行うことで、データが受け取れることになる。

では、リモートアクセスVPNの方はどうなるかというと、ユーザーはクライアントソフトのインストールが必要となる。

例えば、営業が社外からインターネット経由で社内のLANに安全にアクセスしたいときなどが考えられるでしょうか。近年では在宅勤務(リモートワーク)ではこちらの手段を使用している方が多いのではないかと思います。

このクライアントソフトは、トラフィックを送信する際、カプセル化/暗号化を行う。その後、送信先ネットワークの末端(エッジ)にあるVPNゲートウェイに送られることになる。

その先はサイト間VPNと同様に非カプセル化されターゲットに展開される。

ここで新たな用語がいくつか出てきましたが、トンネル(トンネリング)について、少し詳しくみていきます。

トンネル(のプロトコル)

トンネルは道路のトンネルみたいなものを想像しても良いかもしれません。

が、道路のトンネルと違うのは、ただ単に車を通過させるためでなく他に役割があるという点です。

※ ここではトンネルの構築方法は説明しません。

インターネット上にこのトンネルを構築する = 仮想的な経路を作成する

この経路作成するための素材として、プロトコルがあります。

トンネリングを行えるプロトコルには、PPTP,L2F,L2TP,IPsec,GREなどがあります。

ですが、この中で暗号化が可能なのがIPsecのみです。なので、IPsecでないプロトコルを使用した場合はIPsecを組み合わせて暗号化を実現する必要があるようです。

ここでよくググって出てくるのは(IPsecと対比して)、SSL-VPNです。

IPsecSSL-VPNどちらが良いの?という話があるが、ここでは以下の説明にとどめておく。

SSL-VPNは、OSI7階層モデル(○○層とかのやつ)のセッション層で実装される技術であるということ。

また、IPsecは、ネットワーク層で実装される技術。

この階層の相違は開発/運用しているアプリに影響を与えるということです。

つまり、HTTPやSMTP,FTPなどのアプリを変更することなくIPSecVPNを使用して利用することが可能であることがわかる。 IPSecネットワーク層で実装されるため、上位のアプリケーションプロトコルに依存しないよということですね。

どういった影響があるとか、そういった説明はここでは割愛させて頂きます。

このトンネルですが、脅威がトンネル内に侵入する可能性もゼロではありません

100%の安全を保証することはインターネット上を経由するため不可能ですが、安全にやり取りする方法があるので、それを駆使するのが無難なようです。暗号化や認証をすることでVPNは安全性を高めることがきます。

さて、ここまできたら大体VPNのイメージがわかったのではないでしょうか。

技術者としての具体的なVPNの構築方法は、クライアントソフトやAWSなどのクラウドサービスによって異なります。

そのネットワークや実現したいことに合わせて、随時使いやすいツール導入したり、アーキテクチャを考える必要がありそうですね。

この記事では詳しい導入手順は記述しませんが、OpenVPNというソフトの紹介をAWSサービスを関連付けて簡単にみていきたいと思います。

OpenVPN

OpenVPNは、MacOS, WindowsLinuxで利用できるオープンソースVPNソフトです。

GPLというライセンス形態で配布されていて、もちろん無料です。

GPL(General Public License)とは、オープンソース フリーソフトウェア用のライセンスの1つで、著作権表示を保持しなければならないといことと、このソフトを使用して損害があったとしても自己責任ですよ。それさえ守れば複製・改変・頒布はOKというライセンスルールです。

以下、公式ドキュメントになります。詳しいことはここを覗いてみましょう。

OpenVPNとは | OpenVPN.JP

このソフトとAWSサービスをセットでアーキテクチャを構築している組織も多いでしょう。

構築したいアーキテクチャは、それぞれ異なると思いますので、"ほんとに"簡単な流れのみ記述していきます。w

  1. OpenVPNをEC2などにインストール
  2. 認証局など、証明書の発行/設定を行う (参考: https://qiita.com/ohechi/items/7ed8a61194eb1dcca283 )
  3. OpenVPN自動起動を設定
  4. AWS-> VPC -> ルートテーブル/Security Groupなど設定
  5. クライアント側のOpenVPNを利用するための設定(OpenVPN GUIなどダウンロード)

ほんとにざっくりですが、主にポチポチで済む作業がほとんどですね。

また、macの場合はクライアントアプリとしてTunnelblickが良いと思います。

tunnelblick.net

.crt , .key , /usr/share/doc/openvpn-2.4.3/sample/sample-config-files/client.conf -> xxxxx.ovpn

このようなファイルは大切に、導入後もきちんと管理できるディレクトリに置いておきましょう。(クライアント側)

まとめ

簡単ですが、VPNについて書きました。

利用はしたことはあるけど、構築をする機会やあんまり勉強してないや!ってかんじでも

最低限ここまで抑えることができたら、あとは構築する組織のネットワークとの相性や使い方との相談です。笑

プログラミング言語のライブラリなどと比べて、そこまでたくさんのツールが用意されているわけではなさそうなので、1度覚えたらあとは応用です!

また、今回はサイト間VPNについては詳しく記述していません。

専用のルーターや回線をひくことになるので、情シスさんやインフラ屋さんは、通信事業者と相談することになるでしょう。

AWSを利用している組織は、

AWS Direct Connectなんかも関連して、概要だけでも知っておくのはありかもしれません。

aws.amazon.com

以上.

参考

【AWS】boto3で扱うprofile

今回はAWSPythonを使用してなにかコードを記述するときに使用するprofileの扱い方についてです。

Pythonだとboto3をしようする場面がおおいと思います。

また、AWSサービスを利用するにあたって、1人(またはチームや部署、プロジェクト)でいくつかのcredential情報をしようするかと思います。

また会社によっては、1つのプロジェクト(システム)に複数人のcredential情報を使用して、自由にw開発しちゃってる場合も...

まあそれは組織や考え方で様々ですが、boto3において柔軟にcredential情報を扱う方法をメモしていきます。

boto3とは?

aws.amazon.com

簡単にPythonAWSサービスを容易に統合できるライブラリですね。

インストールも簡単です。

$ pip install boto3
$ pip3 install boto3

ここで抑えておきたいのは、低レベル / 高レベル インターフェイスということば。

AWSによると以下の認識でいいのかなと思います。

  • 低レベル: 実現したいことのために、細かい事を指定する (client)
  • 高レベル: 実現したい事だけ指定する (resource)

以下の公式ドキュメントでは、AWSサービスごとに使用できるクラスが記載されています。

Available Services — Boto 3 Docs 1.9.170 documentation

本題に入ります。

boto3を使用する際、AWSのクレデンシャル情報を如何にして取得するか確認してみます。

Credentials (クレデンシャル)の設定

わたしはいつもローカルで開発する際、.awsディレクトリにconfigとcredentialsというファイルを置いています。

そして、そこに記述しているprofile情報をpythonに渡していたりしますが、それがベストプラクティスなのか確認したいと思います。

credential情報の取得して、他には環境変数に設定しているのを取得したり、そのままコードのべた書きしたり(よろしくないですね笑)できますかね。

AWS的にはなにを推奨しているのか、

以下のドキュメントに記載してありました。

Credentials — Boto 3 Docs 1.9.170 documentation

ちょっとまとめてみると、

boto3がcredential情報を取得しにいく優先順位として以下になるようです。

  1. Passing credentials as parameters in the boto.client() method
  2. Passing credentials as parameters when creating a Session object
  3. Environment variables
  4. Shared credential file (~/.aws/credentials)
  5. AWS config file (~/.aws/config)
  6. Assume Role provider
  7. Boto2 config file (/etc/boto.cfg and ~/.boto)
  8. Instance metadata service on an Amazon EC2 instance that has an IAM role configured.

訳:

  1. boto.client()メソッドで、パラメータが設定される
  2. Sessionオブジェクトを生成して、パラメータが設定される
  3. 環境変数の設定
  4. ~/.aws/credentials での設定
  5. ~/.aws/config での設定
  6. AssumeRoleを使用 (AWS STS)
  7. Boto2の /etc/boto.cfg and ~/.boto の設定
  8. IAMロールが設定されているAmazon EC2インスタンスインスタンスメタデータサービス

ちょっとAWS STSはなるほど!ってかんじでしたが、大体予想通りの展開ですね。

ここからはチームや個人の方針に委ねられるかんじもしますが、

基本的には4や5が良さそうなかんじでしょうか。

2と4でもいけますかね。

仮にコンソール上で実行するようなものであれば、ファイル実行者に.aws/配下に設定されているprofile情報をオプションで入力させ、権限さえあれば実行できそうです。

環境変数でも場合によっては、悪くなさそう。

AWSコンソールのLambdaのメニューからなら環境変数を簡単に入力できますね。(もちろんそれを良しとして、きちんとLambdaへの権限が設定されていたりすればですが)

まとめ

実際きちんと公式を読むと推奨されている事柄が把握できました。

どんなツールでも向き不向きがあるように、できるだけ開発者の意図に沿った使い方ができれば後の運用や保守も少しは楽になりそうですね。

意外と見落としがちな点かもしれませんが、チームや組織、プロジェクトの方針を最初にバチッと決めておくと、

メンバーがハッピー(楽)に開発できそうです!

参考

【インフラ】motdをカスタマイズ!!

少し投稿が止まってしまいました...

今回は小ネタ的な内容になります!

インスタンス(サーバー)にSSH接続した時に出る、格好いい文字!

こんなの↓

f:id:o21o21:20190524113903p:plain

ローカル環境構築してるときや、

開発において環境ごとになにか作業する時に、目立つmotd を設定していたほうがいいですよね! (まあ小ネタ的なかんじなので、しっかり接続方法を管理しておけばいいというのはおいておいて...)

なので、motd (Message Of The Day) の変更方法をメモがてら記事にしました。

※ OSによって若干の変更方法が違い場合もあるかと思いますが、大まかな手順をわかって頂けたらと思います!

今回のわたしのテスト環境としては、centOSのversion7です。

EPEL設定

$ yum install epel-release
$ yum update

次の手順でfigletというコマンドをインストールするのですが、centOSではデフォルトで

EPELリポジトリが設定されていないようなので、上記のコマンドを実行します。

figletをインストール

$ yum -y install figlet

確認してみる。

$ figlet Hello

 _   _      _ _       
| | | | ___| | | ___  
| |_| |/ _ \ | |/ _ \ 
|  _  |  __/ | | (_) |
|_| |_|\___|_|_|\___/ 
                      

おお、もうできました笑

あとは、適当に用途にあったメッセージをうまーく出力させるだけです。

出力させたら、motdファイルを変更します。

$ vim /etc/motd

# 確認してみる
$cat /etc/motd

これで文字が崩れたりしてなければ、次回以降このOSに接続した際に表示されるはずです。

色をつける

上記では、figletコマンド でやりましたが、こちらのサイトに行って、

そのままFontやら変えてコピペしても大丈夫です笑

ただ、Fontによってうまくいかない場合もありましたので、少し苦戦する場合もありそうです。

あと、日本語にも注意してくだいね!

まとめ

けっこう気になってる方も多いmotdについてでした。

まず私はこれを、「メッセージ オプ ザ デイ」というこも知りませんでした笑

また、他のファイルと合わせて、なにかOSの状態を表示させる方法なんていうのも思いつきますね!

(まあ、ただ接続時の時だから状態は、普通にコマンドで確認ですかねw)

それについては以下の記事が良さそうでした!

motdの設定をしてみた | bacchi.me

今回はちょっと薄い内容でしたが、、

また近いうちに更新できたらと思います、

以上.

【Grafana】Grafanaとは?簡単に調べてみた

今回はGrafanaについて記事を書きました。

まだ、私自身初心者ですので入門編という内容になります。

(どんなツールなの?ってかんじなので、内容は薄めです。)

f:id:o21o21:20190215112536p:plain

こちら、公式サイトです。

grafana.com

Grafanaとは??

いきなり公式ページより引用します。

Grafana allows you to query, visualize, alert on and understand your metrics no matter where they are stored. Create, explore, and share dashboards with your team and foster a data driven culture.

和訳すると、

Grafanaを使用すると、どこに格納されているかに関係なく、メトリクスのクエリ、視覚化、警告、および理解を行うことができます。ダッシュボードを作成し、調査し、そしてチームと共有し、データ駆動型の文化を育みます。

どうやらKibanaのような視覚化されたダッシュボードがイメージできるかと思います。

メトリクスなのでAWSのCloudwatchとかもイメージできますね。

では、そうしたサービスからの差別化(特徴)はどういったものがあるのでしょうか。

公式で紹介されている特徴を簡単にまとめていきたいと思います。

特徴

主な特徴は以下の6つが挙げられています。

  • Visualize
  • Alert
  • Unify
  • Open
  • Extend
  • Collaborate

簡単に視覚化ができること。ダッシュボードを見てみると、非常に中二病... じゃなくて、キレイな見た目をしています。個人的には、シンプルな見た目をしていると思います。

タブメニューや日付系がまとまっており、ゴチャゴチャしていないのもいいと思います。

もちろん、アラート機能もあってSlackなどのツールに通知を送信することも可能です。

AWSのCloudwatchやZabbixなどのデータソースを統一することができます。

その他プラグインが用意されていて、基本的になんでも実現しそうなツールであることがわかりましたw

どうやらAWSの料金も視覚化できるようです。

オープンソースなので基本無料。また、Grafana Cloudという有料のサービスもあって、現時点(2019.2)、スタンダードで$49/monthで利用可能なようです。

Grafana Cloudの方は、Grafana自体の安定性を保証してくれるようです。

24x7x365って書いてあるので、24時間365日Grafanaの面倒をも見てくれるようです。 用途によっては、かなり安く利用できる方なのではって思ってしましました。

Grafana Cloud: A fast, fully managed metrics platform | Grafana Labs

デモ

以下、公式にあるライブデモです。導入する前に確認してみるといいかもしれません。

play.grafana.org

ドキュメント

docs.grafana.org

ドキュメントに導入方法が載っています。

かなり簡単にインストールできるので1日で体感も可能ですね!

設定

ここでは設定の説明は割愛。

けっこう記事が出てくるのググればたくさん出てくることがわかりました。

公式にはリバースプロキシがある場合の設定なども載っていたので安心ですね!

http://blog.serverworks.co.jp/tech/2016/03/11/play-with-grafana-1/

あとは、チームや個人の意向によって構成が変わってくるので、いろいろ試してみてといったところでしょうか笑

以上.