---
title: About the aws_elb Resource
platform: aws
---
# aws\_elb
Use the `aws_elb` Chef InSpec audit resource to test properties of a single AWS Elastic Load Balancer (ELB, also known as a Classic Load Balancer).
To audit ELBs in bulk or to search, use `aws_elbs` (plural).
## Availability
### Installation
This resource is distributed along with Chef InSpec itself. You can use it automatically.
### Version
This resource first became available in v2.2.10 of InSpec.
## Resource Parameters
An `aws_elb` resource block declares the tests for a single AWS ELB by ELB name.
describe aws_elb('my-elb') do
it { should exist }
end
describe aws_elb(elb_name: 'my-elb') do
its('instance_ids.count') { should cmp 2 }
end
## Examples
The following examples show how to use this Chef InSpec audit resource.
### Test that an ELB does not exist
describe aws_elb('bad-elb') do
it { should_not exist }
end
### Test that an ELB has a presence in at least two availability zones
describe aws_elb('web') do
its('availability_zones.count') { should be > 1 }
end
## Properties
### availability\_zones
Returns an array of strings identifying which availability zones in which the load balancer is located.
# Verify we are in both us-east-2a and us-east-2b
describe aws_elb('web-elb') do
its('availability_zones') { should include 'us-east-2a' }
its('availability_zones') { should include 'us-east-2b' }
end
### dns\_name
Returns the FQDN of the load balancer. This is the hostname which is exposed to the world.
# Ensure that the ELB has a DNS name
describe aws_elb('web-elb') do
its('dns_name') { should match /\.com/ }
end
### elb\_name
The name of the ELB within AWS. The ELB name is unique within the region.
# Ensure that the ELB's name is what we said it was
describe aws_elb('web-elb') do
its('elb_name') { should match /web-elb/ }
end
### external\_ports
Returns an array of integers reflecting the public-facing ports on which the load balancer will be listening for traffic.
# Ensure that we are listening on port 80 and nothing else
describe aws_elb('web-elb') do
its('external_ports') { should include 80 }
its('external_ports.count') { should cmp 1 }
end
### instance\_ids
Returns an array of strings reflecting the instance IDs of the EC2 instances attached to the ELB.
# Ensure that a specific instance is attached
describe aws_elb('web-elb') do
its('instance_ids') { should include 'i-12345678' }
end
### internal\_ports
Returns an array of integers reflecting the EC2-facing ports on which the load balancer will be sending traffic to.
# Ensure that we are sending traffic to port 80 on the instances and nothing else
describe aws_elb('web-elb') do
its('internal_ports') { should include 80 }
its('internal_ports.count') { should cmp 1 }
end
### security\_group\_ids
Returns an array of strings reflecting the security group IDs (firewall rule sets) assigned to the ELB.
# Ensure that a specific SG ID is assigned
describe aws_elb('web-elb') do
its('security_group_ids') { should include 'sg-12345678' }
end
### subnet\_ids
Returns an array of strings reflecting the subnet IDs on which the ELB is located.
# Ensure that the ELB is on a specific subnet
describe aws_elb('web-elb') do
its('subnet_ids') { should include 'subnet-12345678' }
end
### vpc\_id
Returns a String reflecting the ID of the VPC in which the ELB is located.
# Ensure that the ELB is on a specific VPC
describe aws_elb('web-elb') do
its('vpc_id') { should cmp 'vpc-12345678' }
end
## Matchers
This Chef InSpec audit resource has no special matchers. For a full list of available matchers, please visit our [Universal Matchers page](https://www.inspec.io/docs/reference/matchers/).
## AWS Permissions
Your [Principal](https://docs.aws.amazon.com/IAM/latest/UserGuide/intro-structure.html#intro-structure-principal) will need the `elasticloadbalancing:DescribeLoadBalancers` action set to Allow.
You can find detailed documentation at [Authentication and Access Control for Your Load Balancers](https://docs.aws.amazon.com/elasticloadbalancing/latest/userguide/load-balancer-authentication-access-control.html)