かべぎわブログ

ブログです

最大公約数を求めるLambda(Python3)

なんかまったく需要がなさそうだけど気の迷いでつくりました。

概要

変数のxyに整数を入力してあげると、printで結果を返してくれます。
以下のコードでは84と16の最大公約数を求めています。

かんたんな説明

最大公約数は以下のようにして求めることができます。

84 mod 16 = 4 
16 mod 4 = 0

あまりが0になったから最大公約数は4だ!!!!

84 mod 16を計算します。 答え(あまり)は4です。
つづいて、右辺の16と先程の答えの416 mod 4を計算します。
16 mod 4 = 0なので最大公約数は0です!!!

おわりに

説明下手感

Python 1年生 体験してわかる!会話でまなべる!プログラミングのしくみ

Python 1年生 体験してわかる!会話でまなべる!プログラミングのしくみ

IAMロールの権限でCyberduckを利用してS3とファイルをやりとりしてみる

今回はCyberduckというGUIのFTPクライアントツールを利用してAWS上のS3バケットとIAMロールを付与したWindowsインスタンス上でファイルのやり取りをしてみたいと思います。

この方法を利用することでアクセスキーを発行しなくてもCyberduckを利用することが可能です。

手順

以下の手順はすべてS3へアクセス可能なIAMロールがアタッチされているWindowsインスタンス内で作業していることを想定しています。

Cyberduckのダウンロード

以下からダウンロードできます。

https://cyberduck.io/index.ja.html?l=ja

S3のIAMロール用のCyberduckのprofileをダウンロード

IAMロール用のCyberduckのprofileをダウンロードしてきます。

以下のリンクの上のほうに「Connecting with temporary access credentials (Token) from EC2」という項目があります。
そこにIAMロール用のCyberduckのprofileがありますので、Downloadを選択して、ダウンロードします。

https://trac.cyberduck.io/wiki/help/en/howto/s3

画像でいうと赤枠のところ f:id:kabegiwakun:20180228185339p:plain

profileの編集

テキストエディタでダウンロードしてきたprofileを開き、 http://169.254.169.254/latest/meta-data/iam/security-credentials/s3accessとなっている箇所の、s3accessの部分を現在作業中のインスタンスにアタッチされているIAMロールの名前に書き換えます。
それ以外のところは、なにも編集せず保存します。

CyberduckでS3に接続してみる

さきほど編集したprofileをダブルクリックしてCyberduckを起動します。

すると、S3へ接続が行われ、バケットの一覧がでてきます。
f:id:kabegiwakun:20171101222245p:plain

バケット名をダブルクリックするとバケットの中身がみれます。
f:id:kabegiwakun:20171101222334p:plain

おわりに

アクセスキーを発行しなくてもこういったGUI系のツールを利用できる。というのは結構便利だと思います。
(AWSCLIつかいかたわからないみたいなこともあるので…)

おためしあれ!!!

サーバーレスシングルページアプリケーション ―S3、AWS Lambda、API Gateway、DynamoDB、Cognitoで構築するスケーラブルなWebサービス

サーバーレスシングルページアプリケーション ―S3、AWS Lambda、API Gateway、DynamoDB、Cognitoで構築するスケーラブルなWebサービス

ansible-docをつかってコンソールからmoduleの詳細を確認する

みなさんしってるかもしれませんが自分は知らなかったので展開します。

ansible-docsというコマンドがあります。
これを利用することでコンソールからコマンドで各moduleの詳細を確認することができます。
manみたいなかんじです。

実際にやってみる

たとえば以下のような感じです。
copyについて調べてみようと思います。

以下を実行すると…

$ ansible-doc copy

こんなかんじでcopymoduleの詳細を確認することができます。

> COPY    (/usr/lib/python2.7/site-packages/ansible/modules/files/copy.py)

        The `copy' module copies a file from the local or remote machine to a location on the remote machine. Use the [fetch] module to copy
        files from remote locations to the local box. If you need variable interpolation in copied files, use the [template] module. For Windows
        targets, use the [win_copy] module instead.

  * note: This module has a corresponding action plugin.

OPTIONS (= is mandatory):

- attributes
        Attributes the file or directory should have. To get supported flags look at the man page for `chattr' on the target system. This string
        should contain the attributes in the same order as the one displayed by `lsattr'.
        (Aliases: attr)[Default: None]
        version_added: 2.3

- backup
        Create a backup file including the timestamp information so you can get the original file back if you somehow clobbered it incorrectly.
        [Default: no]
        type: bool
        version_added: 0.7

- content
        When used instead of `src', sets the contents of a file directly to the specified value. For anything advanced or with formatting also
        look at the template module.
        [Default: (null)]
        version_added: 1.1
