92 lines
2.6 KiB
Markdown
92 lines
2.6 KiB
Markdown
|
# Ansible Role `aws_ec2`
|
||
|
|
||
|
Ansible role for creating, deleting, stopping and starting AWS EC2 instances
|
||
|
for running keycloak tests.
|
||
|
|
||
|
## Prerequisities
|
||
|
|
||
|
Role requires Ansible Collection `amazon.aws` version `6.0.0` or higher.
|
||
|
|
||
|
Role assumes that user is authenticated to use AWS CLI, ie. that authentication
|
||
|
variables `AWS_ACCESS_KEY` and `AWS_SECRET_KEY` are set in the environment.
|
||
|
|
||
|
|
||
|
## Parameters
|
||
|
- `region`: AWS region for the resources to be created in.
|
||
|
- `cluster_name`: Unique name of the instance cluster within the region. Defaults to `keycloak_{{ cluster_identifier }}`.
|
||
|
- `cluster_identifier`: Identifier to distingish multiple clusters within the region. Defaults to `${USER}`.
|
||
|
- `cluster_size`: Number of EC2 instances to be created.
|
||
|
- `ami_name`: Name of the AMI image to be used for spawning instances.
|
||
|
- `instance_type`: [AWS instance type](https://aws.amazon.com/ec2/instance-types/).
|
||
|
- `instance_volume_size`: Size of instance storage device.
|
||
|
- `instance_device`: Path to Linux storage device.
|
||
|
|
||
|
For defaults see `defaults/main.yml`.
|
||
|
|
||
|
|
||
|
## Example Playbook
|
||
|
|
||
|
Example playbook `aws_ec2.yml`:
|
||
|
```
|
||
|
- hosts: localhost
|
||
|
connection: local
|
||
|
roles: [aws_ec2_client]
|
||
|
```
|
||
|
|
||
|
## Create Instances
|
||
|
|
||
|
Using the example playbook run:
|
||
|
```
|
||
|
ansible-playbook aws_ec2.yml -e region=<REGION> -e operation=create
|
||
|
```
|
||
|
|
||
|
Replace <REGION> with actual value, e.g. `us-west-1`.
|
||
|
|
||
|
Optionally you can override other parameters by `-e PARAMETER=VALUE` or `-e @PARAMS.yml`.
|
||
|
|
||
|
This operation will create the following 2 files:
|
||
|
- `{{ cluster_name }}_{{ region }}.pem` - private SSH key.
|
||
|
- `{{ cluster_name }}_{{ region }}_inventory.yml` - an Ansible host inventory file.
|
||
|
|
||
|
```
|
||
|
keycloak:
|
||
|
children:
|
||
|
"{{ cluster_name }}_{{ region }}":
|
||
|
vars:
|
||
|
ansible_user: ec2-user
|
||
|
ansible_become: yes
|
||
|
ansible_ssh_private_key_file: "{{ cluster_name }}_{{ region }}.pem"
|
||
|
hosts:
|
||
|
host-1-ip-address:
|
||
|
host-2-ip-address:
|
||
|
...
|
||
|
```
|
||
|
|
||
|
Notice that the created hosts will be included in Ansible group `keycloak`
|
||
|
and subgroup `{{ cluster_name }}_{{ region }}`.
|
||
|
|
||
|
|
||
|
## Stop and Start instances
|
||
|
|
||
|
Using the example playbook run:
|
||
|
```
|
||
|
ansible-playbook aws_ec2.yml -e region=<REGION> -e operation=stop
|
||
|
```
|
||
|
|
||
|
After the instances are stopped their public IP addresses will be de-allocated.
|
||
|
|
||
|
```
|
||
|
ansible-playbook aws_ec2.yml -e region=<REGION> -e operation=start
|
||
|
```
|
||
|
|
||
|
After the instances are started again the role will re-create the host inventory file with updated public IP addresses.
|
||
|
|
||
|
|
||
|
## Delete Instances
|
||
|
Using the example playbook run:
|
||
|
```
|
||
|
ansible-playbook aws_ec2.yml -e region=<REGION> -e operation=delete
|
||
|
```
|
||
|
|
||
|
This will remove created AWS resources and delete the host inventory file and private key.
|