nihiko’s blog

新社会人の雑感

AWSソリューションアーキテクトアソシエイト勉強メモ(WIP)

 記録しておかないと忘れてしまいそうな部分のメモ

AWSを始めるにあたって

  • アカウントについて

    • rootアカウントは請求関連情報の変更なども行えるため基本的には使わない
    • 権限制御を加えたIAMアカウントを作成する
  • 請求について

    • 設定金額を上回った場合の通知設定が必要
    • IAMユーザに請求関連権限を与えるため一旦rootユーザでログインしIAMの設定を変更
    • CloudWatchのアラームを使用

リージョンAZエッジロケーションについて

  • リージョン>AZ>エッジロケーション

  • リージョンは物理的に独立したインフラ拠点

  • リージョンについて

    • 一つのシステムは基本的には一つのリージョンで完結させる必要がある

    • ただし隣接リージョン感は広帯域の専用NWでつながれている

      ※物理的なバックアップなどのため

  • AZについて

    • 同リージョンのAZは低レイテンシーのリンクで接続されている
    • 一つのAZは一つのDCのイメージ?
    • 【推奨】1リージョンに2AZで冗長化
      • ただしAZ間でデータのやり取りができないサービスもある
    • リージョン地域の法律に従わなければならない
      • 中国リージョンはデータ提示や持ち出し禁止など
    • 基本は別リージョンにbkup作る
  • エッジロケーションについて

    • キャッシュデータを扱う場合などに使用
      • CloudFrontやAWS CDNなどに使用

IAMについて

  • ユーザ責任範囲
    • サービスを駆使して任意で設定可能なもの
  • IAMとは
    • 利用者認証
    • アクセスポリシー(権限)
    • 個人orグループorサービスごとに設定
      • 少人数→IAMユーザ
      • 多人数or今後人数が増える→IAMグループ
  • 一時的な利用にはSTSを使用し最小限の利用許可を与える

  • 作成方法

    • ポリシー例
      • 名前:Application
      • 説明:説明
      • 概要:
        • Auto Scaling
        • EC2
        • S3
        • ELB
    • グループへのポリシーのアタッチ
      • 複数可能

VagrantでDocker ComposeまでインストールされたCentOS 7環境を構築する

背景

Docker ComposeまでインストールされたCentOS 7環境を構築したい。簡単に。

方法

Vagrantfileを作成しvagrant upで一撃で起動。

Vagrantfile作成

任意のディレクトリで以下を実行。

$ vagrant init

Vagrantfile編集

先ほど作成したvagrantfileに設定を記述していく。

Vagrant.configure("2") do |config|
~~~
  設定はここに書く
~~~
end
OSを設定

今回はCentOS7。

config.vm.box = "centos/7"

boxとは 仮想マシンを起動する際に必要になるOSのテンプレートみたいなもの
EC2でいうところのAMIみたいな?
このVagrant Cloudなるサイトからとってこれるっぽい。
Vagrant box centos/7 - Vagrant Cloud

Docker & Docker Composeのインストール
 config.vm.provision "shell", inline: <<-SHELL
     sudo yum remove docker docker-common docker-selinux docker-engine
     sudo yum install -y yum-utils device-mapper-persistent-data lvm2
     sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
     sudo yum makecache fast
     sudo yum install -y docker-ce
     sudo systemctl start docker
     curl -L https://github.com/docker/compose/releases/download/1.12.0/docker-compose-`uname -s`-`uname -m` > docker-compose
     sudo mv docker-compose /usr/local/bin/docker-compose
     sudo chmod +x /usr/local/bin/docker-compose
     SHELL

起動

Vagrantfileが配置してあるディレクトリでvagrant upvmを起動。

SSH接続し確認

Tera TermでSSH接続する場合は

ターミナルででユーザ名やポート、認証キーの場所を確認して接続。

C:\vm\centos7>vagrant ssh-config
Host default
  HostName 127.0.0.1
  User vagrant
  Port 2222
  UserKnownHostsFile /dev/null
  StrictHostKeyChecking no
  PasswordAuthentication no
  IdentityFile C:/vm/centos7/.vagrant/machines/default/virtualbox/private_key
  IdentitiesOnly yes
  LogLevel FATAL

f:id:nihiko:20190224134515p:plain

f:id:nihiko:20190224134623p:plain

Docker Composeがインストールされているか確認。

[vagrant@localhost ~]$ docker-compose --version
docker-compose version 1.12.0, build b31ff33

これでvagrant upコマンド一つで

Docker ComposeがインストールされたCentOS 7環境が構築できるようになりました。

総括

今回作成したVagrantfileはこちらに配置。

github.com

本当は今回やりたかったが

次はCloudMapperを上記コマンド一つで実行できるようなdocker-compose.ymlを書きたい。

gvimのステータスライン設定

概要

ステータスラインの設定を少しだけ行った。
1.見た目の良くした
2.gitブランチ名が表示されるようにした

1.見た目を良くした

方法

lightlineというVimプラグインを使用。
いくつかステータスラインに関するプラグインはあるが、
とりあえず現時点で最もメジャーそうな上記を使用。

