かべぎわブログ

ブログです

Ansibleのcopyモジュールでワイルドカードを利用して複数ファイルをコピーする

概要

Ansibleのcopyモジュールでワイルドカードを利用して複数のファイルを一気にコピーする方法のご紹介です。

playbook例

with_fileglobでファイルを指定してあげることでワイルドカードを利用して複数ファイルを一気にコピーすることができます。

実行してみる

playbookを実行してみるとこんなかんじ。

$ ansible-playbook copy_wild.yml

PLAY [localhost] ************************************************************************************************************************************************

TASK [Gathering Facts] ******************************************************************************************************************************************
ok: [localhost]

TASK [debug] ****************************************************************************************************************************************************
ok: [localhost] => {
    "msg": "読み込まれたよー"
}

PLAY RECAP ******************************************************************************************************************************************************
localhost                  : ok=2    changed=0    unreachable=0    failed=0 

無事にファイルがコピーできていることがわかります。
コピー元がここで

$ ls -l /home/ec2-user/src/
合計 0
-rw-rw-r-- 1 ec2-user ec2-user 0  7月  5 14:57 dadada.sh
-rw-rw-r-- 1 ec2-user ec2-user 0  7月  5 14:57 sasasa.txt
-rw-rw-r-- 1 ec2-user ec2-user 0  7月  5 14:57 wawawa.txt

コピー先がこれ

$ ssh ec2-user@192.140.1.215 ls -l /home/ec2-user/dest/
合計 0
-rw-rw-r-- 1 ec2-user ec2-user 0  7月  5 15:05 sasasa.txt
-rw-rw-r-- 1 ec2-user ec2-user 0  7月  5 15:05 wawawa.txt

おわりに

ワイルドカードはべんり

Ansible実践ガイド 第2版 (impress top gear)

Ansible実践ガイド 第2版 (impress top gear)

Ansibleのimport_playbook で別のplaybookをそのまま読み込む

概要

Ansibleのimport_playbookを利用してほかのplaybookをまるまるそのまま読み込んで実行してみたいと思います。

playbook例

たとえば以下のようなplaybookがあったとします。

実行してみる

yomikomi.ymlを実行してみます。

$ ansible-playbook yomikomi.yml 

PLAY [localhost] ************************************************************************************************************************************************

TASK [Gathering Facts] ******************************************************************************************************************************************
ok: [localhost]

TASK [debug] ****************************************************************************************************************************************************
ok: [localhost] => {
    "msg": "読み込まれたよー"
}

PLAY RECAP ******************************************************************************************************************************************************
localhost                  : ok=2    changed=0    unreachable=0    failed=0 

yomikomareru.ymlが実行されていることがわかります。

おわりに

playbookをまとめるのに便利そう。

インフラCI実践ガイド Ansible/GitLabを使ったインフラ改善サイクルの実現

インフラCI実践ガイド Ansible/GitLabを使ったインフラ改善サイクルの実現

Docker Hubからイメージをpullでダウンロードする

概要

DockerHubというDocker公式が提供しているリポジトリサービスのWebサイトからDockerイメージをローカルにpullでダウンロードしてきたいと思います。

DockerHubにアクセスする

Docker Hubは以下からアクセスできます。

https://hub.docker.com/

今回はdebian公式のイメージをダウンロードしてみたいと思います。

https://hub.docker.com/_/debian/

イメージをpullでダウンロード

コマンド一撃です。

$ sudo docker pull debian

Using default tag: latest
latest: Pulling from library/debian
0bd44ff9c2cf: Pull complete 
Digest: sha256:6ee341d1cf3da8e6ea059f8bc3af9940613c4287205cd71d7c6f9e1718fdcb9b
Status: Downloaded newer image for debian:latest

なにもオプションを付けない場合はlatestのDockerイメージがダウンロードされます。
コロン区切りでタグを指定するとそれいがいのイメージをダウンロードできます。例えばdebian:stretchdebian:7などを指定してあげるとそのバージョンのイメージを入手することができます。

