かべぎわブログ

ブログです

Pythonのpathlibで相対パスと絶対パスを取得する

概要

Pythonのpathlibモジュールを利用して、相対パスと絶対パスを取得してみたいと思います。

コード例

実行してみる

こんなかんじで相対パスと絶対パスが出力されていることがわかります。

$ ./blog_python/path.py 
blog_python/path.py
/home/ec2-user/blog_python/path.py

おわりに

べた書きはやめよう

入門 Python 3

入門 Python 3

Ansibleのshellとwin_shellに複数行のコマンドを記載する

概要

Ansibleのshellとwin_shellモジュールの中で複数行にわたるコマンドを記載してみたいと思います。

playbook例

実行してみる

こんなかんじでechoが3行出力されていることがわかる。

$ ansible-playbook shell_fukusuu.yml -v

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

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

TASK [command] ************************************************************************************************************************************************
changed: [localhost] => {"changed": true, "cmd": "echo \"ichi_gyo_me\"\n echo \"ni_gyo_me\"\n echo \"san_gyo_me\"", "delta": "0:00:00.002810", "end": "2018-05-28 17:45:41.158868", "rc": 0, "start": "2018-05-28 17:45:41.156058", "stderr": "", "stderr_lines": [], "stdout": "ichi_gyo_me\nni_gyo_me\nsan_gyo_me", "stdout_lines": ["ichi_gyo_me", "ni_gyo_me", "san_gyo_me"]}

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

まとめ

いろいろできてべんりー

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

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

Route53のホストゾーンを削除するときはレコードセットを全部削除しておく

概要

Route53でHosted Zoneを削除するときになんかエラーがでたのでそれの解決方法

こんなエラーがでた

Before you can delete a hosted zone, you must first delete all resource record sets except the NS and SOA resource record sets for the zone apex.

解決方法

削除したいHosted ZoneのRecord Setをすべて削除してからDelete Hosted Zoneを行うことでOKです!!!

おわりに

エラーを日本語訳しただけ

Amazon Web Services 業務システム設計・移行ガイド 一番大切な知識と技術が身につく

Amazon Web Services 業務システム設計・移行ガイド 一番大切な知識と技術が身につく

  • 作者: 佐々木拓郎,林晋一郎,瀬戸島敏宏,宮川亮,金澤圭
  • 出版社/メーカー: SBクリエイティブ
  • 発売日: 2018/01/20
  • メディア: Kindle版
  • この商品を含むブログを見る

Lambda(Python)でインスタンスの特定のタグの値がなんなのかを出力する

概要

Lambda(Python3)をつかってEC2インスタンスについているあるタグの値がなんなのかを出力してみます。

スクリプト

tag_keyに出力したいタグのkeyを指定します。

実行結果

たとえば、こんなかんじでタグがついていたとします。
f:id:kabegiwakun:20180527082817p:plain

それをこのLambdaを実行するとこんなかんじで出すことができます。

[
  "kore"
]

おわりに

タグをもとにインスタンスを操作するようなLambdaを作るときに便利です。

AWSによるサーバーレスアーキテクチャ

AWSによるサーバーレスアーキテクチャ

Ansibleのstart-atを利用してplaybookの途中から実行する

概要

Ansibleのplaybookを途中から実行する方法をご紹介します。
これを利用することでplaybookの途中でエラーでとまっちゃったんだけど初めからやり直すのめんどくさいなーというときに便利です!!!

playbook例

playbookはなんでもいいです。
てきとーにdebugでメッセージ出力するようにしています。

実行結果

普通に実行するとこんなかんじだけど

$ ansible-playbook start_at.yml

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

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

TASK [wawawa] *************************************************************************************************************************************************
ok: [localhost] => {
    "msg": "wawawa_desu"
}

TASK [sasasa] *************************************************************************************************************************************************
ok: [localhost] => {
    "msg": "sasasa_dane"
}

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


--start-atオプションをつけるとこんなかんじで途中から実行できる。

$ ansible-playbook start_at.yml --start-at='sasasa'

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

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

TASK [sasasa] *************************************************************************************************************************************************
ok: [localhost] => {
    "msg": "sasasa_dane"
}

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

特定のNameを指定してあげるとそこから実行することができます!!!!

おわりに

長大なやつとかつくってるときべんりそうね

Ansible徹底入門 クラウド時代の新しい構成管理の実現

Ansible徹底入門 クラウド時代の新しい構成管理の実現

  • 作者: 廣川英寿,平初,橋本直哉,森田邦裕,渡辺一宏
  • 出版社/メーカー: 翔泳社
  • 発売日: 2017/02/17
  • メディア: 単行本(ソフトカバー)
  • この商品を含むブログを見る

