【Python】Excel から Ansible のコードを自動生成する①【構築自動化】

Excel から必要な情報を抜き出して、Ansible の ini ファイルを置換する Python スクリプトを書いてみました。

#!/usr/bin/python3
# coding: UTF-8

import openpyxl
import sys

# Ansible の ini ファイルを定義(置換前)
org_file_name = "all.yml.org"
# Ansible の ini ファイルを定義(置換後)
file_name = "all.yml"

# コマンドライン引数の数を確認
if len(sys.argv) != 2:
    print("input error")
    sys.exit(1)

# Excel ファイル名を変数に代入
args = sys.argv
target = args[1]

# Excel データを取得
wb = openpyxl.load_workbook(target)
sheet = wb.get_sheet_by_name('Sheet1')

# セルデータの取得関数
def get_cell(x, y):
    param = sheet.cell(row=x,column=y).value
    return param

# 必要なセルの情報を取得
domain = get_cell(2, 2)
docroot = get_cell(3, 2)

# 置換前の ini ファイルを開く
with open(org_file_name, encoding="cp932") as f:
    data_lines = f.read()

# 置換
data_lines = data_lines.replace("xxx", domain)
data_lines = data_lines.replace("yyy", docroot)

# 置換後のiniファイルを作成
with open(file_name, 'w', encoding="cp932") as f:
    f.write(data_lines)

スクリプトのコマンドライン引数としてExcelファイル(.xlsx)を指定して実行してください。

【AWS】EC2 に root ユーザで接続する【サーバ移設】

こんにちは。
rsync でデータ同期を行う際、一般ユーザを用いてしまうと owner と group が適切に設定されないケースがあるようです。
AWS EC2 ( AmazonLinux ) のデフォルト設定では root ユーザでの接続ができないので、後述のように設定を調整します。

# 設定ファイルをバックアップ
cp -p /etc/ssh/sshd_config /etc/ssh/sshd_config.org
diff /etc/ssh/sshd_config /etc/ssh/sshd_config.org

# sshd 設定ファイルの調整
vi /etc/ssh/sshd_config
======================================
#PermitRootLogin forced-commands-only
PermitRootLogin without-password
======================================
# sshd 設定ファイルの syntax チェック
sshd -t

# sshd 再読み込み
/etc/init.d/sshd reload

# sshd の起動を確認
netstat -lntp | grep sshd

# root ユーザの公開鍵追記
vi /root/.ssh/authorized_keys
=======================================
ssh-rsa xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
=======================================

※ 秘密鍵、公開鍵のキーペアは下記コマンドで作成できます。
ssh-keygen -b 2048 -t rsa -f ./key_name

【Nginx】Nginx での リバースproxy 設定

Nginx のリバースproxy 設定に関して纏めておきます。

例1

server {
    listen       443 ssl;
    server_name  test.com www.test.com;

    client_max_body_size 12m;
    proxy_set_header Host $http_host;

    ssl_certificate /etc/certs/test.com/current/test.com.pem;
    ssl_certificate_key /etc/certs/test.com/current/test.com.key;

    location / {
        proxy_pass http://localhost:8008;
        proxy_set_header Host              $host;
        proxy_set_header X-Forwarded-HTTPS on;
        proxy_set_header X-Forwarded-SSL   on;
        proxy_set_header X-Real-IP         $remote_addr;
        proxy_set_header X-Forwarded-Proto $http_x_forwarded_proto;
        proxy_set_header X-Forwarded-For   $proxy_add_x_forwarded_for;
    }

    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   /usr/share/nginx/html;
    }
}

Nginx の443で受けてlocalの 8008 に渡す感じですね。
Nginx で ssl終端させる感じですね。

例2

