AWSTemplateFormatVersion: '2010-09-09' Transform: AWS::Serverless-2016-10-31 Description: > lambda-publish-amazonmq Sample SAM app for deploying an AmazonMQ broker with an AWS Lambda function for publishing messages to MQTT. ## Before deploying, create Admin and Client usernames and passwords in Secrets manager. This template will look for /app/ by default. Parameters: AdminUsername: Type: AWS::SSM::Parameter::Value Default: /app/AdminUserName NoEcho: true AdminPassword: Type: AWS::SSM::Parameter::Value Default: /app/AdminPassword NoEcho: true ClientUsername: Type: AWS::SSM::Parameter::Value Default: /app/ClientUserName Description: (Required) A username for a connecting client. NoEcho: true ClientPassword: Type: AWS::SSM::Parameter::Value Default: /app/ClientPassword Description: (Required) For a connecting client. 12 characters and at least 4 unique characters. NoEcho: true Resources: PublishMessageFunction: Type: AWS::Serverless::Function DependsOn: BasicBroker Properties: CodeUri: src/PublishMessage Handler: app.lambdaHandler Runtime: nodejs16.x Environment: Variables: MQ_HOST: !Sub "${BasicBroker}-1.mq.${AWS::Region}.amazonaws.com" MQ_USERNAME: !Ref AdminUsername MQ_PASSWORD: !Ref AdminPassword BasicBroker: Type: "AWS::AmazonMQ::Broker" Properties: BrokerName: !Sub "${AWS::StackName}-MqBroker" AutoMinorVersionUpgrade: "false" DeploymentMode: SINGLE_INSTANCE EngineType: ActiveMQ EngineVersion: "5.15.0" HostInstanceType: mq.t2.micro PubliclyAccessible: "true" Users: - ConsoleAccess: "true" Groups: - MyGroup Password: !Ref AdminPassword Username: !Ref AdminUsername - Groups: - MyGroup Password: !Ref ClientPassword Username: !Ref ClientUsername Outputs: PublishMessageFunction: Description: "A function that publishes message to an MQ broker using MQTT." Value: !GetAtt PublishMessageFunction.Arn BasicBroker: Description: "A basic AmazonMQ broker." Value: !GetAtt BasicBroker.Arn