---
AWSTemplateFormatVersion: '2010-09-09'
Description: Amazon Connect Example Integration Quick Start
Metadata:
  AWS::CloudFormation::Interface:
    ParameterGroups:
    - Label:
        default: Amazon Connect Example Integration
      Parameters:
      - IntegrationEndpoint
    ParameterLabels:
      IntegrationEndpoint:
        default: Integration Endpoint
Parameters:
  IntegrationEndpoint:
    AllowedPattern: ^https:\/\/[a-zA-Z0-9-\/\.]+$
    ConstraintDescription: Endpoint must be a valid https URL.
    Default: https://example.com/path
    Description: The endpoint of the integration. You may use https://demo-api.connect.awslabs.net/v1/pets
      as an example.
    Type: String
Rules:
  RegionSupport:
    Assertions:
    - Assert:
        Fn::Equals:
        - Ref: AWS::Region
        - us-east-1
      AssertDescription: Region must be US East (N. Virginia) - us-east-1
  ParameterDefaults:
    Assertions:
    - Assert:
        Fn::Not:
        - Fn::Equals:
          - Ref: IntegrationEndpoint
          - https://example.com/path
      AssertDescription: Amazon Connect Example Integration parameters cannot be defaults
Resources:
  IntegrationTestFunctionExecutionRole:
    Type: AWS::IAM::Role
    Properties:
      AssumeRolePolicyDocument:
        Version: '2012-10-17'
        Statement:
          Effect: Allow
          Principal:
            Service:
            - lambda.amazonaws.com
          Action:
          - sts:AssumeRole
      Path: /
      ManagedPolicyArns:
      - arn:aws:iam::aws:policy/service-role/AWSLambdaBasicExecutionRole
  IntegrationTestFunction:
    Type: AWS::Lambda::Function
    Properties:
      Handler: main.handler
      MemorySize: 128
      Role:
        Fn::GetAtt: IntegrationTestFunctionExecutionRole.Arn
      Runtime: python3.8
      Timeout: 30
      Code:
        S3Bucket: aws-quickstart
        S3Key: connect-integration-examples/functions/packages/integration-test/lambda.zip
  IntegrationTest:
    Type: Custom::IntegrationTest
    Version: '1.0'
    Properties:
      ServiceToken:
        Fn::GetAtt: IntegrationTestFunction.Arn
      IntegrationEndpoint:
        Ref: IntegrationEndpoint
  IntegrationFunctionExecutionRole:
    Type: AWS::IAM::Role
    Properties:
      AssumeRolePolicyDocument:
        Version: '2012-10-17'
        Statement:
          Effect: Allow
          Principal:
            Service:
            - lambda.amazonaws.com
          Action:
          - sts:AssumeRole
      Path: /
      ManagedPolicyArns:
      - arn:aws:iam::aws:policy/service-role/AWSLambdaBasicExecutionRole
  IntegrationFunction:
    Type: AWS::Lambda::Function
    Properties:
      Handler: index.handler
      Runtime: nodejs10.x
      Description: Amazon Connect Example Integration Function
      MemorySize: 128
      Timeout: 30
      Role:
        Fn::GetAtt: IntegrationFunctionExecutionRole.Arn
      Environment:
        Variables:
          IntegrationEndpoint:
            Ref: IntegrationEndpoint
      Code:
        S3Bucket: aws-quickstart
        S3Key: connect-integration-examples/functions/packages/integration/lambda.zip
  IntegrationFunctionPermission:
    Type: AWS::Lambda::Permission
    Properties:
      FunctionName:
        Ref: IntegrationFunction
      Action: lambda:InvokeFunction
      Principal: connect.amazonaws.com
      SourceAccount:
        Ref: AWS::AccountId
Outputs:
  IntegrationFunctionExecutionRole:
    Description: Lambda Function Execution Role ARN
    Value:
      Fn::GetAtt: IntegrationFunctionExecutionRole.Arn
  IntegrationFunction:
    Description: Lambda Function for Amazon Connect Example Integration
    Value:
      Fn::GetAtt: IntegrationFunction.Arn
...