手順

NeoBundleでlightlineをインストール
NeoBundle 'itchyny/lightline.vim'

問題

NeoBundleでインストールしたプラグイン

set runtimepath+=~/.vim/bundle/neobundle.vim/
call neobundle#begin(expand('~/.vim/bundle/'))

上記の設定のようにホームディレクトリに置いていても読み込まれない。
(当たり前か…?)

set runtimepath+=$VIM/.vim/bundle/neobundle.vim
call neobundle#begin(expand('$VIM/plugins'))

vimフォルダのpluginsに配置してあげる。

するとこんな感じで見た目が良くなる。f:id:nihiko:20190223091803p:plain

2.gitブランチ名が表示されるようにした

方法

こちらも現時点で最もメジャーそうな
vim-fugitiveというプラグインを使用。

手順

neobundleでvim-fugitiveをインストール
NeoBundle 'tpope/vim-fugitive'

_vimrcにて以下を記述

let g:lightline = {
      \ 'colorscheme': 'wombat',
      \ 'active': {
      \   'left': [ [ 'mode', 'paste' ],
      \             [ 'gitbranch', 'readonly', 'filename', 'modified' ] ]
      \ },
      \ 'component_function': {
      \   'gitbranch': 'fugitive#head'
      \ },
      \ }

すると表示された。 f:id:nihiko:20190223092228p:plain

総括

ここにステータスライン(lightline)のカスタマイズ方法的なものは一通り書かれているっぽい。
いろいろ行き詰って気分転換したい時などにまた触ってみようと思う。
GitHub - itchyny/lightline.vim: A light and configurable statusline/tabline plugin for Vim

AWSのネットワーク構成図を自動で作成したい

背景

最近お仕事の方でAWSを触る機会が増えてきた。

「ここはEC2上で動作していて、S3でこれがこうなるとLambdaが起動して…」
難しい。構成図がないと全体像をまったく掴めない。

また、自分がAWSで構築を行うときに「今どんな構成になってるんだろう」
というのを逐一簡単に確認できたら便利だな、と。
(先に構成図描いておけばその通りになっているかの確認にもなるし)

ということで、CloudMapperというツールを使ってみた。

CloudMapperとは

CloudMapperとは
AWSの環境を解析して、ネットワーク構成図を自動で作成
・ブラウザで確認
ができるツールである。

環境

EC2(CentOs7)

設定手順

1.ソースのダウンロード

$ git clone git@github.com:duo-labs/cloudmapper.git

2.CentOSPythonの実行環境を作成

CentOs7には標準でPython2.7がインストールされているが、
Python3.xはyumリポジトリでは提供がされていないため別のリポジトリ(IUS Community Project の yum リポジトリ)からインストールしてくる。

$ yum install -y https://centos7.iuscommunity.org/ius-release.rpm
$ yum search python35
$ yum install -y python35u python35u-libs python35u-devel python35u-pip
$ python -V
Python 3.6.5
$ sudo pip3.5 install pipenv
$ pipenv install --skip-lock
$ pipenv shell

3.IAMユーザ作成

CloudMapperを利用するにあたり、AWS内の情報を収集するためのIAMユーザを作成する必要がある。
※ここで作成したIAMのシークレットアクセスキーを紛失しないように!

$ aws iam create-user --user-name cloudmapper
$ aws iam put-user-policy --user-name cloudmapper --policy-name cloudmapper_readonly_policy --policy-document '{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Resource": "*",
      "Action": [
        "ec2:DescribeRegions",
        "ec2:DescribeAvailabilityZones",
        "ec2:DescribeVpcs",
        "ec2:DescribeSubnets",
        "ec2:DescribeSecurityGroups",
        "ec2:DescribeVpcPeeringConnections",
        "ec2:DescribeInstances",
        "ec2:DescribeNetworkInterfaces",
        "rds:DescribeDBInstances",
        "elasticloadbalancing:DescribeLoadBalancers"
      ]
    }
  ]
}
$ aws iam create-access-key --user-name cloudmapper

4.構成図を作成するAWS環境の設定

インストール先のcloudmapper配下にデモ用の設定ファイルがあるのでconfig.jsonという名前でコピー。
このファイルにAWS ID、アカウント名を記入。

$ cp -p config.json.demo config.json
$ vi config.json
{  "accounts":
    [
        { "id": "xxxxxxxxxxxx", ← AWS ID(12桁の数値)を入力
          "name": "cloudmapper1", ← アカウント名を明記(任意の名前)
          "default": true
        }
    ],
    "cidrs":
    {}
}

5.AWSの構成情報を取得

$ python cloudmapper.py collect --account cloudmapper1

ここでエラー
ModuleNotFoundError: No module named 'pyjq'
ここから色々モジュールが足りないと言われ続けるので、
その都度pipでインストール。

6.取得したAWSの構成情報を解析

python cloudmapper.py prepare --account cloudmapper1

7.Webサービスを起動

python cloudmapper.py webserver --public

8.アクセスし確認

http://【EC2のパブリックIP】:8000でアクセスし確認

