考虑到这个相对人为的类从 Elasticsearch(或任何与此相关的数据存储)获取一条记录:
export default class UserRepoImpl implements UserRepo {
constructor(private readonly esClient: ElasticsearchClient) {}
public async getUser(id: string): Promise<User> {
const response = await this.esClient.request('GET', `/users/_doc/${id}`);
return response._source;
}
}
Run Code Online (Sandbox Code Playgroud)
如何编写一个测试来UserRepoImpl为我实例化 a 但插入一个模拟的 ElasticsearchClient作为构造函数的参数?
在无服务器中,我正在创建一个AWS::Lambda::PermissionCFN 资源,它允许 Cognito 调用自定义消息 Lambda 处理程序。
AWS::Lambda::Permission取决于 lambda。如何确保首先创建 lambda?
我已经尝试向CFN 资源添加一个DependsOn属性,但AWS::Lambda::Permission没有成功。
下面是我的 CFN 资源,它尝试向 Cognito 添加权限以调用 lambda:
UserPoolLambdaInvokePermission:
Type: AWS::Lambda::Permission
Properties:
Action: lambda:invokeFunction
Principal: cognito-idp.amazonaws.com
FunctionName: arn:aws:lambda:${self:provider.region}:#{AWS::AccountId}:function:${self:service}-${self:provider.stage}-cognitoCustomMessage
SourceArn: arn:aws:cognito-idp:${self:provider.region}:#{AWS::AccountId}:userpool/${self:provider.environment.USER_POOL_ID}
Run Code Online (Sandbox Code Playgroud)
这是我的 lambda 在我的 lambda 中的样子serverless.yml:
cognitoCustomMessage:
handler: src/main/lambdas/users_handler.cognitoCustomMessage
Run Code Online (Sandbox Code Playgroud)
这是我的 lambda 在非常基本的层面上所做的:
cognitoCustomMessage(event, next) {
if (event.triggerSource === 'CustomMessage_ForgotPassword') {
// do stuff
}
return next(null, event);
}
Run Code Online (Sandbox Code Playgroud)
我从上面得到的错误是:
发生错误:CognitoCustomMessageLambdaFunction - 找不到函数:arn:aws:lambda:us-west-2:1234567890:my-service-dev-cognitoCustomMessage(服务:AWSLambdaInternal;状态代码:404;错误代码:ResourceNotFoundException;请求 ID:e2a98525 -5090-4d0f-a1f5-20610474f93b)。
如果我添加一个DependsOn:
UserPoolLambdaInvokePermission:
Type: AWS::Lambda::Permission
DependsOn: …Run Code Online (Sandbox Code Playgroud) aws-cloudformation amazon-cognito aws-lambda serverless-framework
设置ELB时,它会说以下内容:
您必须从至少两个可用区中指定子网,以提高负载均衡器的可用性。
我目前有两个 VPC:
ELB 仅适用于 WebVPC(为 Web 流量提供服务)。我目前每个 VPC 只有一个公共子网和一个私有子网,这意味着我只能从我的 WebVPC 为 ELB 提供一个公共子网。
这是否意味着拥有至少两个公共子网和至少两个私有子网是最佳实践?