AWS FIS
AWS Fault Injection Simulator (fis) on fakecloud: a complete 26-operation control plane (100% conformance). restJson1.
fakecloud implements AWS FIS (Fault Injection Simulator) as a restJson1 service. All 26 operations ship with 100% conformance against AWS's own Smithy model, backed by account-partitioned state that persists across restarts in persistent mode. FIS signs SigV4 with the fis scope (arn:aws:fis:...), so no signing-name alias is required.
AWS FIS on fakecloud is a faithful control plane: every CreateExperimentTemplate / UpdateExperimentTemplate is reflected by its GetExperimentTemplate / ListExperimentTemplates, every DeleteExperimentTemplate deletes, and every StartExperiment is durably recorded and progresses through a deterministic lifecycle that settles on the next read.
Data plane (later batch). The actual fault injection into other services — stopping EC2 instances, draining ECS tasks, throttling API calls — is a follow-up batch. Until then, an experiment progresses through its states (initiating -> running -> completed) through the control-plane state machine honestly, without perturbing real resources. This is stated plainly rather than faked.
Resources
Experiment templates -
CreateExperimentTemplate(POST /experimentTemplates) validates the requiredclientToken,description,stopConditions,actions, androleArn(plus model@lengthconstraints), echoes thetargets/actions/stopConditions/logConfigurationverbatim, defaultsexperimentOptions(single-account targeting, fail-on-empty resolution), and returns anEXT-shaped id with anarn:aws:fis:<region>:<account>:experiment-template/<id>ARN.GetExperimentTemplateechoes exactly what was persisted;UpdateExperimentTemplate(PATCH) applies the requested changes and stampslastUpdateTime;ListExperimentTemplatesreturns theExperimentTemplateSummaryprojections (paginated viamaxResults/nextToken);DeleteExperimentTemplateremoves the template.Experiments -
StartExperiment(POST /experiments) requires the template to exist, copies its targets / actions / stopConditions onto a newEXP-shaped experiment in stateinitiating, and returns it. The lifecycle settles deterministically on the next read:initiating->running->completed, with each action'sstateand the experiment'sstartTime/endTimetracking the run.StopExperiment(DELETE /experiments/{id}) moves a non-terminal experiment tostopping, which settles tostopped.GetExperiment/ListExperiments(with theexperimentTemplateIdfilter) read them back; in-flight transitions reconcile on restart.ListExperimentResolvedTargetsprojects each experiment target's resolved resources.Actions catalog -
ListActions/GetAction(GET /actionsandGET /actions/{id}) serve the AWS-provided static action library — real ids likeaws:ec2:stop-instances,aws:ecs:stop-task,aws:eks:pod-delete,aws:rds:failover-db-cluster,aws:ssm:send-command,aws:fis:inject-api-internal-error, andaws:fis:wait— with each action's parameters and target roles, andarn:aws:fis:<region>::action/<id>ARNs (an empty account field, matching AWS's AWS-owned actions).Target resource types -
ListTargetResourceTypes/GetTargetResourceTypeserve the predefined resource-type catalog (aws:ec2:instance,aws:ecs:task,aws:eks:pod,aws:rds:db-instance, ...) with their descriptions and parameters.Target account configurations - the per-template
CreateTargetAccountConfiguration/UpdateTargetAccountConfiguration/DeleteTargetAccountConfiguration/GetTargetAccountConfiguration/ListTargetAccountConfigurationsoperations (.../targetAccountConfigurations/{accountId}) manage multi-account experiment configurations, reflected by the template'stargetAccountConfigurationsCount. AtStartExperimentthey are copied onto the experiment and read back viaGetExperimentTargetAccountConfiguration/ListExperimentTargetAccountConfigurations.Safety levers -
GetSafetyLever/UpdateSafetyLeverStatemodel the account-level safety lever (disengagedby default;engagedhalts experiments); an id that is not the account's lever returnsResourceNotFoundException.Tagging -
TagResource/UntagResource/ListTagsForResource(.../tags/{resourceArn}) apply tags to experiment templates and experiments by ARN.
Validation & errors
Model-derived validation rejects missing required members, out-of-range @length / @range values, and invalid enums with ValidationException; unknown resources return ResourceNotFoundException; a duplicate target-account configuration returns ConflictException — matching each operation's declared Smithy error set.
Persistence
All experiment templates, experiments, target-account configurations, and safety-lever states are account-partitioned and persisted. In persistent mode they survive restart, and any experiment left mid-lifecycle is reconciled forward on load.