How do you use cron jobs using Elastic Beanstalk and Java?












0















I want to run cron jobs and use the same code base. I found a few solutions, but they don't appear ideal. For example, with Heroku, you can add a Scheduler element and fill in the commands to run in a web page.





  • http://blog.rotaready.com/scheduled-tasks-elastic-beanstalk-cron/


    • It seems overly complicated for load-balanced instances.

    • It makes use of require('async') in Node, but what would be a Java Spring Boot equivalent?




  • https://docs.aws.amazon.com/elasticbeanstalk/latest/dg/using-features-managing-env-tiers.html


    • There doesn't appear to be any security. Any one the net could access the /path to POST and execute the job, causing a denial-of-service attack.

    • it mentions cron.yaml which doesn't make sense as the app is deployed via a WAR/ZIP file to a Tomcat instance (Spring Boot).

    • It mentions Amazon DynamoDB, which we don't use. We use MySQL.

    • It doesn't specify whether the load balancer connection draining timeout is in effect for these jobs (10s).

    • It mentions "Worker Configuration card on the Configuration page in the environment management console" but there is no Worker Configuration card under Configuration page.




  • Running a cron job in Elastic Beanstalk


    • For Python/Django - uses cron.yaml.



  • I thought of just having a dedicated EC2 instance, but how can I deploy the latest code changes there?


This may also belong on SoftwareEngineering.StackExchange.










