type awsEmrInstance implements awsOptionalService @key(fields: "id") {
  ec2InstanceId: String @search(by: [hash])
  publicDnsName: String @search(by: [hash, regexp])
  publicIpAddress: String @search(by: [hash, regexp])
  privateDnsName: String @search(by: [hash, regexp])
  privateIpAddress: String @search(by: [hash, regexp])
  status: awsEmrInstanceStatus
  instanceGroupId: String @search(by: [hash])
  instanceFleetId: String @search(by: [hash, regexp])
  market: String @search(by: [hash, regexp])
  instanceType: String @search(by: [hash, regexp])
  ebs: [awsEbs] @hasInverse(field: emrInstance)
  ec2Instance: [awsEc2] @hasInverse(field: emrInstance)
}

# TODO: add arn if possible

type awsEmrInstanceStatus
  @generate(
    query: { get: false, query: false, aggregate: false }
    mutation: { add: false, delete: false }
    subscription: false
  ) {
  state: String @search(by: [hash, regexp])
  stateChangeReason: awsEmrInstanceStateChangeReason
  timeline: awsEmrInstanceTimeline
}

type awsEmrInstanceStateChangeReason
  @generate(
    query: { get: false, query: false, aggregate: false }
    mutation: { add: false, delete: false }
    subscription: false
  ) {
  code: String @search(by: [hash, regexp])
  message: String @search(by: [hash, regexp])
}

type awsEmrInstanceTimeline
  @generate(
    query: { get: false, query: false, aggregate: false }
    mutation: { add: false, delete: false }
    subscription: false
  ) {
  creationDateTime: String @search(by: [hash, regexp])
  readyDateTime: String @search(by: [hash, regexp])
  endDateTime: String @search(by: [hash, regexp])
}
