@lifeworks/serverless-stack-output

    0.3.5 • Public • Published

    Serverless Stack Output Plugin

    npm license CircleCI Coveralls

    A serverless plugin to store output from your AWS CloudFormation Stack in JSON/YAML/TOML files, or to pass the output to a JavaScript function for further processing.

    Usage

    Install

    > yarn add serverless-stack-output
    > npm install serverless-stack-output

    Configuration

    plugins:
      - serverless-stack-output
     
    custom:
      output:
        handler: scripts/output.handler # Same syntax as you already know 
        file: .build/stack.toml # toml, yaml, yml, and json format is available 

    Handler

    Based on the configuration above the plugin will search for a file scripts/output.js with the following content:

    function handler (data, serverless, options) {
      console.log('Received Stack Output', data)
    }
     
    module.exports = { handler }

    File Formats

    Just name your file with a .json, .toml, .yaml, or .yml extension, and the plugin will take care of formatting your output. Please make sure the location where you want to save the file exists!

    License

    Feel free to use the code, it's released using the MIT license.

    Contribution

    You are more than welcome to contribute to this project! 😘 🙆

    To make sure you have a pleasant experience, please read the code of conduct. It outlines core values and believes and will make working together a happier experience.

    Example

    The plugins works fine with serverless functions, as well as when using custom CloudFormation resources. The following example configuration will deploy an AWS Lambda function, API Gateway, SQS Queue, IAM User with AccessKey and SecretKey, and a static value:

    Serverless.yml

    service: sls-stack-output-example
     
    plugins:
      - serverless-stack-output
     
    package:
      exclude:
        - node_modules/**
     
    custom:
      output:
        handler: scripts/output.handler
        file: .build/stack.toml
     
    provider:
      name: aws
      runtime: nodejs6.10
     
    functions:
      example:
        handler: functions/example.handle
        events:
          http:
              path: example
              method: get
              cors: true
     
    resources:
      Resources:
        ExampleQueue:
          Type: AWS::SQS::Queue
          Properties:
            QueueName: example-queue
        ExampleUser:
          Type: "AWS::IAM::User"
          Properties:
            UserName: example-user
            Policies:
              PolicyName: ExampleUserSQSPolicy
                PolicyDocument:
                  Version: '2012-10-17'
                  Statement:
                    Effect: "Allow"
                      Action:
                        - sqs:SendMessage
                      Resource:
                        {"Fn::Join": [":", ["arn:aws:sqs:*", {"Ref": "AWS::AccountId"}, "example-queue"]]}
        ExampleUserKey:
          Type: AWS::IAM::AccessKey
          Properties:
            UserName:
              Ref: ExampleUser
      Outputs:
        ExampleUserKey:
          Value:
            Ref: ExampleUserKey
        ExampleUserSecret:
          Value: {"Fn::GetAtt": ["ExampleUserKey", "SecretAccessKey"]}
        ExampleStaticValue:
          Value: example-static-value

    Stack Output

    TOML

    ExampleUserSecret = "YourUserSecretKey"
    ExampleUserKey = "YourUserAccessKey"
    ExampleLambdaFunctionQualifiedArn = "arn:aws:lambda:us-east-1:AccountID:function:sls-stack-output-example-dev-example:9"
    ExampleStaticValue = "example-static-value"
    ServiceEndpoint = "https://APIGatewayID.execute-api.us-east-1.amazonaws.com/dev"
    ServerlessDeploymentBucketName = "sls-stack-output-example-serverlessdeploymentbuck-BucketID"

    YAML

    ExampleUserSecret: YourUserSecretKey
    ExampleUserKey: YourUserAccessKey
    ExampleLambdaFunctionQualifiedArn: 'arn:aws:lambda:us-east-1:AccountID:function:sls-stack-output-example-dev-example:9'
    ExampleStaticValue: example-static-value
    ServiceEndpoint: 'https://APIGatewayID.execute-api.us-east-1.amazonaws.com/dev'
    ServerlessDeploymentBucketName: sls-stack-output-example-serverlessdeploymentbuck-BucketID

    JSON

    {
      "ExampleUserSecret": "YourUserSecretKey",
      "ExampleUserKey": "YourUserAccessKey",
      "ExampleLambdaFunctionQualifiedArn": "arn:aws:lambda:us-east-1:AccountID:function:sls-stack-output-example-dev-example:9",
      "ExampleStaticValue": "example-static-value",
      "ServiceEndpoint": "https://APIGatewayID.execute-api.us-east-1.amazonaws.com/dev",
      "ServerlessDeploymentBucketName": "sls-stack-output-example-serverlessdeploymentbuck-BucketID"
    }

    Development:

    Install all requirements:

    $ npm install
    

    or

    $ yarn
    

    If you want to run the tests:

    $ npm run test
    

    If you want to build dist bundle:

    $ npm run build
    

    it should transpile all TypeScript files into normal js files and saved it into /dist directory.

    Publishing

    If you want to publish the package you have to transpile typescript code (the steps are described in the section above)

    You have to also remember about changing the package version

    $ npm version <new_version>
    

    and then you will be able to publish the package:

    $ npm publish --access public
    

    Install

    npm i @lifeworks/serverless-stack-output

    DownloadsWeekly Downloads

    151

    Version

    0.3.5

    License

    MIT

    Unpacked Size

    32.5 kB

    Total Files

    17

    Last publish

    Collaborators

    • avatar
    • avatar
    • avatar
    • avatar
    • avatar
    • avatar
    • avatar
    • avatar
    • avatar
    • avatar
    • avatar
    • avatar
    • avatar
    • avatar
    • avatar
    • avatar
    • avatar