- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
概要
我通过aws lambda
使AWS SAM
函数。
此功能需要数据库,因此我选择DynamoDB
。
现在,我为AWS SAM
和DynamoDB
设置本地环境。
看来我成功设置了本地DynamoDB
,但是运行本地aws sam
函数时却无法连接。
failed to make Query API call, ResourceNotFoundException: Cannot do operations on a non-existent table
❯ aws dynamodb create-table --cli-input-json file://test/positive-line-bot_table.json --endpoint-url http://localhost:8000
TABLEDESCRIPTION 1578904757.61 0 arn:aws:dynamodb:ddblocal:000000000000:table/PositiveLineBotTable PositiveLineBotTable 0 ACTIVE
ATTRIBUTEDEFINITIONS Id N
BILLINGMODESUMMARY PROVISIONED 0.0
KEYSCHEMA Id HASH
PROVISIONEDTHROUGHPUT 0.0 0.0 0 5 5
❯ aws dynamodb batch-write-item --request-items file://test/positive-line-bot_table_data.json --endpoint-url http://localhost:8000
❯ aws dynamodb list-tables --endpoint-url http://localhost:8000
TABLENAMES PositiveLineBotTable
❯ aws dynamodb get-item --table-name PositiveLineBotTable --key '{"Id":{"N":"1"}}' --endpoint-url http://localhost:8000
ID 1
NAME test
aws sam
时,尽管此表确实在本地退出,但似乎没有连接到此本地
DynamoDB
。
❯ sam local start-api --env-vars test/env.json
Fetching lambci/lambda:go1.x Docker container image......
Mounting /Users/jpskgc/go/src/line-positive-bot/positive-line-bot as /var/task:ro,delegated inside runtime container
START RequestId: c9f19371-4fea-1e25-09ec-5f628f7fcb7a Version: $LATEST
failed to make Query API call, ResourceNotFoundException: Cannot do operations on a non-existent table
Function 'PositiveLineBotFunction' timed out after 5 seconds
Function returned an invalid response (must include one of: body, headers, multiValueHeaders or statusCode in the response object). Response received:
2020-01-13 18:46:10 127.0.0.1 - - [13/Jan/2020 18:46:10] "GET /positive HTTP/1.1" 502 -
❯ curl http://127.0.0.1:3000/positive
{"message":"Internal server error"}
DynamoDB
表。
package main
//import
func exitWithError(err error) {
fmt.Fprintln(os.Stderr, err)
os.Exit(1)
}
type Item struct {
Key int
Desc string
Data map[string]interface{}
}
type Event struct {
Type string `json:"type"`
ReplyToken string `json:"replyToken"`
Source Source `json:"source"`
Timestamp int64 `json:"timestamp"`
Message Message `json:"message"`
}
type Message struct {
Type string `json:"type"`
ID string `json:"id"`
Text string `json:"text"`
}
type Source struct {
UserID string `json:"userId"`
Type string `json:"type"`
}
func handler(request events.APIGatewayProxyRequest) (events.APIGatewayProxyResponse, error) {
endpoint := os.Getenv("DYNAMODB_ENDPOINT")
tableName := os.Getenv("DYNAMODB_TABLE_NAME")
sess := session.Must(session.NewSession())
config := aws.NewConfig().WithRegion("ap-northeast-1")
if len(endpoint) > 0 {
config = config.WithEndpoint(endpoint)
}
svc := dynamodb.New(sess, config)
params := &dynamodb.ScanInput{
TableName: aws.String(tableName),
}
result, err := svc.Scan(params)
if err != nil {
exitWithError(fmt.Errorf("failed to make Query API call, %v", err))
}
items := []Item{}
err = dynamodbattribute.UnmarshalListOfMaps(result.Items, &items)
if err != nil {
exitWithError(fmt.Errorf("failed to unmarshal Query result items, %v", err))
}
var words []string
for i, item := range items {
for k, v := range item.Data {
words = append(words, v.(string))
}
}
rand.Seed(time.Now().UnixNano())
i := rand.Intn(len(words))
word := words[i]
return events.APIGatewayProxyResponse{
Body: word,
StatusCode: 200,
}, nil
}
func main() {
lambda.Start(handler)
}
env.json
我尝试将docker.for.mac.host.internal更改为我的本地IP地址。但这并不能解决。
{
"PositiveLineBotFunction": {
"DYNAMODB_ENDPOINT": "http://docker.for.mac.host.internal:8000",
"DYNAMODB_TABLE_NAME": "PositiveLineBotTable"
}
}
template.yml
AWSTemplateFormatVersion: '2010-09-09'
Transform: AWS::Serverless-2016-10-31
Description: >
positive-line-bot
Globals:
Function:
Timeout: 5
Resources:
PositiveLineBotFunction:
Type: AWS::Serverless::Function
Properties:
CodeUri: positive-line-bot/
Handler: positive-line-bot
Runtime: go1.x
Policies:
- DynamoDBReadPolicy:
TableName: !Ref PositiveLineBotTable
Tracing: Active
Events:
CatchAll:
Type: Api
Properties:
Path: /positive
Method: GET
Environment:
Variables:
DYNAMODB_ENDPOINT: ''
DYNAMODB_TABLE_NAME: ''
PositiveLineBotTable:
Type: AWS::DynamoDB::Table
Properties:
TableName: 'PositiveLineBotTable'
AttributeDefinitions:
- AttributeName: 'Id'
AttributeType: 'N'
KeySchema:
- AttributeName: 'Id'
KeyType: 'HASH'
ProvisionedThroughput:
ReadCapacityUnits: '5'
WriteCapacityUnits: '5'
BillingMode: PAY_PER_REQUEST
Outputs:
PositiveLineBotAPI:
Description: 'API Gateway endpoint URL for Prod environment for PositiveLineBot'
Value: !Sub 'https://${ServerlessRestApi}.execute-api.${AWS::Region}.amazonaws.com/Prod/positive/'
PositiveLineBotFunction:
Description: 'PositiveLineBot Lambda Function ARN'
Value: !GetAtt PositiveLineBotFunction.Arn
PositiveLineBotFunctionIamRole:
Description: 'Implicit IAM Role created for PositiveLineBot'
Value: !GetAtt PositiveLineBotFunction.Arn
最佳答案
参见this answer
解决方案包括两部分:
docker network create dynamodb-network
docker run -d -v "$PWD":/dynamodb_local_db -p 8000:8000 --network dynamodb-network --name dynamodb cnadiminti/dynamodb-local
sam local start-api --docker-network dynamodb-network -n env.json
const awsRegion = process.env.AWS_REGION || "us-east-2";
const options = {
region: awsRegion,
};
if (process.env.AWS_SAM_LOCAL) {
options.endpoint = "http://dynamodb:8000";
}
const docClient = new dynamodb.DocumentClient(options);
关于go - 无法进行查询API调用,ResourceNotFoundException:无法对不存在的表执行操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59715354/
我正在使用 Spring Boot 并尝试创建一个测试。 实际上我的测试类: @RunWith(SpringRunner.class) @SpringBootTest(webEnvironment=W
很难说出这里问的是什么。这个问题是含糊的、模糊的、不完整的、过于宽泛的或修辞性的,无法以目前的形式得到合理的回答。如需帮助澄清此问题以便重新打开它,visit the help center 。 已关
我有以下类(class): public class EmailService { static { Velocity.setProperty("resource.loader
我会自定义抽屉导航。我在另一个线程中使用了在 stackoverflow 上找到的示例。代码是复制粘贴,但是在logcat中运行应用程序时出现异常:“ResourceNotFoundException
我在 Market 上收到了一些关于此异常的报告。没有提到它在我的应用程序中发生的位置,大多数用户没有这个问题。我该如何调试这样的东西?这不是我从所有设备上得到的异常(exception)。只有一个特
我想知道是否有人可以帮助我。我在我的 android 应用程序中收到 ResourceNotFoundException。运行以下代码时发生(异常发生在getString()调用) c
当我尝试在我的 Samsung Note II 上运行我的应用程序时,我收到此行的 ResourceNotFoundException setContentView(R.layout.activity
我有一个Recyclerview。在它的适配器中,这就是我所拥有的: @Override public void onBindViewHolder(@NonNull ViewHolder holde
概要 我通过aws lambda使AWS SAM函数。 此功能需要数据库,因此我选择DynamoDB。 现在,我为AWS SAM和DynamoDB设置本地环境。 看来我成功设置了本地DynamoDB,
我正在尝试基于 scalatra-sbt.g8 的以下内容: class FooWeb extends ScalatraServlet with ScalateSupport { beforeAl
我为 ListView 项创建了一个构造函数DataPembeli,然后创建了自定义 ListView 适配器DataPembeliListAdapter并使用这样的构造函数: txtid.setTe
我这样创建自己的样式属性: 我在我的主题中赋予它这样的值(value): @color/blue 如果我在我的布局中访问它(已设置为 contentView) 它就像一个魅力。但是如果我
当我的 android 应用程序以纵向屏幕启动时,操作栏中有选项菜单;但是当切换到 landspace 时,我发现资源未找到异常。 inflater.inflate(R.menu.main, menu
我已经拥有的: 这是我的 ImageView: 我使用的是 Android 插件版本 2.0: classpath 'com.android.tools.build:gradle:2.0.0' 我在
我最近检查了我的 GP 崩溃日志,我经常收到这个调用堆栈。请你帮助我好吗。 一些事情: 添加资源路径失败有时显示/data/app/com.xxx.xxx.xxx-x/base.apk,有时显示/mn
07-25 10:15:37.960: E/AndroidRuntime(8661): android.content.res.Resources$NotFoundException: String
在基本的 Skobbler 应用程序中,当调用 InitializeSKMaps 时,会抛出 ResourceNotFoundException 并引用“字符串资源 ID #0x0”。为什么会这样?
我有一个自定义 View ,我们将其称为CustomView。在初始化时,我调用了以下方法 textPaint.setTypeface(ResourcesCompat.getFont(getConte
我正在尝试将原始文件夹中的音乐文件设置为在打开 NewActivity 的 ListView 中播放。我已经配置了 Model 类、MainActivity 和 ListviewAdapter,但仍然
我正在开发一个 Android 应用程序,并在其中生成一些 PDF 文件。一旦生成,我就启动一个应用程序的Intent来显示PDF(如Acrobat)。 一旦我按返回键返回到我的应用程序,它就会在采用
我是一名优秀的程序员,十分优秀!