ansible
Amazon Webサービスで有能なユーザーを使用する
サーチ…
備考
example-2:これは例として役立つので、コピー/ペーストしないでください。代わりに、ニーズに合わせて変数をカスタマイズする必要があります。 ansible_key、セキュリティグループルールなど。
example-1:ssh strictホスト鍵検査を無効にするには、タスクを自動化するときに望ましくない振る舞いを、それを、 ansible.cfg
ファイルでno
にansible.cfg
ます。すなわち: StrictHostKeyChecking=no
ec2.py
ファイルは、あなたのプロジェクトの範囲を特定の地域、特定のタグなどに限定したい場合にカスタマイズする必要がある設定ファイルであるec2.ini
基づいてAWS ec2.ini
を実行して返すPythonスクリプトです...
公式のAmazon AMIからEC2インスタンスを起動し、それを修正して新しいAMIとして保存する方法
これは、AWS EC2インスタンスのプロビジョニングにAnsibleを使用する場合の非常に一般的なワークフローです。この記事は、Anabilitiesの基本的な理解を前提としています。最も重要なことは、AWSに接続するように正しく設定していることを前提としています。
Anipalの公式文書が主張するように 、私たちは次の4つの役割を使用します:
ami_findを使用してami idを取得し、EC2インスタンスを起動します。
2 -ec2_ami_creationを使用してEC2インスタンスを効果的に起動します。
インスタンスを変更するための3 つのcode_deploy 。これは何でもかまいませんので、単にターゲットマシンにファイルを転送します。
4 build_amiを実行して、実行中のec2インスタンスに基づいて新しいイメージを構築します。この記事はあなたがAnsibleプロジェクトのトップレベルにいることを前提としています: my_ansible_project
最初の役割: ami_find
cd my_ansible_project/roles && ansible-galaxy init ami_find
この役割では、 ec2_ami_findモジュールを使用し、例として、Ubuntuマシンを検索し、 ami_id (ami-xxxxxxxx)を取得します。次に、 my_ansible_project/roles/ami_find/tasks/main.yml
ファイルをmy_ansible_project/roles/ami_find/tasks/main.yml
ます。
---
- ec2_ami_find:
name: "ubuntu/images/hvm-ssd/ubuntu-trusty-14.04-amd64-server-*"
sort: name
sort_order: descending
sort_end: 1
region: "{{ aws_region }}"
register: ami_find
- set_fact: ami_ubuntu="{{ ami_find.results[0].ami_id }}"
2番目の役割: ec2_ami_creation
ここでは、最初の役割から取得したami_id
を使用し、それに基づいて新しいインスタンスを起動します。
cd my_ansible_project/roles && ansible-galaxy init ec2_ami_creation
この役割では、 ec2_moduleを使用してインスタンスを起動します。次に、 my_ansible_project/roles/ec2_ami_creation/tasks/main.yml
ファイルをmy_ansible_project/roles/ec2_ami_creation/tasks/main.yml
ます。
---
- ec2_vpc_subnet_facts:
region: "{{aws_region}}"
register: vpc
- name: creation of security group of the ec2 instance
ec2_group:
name: example
description: an example EC2 group
region: "{{ aws_region }}"
rules:
- proto: tcp
from_port: 22
to_port: 22
cidr_ip: 0.0.0.0/0
state: present
register: ec2_sg
- name: create instance using Ansible
ec2:
key_name: "{{ ansible_key }}"
group: example
vpc_subnet_id: "{{vpc.subnets[0].id}}"
instance_type: "{{ instance_type }}"
ec2_region: "{{ aws_region }}"
image: "{{ base_image }}"
assign_public_ip: yes
wait: yes
register: ec2
- set_fact: id={{ec2.instances[0].id}}
- name: adding the newly created instance to a temporary group in order to access it later from another play
add_host: name={{ item.public_ip }} groups=just_created
with_items: ec2.instances
- name: Wait for SSH to come up
wait_for: host={{ item.public_dns_name }} port=22 delay=10 timeout=640 state=started
with_items: ec2.instances
3番目の役割: code_deploy
ここでは、このインスタンスをプロビジョニングします。このインスタンスは、 just_created
というグループに追加されていjust_created
cd my_ansible_project/roles && ansible-galaxy init code_deploy
この役割では、 template_moduleを使用してファイルを転送し、マシンのホスト名を書き込みます。次に、 my_ansible_project/roles/code_deploy/tasks/main.yml
ファイルをmy_ansible_project/roles/code_deploy/tasks/main.yml
ます。
---
- template: src=my_file.txt.j2 dest=/etc/my_file.txt
あなたの役割の中のテンプレートフォルダに移動してください:
cd my_ansible_project/roles/templates
をmy_file.txt.j2
を含むmy_file.txt.j2
というファイルを追加します。
my name is {{ ansible_hostname }}`
4番目の役割: build_ami
ここで、 ec2_amiモジュールを使用して実行中のインスタンスのイメージを作成します 。プロジェクトフォルダに移動し、次の操作を行います。
cd my_ansible_project/roles && ansible-galaxy init build_ami
次に、 my_ansible_project/roles/build_ami/tasks/main.yml
ファイルをmy_ansible_project/roles/build_ami/tasks/main.yml
ます。
---
- ec2_ami:
instance_id: "{{ instance_id }}"
wait: yes
name: Base_Image
さて、私はあなたがこれらの役割のすべてをどのように編成するのだろうと思っていると思います。私は正しい?その場合は、読み続ける。
私たちは3つの演劇で構成された演劇帳を書いていきます: localhost
に最初に当てはまる演劇は私達のjust_createdグループに当てはまる最初の2つの役割、第2の演劇を呼ぶでしょう。最後の役割はlocalhost
に適用されます。なぜlocalhost
ですか?いくつかのAWSリソースを管理したいときは、ローカルマシンを使用します。次に、変数、 aws_region
ansible_key
、 aws_region
などを格納するvarsファイルを使用します。
プロジェクトの最上部にインフラストラクチャフォルダを作成し、 aws.yml
というaws.yml
ファイルを追加します。
---
aws_region: ap-southeast-2
ansible_key: ansible
instance_type: t2.small
だからあなたのプロジェクトの一番上にbuild_base_image.yml
を作り、これを追加してください:
---
- hosts: localhost
connection: local
gather_facts: False
vars_files:
- infrastructure/aws.yml
roles:
- ami_find
- { role: ec2_creation, base_image: "{{ ami_ubuntu }}"}
- hosts: just_created
connection: ssh
gather_facts: True
become: yes
become_method: sudo
roles:
- code_deploy
- hosts: localhost
connection: local
gather_facts: False
vars_files:
- infrastructure/aws.yml
roles:
- { role: new_image, instance_id: "{{ id }}"}
それは、これをテストした後にあなたのリソースを削除するのを忘れないでください、または実行中のインスタンスを削除するロールを作成しないでください:-)
Amazon Webサービスに接続するための適切な設定方法
スケールアップとスケールダウンのAWSリソースを管理することで、静的インベントリホストファイルの限界に達します。そのため、何か動的なものが必要です。それが動的インベントリの目的です。始めましょう:
これらのec2.iniファイルとec2.pyファイルをプロジェクトフォルダにダウンロードします。
cd my_ansible_project
wget https://raw.githubusercontent.com/ansible/ansible/devel/contrib/inventory/ec2.py
wget https://raw.githubusercontent.com/ansible/ansible/devel/contrib/inventory/ec2.ini
設定が終わったら、 ec2.py
ファイルを実行可能にします:
chmod +x ec2.py
次に、環境変数としてAWS SecretとAccessキーをエクスポートします。
export AWS_ACCESS_KEY_ID='ABCDEFGHIJKLM'
export AWS_SECRET_ACCESS_KEY='NOPQRSTUVWXYZ'
ec2.py
スクリプトを使用するには、Python AWS SDK、 boto
が必要です。インストールする必要があります。
sudo pip install boto
すべてが良いかどうかをテストするには、リソースをリストアップしてec2.py
実行してec2.py
てください:
./ec2.py --list
次のようなものが表示されます。
{
"_meta": {
"hostvars": {}
}
}
ここでは、静的ホストファイルとともに動的インベントリを使用したいと考えています。まず、 inventory
という名前のフォルダを作成し、 ec2.py
、 ec2.ini
およびhosts
ファイルを追加して、そのフォルダをインベントリファイルとして使用するようにAnsibleに指示します。
mkdir inventory
mv ec2.py inventory/ec2.py
mv ec2.ini inventory/ec2.ini
mv hosts inventory/hosts
次に、 ansible.cfg
と呼ばれるプロジェクトフォルダにAnsible設定ファイルを作成し、これを追加して、 ansible.cfg
プロジェクトレベルの設定を定義する必要があります。
[defaults]
hostfile = inventory
[ssh_connection]
pipelining = False
ssh_args = -o ControlMaster=auto -o ControlPersist=30m -o StrictHostKeyChecking=no
次に、EC2インスタンスへのアクセスを認証するためにSSH鍵を使用するようにAnsibleを設定する必要があります。 SSHエージェントを使用することは、リソースを認証するための最良の方法です。これにより、キーの管理が容易になります。
ssh-agent bash
ssh-add ~/.ssh/keypair.pem
それでおしまい!これを実行した場合は、 ping
モジュールを使用してテストできます。次に、pongで応答するキーを使用するように構成された実行中のインスタンスが表示されます。
ansible -m ping all
11.22.33.44 | success >> {
"changed": false,
"ping": "pong"
}