AWS sam local を使用して api ゲートウェイ/aws ラムダ ペアをセットアップし、実行後に正常に呼び出すことができることを確認しました
sam local start-api
次に、docker コンテナにローカルの dynamodb インスタンスを追加し、aws cli を使用してその上にテーブルを作成しました
しかし、コードをラムダに追加して、受け取った dynamodb インスタンスに書き込みます。
2018-02-22T11:13:16.172Z ed9ab38e-fb54-18a4-0852-db7e5b56c8cd エラー: テーブルに書き込めませんでした: {"message":"connect ECONNREFUSED 0.0.0.0:8000","code":"NetworkingError", "errno":"ECONNREFUSED","syscall":"接続","アドレス":"0.0.0.0","ポート":8000,"地域":"eu-west-2","ホスト名":"0.0 .0.0","retryable":true,"time":"2018-02-22T11:13:16.165Z"} コマンドからの書き込みイベント: {"name":"test","geolocation":"xyz"," type":"createDestination"} END RequestId: ed9ab38e-fb54-18a4-0852-db7e5b56c8cd
同じ docker ネットワークに接続する必要があるかもしれないことをオンラインで見たので、ネットワークを作成しdocker network create lambda-local
、開始コマンドを次のように変更しました。
sam local start-api --docker-network lambda-local
と
docker run -v "$PWD":/dynamodb_local_db -p 8000:8000 --network=lambda-local cnadiminti/dynamodb-local:latest
それでも同じエラーが発生します
サムローカルが印刷されています2018/02/22 11:12:51 Connecting container 98b19370ab92f3378ce380e9c840177905a49fc986597fef9ef589e624b4eac3 to network lambda-local
以下を使用して dynamodbclient を作成しています。
const AWS = require('aws-sdk')
const dynamodbURL = process.env.dynamodbURL || 'http://0.0.0.0:8000'
const awsAccessKeyId = process.env.AWS_ACCESS_KEY_ID || '1234567'
const awsAccessKey = process.env.AWS_SECRET_ACCESS_KEY || '7654321'
const awsRegion = process.env.AWS_REGION || 'eu-west-2'
console.log(awsRegion, 'initialising dynamodb in region: ')
let dynamoDbClient
const makeClient = () => {
dynamoDbClient = new AWS.DynamoDB.DocumentClient({
endpoint: dynamodbURL,
accessKeyId: awsAccessKeyId,
secretAccessKey: awsAccessKey,
region: awsRegion
})
return dynamoDbClient
}
module.exports = {
connect: () => dynamoDbClient || makeClient()
}
私のコードがショーを作成しているdynamodbclientを調べる
DocumentClient {
options:
{ endpoint: 'http://0.0.0.0:8000',
accessKeyId: 'my-key',
secretAccessKey: 'my-secret',
region: 'eu-west-2',
attrValue: 'S8' },
service:
Service {
config:
Config {
credentials: [Object],
credentialProvider: [Object],
region: 'eu-west-2',
logger: null,
apiVersions: {},
apiVersion: null,
endpoint: 'http://0.0.0.0:8000',
httpOptions: [Object],
maxRetries: undefined,
maxRedirects: 10,
paramValidation: true,
sslEnabled: true,
s3ForcePathStyle: false,
s3BucketEndpoint: false,
s3DisableBodySigning: true,
computeChecksums: true,
convertResponseTypes: true,
correctClockSkew: false,
customUserAgent: null,
dynamoDbCrc32: true,
systemClockOffset: 0,
signatureVersion: null,
signatureCache: true,
retryDelayOptions: {},
useAccelerateEndpoint: false,
accessKeyId: 'my-key',
secretAccessKey: 'my-secret' },
endpoint:
Endpoint {
protocol: 'http:',
host: '0.0.0.0:8000',
port: 8000,
hostname: '0.0.0.0',
pathname: '/',
path: '/',
href: 'http://0.0.0.0:8000/' },
_clientId: 1 },
attrValue: 'S8' }
このセットアップは機能しますか? どうすればお互いに話せるようになりますか?
- - 編集 - -
Twitter での会話に基づいて、CLI および Web シェルで dynamodb を操作できることを (おそらく) 言及する価値があります。