Ansible AWS Session Manager Plugin Use Cases
- September 28, 2020
Today we announced the arrival of the Ansible AWS Session Manager plugin, compatible with Ansible 2.10. The solution enables Ansible users to take advantage of the full power of AWS Session Manager with Ansible, tightening network access and eliminating key management. (For more details on the full solution, read today’s blog announcement.)
Consistent with existing Ansible usage, users need only to configure the inventory to use the new plugin. Two different scenarios where you may consider the new plugin include:
Using Static Inventory
When specifying the hostname in the inventory file, instead of providing the IP address or DNS name we need the instance-ids. We have three examples in this scenario.
- Stop the Windows Spooler Service
- Install the Nginx Package on Linux Instance(s)
- Create a Directory in Windows Instances
Note: All the examples use the same Hosts file.
Hosts File:
all:
hosts:
linux1:
ansible_aws_ssm_instance_id: i-0f303b65c4dba14f8
linux2:
ansible_aws_ssm_instance_id: i-0fef0bd908610ff64
windows1:
ansible_aws_ssm_instance_id: i-0aca5f297c4e80a95
windows2:
ansible_aws_ssm_instance_id: i-0eafbc6c61ece7b30
children:
Shell:
hosts:
linux[1:2]:
PowerShell:
hosts:
windows[1:2]:
Stop the Windows Spooler Service
win_service.yaml
—– name: Stop Windows Service
hosts: PowerShell
gather_facts: true
vars:
ansible_connection: aws_ssm
ansible_shell_type: powershell
ansible_aws_ssm_bucket_name: nameofthebucket
ansible_aws_ssm_region: us-east-1
tasks:
– name: Stop spooler service
win_service:
name: spooler
state: stopped
Execution:
ansible-playbook win_service.yaml -i allhosts.yml
By calling `PowerShell` hostgroup, the task will be executed in both defined Windows hosts defined.
Install the Nginx Package on Linux Instance(s)
linux.yaml
– name: Install a Nginx Package
hosts: Shell
vars:
ansible_connection: aws_ssm
ansible_aws_ssm_bucket_name: nameofthebucket
ansible_aws_ssm_region: us-west-2
tasks:
– name: Install a Nginx Package
shell: sudo amazon-linux-extras install nginx1.12 -y
args:
executable: /bin/bash
become_method: sudo
Execution:
Ansible-playbook linux.yaml -i ./allhosts.yml
Output:
Create a Directory in Windows Instances
win_dir.yaml
– name: Create a directory in Windows Instance
hosts: PowerShell
vars:
ansible_connection: aws_ssm
ansible_shell_type: powershell
ansible_aws_ssm_bucket_name: nameofthebucket
ansible_aws_ssm_region: us-east-1
tasks:
– name: Create a Directory
win_file:
path: C:\Windows\Temp\
state: directory
Execution:
ansible-playbook win_dir.yaml -i allhosts.yml
Output:
Using Dynamic Inventory
The AWS Dynamic Inventory plugin works without any changes. We were able to leverage existing support for choosing the hostname from any of the instance attributes. So, in addition to the changes shown above for specifying the connection plugin to use, we need to specify that the AWS dynamic inventory plugin will use the Instance ID as the inventory hostname. For this scenario, we have 2 examples:
Create a Directory on Windows Instances
Dynamic Inventory
plugin: aws_ec2
regions:
– us-east-1
hostnames:
– instance-id
filters:
tag:SSMTag: ssmwindows
From the above dynamic inventory file, the instances IDs will be returned based on the tag filter.
Playbook
–—
– name: Create a dir.
hosts: all
gather_facts: false
vars:
ansible_connection: aws_ssm
ansible_shell_type: powershell
ansible_aws_ssm_bucket_name: test-ssm-instances
ansible_aws_ssm_region: us-east-1
tasks:
– name: Create the directory
win_file:
path: C:\Temp\SSM_Testing5
state: directory
Execution
ansible-playbook win_file.yaml -i aws_ec2.yml
The Dynamic Inventory plugin will fetch the instance-ids matching with the tag filter and the tasks in the playbook will be executed on the returned instances using SSM plugin.
Output:
Install AWS CLI on Linux Instances
Dynamic Inventory
plugin: aws_ec2
regions:
– us-east-1
hostnames:
– instance-id
filters:
tag:SSMTag: ssmlinux
From the above dynamic inventory file, the instances IDs will be returned based on the tag filter.
Playbook
—
– name: install aws-cli
hosts: all
gather_facts: false
vars:
ansible_connection: aws_ssm
ansible_aws_ssm_bucket_name: test-ssm-instances
ansible_aws_ssm_region: us-east-1
tasks:
– name: aws-cli
raw: yum install -y awscli
tags: aws-cli
Execution
ansible-playbook playbook.yml -i aws_ec2.yml
Dynamic Inventory plugin will fetch the instance-ids matching with the tag filter and the tasks in the playbook will be executed on the returned instances using SSM plugin.
Output:
Download the new Ansible AWS Session Manager Plugin today.
This post is contributed by Pat Sharkey, Gaurav Ashtikar, and HanumanthaRao MVL
Subscribe to our blog