Search code examples
amazon-web-servicestomcatamazon-elastic-beanstalkhosts-file

How to customize hosts file in Elastic Beanstalk?


We have an app that is getting deployed through EBS (on tomcat) and every now and then we are getting an error:

unable to resolve host ip-172-30-0-167

This causes other issues. As far as I am aware, one of the ways to solve it is by updating the hosts file and with an entry that points ip-172-30-0-167 to real IP address of the server.

My question is, how can I add an entry to hosts file on deployment? I didn't find anything related to it through .ebsextensions.

Maybe there is another way to solve it.

UPDATE

One of the issues that I have is with sending emails:

ERROR g.plugins.mail.MailMessageBuilder: Failed to send email
Jan 27 15:40:30 unknown staging:  org.springframework.mail.MailSendException: Mail server connection failed; nested exception is javax.mail.MessagingException: 501 Syntax: EHLO hostname
Jan 27 15:40:30 unknown staging:  . Failed messages: javax.mail.MessagingException: 501 Syntax: EHLO hostname
Jan 27 15:40:30 unknown staging:    at org.springframework.mail.javamail.JavaMailSenderImpl.doSend(JavaMailSenderImpl.java:417) ~[spring-context-support-4.1.8.RELEASE.jar:4.1.8.RELEASE]
Jan 27 15:40:30 unknown staging:    at org.springframework.mail.javamail.JavaMailSenderImpl.send(JavaMailSenderImpl.java:345) ~[spring-context-support-4.1.8.RELEASE.jar:4.1.8.RELEASE]
Jan 27 15:40:30 unknown staging:    at org.springframework.mail.javamail.JavaMailSenderImpl.send(JavaMailSenderImpl.java:340) ~[spring-context-support-4.1.8.RELEASE.jar:4.1.8.RELEASE]
Jan 27 15:40:30 unknown staging:    at org.springframework.mail.javamail.JavaMailSender$send$0.call(Unknown Source) ~[na:na]
Jan 27 15:40:30 unknown staging:    at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCall(CallSiteArray.java:48) ~[groovy-2.4.5.jar:2.4.5]
Jan 27 15:40:30 unknown staging:    at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:113) ~[groovy-2.4.5.jar:2.4.5]
Jan 27 15:40:30 unknown staging:    at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:125) ~[groovy-2.4.5.jar:2.4.5]
Jan 27 15:40:30 unknown staging:    at grails.plugins.mail.MailMessageBuilder$_sendMessage_closure1.doCall(MailMessageBuilder.groovy:124) [mail-2.0.0.RC6.jar:na]
Jan 27 15:40:30 unknown staging:    at grails.plugins.mail.MailMessageBuilder$_sendMessage_closure1.doCall(MailMessageBuilder.groovy) [mail-2.0.0.RC6.jar:na]
Jan 27 15:40:30 unknown staging:    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:1.8.0_111]
Jan 27 15:40:30 unknown staging:    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:1.8.0_111]
Jan 27 15:40:30 unknown staging:    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:1.8.0_111]
Jan 27 15:40:30 unknown staging:    at java.lang.reflect.Method.invoke(Method.java:498) ~[na:1.8.0_111]
Jan 27 15:40:30 unknown staging:    at org.codehaus.groovy.reflection.CachedMethod.invoke(CachedMethod.java:93) [groovy-2.4.5.jar:2.4.5]
Jan 27 15:40:30 unknown staging:    at groovy.lang.MetaMethod.doMethodInvoke(MetaMethod.java:325) [groovy-2.4.5.jar:2.4.5]
Jan 27 15:40:30 unknown staging:    at org.codehaus.groovy.runtime.metaclass.ClosureMetaClass.invokeMethod(ClosureMetaClass.java:294) [groovy-2.4.5.jar:2.4.5]
Jan 27 15:40:30 unknown staging:    at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:1019) [groovy-2.4.5.jar:2.4.5]
Jan 27 15:40:30 unknown staging:    at groovy.lang.Closure.call(Closure.java:426) [groovy-2.4.5.jar:2.4.5]
Jan 27 15:40:30 unknown staging:    at groovy.lang.Closure.call(Closure.java:420) [groovy-2.4.5.jar:2.4.5]
Jan 27 15:40:30 unknown staging:    at groovy.lang.Closure.run(Closure.java:507) [groovy-2.4.5.jar:2.4.5]
Jan 27 15:40:30 unknown staging:    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) [na:1.8.0_111]
Jan 27 15:40:30 unknown staging:    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) [na:1.8.0_111]
Jan 27 15:40:30 unknown staging:    at java.lang.Thread.run(Thread.java:745) [na:1.8.0_111]
Jan 27 15:40:30 unknown staging:  Caused by: javax.mail.MessagingException: 501 Syntax: EHLO hostname
Jan 27 15:40:30 unknown staging:    at com.sun.mail.smtp.SMTPTransport.issueCommand(SMTPTransport.java:1481) ~[mail-1.4.1.jar:1.4.1]
Jan 27 15:40:30 unknown staging:    at com.sun.mail.smtp.SMTPTransport.helo(SMTPTransport.java:917) ~[mail-1.4.1.jar:1.4.1]
Jan 27 15:40:30 unknown staging:    at com.sun.mail.smtp.SMTPTransport.protocolConnect(SMTPTransport.java:417) ~[mail-1.4.1.jar:1.4.1]
Jan 27 15:40:30 unknown staging:    at javax.mail.Service.connect(Service.java:345) ~[javax.mail-api-1.5.1.jar:1.5.1]
Jan 27 15:40:30 unknown staging:    at org.springframework.mail.javamail.JavaMailSenderImpl.connectTransport(JavaMailSenderImpl.java:486) ~[spring-context-support-4.1.8.RELEASE.jar:4.1.8.RELEASE]
Jan 27 15:40:30 unknown staging:    at org.springframework.mail.javamail.JavaMailSenderImpl.doSend(JavaMailSenderImpl.java:406) ~[spring-context-support-4.1.8.RELEASE.jar:4.1.8.RELEASE]
Jan 27 15:40:30 unknown staging:    ... 22 common frames omitted
Jan 27 15:40:30 unknown staging:  ERROR g.plugins.mail.MailMessageBuilder: Failed to send email
Jan 27 15:40:30 unknown staging:  org.springframework.mail.MailSendException: Mail server connection failed; nested exception is javax.mail.MessagingException: 501 Syntax: EHLO hostname
Jan 27 15:40:30 unknown staging:  . Failed messages: javax.mail.MessagingException: 501 Syntax: EHLO hostname
Jan 27 15:40:30 unknown staging:    at org.springframework.mail.javamail.JavaMailSenderImpl.doSend(JavaMailSenderImpl.java:417) ~[spring-context-support-4.1.8.RELEASE.jar:4.1.8.RELEASE]
Jan 27 15:40:30 unknown staging:    at org.springframework.mail.javamail.JavaMailSenderImpl.send(JavaMailSenderImpl.java:345) ~[spring-context-support-4.1.8.RELEASE.jar:4.1.8.RELEASE]
Jan 27 15:40:30 unknown staging:    at org.springframework.mail.javamail.JavaMailSenderImpl.send(JavaMailSenderImpl.java:340) ~[spring-context-support-4.1.8.RELEASE.jar:4.1.8.RELEASE]
Jan 27 15:40:30 unknown staging:    at org.springframework.mail.javamail.JavaMailSender$send$0.call(Unknown Source) ~[na:na]
Jan 27 15:40:30 unknown staging:    at grails.plugins.mail.MailMessageBuilder$_sendMessage_closure1.doCall(MailMessageBuilder.groovy:124) [mail-2.0.0.RC6.jar:na]
Jan 27 15:40:30 unknown staging:    at grails.plugins.mail.MailMessageBuilder$_sendMessage_closure1.doCall(MailMessageBuilder.groovy) [mail-2.0.0.RC6.jar:na]
Jan 27 15:40:30 unknown staging:    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:1.8.0_111]
Jan 27 15:40:30 unknown staging:    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:1.8.0_111]
Jan 27 15:40:30 unknown staging:    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:1.8.0_111]
Jan 27 15:40:30 unknown staging:    at java.lang.reflect.Method.invoke(Method.java:498) ~[na:1.8.0_111]
Jan 27 15:40:30 unknown staging:    at org.codehaus.groovy.reflection.CachedMethod.invoke(CachedMethod.java:93) [groovy-2.4.5.jar:2.4.5]
Jan 27 15:40:30 unknown staging:    at groovy.lang.MetaMethod.doMethodInvoke(MetaMethod.java:325) [groovy-2.4.5.jar:2.4.5]
Jan 27 15:40:30 unknown staging:    at org.codehaus.groovy.runtime.metaclass.ClosureMetaClass.invokeMethod(ClosureMetaClass.java:294) [groovy-2.4.5.jar:2.4.5]
Jan 27 15:40:30 unknown staging:    at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:1019) [groovy-2.4.5.jar:2.4.5]
Jan 27 15:40:30 unknown staging:    at groovy.lang.Closure.call(Closure.java:426) [groovy-2.4.5.jar:2.4.5]
Jan 27 15:40:30 unknown staging:    at groovy.lang.Closure.call(Closure.java:420) [groovy-2.4.5.jar:2.4.5]
Jan 27 15:40:30 unknown staging:    at groovy.lang.Closure.run(Closure.java:507) [groovy-2.4.5.jar:2.4.5]
Jan 27 15:40:30 unknown staging:    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) [na:1.8.0_111]
Jan 27 15:40:30 unknown staging:    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) [na:1.8.0_111]
Jan 27 15:40:30 unknown staging:    at java.lang.Thread.run(Thread.java:745) [na:1.8.0_111]
Jan 27 15:40:30 unknown staging:  Caused by: javax.mail.MessagingException: 501 Syntax: EHLO hostname
Jan 27 15:40:30 unknown staging:    at com.sun.mail.smtp.SMTPTransport.issueCommand(SMTPTransport.java:1481) ~[mail-1.4.1.jar:1.4.1]
Jan 27 15:40:30 unknown staging:    at com.sun.mail.smtp.SMTPTransport.helo(SMTPTransport.java:917) ~[mail-1.4.1.jar:1.4.1]
Jan 27 15:40:30 unknown staging:    at com.sun.mail.smtp.SMTPTransport.protocolConnect(SMTPTransport.java:417) ~[mail-1.4.1.jar:1.4.1]
Jan 27 15:40:30 unknown staging:    at javax.mail.Service.connect(Service.java:345) ~[javax.mail-api-1.5.1.jar:1.5.1]
Jan 27 15:40:30 unknown staging:    at org.springframework.mail.javamail.JavaMailSenderImpl.connectTransport(JavaMailSenderImpl.java:486) ~[spring-context-support-4.1.8.RELEASE.jar:4.1.8.RELEASE]
Jan 27 15:40:30 unknown staging:    at org.springframework.mail.javamail.JavaMailSenderImpl.doSend(JavaMailSenderImpl.java:406) ~[spring-context-support-4.1.8.RELEASE.jar:4.1.8.RELEASE]
Jan 27 15:40:30 unknown staging:    ... 19 common frames omitted

