使用 serverless.yaml 创建 SimpleDB 域



所以我正在使用无服务器框架在Amazon AWS上创建一个无服务器的应用程序。 对于我们的堆栈,我们创建了许多 Lambda 函数、DynamoDB 表、API 网关,现在我们还想添加一个 simpleDB 域。 我似乎无法在网上找到任何关于将哪些代码片段添加到serverless.yaml以创建SimpleDB域的信息。

我编写了以下代码,它创建了域,但域的名称与预期不符

resources:
Resources:
LogSimpleDBTable:
Type: "AWS::SDB::Domain"
Properties:
DomainName : ${self:provider.environment.SIMPLEDB}
Description: "SDB Domain to store data log"

变量 SimpleDB 定义为

SIMPLEDB: git-pushr-processing-${opt:stage, self:provider.stage}

所以当我使用命令部署时

serverless deploy --stage staging --awsaccountid XXXXX

我希望 SimpleDB 表的名称是

git-pushr-processing-stageaging

相反,我得到了一个具有以下名称的域

git-pushr-api-stageaging-LogSimpleDBTable-1P7CQH4SGAWGI

其中序列的最后一位(1P7CQH4SGAWGI)每次都不同。

我们使用完全相同的模式来命名 DynamoDB 表,它们似乎是使用正确的名称创建的

DYNAMODB_TABLE: git-pushr-processing-${opt:stage, self:provider.stage}
resources:
Resources:
TodosDynamoDbTable:
Type: 'AWS::DynamoDB::Table'
DeletionPolicy: Retain
Properties:
AttributeDefinitions:
-
AttributeName: id
AttributeType: S
KeySchema:
-
AttributeName: id
KeyType: HASH
ProvisionedThroughput:
ReadCapacityUnits: 1
WriteCapacityUnits: 1
TableName: ${self:provider.environment.DYNAMODB_TABLE}
StreamSpecification:
StreamViewType: NEW_AND_OLD_IMAGES

我们得到一个具有以下名称的 DynamoDB 表

git-pushr-processing-stageaging

那么我在这里做错了什么?

我不知道如何让无服务器使用您选择的域名。

但是,可以引用使用Ref: LogSimpleDBTable语法生成的域

例如,将域名传递给 lambda(使其可用作process.env.SDB_DOMAIN_NAME变量):

functions:
queueRequests:
handler: src/consumer.handler
name: consumer
environment:
SDB_DOMAIN_NAME:
Ref: LogSimpleDBTable

或在 IAM 角色语句中引用它

provider:
...
iamRoleStatements:
- Effect: Allow
Action:
- sdb:GetAttributes
- sdb:PutAttributes
Resource: 
Fn::Join:
- ""
- - "arn:aws:sdb:*:*:domain/"
- Ref: LogSimpleDBTable

相关内容

  • 没有找到相关文章