hubot-aws
Hubot masters aws commands
I wrote a guest blog published by PacktPub about a quick intro to this npm module. See https://www.packtpub.com/books/content/part2-chatops-slack-and-aws-cli.
Installation
Add hubot-aws to your package.json
file:
npm install --save hubot-aws
Add hubot-aws to your external-scripts.json
:
Run npm install
Auth
Access Control with hubot-auth.
- User with
admin
or the role definedHUBOT_AWS_CAN_ACCESS_ROLE
can run all commands.
# against user without a valid role hubot> hubot ec2 runYou cannot access this feature. Please contact an admin.
- You can disable access control like below.
export HUBOT_AWS_DEBUG="1"
Commands
See scripts/**.coffee for full documentation.
hubot autoscaling create # Create an AutoScaling Group hubot autoscaling delete --group_name=[group_name] # Delete the AutoScaling Group hubot autoscaling delete --group_name=[group_name] --force # Delete the AutoScaling Group with live instances hubot autoscaling launch create # Create an AutoScaling LaunchConfiguration hubot autoscaling launch delete --name=[launch_configuration_name] # Delete the AutoScaling LaunchConfiguration hubot autoscaling launch ls # Displays all AutoScaling LaunchConfigurations hubot autoscaling launch ls --name=[launch_configuration_name] # Details an Autoscaling LaunchConfiguration hubot autoscaling ls # Displays all AutoScaling Groups hubot autoscaling ls --name=[group_name] # Details an Autoscaling Group hubot autoscaling notification delete --group_name=[group_name] --arn=[topic_arn] # Delete the AutoScaling Notificatoin hubot autoscaling notification ls # Displays all AutoScaling NotificationConfigurations hubot autoscaling notification ls --group_name=[group_name] # Details an Autoscaling NotificationConfiguration hubot autoscaling notification put # Put an AutoScaling Notifications hubot autoscaling policy delete --policy_name=[policy_name] # Delete the AutoScaling Policy hubot autoscaling policy ls # Displays all AutoScaling Policies hubot autoscaling policy ls --group_name=[group_name] # Details an Autoscaling Policy hubot autoscaling policy put --add # Put an AutoScaling ScaleOut Policy hubot autoscaling policy put --remove # Put an AutoScaling ScaleIn Policy hubot autoscaling update --json=[json] # Update the AutoScaling Group hubot autoscaling update --json=[json] --dry-run # Try updating the AutoScaling Group hubot autoscaling update --name=[name] --desired=[desired] # Update DesiredCapacity the AutoScaling Group hubot autoscaling update --name=[name] --desired=[desired] --dry-run # Try updating DesiredCapacity the AutoScaling Group hubot autoscaling update --name=[name] --max=[max] # Update MaxSize of the AutoScaling Group hubot autoscaling update --name=[name] --max=[max] --dry-run # Try updating MaxSize of the AutoScaling Group hubot autoscaling update --name=[name] --min=[min] # Update MinSize of the AutoScaling Group hubot autoscaling update --name=[name] --min=[min] --dry-run # Try updating MinSize of the AutoScaling Group hubot autoscaling schedule delete --schedule_name=[policy_name] # Delete the AutoScaling Scheduled Action hubot autoscaling schedule ls # Displays all AutoScaling Scheduled Actions hubot autoscaling schedule ls --group_name=[group_name] # Details an Autoscaling Scheduled Actions hubot autoscaling schedule put # Put an AutoScaling Scheduled Action hubot cloudwatch alarm delete --name=[alarm_name] # Delete the Alarm hubot cloudwatch alarm ls # Displays all Alarms hubot cloudwatch alarm ls --name=[alarm_name] # Details an Alarm hubot ec2 ami create --instance_id=*** # Create an ami. hubot ec2 ami deregister --ami_id=[ami_id] # Deregisters the specified AMI hubot ec2 ami ls # Desplays all AMI(Images) hubot ec2 ls # Displays all Instances hubot ec2 ls --instance_id=[instance_id] # Details an Instance hubot ec2 ls --instance_filter=[instance_name] # Instances that contain instance_name in name hubot ec2 run # Run an Instance hubot ec2 sg create --group_name=[group_name] --desc=[desc] --vpc_id=[vpc_id] # Create a SecurityGroup hubot ec2 sg delete --group_id=[group_id] # Delete the SecurityGroup hubot ec2 sg ls # Desplays all SecurityGroups hubot ec2 spot ls # Displays all SpotInstances hubot ec2 tag create --resource_id=*** --tag_key=*** --tag_value=*** # Create a tag. hubot ec2 tag delete --resource_id=*** # Deletes the specified set of tags hubot ec2 tag ls # Desplays all tags hubot ec2 terminate --instance_id=[instance_id] # Terminate the Instance hubot s3 ls # Displays all S3 buckets hubot s3 ls --bucket_name=[bucket-name] # Displays all objects hubot s3 ls --bucket_name=[bucket-name] --prefix=[prefix] # Displays all objects with prefix hubot s3 ls --bucket_name=[bucket-name] --prefix=[prefix] --marker=[marker] # Displays all objects with prefix from marker hubot sns list topicshubot sns list subscriptionshubot sns list subscription in [topicArn]hubot sns publish [message] to [topicArn]
Configurations
Set environment variables like an example below.
# required export HUBOT_AWS_ACCESS_KEY_ID="ACCESS_KEY"export HUBOT_AWS_SECRET_ACCESS_KEY="SECRET_ACCESS_KEY"export HUBOT_AWS_REGION="ap-northeast-1"# required when used export HUBOT_AWS_DEBUG="1"export HUBOT_AWS_CAN_ACCESS_ROLE="tech"## allow json and cson fileformat as each api config export HUBOT_AWS_EC2_RUN_CONFIG="files/aws/ec2/run/app.json"export HUBOT_AWS_EC2_RUN_USERDATA_PATH="files/aws/ec2/run/initfile"export HUBOT_AWS_EC2_CREATE_AMI_CONFIG="files/aws/ec2/create_ami/app.cson"export HUBOT_AWS_AS_LAUNCH_CONF_CONFIG="files/aws/autoscaling/create_launch_configuration/app.cson"export HUBOT_AWS_AS_LAUNCH_CONF_USERDATA_PATH="files/aws/autoscaling/create_launch_configuration/initfile"export HUBOT_AWS_AS_GROUP_CONFIG="files/aws/autoscaling/create_group/app.cson"export HUBOT_AWS_AS_POLICY_ADD="files/aws/autoscaling/put_policy/add/app.cson"export HUBOT_AWS_AS_POLICY_REMOVE="files/aws/autoscaling/put_policy/remove/app.cson"export HUBOT_AWS_AS_NOTIFICATION="files/aws/autoscaling/put_notification/app.cson"export HUBOT_AWS_CW_ALARM_ADD="files/aws/cloudwatch/put_metric_alarm/add/app.cson"export HUBOT_AWS_CW_ALARM_REMOVE="files/aws/cloudwatch/put_metric_alarm/remove/app.cson"
You can build your own configurations by referring to the example files.
Examples
EC2
hubot ec2 ls - Displays all Instances
hubot> hubot ec2 lsFetching ...hubot> time state id image az subnet type ip name2015-04-17 17:02:27+09:00 running i-25588ed0 ami-AAA ap-northeast-1c subnet-AAA t2.micro 10.0.2.125 app-autoscaling-ondemand2015-04-17 17:05:40+09:00 running i-f6469003 ami-BBB ap-northeast-1c subnet-BBB t2.micro 10.0.2.146 app-autoscaling
hubot ec2 run - Run an Instance
hubot> hubot ec2 runRequesting dry-run=false...hubot> pending i-e23ce817 t2.micro 172.31.19.69 undefined
hubot ec2 terminate --instance_id=[instance_id] - Terminate the Instance
hubot> hubot ec2 terminate --instance_id=i-e23ce817Terminating i-e23ce817...hubot> i-e23ce817 shutting-down
AutoScaling
hubot autoscaling launch ls - Displays all AutoScaling LaunchConfigurations
hubot> hubot autoscaling launch lsFetching ...hubot> time name image type price security2015-04-17 15:31:17+09:00 app-20150417 ami-AAA c3.xlarge 1.000 sg-AAA2015-04-17 16:07:29+09:00 app-20150417-ondemand ami-BBB c3.xlarge [NoPrice] sg-BBB
hubot autoscaling launch create --name=[launch_configuration_name] - Create an AutoScaling LaunchConfiguration
hubot> hubot autoscaling launch create --name=app-20150417Requesting app...hubot> {ResponseMetadata: {RequestId: '68e4734f-e4d0-11e4-8995-AAA' } }
hubot autoscaling ls - Displays all AutoScaling Groups
hubot> hubot autoscaling lsFetching ...hubot> time current_size desired_size min_size max_size az elb conf name tag.Key tag.Value------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------2015-04-17 15:42:00+09:00 5 5 1 1000 ap-northeast-1a app-elb app-20150417 app-group-20150417 Name app-autoscaling role app2015-04-17 16:10:02+09:00 2 2 1 500 ap-northeast-1a app-elb app-20150417-ondemand app-group-20150417-ondemand Name app-autoscaling-ondemand role app
hubot autoscaling create --name=[group_name] --launch_name=[launch_configuration_name] - Create an AutoScaling Group
hubot> hubot autoscaling create --name=app-group-20150417 --launch_name=app-20150417Requesting name=app-group-20150417, conf=app-20150417...hubot> {ResponseMetadata: {RequestId: 'd9f1a0ee-e4cc-11e4-9d11-AAA' } }
hubot autoscaling update --name=[name] --desired=[desired] - Update DesiredCapacity the AutoScaling Group
hubot> hubot autoscaling update --name=app-group-20150417 --desired=9Requesting AutoScalingGroupName=app-group-20150417, DesiredCapacity=9...hubot> {ResponseMetadata: {RequestId: '590e22f0-e4cb-11e4-a03d-AAA' } }
hubot autoscaling policy ls - Displays all AutoScaling Policies
hubot> hubot autoscaling policy lsFetching ...hubot> name type adjustment cooldown group_name time namespace metric statistic threshold period operator alarm_name------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ Add ChangeInCapacity 2 300 app-group-20150417 2015-04-23 21:50:46+09:00 AWS/EC2 CPUUtilization Average 45 900 GreaterThanOrEqualToThreshold awsec2-app-group-20150417-CPU-Utilization Remove ChangeInCapacity -1 [NoValue] app-group-20150417 2015-04-23 21:50:47+09:00 AWS/EC2 CPUUtilization Average 30 900 LessThanOrEqualToThreshold awsec2-app-group-20150417-High-CPU-Utilization
hubot autoscaling policy put --add --group_name=[group_name] - Put an AutoScaling ScaleOut Policy
hubot> hubot autoscaling policy put --add --group_name=app-group-20150417Requesting add policy, AutoScalingGroupName=app-group-20150417, dry-run=false...hubot> {ResponseMetadata: {RequestId: 'c7c33a7b-e822-11e4-bd7f-AAA' }, PolicyARN: 'arn:aws:autoscaling:ap-northeast-1:AAA:scalingPolicy:e8f4b6cb-9d86-4b89-b475-AAA:autoScalingGroupName/app-group-20150417:policyName/Add' }{ResponseMetadata: {RequestId: 'c88c7e44-e822-11e4-b90d-AAA' } }
hubot autoscaling policy put --remove --group_name=[group_name] - Put an AutoScaling ScaleIn Policy
hubot> hubot autoscaling policy put --remove --group_name=app-group-20150417Requesting remove policy, AutoScalingGroupName=app-group-20150417, dry-run=false...hubot> {ResponseMetadata: {RequestId: '14992ecb-e823-11e4-9c53-b9547125f053' }, PolicyARN: 'arn:aws:autoscaling:ap-northeast-1:199839016800:scalingPolicy:86f364a3-b495-4d86-a17b-ad539177f021:autoScalingGroupName/app-group-20150417:policyName/Remove' }
hubot autoscaling notification ls - Displays all AutoScaling NotificationConfigurations
hubot> hubot autoscaling notification lsFetching ...hubot> name type topic_arnapp-group-20150417 autoscaling:EC2_INSTANCE_LAUNCH arn:aws:sns:ap-northeast-1:AAA:autoscaling-noticeapp-group-20150417 autoscaling:EC2_INSTANCE_TERMINATE arn:aws:sns:ap-northeast-1:AAA:autoscaling-noticeapp-group-20150417 autoscaling:EC2_INSTANCE_TERMINATE_ERROR arn:aws:sns:ap-northeast-1:AAA:autoscaling-noticeapp-group-20150417 autoscaling:EC2_INSTANCE_LAUNCH_ERROR arn:aws:sns:ap-northeast-1:AAA:autoscaling-notice
hubot autoscaling notification put --group_name=[group_name] - Put an AutoScaling Notifications
hubot> hubot autoscaling notification put --group_name=app-group-20150417Requesting notifications, AutoScalingGroupName=app-group-20150417, dry-run=false...hubot> {ResponseMetadata: {RequestId: '9b764201-e4cb-11e4-bb52-AAA' } }
Cloudwatch
hubot cloudwatch alarm ls - Displays all Alarms
hubot> hubot cloudwatch alarm lsFetching ...hubot> time namespace metric statistic threshold period operator namedimension.Name dimension.Value------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ 2014-12-12 14:05:49+09:00 AWS/EC2 CPUUtilization Average 30 3600 LessThanOrEqualToThreshold awsec2-app-group-20141209-High-CPU-Utilization AutoScalingGroupName app-group-20141209 2014-12-19 12:15:07+09:00 AWS/EC2 CPUUtilization Average 30 21600 LessThanOrEqualToThreshold awsec2-app-autoscaling-20141219-High-CPU-Utilization AutoScalingGroupName app-autoscaling-20141219
S3
hubot s3 ls - Displays all S3 buckets
hubot> hubot s3 lsFetching ...hubot> time name2014-08-05 14:59:21+09:00 app2014-08-05 17:39:45+09:00 app-images
hubot s3 ls --bucket_name=[bucket-name] --prefix=[prefix] - Displays all objects with prefix
hubot> hubot s3 ls --bucket_name=app-images --prefix=images/Fetching app-images, images/, ...hubot> Prefiximages/000e90ea2e01b830a8d6cd68a10b3e5becdd8a98e41b402a9da3ad97eda1332e/images/001c03788ee31167872d38ce09493a4deb1cbe11728a762065ee1a5acfd1404b/...
SNS
Configuring
In addition to administration of SNS, hubot-aws can also receive push notifications.
- Create a new SNS topic
- Create a subscription and choose HTTP(S). The default configuration is http://:8080/hubot/sns
- The URL can be set using HUBOT_SNS_URL
- Set HUBOT_SNS_JID to hubot's jabber ID
You should see the subscription ID change from PendingConfirmation to a valid subscription id.
Receiving Messages
Use the Subject property to set which room the message should be delivered in, usually its JID. Messages can be raw or JSON format, but JSON is preferred. If you are using hubot-hipchat use the plain old room name for the Subject. The Subject property does not accept multiple rooms. Additionally the Messages does not natively process html templates, but one could implement it.
Sending Messages
hubot-aws
does not send the message to a chat room. This is due to the myriad of adapters and clients hubot supports.
To process a message and send it to your chat room, hook into the sns:notification
event.
# Use this snippet in your own scripts to send messages to the chat room from SNS
robot.on 'sns:notification', (message) ->
# if using HipChat the channelID function converts the common name to the room JID
robot.messageRoom sns.channelID(message.subject), message.message
# if using another adapter
robot.messageRoom message.subject, message.message
Recommended Usage
--dry-run
Use hubot> hubot ec2 run --dry-runRequesting dry-run=true...{MinCount: 1, MaxCount: 1, DryRun: false, ImageId: 'ami-AAA', KeyName: 'aws', InstanceType: 't2.micro', Placement: {AvailabilityZone: 'ap-northeast-1a' }, NetworkInterfaces: [ {Groups: [ 'sg-AAA' ], SubnetId: 'subnet-AAA', DeviceIndex: 0, AssociatePublicIpAddress: true } ], UserData: 'IyEvYmluL2Jhc2gKCiMgc2V0dXAgc3RhcnQgbm90aWZ5CkhPU1RfTkFNRT1gaG9zdG5hbWVgCg... # Then, remove --dry-run optionhubot> hubot ec2 run...
hubot-env
UseYou can switch environment variables about AWS Account Credentials via hubot command dynamically, if you want to manage multi accounts.
# Load new environment variables abount AWS credentials of account 1. hubot> hubot env load --filename=aws-cred-account1.envLoading env --filename=aws-cred-account1.env, --dry-run=false...HUBOT_AWS_CREDENTIALS=account1HUBOT_AWS_ACCESS_KEY_ID=ACCESS_KEY1HUBOT_AWS_SECRET_ACCESS_KEY=***HUBOT_AWS_REGION=ap-northeast-1 # Then, Switch to overwrite environment variables abount AWS credentials of account 2. hubot> hubot env load --filename=aws-cred-account2.envLoading env --filename=aws-cred-account2.env, --dry-run=false...HUBOT_AWS_CREDENTIALS=account2HUBOT_AWS_ACCESS_KEY_ID=ACCESS_KEY2HUBOT_AWS_SECRET_ACCESS_KEY=***HUBOT_AWS_REGION=ap-northeast-1
hubot-hint
Usehubot-aws
supports many commands and some commands require multi arguments.
hubot-hint
shows rest of command help.
# Search commandHelps with `autoscaling launch` hubot> hubot autoscaling launch hinthubot>hubot autoscaling launch create --name=[launch_configuration_name] # Create an AutoScaling LaunchConfiguration hubot autoscaling launch create --name=[launch_configuration_name] --dry-run # Try creating an AutoScaling LaunchConfiguration hubot autoscaling launch delete --name=[launch_configuration_name] # Delete the AutoScaling LaunchConfiguration hubot autoscaling launch ls # Displays all AutoScaling LaunchConfigurations hubot autoscaling launch ls --name=[launch_configuration_name] # Details an Autoscaling LaunchConfiguration # Search commandHelps with `autoscaling launch create` hubot> hubot autoscaling launch create hinthubot>hubot autoscaling launch create --name=[launch_configuration_name] # Create an AutoScaling LaunchConfiguration hubot autoscaling launch create --name=[launch_configuration_name] --dry-run # Try creating an AutoScaling LaunchConfiguration