Amazon AWSでansibleを使用して小さなwebappインフラストラクチャを作成しようとしています。インスタンスの起動、サービスの設定など、すべてのプロセスを実行したいのですが、ansibleからそれを処理する適切なツールまたはモジュールが見つかりません。主にEC2の起動。
どうもありがとう。
これはあなたの質問の短い答えです。詳細と完全に自動化された役割が必要な場合は、お知らせください。ありがとう
前提条件:
アンシブル
Python botoライブラリ
環境設定でAWSアクセスキーとシークレットキーを設定する
(ベストは〜。/ boto内にあります)
EC2インスタンスを作成するには、「vars」の下の「ec2_launch.yml」ファイル内にあるこれらのパラメーターを変更してください。
count#作成したいインスタンスの数
これらのパラメータに言及したら、次のコマンドを実行してください。
ansible-playbook -iホストec2_launch.yml
hostsファイルの内容:
[local]
localhost
[webserver]
ec2_launch.ymlファイルの内容:
---
- name: Provision an EC2 Instance
hosts: local
connection: local
gather_facts: False
tags: provisioning
# Necessary Variables for creating/provisioning the EC2 Instance
vars:
instance_type: t1.micro
security_group: webserver # Change the security group name here
image: AMI-98aa1cf0 # Change the AMI, from which you want to launch the server
region: us-east-1 # Change the Region
keypair: ansible # Change the keypair name
count: 1
# Task that will be used to Launch/Create an EC2 Instance
tasks:
- name: Create a security group
local_action:
module: ec2_group
name: "{{ security_group }}"
description: Security Group for webserver Servers
region: "{{ region }}"
rules:
- proto: tcp
type: ssh
from_port: 22
to_port: 22
cidr_ip: 0.0.0.0/0
- proto: tcp
from_port: 80
to_port: 80
cidr_ip: 0.0.0.0/0
rules_egress:
- proto: all
type: all
cidr_ip: 0.0.0.0/0
- name: Launch the new EC2 Instance
local_action: ec2
group={{ security_group }}
instance_type={{ instance_type}}
image={{ image }}
wait=true
region={{ region }}
keypair={{ keypair }}
count={{count}}
register: ec2
- name: Add the newly created EC2 instance(s) to the local Host group (located inside the directory)
local_action: lineinfile
dest="./hosts"
regexp={{ item.public_ip }}
insertafter="[webserver]" line={{ item.public_ip }}
with_items: "{{ ec2.instances }}"
- name: Wait for SSH to come up
local_action: wait_for
Host={{ item.public_ip }}
port=22
state=started
with_items: "{{ ec2.instances }}"
- name: Add tag to Instance(s)
local_action: ec2_tag resource={{ item.id }} region={{ region }} state=present
with_items: "{{ ec2.instances }}"
args:
tags:
Name: webserver
他の人が言ったように、クラウドモジュールには、必要なAWSプロビジョニングサポートがほぼすべて含まれています。とはいえ、Ansibleのパラダイムは、ターゲットにして接続する既存のSSH:可能なマシンがあれば、最も意味があります。これに対して、インスタンス化フェーズでは、基本的にローカルマシンをターゲットにするように求められ、そこからAWS APIエンドポイントを呼び出します。
あなたと同じように、私はEC2のインスタンス化からその構成へのスムーズな移行を伴うシングルショットコマンドが必要でした。 ドキュメント にこのようなことを実現する方法に関する提案がありますが、現在のホストインベントリに関するTweak Ansibleのアイデアに対するadd_Hostモジュールに依存しており、それでも解決しなかったソリューションは見つかりませんでした。私は、システムではなく反対に取り組んでいたように感じます。
最終的に、2つの異なるプレイブックを選択しました。ec2、ec2_group、ec2_vol、ec2_eip、およびroute53モジュールを使用して「ハードウェア」を配置し、configure.ymlを従来のAnsibleサイトのように使用することを保証するprovision.yml .ymlは、ホストインベントリ(私の場合は静的ですが、動的に機能します)を指定されたものとして扱い、宣言的な状態遷移をすべて実行できます。
どちらのプレイブックもdem等ですが、長い目で見れば繰り返し実行されることを意図したconfigure.ymlです。
EC2モジュール は、インスタンスを作成および破棄するために正確に設計されました。
「最良の」方法が必要な場合、Ansibleから起動できるCloudFormationに勝るものはありません。