app/aws/Clients.scala (46 lines of code) (raw):
package aws
import software.amazon.awssdk.auth.credentials._
import software.amazon.awssdk.regions.Region.EU_WEST_1
import software.amazon.awssdk.services.dynamodb.DynamoDbClient
import software.amazon.awssdk.services.ssm.SsmClient
import software.amazon.awssdk.services.sts.StsClient
import java.net.URI
object Clients {
/** This profile is specifically to give access to the assumeRole permission
* in the Dev stage
*/
private val janusProfileName = "janus"
/** In the Dev stage, the security profile is used to access the Play secret
* stored in parameter store
*/
private val securityProfileName = "security"
/** In production, we use the EC2 instance profile to access resources. And in
* Dev, we use the given profile.
*/
private def makeCredentialsProviderChain(
profileName: String
): AwsCredentialsProviderChain =
AwsCredentialsProviderChain
.builder()
.addCredentialsProvider(InstanceProfileCredentialsProvider.create())
.addCredentialsProvider(ProfileCredentialsProvider.create(profileName))
.build()
private lazy val janusCredentialsProviderChain = makeCredentialsProviderChain(
janusProfileName
)
private lazy val securityCredentialsProviderChain =
makeCredentialsProviderChain(securityProfileName)
lazy val stsClient: StsClient =
StsClient
.builder()
.credentialsProvider(janusCredentialsProviderChain)
.region(EU_WEST_1)
.build()
lazy val ssm: SsmClient = SsmClient
.builder()
.credentialsProvider(securityCredentialsProviderChain)
.region(EU_WEST_1)
.build()
def localDb: DynamoDbClient =
DynamoDbClient
.builder()
.credentialsProvider(
StaticCredentialsProvider.create(
AwsBasicCredentials.create("fakeMyKeyId", "fakeSecretAccessKey")
)
)
.region(EU_WEST_1)
.endpointOverride(URI.create("http://localhost:8000"))
.build()
}