質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
AWS Lambda

AWS Lambdaは、クラウド上でアプリを実行できるコンピューティングサービス。サーバーのプロビジョニングや管理を要せず複数のイベントに対してコードを実行します。カスタムロジック用いた他AWSサービスの拡張やAWSの規模やパフォーマンスを用いたバックエンドサービスを作成できます。

AWS(Amazon Web Services)

Amazon Web Services (AWS)は、仮想空間を機軸とした、クラスター状のコンピュータ・ネットワーク・データベース・ストーレッジ・サポートツールをAWSというインフラから提供する商用サービスです。

Q&A

解決済

1回答

4869閲覧

CloudFormationにてsubscriptionFilterの作成が上手く行かない(400エラー)

yuki_90453

総合スコア326

AWS Lambda

AWS Lambdaは、クラウド上でアプリを実行できるコンピューティングサービス。サーバーのプロビジョニングや管理を要せず複数のイベントに対してコードを実行します。カスタムロジック用いた他AWSサービスの拡張やAWSの規模やパフォーマンスを用いたバックエンドサービスを作成できます。

AWS(Amazon Web Services)

Amazon Web Services (AWS)は、仮想空間を機軸とした、クラスター状のコンピュータ・ネットワーク・データベース・ストーレッジ・サポートツールをAWSというインフラから提供する商用サービスです。

0グッド

0クリップ

投稿2021/05/23 03:42

#概要
CloudFormationにてsubscriptionFilterを通してLambdaを実行する処理を追加したいと考えていますが、デプロイで失敗してしまいます。

#実際のテンプレート

subscriptionFilter

SubscriptionFilter: Typ##e: AWS::Logs::SubscriptionFilter Properties: DestinationArn: !Sub "ErrorWatch" FilterPattern: INFO LogGroupName: 'hogehohe' # RoleArn: # Fn::GetAtt: # - "CloudWatchLogsRols" # - "Arn"

subscriptionFilterから呼び出されるLambda関数

ErrorWatch: Type: 'AWS::Serverless::Function' Properties: Description: 'CloudWatch Logsのエラーを監視' CodeUri: src/functions/reactive/errorWatch Role: !GetAtt CloudWatchLogsRols.Arn Timeout: 60 Environment: Variables: SLACK_URL: !Ref SlackUrl

Role

CloudWatchLogsRols: Type: 'AWS::IAM::Role' Properties: AssumeRolePolicyDocument: Version: '2012-10-17' Statement: - Effect: Allow Principal: Service: lambda.amazonaws.com Action: 'sts:AssumeRole' Policies: - PolicyName: 'cloudwatch_logs_sub' PolicyDocument: Version: '2012-10-17' Statement: - Effect: 'Allow' Action: 'lambda:InvokeFunction' Resource: '*'

エラーについて

上記のテンプレートだと下記のようなエラーが下記のようなエラーが表示されます。

[SubscriptionFilter] Could not execute the lambda function. Make sure you have given CloudWatch Logs permission to execute your function.

Lambda関数(ErrorWatch)には権限が問題ないように思えるので、SubscriptionFilterに権限が足りないと思います。

しかし、SubscriptionFilterに権限を付与すると下記ようなエラーに変わります。
(* SubscriptionFilteにLambda関数と同じRoleを与えた場合です)

[SubscriptionFilter] destinationArn for vendor lambda cannot be used with roleArn

destinationArnとroleArnの両方が使えないと意味かと思いますが、この部分をどうすればいいかわかりません。。。
公式のドキュメントを見ても両方設定されているようです。

どなたかアドバイスお願い致します。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

出てるメッセージをそのまま解釈すると
「CloudWatch LogsにFunctionを実行する権限を与えたか確認してください」
なのでそのへんを確認するべきでしょう。

メッセージを検索すると例えば下記のようなページが引っかかります
権限エラー

権限が足りないと言われているのは恐らくここの部分で、これを定義してやれば行けそうな気がします。
あんまり細かくは調べてないですが、下記が参考になりそうです。
意外と盲点?Lambda関数にトリガーを追加するときはリソースベースポリシーを意識しよう

また、Lambdaが使用しているロールと同じSubscriptionFilterで呼び出そうにも、その設定ではロールの方でLambdaにしかassumeroleを許可していないのでどのみち呼び出せないかと思います。

投稿2021/05/23 08:45

yu_1985

総合スコア7427

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

yuki_90453

2021/05/23 09:25

ご回答ありがとうございます。 頂いたリンクから下記のコマンドを実行した所、デプロイ出来るようになりました。 aws lambda add-permission --function-name "<function_name>" --statement-id "lambdapermission" --principal "logs.<region>.amazonaws.com" --action "lambda:InvokeFunction" --source-arn "arn:aws:logs:<region>:<account_id>:log-group:*:*" --source-account "<account_id>" --region=<region>
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問