включение aws-xray serverless.yml

Я пытаюсь включить aws-xray для всех лямбда-функций следующим образом:

serverless.yml

provider:
  tracing:
    lambda: true
    apiGateway: true

  name: aws
  runtime: nodejs8.10

  stage: ${opt:stage, 'dev'}
  region: ${opt:region, 'ca-central-1'}

service.ts

import * as AWS from 'aws-sdk'
import * as AWSXRay from 'aws-xray-sdk'
const XAWS = AWSXRay.captureAWS(AWS)
const docClient: DocumentClient = new XAWS.DynamoDB.DocumentClient()
const s3 = new XAWS.S3({signatureVersion: 'v4'})

после sls deploy я получаю следующую ошибку:

An error occurred: <some_lambda funcion> - The provided execution role does not have permissions to call PutTraceSegments on XRAY (Service: AWSLambdaInternal; Status Code: 400; Error Code: InvalidParameterValueException; Request ID: 364243f8-8847-48ef-87ad-75da2537e7f7).

Я не уверен, в чем проблема. Я также пробовал развернуть с помощью:

  iamRoleStatements:
    - Effect: Allow
      Action:
        - "xray:PutTraceSegments"
        - "xray:PutTelemetryRecords"
      Resource:
        - "*"

все та же проблема.

Я был бы очень признателен за любую помощь, так как я понятия не имею, почему это проблема, тем более, что у меня есть другой проект с включенной трассировкой точно так же, без проблем!

package.json:

{
  "name": "mini-twitter",
  "version": "1.0.0",
  "description": "Serverless Mini-Twitter app",
  "dependencies": {
    "aws-xray-sdk": "^2.2.0",
    "source-map-support": "^0.5.11",
  },
  "devDependencies": {
    "@types/aws-lambda": "^8.10.17",
    "@types/node": "^10.14.4",
    "aws-sdk": "^2.433.0",
    "serverless-iam-roles-per-function": "^1.0.4",
    "serverless-webpack": "^5.2.0",
    "ts-loader": "^5.3.3",
    "typescript": "^3.4.1",
  }
}

person Sal B    schedule 22.08.2019    source источник


Ответы (3)


Вам необходимо установить плагин:

Как комментарий Гарета МакКамски (Спасибо!)

Просто используйте:

serverless plugin install --name serverless-plugin-tracing

Или сделайте это вручную:

npm install --save-dev serverless-plugin-tracing

И включите его на своем serverless.yml:

plugins:
  - serverless-plugin-tracing

Теперь ваш файл выглядит так:

provider:
  name: aws
  stage: test
  tracing: true # enable tracing
  iamRoleStatements:
    - Effect: "Allow" # xray permissions (required)
      Action:
        - "xray:PutTraceSegments"
        - "xray:PutTelemetryRecords"
      Resource:
        - "*"

plugins:
  - serverless-plugin-tracing

Дополнительная информация: https://serverless.com/plugins/serverless-plugin-tracing/

person Claudio Acioli    schedule 27.03.2020
comment
Один совет. Просто используйте serverless plugin install --name serverless-plugin-tracing, и он все сделает за вас - person Gareth McCumskey; 27.03.2020

Если разрешение

      - Effect: Allow
        Action:
          - "xray:PutTraceSegments"
          - "xray:PutTelemetryRecords"
        Resource:
          - "*"

который вы добавили не глобально, вы также должны убедиться, что функция, которую вы упомянули как <some_lambda funcion> в своей лямбде, тоже должна иметь разрешения. то есть, если вы используете плагин типа serverless-iam-roles-per-function. В моем случае это сработало, однако я до сих пор не могу понять точную причину проблемы, поскольку другие работают без него.

person harisu    schedule 14.02.2020

похоже, что команда sls deploy не добавляет разрешения X-Ray для роли IAM. Вы пробовали вручную добавить его?

Перейдите в Консоль AWS, перейдите к IAM, найдите роль, соответствующую развертыванию, прикрепите к роли политику AWSXrayWriteOnlyAccess и посмотрите, работает ли она.

person Chan Chiem Jeffery Saeteurn    schedule 30.08.2019