Consuming Service Dependencies¶
When you specify a dependency on a service using Service Dependencies, that service is auto-wired to your application. This page contains information about how you can consume those injected dependencies in your application code to actually communicate with these services.
When Handel wires services together securely, it will inject environment variables into the consuming service for each service that it depends on. These environment variables provide information about the created service that tell you information such as where to find the service and how to communicate with it.
The following Handel file defines a Beanstalk service that depends on an SQS queue:
version: 1
name: beanstalk-example
environments:
dev:
webapp:
type: beanstalk
path_to_code: .
solution_stack: 64bit Amazon Linux 2016.09 v4.0.1 running Node.js
instance_type: t2.micro
health_check_url: /
min_instances: 1
max_instances: 1
dependencies:
- my-queue
my-queue:
type: sqs
Handel will inject environment variables in the Beanstalk application for the SQS queue, such as the queue’s ARN, name, and URL. You can read these environment variables when you are writing code to communicate with the queue.
Environment Variable Names¶
Every environment variable injected by Handel for service dependencies has a common structure.
This environment variable name consists of the dependency’s name (as defined in the Handel file), followed by the name of the value being injected.
<SERVICE_NAME>_<VALUE_NAME>
In the above example, the referencing Beanstalk application would need to use the following name to get the URL of the SQS Queue:
MY_QUEUE_QUEUE_URL
Note
All Handel injected environment variables will be all upper-cased, with dashes converted to underscores.
Parameter Store Prefix¶
Handel puts auto-generated credentials and other secrets in the EC2 Parameter Store, and it wires up your applications to allow you to access these secrets.
Each parameter Handel puts in the parameter store has a common prefix, which is defined by the following structure:
<app_name>.<environment_name>
You can use the Common Injected Environment Variables to obtain the value of this prefix.
Common Injected Environment Variables¶
In addition to environment variables injected by services your applications consume, Handel will inject a common set of environment variables to all applications:
Environment Variable | Description |
---|---|
HANDEL_APP_NAME | This is the value of the name field from your Handel file. It is the name of your application. |
HANDEL_ENVIRONMENT_NAME | This is the value of the <environment> field from your Handel file. It is the name of the environment the current service is a part of. |
HANDEL_SERVICE_NAME | This is the value of the <service_name> field from your Handel file. It is the name of the currently deployed service. |
HANDEL_PARAMETER_STORE_PREFIX | This is the prefix used for secrets stored in Parameter Store. |
HANDEL_REGION_NAME | This is the value of the <region_name> field from your Handel file, or the current region if the region id not specified. |