サーチ…


備考

example-2:これは例として役立つので、コピー/ペーストしないでください。代わりに、ニーズに合わせて変数をカスタマイズする必要があります。 ansible_key、セキュリティグループルールなど。

example-1:ssh strictホスト鍵検査を無効にするには、タスクを自動化するときに望ましくない振る舞いを、それを、 ansible.cfgファイルでnoansible.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/templatesmy_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_keyaws_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.pyec2.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"
}


Modified text is an extract of the original Stack Overflow Documentation
ライセンスを受けた CC BY-SA 3.0
所属していない Stack Overflow