はじめに
- Ansible 2.0.0.2
- AWS 初級者(初心者ではないけど中級者でもない)
- やっていいのかはわからないけど、人づてにそうしてると聞いた(アカウントで1つのマスターキーペアを全リージョンで使用)
- ので AWS のキーペアを Ansible で作成して全リージョンで同じものを使う playbook を書いた(聞いた先では手作業だそうだけど)
- 単に他リージョンへのキーペアのインポートなので正確には共有とは言わない(かもしれない。AWS で共有とはオブジェクトは1のはずなので)
- 正確には全リージョンでテストしてない(たぶん出来ると思うけど)
先に説明
- ansible の構成はオレオレベストプラクティス
- ただ、Ansible で AWS の場合(鯖を作るんじゃなくてコレみたいに環境を整えるだけの場合)単一のplaybookで動くのでどうでもいいはず
- キーペア名(keyname)が登録されていない場合に新規でキーペアを作成(すでにある場合はスキップ。べき等性)
- その秘密鍵をローカルに保存(~/.ssh/keyname.pem)
- その秘密鍵から公開鍵を作成(~/.ssh/keyname.pub)
- その公開鍵を指定リージョンにインポート(import2region)
- インポート先のリージョンには同名のキーがあった場合置換が発生し、常に所定のキーペアが使われる、らしい(フィンガープリントが更新されている)
- ansible-playbook playbook/aws_keypair.yml
- ssh -i ~/.ssh/test-key.pem ec2-user@IPADDR
ansible-playbook
playbook/aws_keypair.yml
- name: AWS key pair init
hosts: localhost
connection: local
gather_facts: False
vars:
region: "us-east-1"
keyname: "test-key"
# aws ec2 describe-regions | jq '.Regions[].RegionName'
import2region:
#- "eu-west-1"
#- "ap-southeast-1"
#- "ap-southeast-2"
#- "eu-central-1"
#- "ap-northeast-2"
- "ap-northeast-1"
#- "us-east-1"
#- "sa-east-1"
#- "us-west-1"
#- "us-west-2"
tasks:
- name: create key pair
ec2_key:
region: "{{ region }}"
name: "{{ keyname }}"
register: ec2_key_out
- name: write to file
local_action: shell echo -e "{{ item.value.private_key }}" > ~/.ssh/"{{ keyname }}".pem && chmod 600 ~/.ssh/"{{ keyname }}".pem
with_dict: ec2_key_out
when: item.value.private_key is defined
- name: make publickey
local_action: shell ssh-keygen -y -f ~/.ssh/"{{ keyname }}".pem > ~/.ssh/"{{ keyname }}".pub ; chmod 644 ~/.ssh/"{{ keyname }}".pub
with_dict: ec2_key_out
when: item.value.private_key is defined
- name: maybe you want key pair for other region?
ec2_key:
name: "{{ keyname }}"
key_material: "{{ lookup('file', '~/.ssh/' + keyname + '.pub') }}"
region: "{{ item }}"
with_items: import2region
雑感
- cloudformation に挫折して
- terraform で運用維持がきつそうなのでやめて
- Ansible で可能なところだけ投げるだけでアカウント別初期処理にできればいいかなという最中
- 仕事的に新しいアカウントでの環境構築が降って来るのでw
- 仕事用には vars や role も分けて書いてるけど、AWS 環境初期構築にはこんな感じで1処理1ファイルのほうが断然使いやすい気がする
- 北米リージョンで作って東京リージョンでも大丈夫だったので他も大丈夫だろう、的なw