Lambda(Python)で特定のVPCの中のサブネットの一覧を出力する

概要

Lambda(Python)を利用して、特定のVPCの中のサブネットの一覧を出力してみたいと思います。

スクリプト例

Lambdaのスクリプト的にはこんなかんじ。

実行結果

{
    'Subnets': [{
        'AvailabilityZone': 'ap-northeast-1c',
        'AvailableIpAddressCount': 250,
        'CidrBlock': '172.140.2.0/24',
        'DefaultForAz': False,
        'MapPublicIpOnLaunch': False,
        'State': 'available',
        'SubnetId': 'subnet-AAAAAAAA',
        'VpcId': 'vpc-12345678',
        'AssignIpv6AddressOnCreation': False,
        'Ipv6CidrBlockAssociationSet': [],
        'Tags': [{
            'Key': 'Name',
            'Value': 'wawawa_subnet'
        }]
    }, {
        'AvailabilityZone': 'ap-northeast-1a',
        'AvailableIpAddressCount': 248,
        'CidrBlock': '172.140.3.0/24',
        'DefaultForAz': False,
        'MapPublicIpOnLaunch': False,
        'State': 'available',
        'SubnetId': 'subnet-BBBBBBBB',
        'VpcId': 'vpc-12345678',
        'AssignIpv6AddressOnCreation': False,
~~~省略~~~

おわりに

そりゃあこうすればとれるよね


Amazon Web Services 基礎からのネットワーク&サーバー構築 改訂版

Amazon Web Services 基礎からのネットワーク&サーバー構築 改訂版

Pythonで配列をuniqする

概要

Pythonで配列の要素をuniqして、重複を排除してみたいと思います。

コード例

こんなかんじの配列があったとします。

test_array = [ 'AAA', 'BBB', 'BBB', 'CCC', 'AAA' ]


それをこんなかんじでsetにつっこんであげます。

uniq_array = list(set(test_array))


するとこんなかんじの配列ができあがります。

['AAA', 'BBB', 'CCC']

ちょっとした説明

setとは集合を表すデータの型で、配列などのように複数の要素を持つ型です。
特徴としては重複した要素がなく、中に入っている要素に順番がありません。

それらの特徴を利用して、上のコード例では一旦配列の中身をsetにいれてあげて、それをさらにlistで取得しています。

おわりに

かんたんですね!!!


みんなのPython 第4版

みんなのPython 第4版

CloudWatchで日と曜日を指定するときはどちらかに?をつかう

わりと忘れがちなのでメモ。

概要

CloudWatchのスケジュールのcron式で日と曜日を指定するときに、ちゃんと設定しているはずなのに以下のようなメッセージがでてきたのでそれの回避方法です。

Parameter ScheduleExpression is not valid.

回避方法

こんなかんじで日か曜日のフィールドに?を設定する

0 14 * ? * 2-6

マニュアルにもちゃんと書いてありました。

cron 式の日フィールドと曜日フィールドを同時に指定することはできません。一方のフィールドに値 (または *) を指定する場合、もう一方のフィールドで ? (疑問符) を使用する必要があります。

docs.aws.amazon.com

おわりに

OWARI

Amazon Web Services 基礎からのネットワーク&サーバー構築 改訂版

Amazon Web Services 基礎からのネットワーク&サーバー構築 改訂版

Pythonでいま昭和何年か調べる

概要

新元号になっても平成を使い続けるかもしれないというニュースを見たので。
平成に対応できずに便宜上昭和を使い続けているレガシーな企業で役に立つと思う(役に立つとは言っていない)

できたもの

実行してみる

$ date
2018年  5月 16日 水曜日 21:15:01 UTC

$ python syouwa_ima.py 
2018年は昭和93年です!!!

おわりに

どんとこい新元号


入門 Python 3

入門 Python 3

Ansibleでjinja2のifをつかって条件分岐させる

概要

Ansibleのplaybookの中でjinja2の記法をつかって条件分岐させてみたいと思います。

playbook例

prodがhonならhonban、kaiならkaihatsuと出力するように設定しています。

実行してみる

honbanと出力されていることがわかります。

$  ansible-playbook jinja_if.yml -v

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

TASK [debug] **************************************************************************************************************************************************
ok: [localhost] => {
    "msg": "honban"
}

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

ちなみにkaiを指定するとこんなかんじにkaihatsuと出力されるようになります。

$  ansible-playbook jinja_if.yml -v --extra-vars prod=kai

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

TASK [debug] **************************************************************************************************************************************************
ok: [localhost] => {
    "msg": "kaihatsu"
}

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

おわりに

条件分岐させることができました!
あんまり多用するとplaybookが見にくくなりそうですがポイントポイントとしてつかうにはよさそうです。


入門Ansible

入門Ansible

Ansibleのwait_for_connectionをつかってOSの再起動を待つ

概要

Ansibleのwait_for_connectionを利用してターゲットノードのOSを再起動の完了を待ってみようと思います。

playbook例

shellでサーバの再起動を実施しています。asyncpollを指定することでsshコネクションが切断されても処理をそのまま続けることができます。 wait_for_conenctionを利用してssh:22ポートがオープンするまで待機する設定をいれています。

実行してみる

サーバが再起動されてもplaybookがそのまま動いていることがわかります!

PLAY [target] ************************************************************************************************************************************************

TASK [connect check] *****************************************************************************************************************************************
ok: [target] => {"changed": false, "ping": "pong"}

TASK [restart machine] ***************************************************************************************************************************************
changed: [target] => {"ansible_job_id": "205786277660.3357", "changed": true, "finished": 0, "results_file": "/root/.ansible_async/205786277660.3357", "started": 1}

TASK [wait for reboot] ***************************************************************************************************************************************
ok: [target] => {"changed": false, "elapsed": 48}

TASK [connect check] *****************************************************************************************************************************************
ok: [target] => {"changed": false, "ping": "pong"}

PLAY RECAP ***************************************************************************************************************************************************
target                     : ok=4    changed=1    unreachable=0    failed=0   

おわりに

途中で再起動が行われてもplaybookをそのまま続けることができました。
これを利用することでインストール後に再起動が必要なものの実行確認まですることが可能そうです。


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

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

AnsibleでターゲットのIPアドレスを取得する

概要

Ansibleを利用してターゲットノードのIPアドレスを取得してみたいと思います。

playbook例

実行してみる

IPアドレスが出力されていることがわかります!

$  ansible-playbook default_address.yml -v
PLAY [target] ************************************************************************************************************************************************

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

TASK [debug] *************************************************************************************************************************************************
ok: [target] => {
    "ansible_default_ipv4.address": "192.140.1.119"
}

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

おわりに

IPアドレスとれたー

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

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

複数のAWSマネジメントコンソールを利用するときのChromeの設定のすすめ

概要

AWSのマネジメントコンソールを複数アカウント/ユーザ分利用することがまれによくあると思います。

別のアカウントでマネジメントコンソールを立ち上げたときに以下のような画面が出てしまって、セッションが全部切り替わってしまって、あーーーーーー
というのもまれによくあるとおもいます。
f:id:kabegiwakun:20180504143433p:plain

そんなあれを解消するほうほうのご紹介です!!!!!

設定方法

単純にGoogle Chromeで別ユーザをつくってあげればそれで解決します。
f:id:kabegiwakun:20180504143705p:plain

Chromeで別ユーザを作成してあげるとクッキーなどが完全に別で管理されて別セッション扱いになるので、複数アカウント分のマネジメントコンソールを開くことが可能になります!

おわりに



Amazon Web Services 業務システム設計・移行ガイド (Informatics&IDEA)

Amazon Web Services 業務システム設計・移行ガイド (Informatics&IDEA)

  • 作者: 佐々木拓郎,林晋一郎,瀬戸島敏宏,宮川亮,金澤圭
  • 出版社/メーカー: SBクリエイティブ
  • 発売日: 2018/01/20
  • メディア: 単行本
  • この商品を含むブログを見る

Pythonで平成があと何日あるのか計算する

概要

Pythonをつかって平成があと何年で終わってしまうのか計算してみたいと思います。

前提

2019/05/01から新元号になります。
というわけで平成最後の日は2019/04/30です。

できたもの

こんなかんじでやってます。
標準ライブラリのdatetimeを利用して計算しています。

実行してみる

$ date
2018年 5月 4日 金曜日 14時24分35秒 JST

$ python ./heisei_ato.py 
361

無事に平成があと何日あるのかを取得することができました!

おわりに

もうあと1年きっとるやんけ…

入門 Python 3

入門 Python 3

Ansibleのblockinfileモジュールをつかってテキストファイルに行を追加する

概要

Ansibleのblockinfileモジュールをつかってテキストファイルに任意の行を追加してみたいと思います。

playbook例

実行してみる

$ ansible-playbook blockinfile.yml -v

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

TASK [infile text file] **************************************************************************************************************************************
changed: [localhost] => {"changed": true, "msg": "Block inserted"}

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


こんなかんじのテキストファイルが

$ cat /home/ec2-user/wawawa.txt
AAA
BBB
CCC

こうなります!

$ cat /home/ec2-user/wawawa.txt
AAA
BBB
CCC
# BEGIN ANSIBLE MANAGED BLOCK
DDD
EEE
# END ANSIBLE MANAGED BLOCK

おわりに

テキストファイルを直接編集することができました。

入門Ansible

入門Ansible