service: llama-stablecoins package: individually: true excludeDevDependencies: true provider: name: aws runtime: nodejs14.x memorySize: 130 region: eu-central-1 endpointType: REGIONAL # Set to regional because the api gateway will be behind a cloudfront distribution stage: dev # Default to dev if no stage is specified tracing: # Enable X-Ray tracing (debugging) apiGateway: true lambda: true iamRoleStatements: - Effect: Allow # X-Ray permissions Action: - xray:PutTraceSegments - xray:PutTelemetryRecords Resource: "*" - Effect: "Allow" Action: - dynamodb:DescribeTable - dynamodb:Query - dynamodb:Scan - dynamodb:GetItem - dynamodb:PutItem - dynamodb:UpdateItem - dynamodb:DeleteItem - dynamodb:BatchGetItem Resource: - "Fn::GetAtt": [DynamoTable, Arn] - Effect: Allow # Lambda logs on cloudwatch Action: - logs:CreateLogGroup - logs:CreateLogStream - logs:PutLogEvents Resource: - "Fn::Join": - ":" - - "arn:aws:logs" - Ref: "AWS::Region" - Ref: "AWS::AccountId" - "log-group:/aws/lambda/*:*:*" # For warm-up functions - Effect: "Allow" Action: - "lambda:InvokeFunction" Resource: "*" - Effect: "Allow" Action: - "s3:ListBucket" - "s3:*Object*" Resource: "*" environment: DEFILLAMA_SDK_MUTED: true tableName: ${self:custom.tableName} stage: ${self:custom.stage} custom: stage: ${opt:stage, self:provider.stage} esbuild: bundle: true minify: false concurrency: 4 # for debugging #keepOutputDirectory: true prune: automatic: true number: 5 # Number of versions to keep tableName: prod-stablecoins-table domain: stablecoins.llama.fi certificateArn: "arn:aws:acm:us-east-1:856461987125:certificate/b4209013-30a6-417e-847e-6e630c3e77fe" hostedZone: llama.fi functions: fallback: handler: src/fallback.default events: - http: path: /{params+} method: any peggedchart: handler: src/getPeggedChart.default timeout: 60 memorySize: 3000 events: - http: path: peggedcharts method: get - http: path: peggedcharts/{chain} method: get stablecoinChart: handler: src/getStablecoinChart.default timeout: 60 memorySize: 3000 events: - http: path: stablecoinchart/{chain} method: get stablecoinDominance: handler: src/getChainDominance.default timeout: 60 memorySize: 3000 events: - http: path: stablecoindominance/{chain} method: get peggeds: handler: src/getPeggeds.default timeout: 120 memorySize: 2000 events: - http: path: peggeds method: get stablecoins: handler: src/getStablecoins.default timeout: 120 memorySize: 2000 events: - http: path: stablecoins method: get config: handler: src/config.default timeout: 120 memorySize: 2000 events: - http: path: config method: get peggedAsset: handler: src/getPegged.default timeout: 120 memorySize: 2000 events: - http: path: pegged/{pegged} method: get stablecoin: handler: src/getStablecoin.default timeout: 120 memorySize: 2000 events: - http: path: stablecoin/{stablecoin} method: get peggedchains: handler: src/getPeggedChains.default timeout: 60 memorySize: 2000 events: - http: path: peggedchains method: get stablecoinchains: handler: src/getStablecoinChains.default timeout: 60 memorySize: 2000 events: - http: path: stablecoinchains method: get peggedprices: handler: src/getPeggedPrices.default timeout: 60 memorySize: 2000 events: - http: path: peggedprices method: get stablecoinprices: handler: src/getStablecoinPrices.default timeout: 60 memorySize: 2000 events: - http: path: stablecoinprices method: get storePeggedAssets: handler: src/storePeggedAssets.default timeout: 900 memorySize: 2000 triggerStorePegged: handler: src/triggerStorePegged.default timeout: 900 events: - schedule: cron(40 * * * ? *) storePeggedPrices: handler: src/storePeggedPrices.default timeout: 900 memorySize: 1024 events: - schedule: cron(15/30 * * * ? *) resources: # DynamoDB and api gateway errors - ${file(resources/table-and-api.yml)} # Cloudfront API distribution - ${file(resources/api-cloudfront-distribution.yml)} plugins: - serverless-esbuild - serverless-offline - serverless-prune-plugin