and it looks like on deployment the proposed approach didn't help:

ERROR net.sf.ehcache.Cache: Unable to set localhost. This prevents creation of a GUID. Cause was: ip-172-35-11-183: ip-172-35-11-183: Name or service not known
Jan 27 15:35:25 unknown staging:  java.net.UnknownHostException: ip-172-35-11-183: ip-172-35-11-183: Name or service not known
Jan 27 15:35:25 unknown staging:    at java.net.InetAddress.getLocalHost(InetAddress.java:1505) ~[na:1.8.0_111]
Jan 27 15:35:25 unknown staging:    at net.sf.ehcache.Cache.<clinit>(Cache.java:200) ~[ehcache-core-2.4.3.jar:na]
Jan 27 15:35:25 unknown staging:    at net.sf.ehcache.config.ConfigurationHelper.createCache(ConfigurationHelper.java:302) [ehcache-core-2.4.3.jar:na]
Jan 27 15:35:25 unknown staging:    at net.sf.ehcache.config.ConfigurationHelper.createDefaultCache(ConfigurationHelper.java:218) [ehcache-core-2.4.3.jar:na]
Jan 27 15:35:25 unknown staging:    at net.sf.ehcache.CacheManager.configure(CacheManager.java:599) [ehcache-core-2.4.3.jar:na]
Jan 27 15:35:25 unknown staging:    at net.sf.ehcache.CacheManager.init(CacheManager.java:358) [ehcache-core-2.4.3.jar:na]

Solution

  • Well, I said that it was common and then looked into some other code and found that I'm setting the hostname in .ebextensions. I have something like:

    01_command:
        echo 127.0.0.1 `hostname` >> /etc/hosts"
    

    to add a hostname. Note that I'm not sending email so I'm not sure if you need the real hostname. If you do that could be changed to:

    01_command:
        echo `curl -s http://169.254.169.254/latest/meta-data/local-ipv4` `hostname` >> /etc/hosts"
    

    The ultimate problem is that the Elastic Beanstalk sets the hostname to something that is not in /etc/hosts as you said.