イメージがダウンロードされたか確認する

無事ダウンロードできていました!

$ sudo docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
debian              latest              9a5d7185d3a6        6 days ago          101MB

おわりに

Dockerはいいぞ

Dockerによるアプリケーション開発環境構築ガイド

Dockerによるアプリケーション開発環境構築ガイド

AmazonLinux2にDockerをインストールしてhelloworldしてみる

概要

Dockerの勉強をかねてAmazonLinux2にDockerをインストールしてhelloworld的なことをしてみたいと思います。

Dockerのインストール

ふつうにyum installするだけです。

$ sudo yum install docker

インストールできました!

$ docker --version
Docker version 18.03.1-ce, build 3dfb8343b139d6342acfd9975d7f1068b5b1c3d3

サービスも起動しておきます。

$ sudo systemctl start docker

Dockerでhelloworldしてみる

今回はCentOSの最新のDockerイメージでhelloworldを表示させてみます。
コマンドは以下のようなかんじ。

$ sudo docker run centos:latest echo 'hello world'

Unable to find image 'centos:latest' locally
latest: Pulling from library/centos
7dc0dca2b151: Pull complete 
Digest: sha256:b67d21dfe609ddacf404589e04631d90a342921e81c40aeaf3391f6717fa5322
Status: Downloaded newer image for centos:latest
hello world

無事にhelloworldできました。

ちょっとした解説

docker run centos:latestでCentOSの最新(latest)のDockerイメージでDockerコンテナの起動を行っています。
docker runではDockerイメージがローカル環境に存在するかどうか最初に確認し、存在しなければDockerリポジトリからイメージをダウンロードして起動します。

もう一度同じコマンドを実行すると、ローカルにダウンロード済みのDockerイメージが利用されます。

$ sudo docker run centos:latest echo 'hello world'
hello world

おわりに

べつにAmazonLinux2である必要性はひとつもない

コンテナ・ベース・オーケストレーション Docker/Kubernetesで作るクラウド時代のシステム基盤

コンテナ・ベース・オーケストレーション Docker/Kubernetesで作るクラウド時代のシステム基盤

  • 作者: 橋本直哉,須江信洋,前佛雅人,境川章一郎,佐藤聖規,山田修司,青山尚暉,市川豊,平岡大祐,福田潔,矢野哲朗
  • 出版社/メーカー: 翔泳社
  • 発売日: 2018/03/15
  • メディア: 単行本(ソフトカバー)
  • この商品を含むブログを見る

git add もろもろのオプションの比較

git addでなんかいろいろなオプションと言うか指定方法があってそれらがなんか微妙に動きがちがうのでまとめてみる。

git add -A

新規作成/変更/削除されたファイルのすべてをaddしてくれる。
git add --allでもよい。

git add .

新規作成/変更/削除されたファイルのすべてをaddしてくれる。
git ver1.xの時代は削除されたものは含まれなかったらしい。ver2.xではgit add -Aと同じ動きになる。

git add --ignore-removal

新規作成/変更されたファイルをaddしてくれる。
rmコマンドなどで削除されたファイルは無視される。

git add -u

変更/削除されたファイルのみをaddする。
一つ前のステージと現在のステージを比較して変更があった部分のみをaddするイメージ。
新規作成されたファイルは無視される。

まとめ

コマンド 新規 変更 削除
git add -A
git add .
git add --ignore-removal
git add -u

わかばちゃんと学ぶ Git使い方入門〈GitHub、Bitbucket、SourceTree〉

わかばちゃんと学ぶ Git使い方入門〈GitHub、Bitbucket、SourceTree〉

いらないものを削除したあとは git add -Aを利用する

概要

gitのローカルリポジトリでいらないファイル類を削除したあとにgit add *してcommitしてpushしようとしたら以下のようなエラーがでました。