share|improve this question



























    0















    I want to run cron jobs and use the same code base. I found a few solutions, but they don't appear ideal. For example, with Heroku, you can add a Scheduler element and fill in the commands to run in a web page.





    • http://blog.rotaready.com/scheduled-tasks-elastic-beanstalk-cron/


      • It seems overly complicated for load-balanced instances.

      • It makes use of require('async') in Node, but what would be a Java Spring Boot equivalent?




    • https://docs.aws.amazon.com/elasticbeanstalk/latest/dg/using-features-managing-env-tiers.html


      • There doesn't appear to be any security. Any one the net could access the /path to POST and execute the job, causing a denial-of-service attack.

      • it mentions cron.yaml which doesn't make sense as the app is deployed via a WAR/ZIP file to a Tomcat instance (Spring Boot).

      • It mentions Amazon DynamoDB, which we don't use. We use MySQL.

      • It doesn't specify whether the load balancer connection draining timeout is in effect for these jobs (10s).

      • It mentions "Worker Configuration card on the Configuration page in the environment management console" but there is no Worker Configuration card under Configuration page.




    • Running a cron job in Elastic Beanstalk


      • For Python/Django - uses cron.yaml.



    • I thought of just having a dedicated EC2 instance, but how can I deploy the latest code changes there?


    This may also belong on SoftwareEngineering.StackExchange.










    share|improve this question

























      0












      0








      0








      I want to run cron jobs and use the same code base. I found a few solutions, but they don't appear ideal. For example, with Heroku, you can add a Scheduler element and fill in the commands to run in a web page.





      • http://blog.rotaready.com/scheduled-tasks-elastic-beanstalk-cron/


        • It seems overly complicated for load-balanced instances.

        • It makes use of require('async') in Node, but what would be a Java Spring Boot equivalent?




      • https://docs.aws.amazon.com/elasticbeanstalk/latest/dg/using-features-managing-env-tiers.html


        • There doesn't appear to be any security. Any one the net could access the /path to POST and execute the job, causing a denial-of-service attack.

        • it mentions cron.yaml which doesn't make sense as the app is deployed via a WAR/ZIP file to a Tomcat instance (Spring Boot).

        • It mentions Amazon DynamoDB, which we don't use. We use MySQL.

        • It doesn't specify whether the load balancer connection draining timeout is in effect for these jobs (10s).

        • It mentions "Worker Configuration card on the Configuration page in the environment management console" but there is no Worker Configuration card under Configuration page.




      • Running a cron job in Elastic Beanstalk


        • For Python/Django - uses cron.yaml.



      • I thought of just having a dedicated EC2 instance, but how can I deploy the latest code changes there?


      This may also belong on SoftwareEngineering.StackExchange.










      share|improve this question














      I want to run cron jobs and use the same code base. I found a few solutions, but they don't appear ideal. For example, with Heroku, you can add a Scheduler element and fill in the commands to run in a web page.





      • http://blog.rotaready.com/scheduled-tasks-elastic-beanstalk-cron/


        • It seems overly complicated for load-balanced instances.

        • It makes use of require('async') in Node, but what would be a Java Spring Boot equivalent?




      • https://docs.aws.amazon.com/elasticbeanstalk/latest/dg/using-features-managing-env-tiers.html


        • There doesn't appear to be any security. Any one the net could access the /path to POST and execute the job, causing a denial-of-service attack.

        • it mentions cron.yaml which doesn't make sense as the app is deployed via a WAR/ZIP file to a Tomcat instance (Spring Boot).

        • It mentions Amazon DynamoDB, which we don't use. We use MySQL.

        • It doesn't specify whether the load balancer connection draining timeout is in effect for these jobs (10s).

        • It mentions "Worker Configuration card on the Configuration page in the environment management console" but there is no Worker Configuration card under Configuration page.




      • Running a cron job in Elastic Beanstalk


        • For Python/Django - uses cron.yaml.



      • I thought of just having a dedicated EC2 instance, but how can I deploy the latest code changes there?


      This may also belong on SoftwareEngineering.StackExchange.







      java amazon-web-services spring-boot cron amazon-elastic-beanstalk






      share|improve this question













      share|improve this question











      share|improve this question




      share|improve this question










      asked Dec 31 '18 at 21:33









      ChloeChloe

      11k1981194




      11k1981194
























          1 Answer
          1






          active

          oldest

          votes


















          0














          There is an easy way to do this using other AWS systems.



          You can use CloudWatch to set scheduled events (https://docs.aws.amazon.com/AmazonCloudWatch/latest/events/WhatIsCloudWatchEvents.html). You can set a rule to set the event on a set schedule.



          You then have at least two options:




          • set the event to publish an SNS message and use that SNS to call a web hook on your server. Many examples on how to do this but you will have to make sure you check the signature to ensure the web API is called from the signed SNS. But this would use a public API and may not be something you are comfortable with.


          • set the event to publish an SQS message. Then set an elastic beanstalk worker to process the SQS message or just run a background script on your main server, which is basically on an infinite loop polling SQS for work to do.



          Not sure how familiar you are with these systems so not sure if it will be clear what I am talking about, but there is no way to give a detail solution so hope this is enough to give you ideas.






          share|improve this answer























            Your Answer






            StackExchange.ifUsing("editor", function () {
            StackExchange.using("externalEditor", function () {
            StackExchange.using("snippets", function () {
            StackExchange.snippets.init();
            });
            });
            }, "code-snippets");

            StackExchange.ready(function() {
            var channelOptions = {
            tags: "".split(" "),
            id: "1"
            };
            initTagRenderer("".split(" "), "".split(" "), channelOptions);

            StackExchange.using("externalEditor", function() {
            // Have to fire editor after snippets, if snippets enabled
            if (StackExchange.settings.snippets.snippetsEnabled) {
            StackExchange.using("snippets", function() {
            createEditor();
            });
            }
            else {
            createEditor();
            }
            });

            function createEditor() {
            StackExchange.prepareEditor({
            heartbeatType: 'answer',
            autoActivateHeartbeat: false,
            convertImagesToLinks: true,
            noModals: true,
            showLowRepImageUploadWarning: true,
            reputationToPostImages: 10,
            bindNavPrevention: true,
            postfix: "",
            imageUploader: {
            brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
            contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
            allowUrls: true
            },
            onDemand: true,
            discardSelector: ".discard-answer"
            ,immediatelyShowMarkdownHelp:true
            });


            }
            });














            draft saved

            draft discarded


















            StackExchange.ready(
            function () {
            StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53991565%2fhow-do-you-use-cron-jobs-using-elastic-beanstalk-and-java%23new-answer', 'question_page');
            }
            );

            Post as a guest















            Required, but never shown

























            1 Answer
            1






            active

            oldest

            votes








            1 Answer
            1






            active

            oldest

            votes









            active

            oldest

            votes






            active

            oldest

            votes









            0














            There is an easy way to do this using other AWS systems.



            You can use CloudWatch to set scheduled events (https://docs.aws.amazon.com/AmazonCloudWatch/latest/events/WhatIsCloudWatchEvents.html). You can set a rule to set the event on a set schedule.



            You then have at least two options:




            • set the event to publish an SNS message and use that SNS to call a web hook on your server. Many examples on how to do this but you will have to make sure you check the signature to ensure the web API is called from the signed SNS. But this would use a public API and may not be something you are comfortable with.


            • set the event to publish an SQS message. Then set an elastic beanstalk worker to process the SQS message or just run a background script on your main server, which is basically on an infinite loop polling SQS for work to do.



            Not sure how familiar you are with these systems so not sure if it will be clear what I am talking about, but there is no way to give a detail solution so hope this is enough to give you ideas.






            share|improve this answer




























              0














              There is an easy way to do this using other AWS systems.



              You can use CloudWatch to set scheduled events (https://docs.aws.amazon.com/AmazonCloudWatch/latest/events/WhatIsCloudWatchEvents.html). You can set a rule to set the event on a set schedule.



              You then have at least two options:




              • set the event to publish an SNS message and use that SNS to call a web hook on your server. Many examples on how to do this but you will have to make sure you check the signature to ensure the web API is called from the signed SNS. But this would use a public API and may not be something you are comfortable with.


              • set the event to publish an SQS message. Then set an elastic beanstalk worker to process the SQS message or just run a background script on your main server, which is basically on an infinite loop polling SQS for work to do.



              Not sure how familiar you are with these systems so not sure if it will be clear what I am talking about, but there is no way to give a detail solution so hope this is enough to give you ideas.






              share|improve this answer


























                0












                0








                0







                There is an easy way to do this using other AWS systems.



                You can use CloudWatch to set scheduled events (https://docs.aws.amazon.com/AmazonCloudWatch/latest/events/WhatIsCloudWatchEvents.html). You can set a rule to set the event on a set schedule.



                You then have at least two options:




                • set the event to publish an SNS message and use that SNS to call a web hook on your server. Many examples on how to do this but you will have to make sure you check the signature to ensure the web API is called from the signed SNS. But this would use a public API and may not be something you are comfortable with.


                • set the event to publish an SQS message. Then set an elastic beanstalk worker to process the SQS message or just run a background script on your main server, which is basically on an infinite loop polling SQS for work to do.



                Not sure how familiar you are with these systems so not sure if it will be clear what I am talking about, but there is no way to give a detail solution so hope this is enough to give you ideas.






                share|improve this answer













                There is an easy way to do this using other AWS systems.



                You can use CloudWatch to set scheduled events (https://docs.aws.amazon.com/AmazonCloudWatch/latest/events/WhatIsCloudWatchEvents.html). You can set a rule to set the event on a set schedule.



                You then have at least two options:




                • set the event to publish an SNS message and use that SNS to call a web hook on your server. Many examples on how to do this but you will have to make sure you check the signature to ensure the web API is called from the signed SNS. But this would use a public API and may not be something you are comfortable with.


                • set the event to publish an SQS message. Then set an elastic beanstalk worker to process the SQS message or just run a background script on your main server, which is basically on an infinite loop polling SQS for work to do.



                Not sure how familiar you are with these systems so not sure if it will be clear what I am talking about, but there is no way to give a detail solution so hope this is enough to give you ideas.







                share|improve this answer












                share|improve this answer



                share|improve this answer










                answered Jan 1 at 4:31









                dkarchmerdkarchmer

                2,78221427




                2,78221427
































                    draft saved

                    draft discarded




















































                    Thanks for contributing an answer to Stack Overflow!


                    • Please be sure to answer the question. Provide details and share your research!

                    But avoid



                    • Asking for help, clarification, or responding to other answers.

                    • Making statements based on opinion; back them up with references or personal experience.


                    To learn more, see our tips on writing great answers.




                    draft saved


                    draft discarded














                    StackExchange.ready(
                    function () {
                    StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53991565%2fhow-do-you-use-cron-jobs-using-elastic-beanstalk-and-java%23new-answer', 'question_page');
                    }
                    );

                    Post as a guest















                    Required, but never shown





















































                    Required, but never shown














                    Required, but never shown












                    Required, but never shown







                    Required, but never shown

































                    Required, but never shown














                    Required, but never shown












                    Required, but never shown







                    Required, but never shown







                    Popular posts from this blog

                    Can a sorcerer learn a 5th-level spell early by creating spell slots using the Font of Magic feature?

                    Does disintegrating a polymorphed enemy still kill it after the 2018 errata?

                    A Topological Invariant for $pi_3(U(n))$