~~~省略~~~

おわりに

ブラウザで公式ドキュメントを開く必要がなくなりますね!
おためしあれ!!!

入門Ansible

入門Ansible

AnsibleのホストパターンはAND(&)で指定ができる

AnsibleのホストパターンではAND条件で2つのグループに所属するノードのみを対象として実行することが可能です。

概要

例えば以下のような感じで:&で複数グループをつなげてあげます。

$ ansible -i ansible_hosts servers:&develop -m ping

このときインベントリファイルとして利用しているansible_hostsが以下のような内容のとき、serversかつdevelopである192.140.1.1にpingが実行されます。

[servers]
192.140.1.1
192.140.1.2

[develop]
192.140.1.1

[production]
192.140.1.2

実行結果

192.140.1.1にだけpingが実行されていることがわかります。

$ ansible -i ansible_hosts servers:&develop -m ping

192.140.1.1 | SUCCESS => {
    "changed": false, 
    "ping": "pong"
}

おわりに

Ansibleのホストパターンは結構いろいろな指定の仕方をしてあげることが可能だったりします。
いろいろとためしてみたくださいね!!!

↓ちなみに以前紹介したやつはこちら

www.kabegiwablog.com

www.kabegiwablog.com

サーバ/インフラエンジニア養成読本 DevOps編 [Infrastructure as Code を実践するノウハウが満載! ] (Software Design plus)

サーバ/インフラエンジニア養成読本 DevOps編 [Infrastructure as Code を実践するノウハウが満載! ] (Software Design plus)

AnsibleでWindows上のzipファイルを展開する

今回はAnsibleでWindows上のzipファイルを展開してみようと思います。

概要

ターゲットのWindowsのtest.zipという名前のzipファイルを展開しています。
今回のplaybookではCドライブ直下においたzipファイルをデスクトップに展開しています。

実行コマンド

$ ansible-playbook -i ansible_hosts windows_unzip.yml

windows_unzip.yml

---
- hosts: target_host
  gather_facts: false

  tasks:
  - name: Unzip
    win_unzip:
      src: C:\test.zip
      dest: C:\Users\Administrator\Desktop\
...

おわりに

zipファイルを展開することができました。
zipにいろいろなものを圧縮してからAnsibleでコピー、展開することで一気に環境を構築することができるかもしれません。
(zipの中身がブラックボックス化するかもしれませんけれど…)

入門Ansible

入門Ansible

Windowsでコマンド一撃で大容量 空ファイルを作成する

Windows環境で一撃で大容量の空ファイルを作成する方法をご紹介します。

実行コマンド

コマンドプロンプトで以下を実行します。

fsutil file createnew C:\5gb_karafile.txt 5368709120

fsutilコマンドでCドライブ直下にファイルを作成しています。
5368709120は10進数で5Gbyteの意味です。

[改訂新版]Windowsコマンドプロンプトポケットリファレンス

[改訂新版]Windowsコマンドプロンプトポケットリファレンス

Ansibleでタグをつかって特定の処理のみ実行する

今回はAnsibleを利用して特定の処理だけを実行する方法をご紹介します。

playbookのいらないところをコメントアウトしていろいろためして…
みたいなことが不要になります!

概要

taskの中にtagsでタグをつけておいて、ansible-playbookコマンドの実行時に--tagsオプションでそのタグを指定してあげます。
すると、タグをつけた処理だけが実行できます!!!

かんたんな例

かんたんな例です。

playbook

playbookが以下だとします。

echoをファイルをリダイレクトするだけのかんたんなplaybookです。
それぞれtagsでwawawaとsasasaのタグをつけてあげています。

---
- hosts: localhost
  gather_facts: false
  tasks:
   - shell: echo "wawawa" > /home/ec2-user/wawawa.txt
     tags: wawawa

   - shell: echo "sasasa" > /home/ec2-user/sasasa.txt
     tags: sasasa
...

実行コマンド

オプションで--tagsを指定してタグがwawawaのものを実行してみます。

$ ansible-playbook -i ansible_hosts ec2_linux_tag_test.yml --tags wawawa

実行結果確認

標準出力は以下のとおり。

$ ansible-playbook -i ansible_hosts ec2_linux_tag_test.yml --tags wawawa
Using /etc/ansible/ansible.cfg as config file

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