warning: You ran 'git add' with neither '-A (--all)' or '--ignore-removal',
whose behaviour will change in Git 2.0 with respect to paths you removed.
Paths like 'hosts/wrap-ansible-playbook' that are
removed from your working tree are ignored with this version of Git.

* 'git add --ignore-removal <pathspec>', which is the current default,
 ignores paths you removed from your working tree.

* 'git add --all <pathspec>' will let you also record the removals.

Run 'git status' to check the paths you removed from your working tree.

解決方法

git add -Aを実行するとよい。

git add -Aでは新規/編集/削除したファイルすべての情報をリポジトリに反映してくれます。

おわりに

エラーメッセージを和訳するとこのブログよりくわしい情報が手に入るよ。

わかばちゃんと学ぶ Git使い方入門〈GitHub、Bitbucket、SourceTree〉

わかばちゃんと学ぶ Git使い方入門〈GitHub、Bitbucket、SourceTree〉

mktempをつかってシェルスクリプトでユニークなtempファイルをつくる

概要

シェルスクリプトでtempファイルを作成するときに以下のようにすることが多いかと思います。

echo 'wawawa' > ./hoge.txt

ただこれだとカレントディレクトリにすでにhoge.txtが存在した場合に上書きしてしまって、人の大事なtempファイルを消してしまったりということが発生してしまいます。

なので今回はmktempコマンドを利用してユニークな一時ファイルを作成しようと思います。

コマンド例

ただ実行するだけ

単純にmktempコマンドを実行すると以下のようにユニークな空ファイルを作成することができます。

デフォルトで/tmpに作成されるのでサーバの再起動時に削除されます。

$ mktemp
/tmp/tmp.k33WbSu6vg

$ ls -l /tmp/tmp.k33WbSu6vg
-rw------- 1 ec2-user ec2-user 0  6月 28 14:00 /tmp/tmp.k33WbSu6vg

シェルスクリプトに組み込む

こんなかんじのシェルスクリプトを用意するとする。

#!/bin/bash
temp_name=$(mktemp)
echo ${temp_name}

trap 'rm ${temp_name}' 0

実行するとこんなかんじ

$ ./temp_trap.sh 
/tmp/tmp.Y2VVg7HdUA

シェルスクリプト実行後はtempファイルが削除されていることがわかる。

$ ls -l /tmp/tmp.Y2VVg7HdUA
ls: /tmp/tmp.Y2VVg7HdUA にアクセスできません: No such file or directory

おわりに

人の大事なtempファイルは消してはいけない。

[試して理解]Linuxのしくみ ~実験と図解で学ぶOSとハードウェアの基礎知識

[試して理解]Linuxのしくみ ~実験と図解で学ぶOSとハードウェアの基礎知識

AWSCLIの出力にjoinで文字列をくっつけて出力する

概要

AWSCLIの出力結果にjoin()をつかって任意の文字列をくっつけて出力してみたいと思います。

実際にやってみる

インスタンスIDを出力してみると通常はこんな感じですが

$ aws ec2 describe-instances --query 'Reservations[].Instances[].InstanceId' --output text

i-070c13018a4405fca i-0fbf66c8fdc22b7a8 i-0a5516da9898bf83a

こんなかんじで配列形式でバッククォートでくっつけたい文字列を書いてあげると一緒に出力することができます。

$ aws ec2 describe-instances --query 'Reservations[].Instances[].[`インスタンスIDは`,InstanceId,`です`]' --output text

インスタンスIDは i-070c13018a4405fca です
インスタンスIDは i-0fbf66c8fdc22b7a8 です
インスタンスIDは i-0a5516da9898bf83a です

これにjoinをつけてあげるとこんな感じになります。

$ aws ec2 describe-instances --query 'Reservations[].Instances[].join(``,[`インスタンスIDは`,InstanceId,`です`])' --output text