f:id:nihiko:20190120162729p:plain:w470
見れた!

これはこれからも使いそう。

ちなみに

なんかdockerでのインストールもできるらしい…?
先に見ればよかったかも…。
qiita.com

MacにPythonの開発環境を構築する

環境

macOS Mojave(10.14.2)

1.pyenvのインストール

pyenvとは

Linuxにおいて、Pythonの実行環境を管理するツール

$ brew install pyenv

homeblewでpyenvをインストールしようとしたところ、問題①②が出現。

問題①

下記エラーが発生。

$ brew install pyenv  
Error: An exception occurred within a child process:
CompilerSelectionError: autoconf cannot be built with any available compilers.
Install GNU's GCC
brew install gcc

brew install gccをしても同様のエラーが生じる。

原因

gccがhomebrewに認識されてないので、gccのinstallに必要なパッケージもコンパイルできない。

解決策

homebrewにgccが認識されていないため,~/.linuxbrew/binに既にインストールされているgccへのsymbolic linkを作って認識されるようにする。

そこでまた問題

$ gcc -dumpversion
xcrun: error: invalid active developer path (/Library/Developer/CommandLineTools), missing xcrun at: /Library/Developer/CommandLineTools/usr/bin/xcrun

原因

MacのOSをアップデートしたことによりコマンドラインツールが抜けてしまっている。

解決策

Xcodeコマンドラインツールをインストール。

xcode-select --install

gccのバージョンを調べる。

gcc -dumpversion
4.2.1

インストールされているgccへのシンボリックリンクを貼る

n -s `which gcc` `brew --prefix`/bin/gcc-4.2.1

問題②

下記エラーが発生。

Error: No such file or directory @ dir_chdir - /usr/local/Cellar
Warning: Bottle installation failed: building from source.

解決策

brew installに失敗した時はとりあえずbrew doctorで原因を探るらしい。

$ brew doctor
Please note that these warnings are just used to help the Homebrew maintainers
with debugging if you file an issue. If everything you use Homebrew for is
working fine: please don't worry or file an issue; just ignore this. Thanks!

Warning: The following directories do not exist:
/usr/local/include
/usr/local/lib
/usr/local/opt
/usr/local/sbin
/usr/local/Cellar

You should create these directories and change their ownership to your account.
  sudo mkdir -p /usr/local/include /usr/local/lib /usr/local/opt /usr/local/sbin /usr/local/Cellar
  sudo chown -R $(whoami) /usr/local/include /usr/local/lib /usr/local/opt /usr/local/sbin /usr/local/Cellar

ここに書いてあるコマンドを実行すれば

$ pyenv -v
pyenv 1.2.8

行けた。

2. pyenvの設定

.bash.profileに設定を追加。

echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.bash_profile
echo 'export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.bash_profile
echo 'eval "$(pyenv init -)"' >> ~/.bash_profile
source ~/.bash_profile

3.pythonのインストール

インストール可能なバージョンを確認。

$ pyenv install -list
Available versions:
  2.1.3
  2.2.3

3.6.5をインストール。しようとしたが、

$ pyenv install 3.6.5
zipimport.ZipImportError: can't decompress data; zlib not available

エラーが発生。

原因

xcode-selectの最新バージョンにMojave用のmacOS SDK headerがデフォルトで入っていない。

解決策
sudo installer -pkg /Library/Developer/CommandLineTools/Packages/macOS_SDK_headers_for_macOS_10.14.pkg -target /

すると

$ python --version
Python 3.6.5

いけた。

参考

https://wa3.i-3-i.info/word13504.html

qiita.com

qiita.com

qiita.com

Docker for Mac をインストールしknowledgeを使用できるようにした

下記サイトよりDocker for Macをダウンロードしインストール。

Docker Hub

docker run -p 8080:8080 --name knowledge-container koda/docker-knowledge

docker run -d -p 80:8080 -v /home/tool/knowledge:/root/.knowledge knowledge:1.1.0

Docker for Mac でDockerHubからPullしてきたKnowledgeイメージをコンテナとして起動

docker run -d -p 9090:8080 -v /home/tool/knowledge:/root/.knowledge --name knowledge koda/docker-knowledge → 絶対パスで書けや

docker run -d -p 9090:8080 -v /users/nishiko/tool/knowledge:/root/.knowledge --name knowledge koda/docker-knowledge → /usersじゃなくて/Users

正解:docker run -d -p 9090:8080 -v /Users/nishiko/tool/knowledge:/root/.knowledge --name knowledge koda/docker-knowledge

仮想マシンからインターネットに接続できない

仮想マシン上のCentOsyumMariaDBをインストールしようとしたところ、 ネットワーク設定ができておらず、エラーが発生した。

原因はホストオンリーネットワークを構築できていなかったことにあるようだ。

ホストオンリーネットワークとは 仮想マシンとホストマシンとの間に構築する専用のネットワークのことである。 これを設定しないと、仮想マシン上から外部のネットワークにアクセスすることができない。

qiita.com こちらの記事を参考にさせていただいた。