TASK [command] ****************************************************************************************************
changed: [localhost] => {"changed": true, "cmd": "echo \"wawawa\" > /home/ec2-user/wawawa.txt", "delta": "0:00:00.002605", "end": "2018-02-21 15:24:50.889019", "rc": 0, "start": "2018-02-21 15:24:50.886414", "stderr": "", "stderr_lines": [], "stdout": "", "stdout_lines": []}

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

 
wawawa.txtだけが作成されていることがわかります。

$ cat /home/ec2-user/wawawa.txt 
wawawa

$ cat /home/ec2-user/sasasa.txt 
cat: /home/ec2-user/sasasa.txt: No such file or directory

おまけ

タグは以下のように実行コマンドで複数指定することも可能です。
--tags wawawa--tags sasasaを指定してあげています。

$ ansible-playbook -i ansible_hosts ec2_linux_tag_test.yml --tags wawawa --tags sasasa

また、playbook内のタグが一意である必要はないです。
今回の例の場合、両方ともtags: wawawaとしてあげることで両方とも処理が実行されます。  
たとえばplaybookが以下にような場合、両方の処理が実行されます。

$ cat ec2_linux_tag_test.yml
---
- hosts: localhost
  gather_facts: false
  tasks:
   - shell: echo "wawawa" > /home/ec2-user/wawawa.txt
     tags: wawawa

   - shell: echo "sasasa" > /home/ec2-user/sasasa.txt
     tags: wawawa
...

Ansible実践ガイド 第2版

Ansible実践ガイド 第2版

AnsibleでWindowsのショートカットを作成する

Ansibleを利用してWindowsにショートカットを作成してみます。

今回はためしにInternet Explorerのショートカットを作成してみようと思います。

実行コマンド

$ ansible-playbook -i ansible_hosts win_shortcut.yml

playbookは以下のようにしています。
Internet Explorerのショートカットをデスクトップ上に作成しています。

インベントリファイルは以下のようなかんじ。

[windows]
172.14.1.1

[windows:vars]
ansible_user=kabegiwa
ansible_password=wawawa
ansible_port=5986
ansible_connection=winrm
ansible_winrm_server_cert_validation=ignore

実行確認

Internet Explorerのショートカットが作成できました! f:id:kabegiwakun:20180221071155p:plain

 

初めてのAnsible

初めてのAnsible

diffで差分がないところだけ出力する

今回はdiffで差分がないところだけ出力してみます。

前提

比較するファイルは以下のようなものを用意しています。

$ cat foo.txt
AAAAA
BBBBB
CCCCC
$ cat bar.txt
CCCCC
DDDDD
EEEEE

実行コマンド

以下のコマンドでdiffで差分のない部分だけを出力することができます。

$ diff --old-line-format='' --unchanged-line-format='%L' --new-line-format='' foo.txt bar.txt
CCCCC

共通部分CCCCCだけが出力できました!

ちょっとした解説

diffにいろいろな長いオプションをつけていてよくわからないと思いますので解説していきます。
まず、今回はdiffのif-then-else形式と呼ばれる形式で差分を表示しています。
(-D--old-line-formatなどのオプションを指定してあげるとその形式になります。)

if-then-else形式とは以下のように比較結果を出力する形式です。

$ diff -D=test foo.txt bar.txt
#ifndef =test
AAAAA
BBBBB
#endif /* ! =test */
CCCCC
#ifdef =test
DDDDD
EEEEE
#endif /* =test */

続いてそれらで利用しているオプションの解説です。
--old-line-format=''は1番目のファイルだけにある行の出力のフォーマットを決めるオプションです。
これを''とすることで出力しないようにしています。

--new-file-format=''も同様です。
2番めのファイルの出力をしないように指定しています。

--unchanged-line-format='%L'は両方のファイルに共通な行を出力する際のフォーマットです。
%Lはman diff曰く

%L contents of line

とのことです。
行の内容をそのまま出力する。という意味で利用しています。

おわりに

共通部分を出力するだけなのにコマンドとしては少し長くなってしまいますが、シェルスクリプト内などで利用すると結構便利だったりするのではないでしょうか?

おためしください!!!

「シェル芸」に効く!AWK処方箋

「シェル芸」に効く!AWK処方箋

オフライン環境でZabbixエージェントをインストールする

今回はオフライン環境のLinuxサーバにZabbixエージェントをインストールしてみます。

手順

なんらかの方法で以下からZabbixエージェントをインストールしてきます。
http://repo.zabbix.com/zabbix/3.0/rhel/7/x86_64/

なんらかの方法でZabbixエージェントをインストールしたいサーバへダウンロードしてきたファイルを転送します。
(今回はzabbix-agent-3.0.14-1.el7.x86_64.rpmを転送しています)

