package core.aws.client; import com.amazonaws.auth.AWSCredentialsProvider; import com.amazonaws.auth.AWSStaticCredentialsProvider; import com.amazonaws.auth.DefaultAWSCredentialsProviderChain; import com.amazonaws.auth.PropertiesCredentials; import core.aws.env.Environment; import core.aws.util.Asserts; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import java.io.IOException; import java.nio.file.Files; import java.nio.file.Path; /** * due to nature of cloud manager, to use plain design to achieve better simplicity and flexibility * * @author neo */ public class AWS { public static final Logger LOGGER = LoggerFactory.getLogger(AWS.class); public static EC2 ec2; public static S3 s3; public static EC2VPC vpc; public static ElasticLoadBalancing elb; public static IAM iam; public static AutoScaling as; public static CloudWatch cloudWatch; public static void initialize(Environment env) throws IOException { Asserts.isNull(ec2, "initialize should only be called once"); LOGGER.info("initialize aws clients"); AWSCredentialsProvider provider = loadAWSCredentials(env.envDir); ec2 = new EC2(provider, env.region); vpc = new EC2VPC(provider, env.region); elb = new ElasticLoadBalancing(provider, env.region); s3 = new S3(provider, env.region); iam = new IAM(provider, env.region); as = new AutoScaling(provider, env.region); cloudWatch = new CloudWatch(provider, env.region); } private static AWSCredentialsProvider loadAWSCredentials(Path envDir) throws IOException { AWSCredentialsProvider provider; Path awsCredential = envDir.resolve("aws.properties"); if (Files.exists(awsCredential)) { LOGGER.info("found aws.properties, use it as aws credentials, file={}", awsCredential); PropertiesCredentials credentials = new PropertiesCredentials(awsCredential.toFile()); provider = new AWSStaticCredentialsProvider(credentials); } else { LOGGER.info("not found aws.properties, use default credentials (env or instanceProfile)"); provider = new DefaultAWSCredentialsProviderChain(); } return provider; } }