cfn.yaml (130 lines of code) (raw):

AWSTemplateFormatVersion: 2010-09-09 Description: handle outbound messages from salesforce to update zuora and identity Parameters: Stack: Description: Stack name Type: String Default: membership App: Description: Application name Type: String Default: salesforce-message-handler Stage: Description: Stage name Type: String AllowedValues: - CODE - PROD Default: CODE DeployBucket: Description: Bucket where RiffRaff uploads artifacts on deploy Type: String Default: membership-dist Resources: ExecutionRole: Type: AWS::IAM::Role Properties: AssumeRolePolicyDocument: Statement: - Effect: Allow Principal: Service: - lambda.amazonaws.com Action: sts:AssumeRole Path: / Policies: - PolicyName: logs PolicyDocument: Statement: Effect: Allow Action: - logs:CreateLogGroup - logs:CreateLogStream - logs:PutLogEvents Resource: arn:aws:logs:*:*:* - PolicyName: lambda PolicyDocument: Statement: Effect: Allow Action: - lambda:InvokeFunction Resource: "*" - PolicyName: PrivateBucket PolicyDocument: Statement: Effect: Allow Action: s3:GetObject Resource: !Sub arn:aws:s3:::gu-reader-revenue-private/${Stack}/salesforce-message-handler/${Stage}/salesforce-message-handler.private.conf - PolicyName: SQSPutInQueue PolicyDocument: Statement: Effect: Allow Action: "*" Resource: !Sub arn:aws:sqs:${AWS::Region}:${AWS::AccountId}:salesforce-outbound-messages-${Stage} SalesforceMessageHandlerLambda: Type: AWS::Lambda::Function Properties: FunctionName: !Sub salesforce-message-handler-${Stage} Code: S3Bucket: Ref: DeployBucket S3Key: !Sub ${Stack}/${Stage}/${App}/${App}.jar Environment: Variables: Stage: !Ref Stage Stack: !Ref Stack App: !Ref App Description: parse salesforce outbound messages and put them in a queue Handler: com.gu.salesforce.messageHandler.Lambda::handleRequest MemorySize: 1536 Role: !GetAtt ExecutionRole.Arn Runtime: java21 Timeout: 300 MessageHandlerApiPermission: Type: AWS::Lambda::Permission Properties: Action: lambda:invokeFunction FunctionName: !Sub salesforce-message-handler-${Stage} Principal: apigateway.amazonaws.com DependsOn: SalesforceMessageHandlerLambda MessageHandlerApi: Type: "AWS::ApiGateway::RestApi" Properties: Description: Api to handle salesforce outbound messages Name: !Sub salesforce-message-handler-${Stage} MessageHandlerApiResource: Type: AWS::ApiGateway::Resource Properties: RestApiId: !Ref MessageHandlerApi ParentId: !GetAtt [MessageHandlerApi, RootResourceId] PathPart: contact DependsOn: MessageHandlerApi ContactMethod: Type: AWS::ApiGateway::Method Properties: AuthorizationType: NONE RestApiId: !Ref MessageHandlerApi ResourceId: !Ref MessageHandlerApiResource HttpMethod: POST Integration: Type: AWS_PROXY IntegrationHttpMethod: POST Uri: !Sub arn:aws:apigateway:${AWS::Region}:lambda:path/2015-03-31/functions/${SalesforceMessageHandlerLambda.Arn}/invocations DependsOn: - MessageHandlerApi - SalesforceMessageHandlerLambda - MessageHandlerApiResource MessageHandlerApiStage: Type: AWS::ApiGateway::Stage Properties: Description: Stage for salesforce message handler API RestApiId: !Ref MessageHandlerApi DeploymentId: !Ref MessageHandlerAPIDeployment1 StageName: !Sub ${Stage} DependsOn: ContactMethod MessageHandlerAPIDeployment1: Type: AWS::ApiGateway::Deployment Properties: Description: Deploys the message handler API into an environment/stage RestApiId: !Ref MessageHandlerApi DependsOn: ContactMethod