以下のコマンドを実行して、Zabbixエージェントをインストールします。

$ sudo yum install ./zabbix-agent-3.0.14-1.el7.x86_64.rpm

確認

無事インストールすることができました!

$ yum list installed | grep zabbix
zabbix-agent.x86_64                 3.0.14-1.el7                       installed

コマンドでWindows Serverの起動時に自動ログオンするよう設定する

今回はWindows Serverを起動した際の自動ログオンを実現してみます。

事前準備

マイクロソフト公式からAutoLogonをダウンロードしてきます。
ダウンロードできたら任意の場所に解凍しておきます。

technet.microsoft.com

自動ログオンの設定をする

さて、実際に自動ログオンの設定をしてみます。
AutoLogonを解凍したフォルダに移動し、以下のコマンドを実行します。
(ドメインではない場合はローカルのコンピュータ名を指定してください)

autologon ユーザ名 ドメイン名 パスワード

これだけで完了です!
あとは再起動してあげれば自動でログオンすることが確認できるはずです。

Windows Server 2016 パーフェクトマスター (Perfect Master)

Windows Server 2016 パーフェクトマスター (Perfect Master)

AnsibleでWindowsにAWS CLIをインストールする

今回はAnsibleでWindows環境にAWS CLIをインストールしてみたいと思います。

事前準備

AWS公式からAWS CLIのインストーラをダウンロードしてきます。

aws.amazon.com

以下の赤枠から32ビットまたは64ビットのものをダウンロードします。
f:id:kabegiwakun:20180211160146p:plain

Ansibleを実行する

さて、実際にAnsibleを実行してAWS CLIをインストールしてみます。

実行コマンド

$ ansible-playbook -i hosts/target-hosts install_AWSCLI.yml

playbookは以下のような感じです。

win_copyでインストーラをターゲットノード(AWS CLIをインストールしたいサーバ)にコピーしたあと、win_msiを利用してインストールしています。

おわりに

Ansibleを利用してAWS CLIをインストールすることができました。
msi形式のインストーラであればwin_msiでインストーラのPATHを指定してあげるだけでインストールを行うことができます!

便利ですね!

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

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

Windows環境でPythonをコマンドでサイレントインストールする

今回はWindows環境でPythonをコマンプロンプトなどを利用してサイレントインストールしてみたいと思います。

コマンド

以下のコマンドをコマンドプロンプトで実行することでPyhtonをインストールすることができます。

C:\\python-3.6.3.exe /quiet InstallAllUsers=1 PrependPath=1 Include_test=0

この例ではPythonのバージョン3.6.3で実施しています。
バージョンの部分は各自読み替えて実行してみてください。

おまけ: Ansibleを利用してPythonをインストールする

サイレントインストールのコマンドをそのままAnsibleのwin_commandに記載してあげればAnsibleを利用してPythonをインストールすることが可能です。

install_python_win.yml

Ansible実践ガイド 第2版

Ansible実践ガイド 第2版

AnsibleでEC2インスタンスを作成してみる

AnsibleでEC2インスタンスを作成してみようと思います。

環境

  • Ansible 2.4.2
  • python 2.7

インスタンスを作成してみる

インスタンスを作成してみます。

実行コマンド

$ ansible-playbook -i ansible_hosts instance_create.yml

playbookは以下のようにしています。

Ansible

インベントリファイルは以下のようなかんじ。

$ cat ansible_hosts
[local]
localhost

実行確認

インスタンスが作成できました! f:id:kabegiwakun:20180208071013p:plain

おわりに

インスタンスを作成するところからAnsibleで実行することができます。
構成管理がはかどりますね!!!

初めてのAnsible

初めてのAnsible

Ansibleのホストパターンは正規表現も利用できる

知らなかったので備忘録的メモです。

Ansibleのホストパターンは正規表現でも利用できました。
例えば以下のように指定が可能です。
正規表現の前には~を忘れないであげてください。

$ ansible -i ansible_hosts "~(test|wawawa)_server" -m ping

このとき、インベントリとして利用しているansible_hostsがこのような内容のとき、test_serverとwawawa_serverにpingが実行されます。

[test_server]
192.140.1.1

[wawawa_server]
192.140.1.2

[sasasa]
192.140.2.1

test_serverとwawawa_serverにpingが実行されていることがわかります。

$ ansible -i ansible_hosts *_server -m ping 
192.140.1.1 | SUCCESS => {
    "changed": false, 
    "ping": "pong"
}
192.140.1.2 | SUCCESS => {
    "changed": false, 
    "ping": "pong"
}

Ansible実践ガイド 第2版

Ansible実践ガイド 第2版