インスタンスIDはi-070c13018a4405fcaです    インスタンスIDはi-0fbf66c8fdc22b7a8です    インスタンスIDはi-0a5516da9898bf83aです

joinありの場合ではインスタンスIDは です も含めて一つの項目として出力していることがわかります。

join(区切り文字,くっつけたいもの) で指定してあげます。

おわりに

まぁ再利用しやすくなるからあんまり好きではないけどNE

Amazon Web Services パターン別構築・運用ガイド 改訂第2版 (Informatics&IDEA)

Amazon Web Services パターン別構築・運用ガイド 改訂第2版 (Informatics&IDEA)

  • 作者: NRIネットコム株式会社,佐々木拓郎,林晋一郎,小西秀和,佐藤瞬
  • 出版社/メーカー: SBクリエイティブ
  • 発売日: 2018/03/23
  • メディア: 単行本
  • この商品を含むブログを見る

AWSCLIの結果をソートする

概要

AWSCLIの出力結果をソートする2パターンをご紹介します。

sort_byでソートする

以下の例ではインスタンスの一覧からインスタンスIDとプライベートIPを表示して、それをインスタンスIDでソートしています。

--queryので指定する項目をsort_by()で囲ってあげて、そのなかの2カラム目にソートする項目を指定しています。

$ aws ec2 describe-instances --query 'sort_by(Reservations[].Instances[].{ipaddress:NetworkInterfaces[].PrivateIpAddress[],instanceid:InstanceId},&instanceid)'
[
    {
        "instanceid": "i-030206d4c082e95d3", 
        "ipaddress": [
            "192.165.0.145"
        ]
    }, 
    {
        "instanceid": "i-03b09176aac5121e0", 
        "ipaddress": [
            "192.168.50.193"
        ]
    }, 
    {
        "instanceid": "i-068f0c1964d463721", 
        "ipaddress": [
            "192.168.101.201"
        ]
    }
]

sortでソートする

--queryで指定する項目が一つだけである場合は単純にsort()で囲ってあげるだけでソートすることができます。

$ aws ec2 describe-instances --query 'sort(Reservations[].Instances[].InstanceId)'
[
    "i-030206d4c082e95d3", 
    "i-03b09176aac5121e0", 
    "i-068f0c1964d463721",
]

ちなみに

sort_bysortもデフォルトでは昇順でソートされます。
降順にする場合はreverse()を利用します。

$ aws ec2 describe-instances --query 'reverse(sort(Reservations[].Instances[].InstanceId))'
[
    "i-068f0c1964d463721", 
    "i-03b09176aac5121e0", 
    "i-030206d4c082e95d3"
]

Amazon Web Services パターン別構築・運用ガイド 改訂第2版 (Informatics&IDEA)

Amazon Web Services パターン別構築・運用ガイド 改訂第2版 (Informatics&IDEA)

  • 作者: NRIネットコム株式会社,佐々木拓郎,林晋一郎,小西秀和,佐藤瞬
  • 出版社/メーカー: SBクリエイティブ
  • 発売日: 2018/03/23
  • メディア: 単行本
  • この商品を含むブログを見る

インフラ構成管理ツールの各レイヤーについて

インフラ構成管理ツールにおける代表的な役割というか各レイヤーというか、機能をとか役割とかによって以下のように呼び方がちょっと違うらしい。

調子に乗ってオーケストレーションがーー云々などとのたまっていたので戒めの意味を込めてまとめる。

Bootstrapping

OSの起動を自動化するツール

物理環境やクラウド環境でサーバOSをインストールしたり、仮想化ツール(VMなど)をインストール/設定を自動化することができる。
物理環境においては、ベンダが提供する管理ツール(iLoなど)を連携することで実現が可能。

VagrantやRHELで利用できるKickStartなどがこれにあたる。

Configuration

OSやミドルウェアの設定を自動化するツール

ミドルウェアのインストールや設定を行うことができる。
OSインストール後の各種設定を自動化することができる。

ChefやAnsible、Puppetなどがこれにあたる。

