Search code examples
node.jsamazon-s3amazon-ec2bambooaws-code-deploy

AWS CodeDeploy with Bamboo




we develop a NodeJS application and we want to launch them in the Amazon Cloud. We integrated „Bamboo“ in our other Atlassian applications. Bamboo transfer the build files to the S3 Bucket from Amazon. The problem is: how I can move and start the Application from the S3 to the EC2 instances?

You can find my appspec.yml in the attachments and in my build directory are following files:
- client | files like index.html etc
- server | files like the server.js and socketio.js
- appspec.yml
- readme



Have anyone an idea? I hope it contains all important informations you need.

Thank you :D


Attachments

version: 1.0
os: linux
files:
  - source: /
    destination: /


Solution

  • Update

    I just realized that your appspec.yml seems to lack a crucial part for the deployment of a Node.js application (and most others for that matter), namely the hooks section. As outlined in AWS CodeDeploy Application Specification Files, the AppSpec file is used to manage each deployment as a series of deployment lifecycle events:

    • During the deployment steps, the AWS CodeDeploy Agent will look up the current event's name in the AppSpec file's hooks section. [...] If the event is found in the hooks section, the AWS CodeDeploy Agent will retrieve the list of scripts to execute for the current step. [...]

    See for example the provided AppSpec file Example (purely for illustration, you'll need to craft a custom one appropriate for your app):

    os: linux
    files:
      - source: Config/config.txt
        destination: webapps/Config
      - source: source
        destination: /webapps/myApp
    hooks:
      BeforeInstall:
        - location: Scripts/UnzipResourceBundle.sh
        - location: Scripts/UnzipDataBundle.sh
      AfterInstall:
        - location: Scripts/RunResourceTests.sh
          timeout: 180
      ApplicationStart:
        - location: Scripts/RunFunctionalTests.sh
          timeout: 3600
      ValidateService:
        - location: Scripts/MonitorService.sh
          timeout: 3600
          runas: codedeployuser
    

    Without such an ApplicationStart command, AWS CodeDeploy does not have any instructions what to do with your app (remember that CodeDeploy is technology agnostic, thus needs to be advised how to start the app server for example).


    Initial Answer

    Section Overview of a Deployment within What Is AWS CodeDeploy? illustrates the flow of a typical AWS CodeDeploy deployment:

    enter image description here

    The key aspect regarding your question is step 4:

    1. Finally, the AWS CodeDeploy Agent on each participating instance pulls the revision from the specified Amazon S3 bucket or GitHub repository and starts deploying the contents to that instance, following the instructions in the AppSpec file that's provided. [emphasis mine]

    That is, once you have started an AWS CodeDeploy deployment, everything should work automatically - accordingly, something seems to be configured not quite right, with the most common issue being that the deployment group does not actually contain any running instances yet. Have you verified that you can deploy to your EC2 instance from CodeDeploy via the AWS Management Console?