サーバーレスでは、AWS::Lambda::Permission
Cognitoがカスタムメッセージラムダハンドラーを呼び出せるようにするCFNリソースを作成しています。
AWS::Lambda::Permission
ラムダに依存します。ラムダが最初に作成されるようにするにはどうすればよいですか?
運が悪かったのでDependsOn
、AWS::Lambda::Permission
CFNリソースにプロパティを追加しようとしました。
以下は、ラムダを呼び出すためにCognitoにパーミッションを追加しようとしている私のCFNリソースです。
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}
これが私のラムダが私の中でどのように見えるかserverless.yml
です:
cognitoCustomMessage:
handler: src/main/lambdas/users_handler.cognitoCustomMessage
これが私のラムダが非常に基本的なレベルで行っていることです:
cognitoCustomMessage(event, next) {
if (event.triggerSource === 'CustomMessage_ForgotPassword') {
// do stuff
}
return next(null, event);
}
上記から得られるエラーは次のとおりです。
エラーが発生しました: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: arn:aws:lambda:${self:provider.region}:#{AWS::AccountId}:function:${self:service}-${self:provider.stage}-cognitoCustomMessage
...
....
上記のエラーは次のとおりです。
CloudFormationテンプレートが無効です:テンプレート形式エラー:DependsOnは文字列または文字列のリストである必要があります。
私も試しました:
UserPoolLambdaInvokePermission:
Type: AWS::Lambda::Permission
DependsOn: CognitoCustomMessageLambdaFunction
...
....
上記のエラーは次のとおりです。
エラーが発生しました:CognitoCustomMessageLambdaFunction-関数が見つかりません:arn:aws:lambda:us-west-2:1234567890:my-service-dev-cognitoCustomMessage(サービス:AWSLambdaInternal;ステータスコード:404;エラーコード:ResourceNotFoundException;リクエストID:b888ae82 -a0d7-4d69-888e-9e63027925c1)。
CFNリソースがラムダ関数を使用する前に、最初にラムダ関数を作成する方法があるはずですが、これはそうではないようですDependsOn
。
DependsOn属性には、Lambda関数のARNではなく、クラウド形成テンプレート内のLambda関数の論理名を指定する必要があります。たとえば、クラウドフォーメーションテンプレートでのLambda関数の論理名がMyLambdaの場合、DependsOnは次のようになります。
UserPoolLambdaInvokePermission:
Type: AWS::Lambda::Permission
DependsOn: MyLambda
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加