0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【AWS】Lambdaで「StartQuery へのリクエスト中にエラーが発生しました」と表示された場合

Posted at

概要

AWS LambdaをCloudformationで作成した際、
「StartQuery へのリクエスト中にエラーが発生しました」
というエラーに遭遇しました。

原因と解決法を紹介します。

エラー概要

以下でCF実行。

  LambdaRole:
    Type: AWS::IAM::Role
    Properties:
      AssumeRolePolicyDocument:
        Version: '2012-10-17'
        Statement:
          - 
            Effect: Allow
            Principal:
              Service:
                - sns.amazonaws.com
                - lambda.amazonaws.com
            Action:
              - sts:AssumeRole
      Path: "/"
      RoleName: LambdaRole
      ManagedPolicyArns:
        - arn:aws:iam::aws:policy/AmazonSNSFullAccess

すると下記エラーがLambdaに表示されていて、試しに「テスト」のところから実施してみましたが失敗していました。

StartQuery へのリクエスト中にエラーが発生しました Log group '/aws/lambda/xxxxxxx' does not exist for account ID 'xxxxxxx' (Service: AWSLogs; Status Code: 400; Error Code: ResourceNotFoundException; Request ID: xxxxxxx; Proxy: null)

image.png

原因

エラーメッセージは、Lambda関数がCloudWatch Logsにログを書き込むための権限がない、と言っています。

/aws/lambda/xxxxxxx」という名前のロググループが存在しないというエラーなので、手動で作成する?と思いましたが、さすがにそこだけ手動でやってくれというのはおかしいと思い調べてみる。

すると、Lambda関数が実行されるIAMロールにCloudWatch Logsにログを書き込む権限が必要であり、それが無かったために生じたエラーとわかりました。

解決方法

ということで以下のようにポリシーを付与します。

  LambdaRoleTclosing:
    Type: AWS::IAM::Role
    Properties:
      AssumeRolePolicyDocument:
        Version: '2012-10-17'
        Statement:
          - 
            Effect: Allow
            Principal:
              Service:
                - sns.amazonaws.com
                - lambda.amazonaws.com
            Action:
              - sts:AssumeRole
      Path: "/"
      RoleName: LambdaRole
      ManagedPolicyArns:
        - arn:aws:iam::aws:policy/AmazonSNSFullAccess
        - arn:aws:iam::aws:policy/AWSLambdaExecute # 追加

これでもう一度Cloudformation実行!

先ほどと同じLambdaの画面を確認してみる。
すると、先ほどと同じ箇所に同じエラー(StartQueryリクエストのエラー)が出ています。

しかしこれは問題ありませんでした。
StartQueryとは、CloudWatch Logs Insightsのクエリを実行するためのAPI。
既存のロググループに対してクエリを実行しますが、ロググループが存在しない場合は初めてのLambda関数実行時に自動作成されるからです。

なので、Lambda関数をテストで実行してみます。
すると、CloudWatch Logsにロググループが作成されたことが確認できました。

(参考)AWSLambdaExecuteとは

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "logs:*"
            ],
            "Resource": "arn:aws:logs:*:*:*"
        },
        {
            "Effect": "Allow",
            "Action": [
                "s3:GetObject",
                "s3:PutObject"
            ],
            "Resource": "arn:aws:s3:::*"
        }
    ]
}

AWSが提供する管理ポリシーの一つ。
S3バケットからオブジェクトの取得、バケットへの配置、CloudWatch Logsにログを書き込むための権限を提供するポリシーです。
全てのS3バケットとCloudWatch Logsに対するアクセスを許可しているため、セキュリティ上のリスクを踏まえて付与を判断されてください。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?