Where communities thrive


  • Join over 1.5M+ people
  • Join over 100K+ communities
  • Free without limits
  • Create your own community
People
Repo info
Activity
    Agim Emruli
    @aemruli
    we have tried to make all services usable outside AWS except for 1-2 which are not working outside (namely instance data and caching)
    what is the purpose for filtering out the other ones ?
    Matt Benson
    @mbenson
    I have an application that I'd like to build once and run either in an EC2 instance or locally, same artifact
    Agim Emruli
    @aemruli
    okay, and which services are you using ?
    Matt Benson
    @mbenson
    when I try to start it locally, with spring-cloud-aws-autoconfigure included in the libs, at least two of the autoconfiguration classes are causing it to fail.
    Agim Emruli
    @aemruli
    what is the exception ?
    Matt Benson
    @mbenson
    the exception flows up from EC2MetadataUtils.getInstanceInfo()
    sorry; it's actually caused by that
    but it's the assertion in Ec2MetadataRegionProvider#getRegion()
    Agim Emruli
    @aemruli
    that is strange, we have an @ConditionalOnAwsCloudEnvironment on the respective auto configuration
    Matt Benson
    @mbenson
    but the condition is only applied in one or two places
    Agim Emruli
    @aemruli
    yeah, we do this only for services which really need to run on the AWS EC2 instance (instance data and caching)
    Matt Benson
    @mbenson
    I'm finding that the ContextResourceLoaderAutoConfiguration and ContextRegionProviderAutoConfiguration both seem to be triggering AmazonWebserviceClientFactoryBean#createInstance() which in turn calls #getRegion() from the available RegionProvider.
    If that RegionProvider is Ec2MetadataRegionProvider, boom
    Agim Emruli
    @aemruli
    okay I see
    we have to re-think if it is a good idea to have the EC2 region provider as a default
    I think in your case you have to configure the region if you run locally
    and let that auto-detect in case of an EC2 deployment
    org.springframework.cloud.aws.autoconfigure.context.ContextRegionProviderAutoConfiguration.Registrar#registerBeanDefinitions have to be re-visisted
    cloud.aws.region.static
    Matt Benson
    @mbenson
    I was hoping to avoid, but I agree that from what I have learned so far that should work for now.
    I do think it is nice to use the EC2 region provider when running on AWS
    Agim Emruli
    @aemruli
    I think we can replace this.environment.getProperty("cloud.aws.region.auto", Boolean.class, true) with this.environment.getProperty("cloud.aws.region.auto", Boolean.class, AwsCloudEnvironmentCheckUtils.isRunningOnCloudEnvironment())
    I think that is the only point which needs adjustment
    Matt Benson
    @mbenson
    that's pretty surgical, but it looks like that will result in an exception requiring the statically configured region outside AWS.
    Does a region even make sense outside AWS/EC2?
    Agim Emruli
    @aemruli
    yeah you will need a static region outside aws
    we can not guess it, and we don't rely on the default region
    but I think you can have a separate application.properties or any other way to pass the region only on your local deployment
    Matt Benson
    @mbenson
    but how is the region used outside AWS? Please forgive my newness to the platform.
    Agim Emruli
    @aemruli
    well except for a few exception every service is reachable outside AWS through an service endpoint
    for example rds.ap-southeast-1.amazonaws.com
    Matt Benson
    @mbenson
    sure...
    Agim Emruli
    @aemruli
    so you can run your application on your laptop and use the AWS services
    you can even have stack in cloud formation and use those services
    the only thing here is that we need to know the region
    so that the client can make the right call
    the exception is onyl elasticache
    that service is only reachable inside the same security group or vpc
    therefore its quite common to run your app also outside AWS but still consume AWS services
    Matt Benson
    @mbenson
    okay; I won't pretend to fully understand it, but if there is some code that specifically uses the region knowledge to contact other services then that is good enough
    Agim Emruli
    @aemruli
    yes
    Matt Benson
    @mbenson
    I suppose that's why it's pulled from what appear to be various instances of the AmazonWebserviceClientFactoryBean then
    Agim Emruli
    @aemruli
    yeah every service client have a region, and the factory bean manages that
    Matt Benson
    @mbenson
    thanks for making it clear. In this case I have an app that I'm running on AWS but this particular one isn't actually consuming AWS services... I just want the AmazonEc2InstanceDataPropertySource autoconfigured. But I guess I'll just have to deal with it. :P
    Matt Benson
    @mbenson
    argh; I really wanted to use that with YAML subdocument profile negation but that won't be released until Spring Boot 1.4.0 :(
    Ryan Gardner
    @ryangardner
    FYI I just submitted a pull request to let people use the DefaultAWSCredentialsProvider when running with the spring boot starter - spring-cloud/spring-cloud-aws#170
    Ryan Gardner
    @ryangardner
    The docs currently state that the DefaultAWSCredentialsProvider is used for services - which seems only be true if you aren’t using the spring boot starters. The ContextCredentialsAutoConfiguration always creates a custom credentials provider chain that gets used for the amazon service calls - over time things have been added (like profile support) to that chain, but it’s still doesn’t support all the options of the default one
    Ryan Gardner
    @ryangardner
    has anyone here had a chance to look at spring-cloud/spring-cloud-aws#170 yet?
    Ryan Gardner
    @ryangardner
    This message was deleted