Orchestration

複数サーバ感での連携/管理を自動化するツール

大規模なシステムを構成するサーバ群を監視し、障害が発生したノードを取り除いたりなどをすることが可能。
サービスの連携を調整することもできるため、バックエンドの準備が完了したらフロントを起動するなどの連携が容易になる。

SerfやCapistrano、Kubernetesがこれにあたる。
つかいかたによってはAnsibleもここかも。

おわりに

Infrastructures as Codeはいいぞ

Infrastructure as Code ―クラウドにおけるサーバ管理の原則とプラクティス

Infrastructure as Code ―クラウドにおけるサーバ管理の原則とプラクティス

opensslコマンドでcsrファイルを対話形式ではなく一撃で作成する

概要

opensslコマンドでcsrファイルを作成するときに、通常だと以下のように対話形式でひとつずつ項目を埋めていく必要があります。

Country Name (2 letter code) [GB]:
State or Province Name (full name) [Berkshire]:
Locality Name (eg, city) [Newbury]:
Organization Name (eg, company) [My Company Ltd]:
Organizational Unit Name (eg, section) []:
Common Name (eg, your name or your server's hostname) []:

これだと大量に作成するときなどにめんどくさいですし、コマンドの実行履歴からどのような内容でcsrを作成したかがわかりません。

以下のようにすることでコマンド一撃だけでcsrを作成することができます。

コマンド

-subjオプションでCNやOUなどを指定しています。
全体を"でかこんであげて、各項目を/で区切ります。

$ openssl req -new -sha256 -key private.key -out wawawa.csr -subj "/C=JP/ST=Tokyo/L=Koto-ku/O=kabegiwa Inc./OU=kabegiwa blog/CN=wawawa.example.com"

おわりに

ただしパスワードは聞かれる。

[試して理解]Linuxのしくみ ~実験と図解で学ぶOSとハードウェアの基礎知識

[試して理解]Linuxのしくみ ~実験と図解で学ぶOSとハードウェアの基礎知識

Pythonで約数を取得する

概要

Pythonを利用して自然数の約数を取得してみます。

コード

実行してみる

引数でわたした数字の約数を配列にいれてprintしてくれます。

$ ./yakusuu.py 30
[1, 2, 3, 5, 6, 10, 15]

おわりに

数学において、整数 N の約数(やくすう、英: divisor)とは、N を割り切る整数またはそれらの集合のことである。割り切るかどうかということにおいて、符号は本質的な問題ではないため、N を正の整数(自然数)に、約数は正の数に限定して考えることも多い。自然数や整数の範囲でなく文字式や抽象代数学における整域などで「約数」と同様の意味を用いる場合は、「因数」(いんすう)、「因子」(いんし、英: factor)が使われることが多い。 整数 a が整数 N の約数であることを、記号 | を用いて a | N と表す。

スラスラ読める Pythonふりがなプログラミング (ふりがなプログラミングシリーズ)

スラスラ読める Pythonふりがなプログラミング (ふりがなプログラミングシリーズ)

  • 作者: リブロワークス,株式会社ビープラウド
  • 出版社/メーカー: インプレス
  • 発売日: 2018/06/22
  • メディア: 単行本(ソフトカバー)
  • この商品を含むブログを見る

Ansible AWX を Amazon Linux2 にインストールする

Ansible AWX を Amazon Linux2 にインストールしてみたいと思います。
(Docker版でインストールしています)

インストール手順

各種パッケージ類のインストール

必須パッケージ類をインストールします。

gitのインストール

gitが必要なのでインストールします。

$ sudo yum install git

dockerのインストール

Dockerも必要なのでインストールします。

$ sudo yum install docker

Ansibleのインストール

当然Ansibleも必要なのでインストールします。

$ sudo yum install ansible

pip のインストール

docker-pyをインストールするためにpipが必要です。

$ curl -kL https://bootstrap.pypa.io/get-pip.py | sudo python

docker-pyのインストール

pipでdocker-pyをインストールします。

$ sudo pip install docker-py

dockerサービスの起動と有効化

dockerの起動

$ sudo systemctl start docker

dockerの有効化

# sudo systemctl enable docker

Ansible AWXのダウンロード

git cloneでAnsible AWXをダウンロードしてきます。

git clone https://github.com/ansible/awx.git

Ansible AWX のインストール

awx/installerに移動してinstall.ymlをansible-playbookで実行します。

$ cd ./awx/installer
$ sudo ansible-playbook -i inventory install.yml

(postgresのくだりでエラーが出る場合は/opt/pgdockerを777で作成するとよい)

AnsibleAWXの起動確認

Upになっていればよい

$ sudo docker ps
CONTAINER ID        IMAGE                        COMMAND                  CREATED             STATUS              PORTS                                                 NAMES
3e7a26363d39        ansible/awx_task:latest      "/tini -- /bin/sh ..."   16 minutes ago      Up 25 seconds       8052/tcp                                              awx_task
eb7ebcc35850        ansible/awx_web:latest       "/tini -- /bin/sh ..."   17 minutes ago      Up 25 seconds       0.0.0.0:80->8052/tcp                                  awx_web
285da9993b5d        memcached:alpine             "docker-entrypoint..."   18 minutes ago      Up 25 seconds       11211/tcp                                             memcached
2990c6dc2cf5        ansible/awx_rabbitmq:3.7.4   "docker-entrypoint..."   18 minutes ago      Up 25 seconds       4369/tcp, 5671-5672/tcp, 15671-15672/tcp, 25672/tcp   rabbitmq
b66d57a1fd6d        postgres:9.6                 "docker-entrypoint..."   18 minutes ago      Up 25 seconds       5432/tcp                                              postgres

ブラウザでログインする

http://インスタンスのIPアドレス
を開くと以下のようにアップデートが始まる
5~10分くらい待つ
f:id:kabegiwakun:20180625013808p:plain
しばらく待っているとログインできるようになる。
デフォルトだと以下が管理者のやつ。
ID: admin
Pass: password
f:id:kabegiwakun:20180625014113p:plain

ログインできました!!!!! f:id:kabegiwakun:20180625014230p:plain

おわりに

Ansible AWXはいいぞ

インフラCI実践ガイド Ansible/GitLabを使ったインフラ改善サイクルの実現

インフラCI実践ガイド Ansible/GitLabを使ったインフラ改善サイクルの実現

Pythonのsum関数で配列や集合やタプルの合計を取得する

概要

Pythonのsum関数を利用して配列や集合やタプルの合計を取得してみます。

配列

コード

wawawa_array = [1,2,3,4,5]
result = sum(wawawa_array)

print(result)

実行結果

15

集合

コード

wawawa_set = {1,2,3,4,5}
result = sum(wawawa_set)

print(result)

実行結果

15

タプル

コード

wawawa_tuple = (1,2,3,4,5)
result = sum(wawawa_tuple)

print(result)

実行結果

15


スラスラ読める Pythonふりがなプログラミング (ふりがなプログラミングシリーズ)

スラスラ読める Pythonふりがなプログラミング (ふりがなプログラミングシリーズ)

  • 作者: リブロワークス,株式会社ビープラウド
  • 出版社/メーカー: インプレス
  • 発売日: 2018/06/22
  • メディア: 単行本(ソフトカバー)
  • この商品を含むブログを見る

Pythonで複数パターンを置換する

概要

Pythonを利用して複数パターンを一気に置換してみたいと思います。

コード

「せかいへいわいわい」という謎のワードを置換しています。
ループをつかってwawawa_dictという辞書形式のものにあるワードを置換しています。

実行結果

$ python fukusuu_replace.py 
せかいHEYWAIWAI

おわりに

せかいへいわいわい

入門 Python 3

入門 Python 3