Resources: MyRole1: Type: AWS::IAM::Role Properties: AssumeRolePolicyDocument: Statement: - Effect: Allow Action: sts:AssumeRole Principal: Service: lambda.amazonaws.com ManagedPolicyArns: - !Sub arn:${AWS::Partition}:iam::aws:policy/service-role/AWSLambdaBasicExecutionRole MyRole2: Type: AWS::IAM::Role Properties: AssumeRolePolicyDocument: Statement: - Effect: Allow Action: sts:AssumeRole Principal: Service: lambda.amazonaws.com ManagedPolicyArns: - !Sub arn:${AWS::Partition}:iam::aws:policy/service-role/AWSLambdaBasicExecutionRole TriggerFunction: Type: AWS::Lambda::Function Properties: Role: !GetAtt MyRole1.Arn Runtime: nodejs14.x Handler: index.handler Code: ZipFile: | const https = require('https'); exports.handler = (event, context, callback) => { const req = https.get(process.env.API_URL, res => { var body = []; res.on('data', function(chunk) { body.push(chunk); }); res.on('end', function() { try { const message = JSON.parse(Buffer.concat(body).toString())['message']; if (message === "connector works!") { callback(null, { StatusCode: res.statusCode, }); } else { callback(new Error("Unexpected message")); } } catch(error) { callback(error); } }); }); req.on('error', error => { callback(error); }); req.end(); }; Environment: Variables: API_URL: !Sub "https://${RestApi}.execute-api.${AWS::Region}.${AWS::URLSuffix}/prod/somepath" ConnectedFunction: Type: AWS::Lambda::Function Properties: Role: !GetAtt MyRole2.Arn Runtime: nodejs14.x Handler: index.handler Code: ZipFile: | exports.handler = async (event) => { return { statusCode: 200, body: JSON.stringify({ "message": "connector works!" }), }; }; RestApi: Type: AWS::ApiGateway::RestApi Properties: Name: !Sub "${AWS::StackName}-connector-restapi-to-function" EndpointConfiguration: # BJS and gov regions only support REGIONAL endpoints, # using REGIONAL for all regions for simplicity. Types: - REGIONAL Path: Type: AWS::ApiGateway::Resource Properties: RestApiId: !Ref RestApi ParentId: !GetAtt - RestApi - RootResourceId PathPart: somepath Method: Type: AWS::ApiGateway::Method Properties: RestApiId: !Ref RestApi ResourceId: !Ref Path HttpMethod: ANY AuthorizationType: NONE Integration: Type: AWS_PROXY IntegrationHttpMethod: POST Uri: !Sub >- arn:${AWS::Partition}:apigateway:${AWS::Region}:lambda:path/2015-03-31/functions/${ConnectedFunction.Arn}/invocations RestAPIDeployment: Type: AWS::ApiGateway::Deployment DependsOn: - Method Properties: RestApiId: !Ref RestApi RestAPIGatewayStage: Type: AWS::ApiGateway::Stage DependsOn: - Method Properties: DeploymentId: !Ref RestAPIDeployment RestApiId: !Ref RestApi StageName: prod MyConnector: Type: AWS::Serverless::Connector Properties: Source: Id: RestApi Destination: Id: ConnectedFunction Permissions: - Write Metadata: SamTransformTest: true