This commit removes a hardcoded 5 second sleep intended to help handle
rate limits. The retry interval is changed during the test to 250ms from
5 seconds, with no change to the runtime behavior of the framework.
Until now, the IAM policy had a dependency on log groups completing
before it could finish because of the use of `Fn::GetAtt` with a log
group, meaning the policy couldn't provision until all log groups were
ready.
This patch changes the log group reference in the CFN template from:
```
{ "Fn::GetAtt": ["MyFuncLogGroup", "Arn"] }
```
to
```
{"Fn::Sub": "arn:aws:logs:${AWS::Region}:${AWS::AccountId}:log-group:/aws/lambda/my-service-dev-myfunction:*"}
```
Meaning the policy can be resolved 100% with pseudoparams for log group ARNs.
This speeds up the CFN initial deploy significantly, and somewhat
improves deployments that add or rename functions.
Having this dependency removed is also the first step in allowing log
groups to be moved to a nested stack.
Since the invoke local functionality overrides `process.env.PATH`, only the
system python is found, not the python provided by an active virtualenv. This
checks for the `VIRTUAL_ENV` environment variable and if present, adds it's bin
dir to `PATH`.
Commands can contain a type property. The only allowed value currently is 'entrypoint'. This declares the command as hidden from the CLI. It will not appear in the help screen, nor can it be called from there.
However, entrypoint type commands can be called by plugins via the new PluginManager.spawn(commandsArray) method. In contrast to PluginManager.run() this method allows access to entrypoint commands and can be used to enter a plugin internal sub lifecycle. With this mechanism in place, plugins can expose their own lifecycle events which become then part of the global lifecycle and can be hooked again by dependent plugins.