server {
    listen       443 ssl;
    server_name  www.test.com;
    client_max_body_size 12m;

    proxy_set_header Host $http_host;
    proxy_set_header X-Forwarded-HTTPS on;
    proxy_set_header X-Forwarded-SSL   on;
    proxy_set_header X-Real-IP         $remote_addr;
    proxy_buffer_size 32k;
    proxy_buffers 50 32k;
    proxy_busy_buffers_size 32k;

    ssl_certificate /etc/certs/test.com/current/www.test.com.pem;
    ssl_certificate_key /etc/certs/test.com/current/www.test.com.key;

    location / {
        proxy_pass https://192.168.33.10:443;
    }

include /etc/nginx/proxy_virtual/www.test.com/*.conf;

    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   /usr/share/nginx/html;
    }
}

     location ~ (\/api)(\/.*)?{
        proxy_pass https://localhost:8008;
    }

/api でのアクセスであれば local の 8008 に proxy する設定ですね。
それ以外は https://192.168.33.10:443 に proxy させます。
※ L7 での proxy ですね。

【サーバ移設】踏み台サーバを経由してrsyncする方法【rsync】

こんにちは。
先日にサーバ移設案件に携わる機会があって、踏み台サーバを経由して、目的のサーバにデータを同期する必要がありました。
その際に先輩に教えてもらった方法をメモレベルで残しておこうと思います。

rsync 用ユーザ作成

useradd rsync
su rsync
cd ~
mkdir .ssh
chmod 700 .ssh

SSH 設定

vi /home/rsync/.ssh/config
===============================================
Host step-new
    HostName      111.111.111.111
    User          step-new-user
    IdentityFile  ~/.ssh/id_rsa_step-new.pem
Host step-old
    ProxyCommand  ssh -W %h:%p step-new
    HostName      222.222.222.222
    User          step-old-user
    IdentityFile  ~/.ssh/id_rsa_step-old.pem
Host target-server
    ProxyCommand  ssh -W %h:%p step-old
    HostName      333.333.333.333
    User          target-server-user
    IdentityFile  ~/.ssh/id_rsa_target.pem
===============================================

vi ~/.ssh/id_rsa_step-new.pem
vi ~/.ssh/id_rsa_step-old.pem
vi ~/.ssh/id_rsa_target.pem

chmod 600 ~/.ssh/id_rsa_step-new.pem
chmod 600 ~/.ssh/id_rsa_step-old.pem
chmod 600 ~/.ssh/id_rsa_target.pem

データ同期

mkdir -p /var/tmp/rsync_results/test1
nohup time rsync -avzrn --rsync-path="sudo rsync" target-server:/home/target-server-user/ /home/purpose/ 1>/var/tmp/rsync_results/test1/result_$(date +"%Y%m%d").log 2>/var/tmp/rsync_results/test1/error_$(date +"%Y%m%d").log &
nohup time rsync -avzr --rsync-path="sudo rsync" target-server:/home/target-server-user/ /home/purpose/ 1>/var/tmp/rsync_results/test1/result_$(date +"%Y%m%d").log 2>/var/tmp/rsync_results/test1/error_$(date +"%Y%m%d").log &

補足

・.ssh/ 以下に config ファイルを作成することで、踏み台サーバを経由して接続が出来る。
・秘密鍵は事前に配置しておく必要がある。

【ファイル共有】nfsサーバの構築手順【構築手順】

こんにちは。
移設案件でnfsサーバを構築したので、
備忘録として手順を残しておきます。

サーバ

nfs用のディレクトリの準備

mkfs -t xfs /dev/xvdf
mkdir /mnt/nfsserv/
chmod 777 /mnt/nfsserv/
mount -t xfs -o nouuid /dev/xvdf /mnt/nfsserv/

fstabの編集

vi /etc/fstab
===================================================================
/dev/xvdf /mnt/nfsserv             xfs     defaults        0 0
===================================================================

nfsパッケージの導入

yum install nfs-utils
systemctl start rpcbind
systemctl start nfs-server
systemctl enable rpcbind
systemctl enable nfs-server

nfs設定ファイルの編集

vi /etc/exports
=================================================================
/mnt/nfsserv/   10.204.68.0/255.255.255.0(rw,sync,no_root_squash)
=================================================================

systemctl restart rpcbind
systemctl restart nfs-server

クライアント

nfsパッケージの導入

yum install nfs-utils
systemctl start rpcbind
systemctl enable rpcbind

マウント

mkdir /data
mount -t nfs 10.204.68.32:/mnt/nfsserv /data

fstabの編集

vi /etc/fstab
======================================================================
10.204.68.32:/mnt/nfsserv /data    nfs     defaults,_netdev        0 0
======================================================================