in app/conf/AWS.scala [30:68]
def awsOption[T](f: => T): Option[T] = if (isAWS) Option(f) else None
lazy val connectionRegion: Region = Region.EU_WEST_1
lazy val EC2Client: Ec2Client = Ec2Client
.builder()
.region(connectionRegion)
.overrideConfiguration(clientConfig)
.build()
type Tag = (String, String)
object instance {
lazy val id: Option[String] = awsOption(EC2MetadataUtils.getInstanceId)
lazy val allTags: Map[String, String] =
id.toSeq.flatMap { id =>
val tagsResult = AWS.EC2Client.describeTags(
DescribeTagsRequest.builder
.filters(
Filter.builder.name("resource-type").values("instance").build,
Filter.builder.name("resource-id").values(id).build
)
.build
)
tagsResult.tags.asScala.map(td => td.key -> td.value)
}.toMap
lazy val customTags: MapView[String, String] =
allTags.view.filterKeys(!_.startsWith("aws:"))
lazy val identity: Option[Identity] = (
customTags.get("Stack"),
customTags.get("App"),
customTags.get("Stage")
) match {
case (Some(stack), Some(app), Some(stage)) =>
Some(Identity(stack, app, stage))
case _ => None
}
}