Counter
The cloud.Counter resource represents a stateful container for one or more numbers in the cloud.
Usage
Defining a counter
bring cloud;
let counter = new cloud.Counter(
  initial: 123, // optional, defaults to 0
);
Using a counter inflight
bring cloud;
let counter = new cloud.Counter();
let counterFunc = inflight () => {
  let prev = counter.inc(); // increment by 1 and return previous value
  counter.inc(5); // increment by 5
  counter.dec(); // decrement by 1
  counter.dec(2); // decrement by 2
  assert(counter.peek() == 3); // check the current value
  counter.set(100); // set to a specific value
};
new cloud.Function(counterFunc);
Using keys to manage multiple counter values
bring cloud;
let counter = new cloud.Counter(initial: 100);
let counterFunc = inflight () => {
  let k1 = "key-1";
  let k2 = "key-2";
  counter.dec(1, k1); // decrement k1 by 1
  counter.inc(11, k2); // increment k2 by 11
  assert(counter.peek(k1) == 99); // check the current value of k1
  assert(counter.peek(k2) == 111); // check the current value of k2
};
new cloud.Function(counterFunc);
Target-specific details
Simulator (sim)
Under the hood, the simulator stores the counter value in memory.
Note that counter data is not persisted between simulator runs.
AWS (tf-aws and awscdk)
The AWS implementation of cloud.Counter uses Amazon DynamoDB.
Azure (tf-azure)
🚧 Not supported yet (tracking issue: #629)
GCP (tf-gcp)
🚧 Not supported yet (tracking issue: #628)
API Reference 
Counter 
A distributed atomic counter.
Initializers 
bring cloud;
new cloud.Counter(props?: CounterProps);
| Name | Type | Description | 
|---|---|---|
|  |  | No description. | 
propsOptional 
- Type: CounterProps
Methods 
Inflight Methods
| Name | Description | 
|---|---|
|  | Decrement the counter, returning the previous value. | 
|  | Increments the counter atomically by a certain amount and returns the previous value. | 
|  | Get the current value of the counter. | 
|  | Set a counter to a given value. | 
dec 
inflight dec(amount?: num, key?: str): num
Decrement the counter, returning the previous value.
amountOptional 
- Type: num
amount to decrement (default is 1).
keyOptional 
- Type: str
specify the key to be decremented.
inc 
inflight inc(amount?: num, key?: str): num
Increments the counter atomically by a certain amount and returns the previous value.
amountOptional 
- Type: num
amount to increment (default is 1).
keyOptional 
- Type: str
specify the key to be incremented.
peek 
inflight peek(key?: str): num
Get the current value of the counter.
Using this API may introduce race conditions since the value can change between the time it is read and the time it is used in your code.
keyOptional 
- Type: str
specify the key to be retrieved.
set 
inflight set(value: num, key?: str): void
Set a counter to a given value.
valueRequired 
- Type: num
new value.
keyOptional 
- Type: str
specify the key to be set.
Static Functions 
| Name | Description | 
|---|---|
|  | A hook called by the Wing compiler once for each inflight host that needs to use this type inflight. | 
|  | Generates an asynchronous JavaScript statement which can be used to create an inflight client for a resource. | 
onLiftType 
bring cloud;
cloud.Counter.onLiftType(host: IInflightHost, ops: MutArray<str>);
A hook called by the Wing compiler once for each inflight host that needs to use this type inflight.
The list of requested inflight methods
needed by the inflight host are given by ops.
This method is commonly used for adding permissions, environment variables, or other capabilities to the inflight host.
hostRequired 
- Type: IInflightHost
opsRequired 
- Type: MutArray<str>
toInflight 
bring cloud;
cloud.Counter.toInflight(obj: IResource);
Generates an asynchronous JavaScript statement which can be used to create an inflight client for a resource.
NOTE: This statement must be executed within an async context.
objRequired 
- Type: IResource
Properties 
| Name | Type | Description | 
|---|---|---|
|  | constructs.Node | The tree node. | 
|  | num | The initial value of the counter. | 
nodeRequired 
node: Node;
- Type: constructs.Node
The tree node.
initialRequired 
initial: num;
- Type: num
The initial value of the counter.
Structs 
CounterProps 
Options for Counter.
Initializer 
bring cloud;
let CounterProps = cloud.CounterProps{ ... };
Properties 
| Name | Type | Description | 
|---|---|---|
|  | num | The initial value of the counter. | 
initialOptional 
initial: num;
- Type: num
- Default: 0
The initial value of the counter.