我们在 Windows 10 上运行 Docker。我们有一个简单的 Java Springboot 应用程序,它应该与 AWS Kinesis 和 S3 交互。对于本地测试,我们想要拉取 localstack Docker 最新镜像并安装并运行。但是 Kinesis 的启动会抛出错误,而 S3 则工作正常。以下是详细信息:
docker compose:
version: '3.1'
services:
localstack:
image: "localstack/localstack"
container_name: localstack_demo
environment:
SERVICES: kinesis, s3, sqs
DEBUG: 1
DATA_DIR: /tmp/localstack
KINESIS_STREAM_SHARDS: 1
KINESIS_ERROR_PROBABILITY: 0.0
KINESIS_STREAM_NAME: my-stream
ports:
- "4567-4584:4567-4584"
- "8055:8080"
volumes:
- './.localstack:/tmp/localstack'
- '/var/run/docker.sock:/var/run/docker.sock'
Run Code Online (Sandbox Code Playgroud)
当我们尝试访问 Kinesis 的默认 URL 时http://localhost:4568,我们收到以下错误:(请注意,S3 的默认 URL 按预期响应):
localstack_demo | 2019-09-24T22:35:27:ERROR:localstack.services.generic_proxy: Error forwarding request: the JSON object must be str, bytes or bytearray, …Run Code Online (Sandbox Code Playgroud) 我正在运行官方无服务器 GitHub页面上的示例,当我直接部署在我的 AWS 账户上时,它开箱即用,运行良好。
现在,当我尝试通过相应更改来激活serverless-localstackserverless.yml插件时:
service: serverless-rest-api-with-dynamodb
frameworkVersion: ">=1.1.0 <2.0.0"
provider:
name: aws
runtime: python2.7
environment:
DYNAMODB_TABLE: ${self:service}-${opt:stage, self:provider.stage}
iamRoleStatements:
- Effect: Allow
Action:
- dynamodb:Query
- dynamodb:Scan
- dynamodb:GetItem
- dynamodb:PutItem
- dynamodb:UpdateItem
- dynamodb:DeleteItem
Resource: "arn:aws:dynamodb:${opt:region, self:provider.region}:*:table/${self:provider.environment.DYNAMODB_TABLE}"
custom:
localstack:
stages:
- local
- dev
endpoints:
S3: http://localhost:4572
DynamoDB: http://localhost:4570
CloudFormation: http://localhost:4581
Elasticsearch: http://localhost:4571
ES: http://localhost:4578
SNS: http://localhost:4575
SQS: http://localhost:4576
Lambda: http://localhost:4574
Kinesis: http://localhost:4568
plugins:
- serverless-localstack
functions:
create:
handler: todos/create.create
events:
- http:
path: …Run Code Online (Sandbox Code Playgroud) 为了尝试将气流日志记录到 localstack s3 存储桶,对于本地和 kubernetes 开发环境,我按照气流文档记录到 s3。简单介绍一下,localstack是一个本地 AWS 云堆栈,其中包含本地运行的包括 s3 在内的 AWS 服务。
我将以下环境变量添加到我的气流容器中,类似于另一个堆栈溢出帖子,试图登录到我的本地 s3 存储桶。docker-compose.yaml这是我为所有气流容器添加的内容:
- AIRFLOW__CORE__REMOTE_LOGGING=True
- AIRFLOW__CORE__REMOTE_BASE_LOG_FOLDER=s3://local-airflow-logs
- AIRFLOW__CORE__REMOTE_LOG_CONN_ID=MyS3Conn
- AIRFLOW__CORE__ENCRYPT_S3_LOGS=False
Run Code Online (Sandbox Code Playgroud)
我还将我的 localstack s3 信用添加到airflow.cfg
- AIRFLOW__CORE__REMOTE_LOGGING=True
- AIRFLOW__CORE__REMOTE_BASE_LOG_FOLDER=s3://local-airflow-logs
- AIRFLOW__CORE__REMOTE_LOG_CONN_ID=MyS3Conn
- AIRFLOW__CORE__ENCRYPT_S3_LOGS=False
Run Code Online (Sandbox Code Playgroud)
此外,我还安装了 apache-airflow[hooks] 和 apache-airflow[s3],尽管根据文档并不清楚真正需要哪一个。
我按照之前的堆栈溢出帖子中的步骤尝试验证 S3Hook 是否可以写入我的 localstack s3 实例:
[MyS3Conn]
aws_access_key_id = foo
aws_secret_access_key = bar
aws_default_region = us-east-1
host = http://localstack:4572 # s3 port. not sure if this is right place …Run Code Online (Sandbox Code Playgroud) 在我的 ubuntu 18 机器上,我无法运行 localstack 的最新 docker 镜像。即使结束消息显示为“就绪”,我仍然无法使用以下命令访问它。
awslocal --endpoint-url=http://localhost:4575 sns list-topics
Could not connect to the endpoint URL: "http://localhost:4575/"
Run Code Online (Sandbox Code Playgroud)
docker run localstack/localstack 还显示错误: [Errno 13] Permission returned: '/tmp/localstack/server.test.pem.key'
docker run localstack/localstack
Waiting for all LocalStack services to be ready
2020-04-09 04:28:19,502 CRIT Supervisor is running as root. Privileges were not dropped because no user is specified in the config file. If you intend to run as root, you can set user=root in the config file to avoid this message. …Run Code Online (Sandbox Code Playgroud) 我有一些奇怪的错误,我无法找出原因,你能帮助我吗?
...
无服务器:警告:无法找到名为:TypeScriptPlugin
无服务器:根配置错误:无法识别的属性“stepFunctions”
...
无服务器.yml
service:
name: service-name
plugins:
- serverless-localstack
- serverless-step-functions
- serverless-pseudo-parameters
- serverless-webpack
custom:
webpackIncludeModules: true
localstack:
stages:
- local
host: http://localhost
edgePort: 4566
autostart: true
lambda:
mountCode: false
debug: true
docker:
sudo: true
provider:
configValidationMode: off
deploymentBucket:
name: local
name: aws
runtime: nodejs12.x
stage: ${opt:stage, "dev"}
region: ${env:AWS_REGION, "us-east-1"}
logRetentionInDays: 30
functions:
...
stepFunctions:
...
Run Code Online (Sandbox Code Playgroud)
包.json
{
"name": "service-name",
"version": "0.119.0",
"description": "Service decription.",
"scripts": {
"test": "echo \"Error: no test specified\" && exit …Run Code Online (Sandbox Code Playgroud) amazon-web-services aws-step-functions serverless localstack
我运行 docker compose 以使用 S3 服务启动 localstack 实例。它正常启动,但是当尝试使用 AWS CLI 访问它时,出现以下错误:
> aws --endpoint-url=http://localhost:4572 s3api put-bucket-acl --bucket demo-bucket --acl public-read
Connection was closed before we received a valid response from endpoint URL: "http://localhost:4572/demo-bucket?acl".
Run Code Online (Sandbox Code Playgroud)
码头工人组成:
version: '3.7'
services:
localstack:
image: localstack/localstack
container_name: localstack_service
ports:
- "4567-4584:4567-4584"
- "8055:8080"
environment:
- SERVICES=s3
- DEBUG=1
- DATA_DIR=/tmp/localstack/data
volumes:
- ./tmp/localstack:/tmp/localstack
- /var/run/docker.sock:/var/run/docker.sock
networks:
default:
name: mock_demo
Run Code Online (Sandbox Code Playgroud)
我认为问题出在localstack上,因为我什至无法访问网页。
我正在使用 localstack 进行本地 AWS 开发。lambda 通过 API 网关公开。每当 localstack 重新启动时(或者当它在另一台机器上第一次启动时),我必须再次创建该网关,并且它将有一个新生成的 ID。
就像这个控制台输出:
endpoints:
http://localhost:4566/restapis/0ulz03h9kk/local/_user_request_
Run Code Online (Sandbox Code Playgroud)
我怎样才能让这个 URL 看起来很漂亮,这样我就可以有一个简单的前端启动脚本?或者至少,有没有办法使该 id0ulz03h9kk硬编码?
我有一个包含 Terraform 代码的 Git 存储库,该代码正在部署到 AWS 中。我将 Localstack 添加到此存储库,以便我可以在计划之前进行更高级别的验证测试并将其应用到我的真实 AWS 账户中。为了使用 Localstack,我必须使用自定义端点创建一个新的提供程序:
provider "aws" {
alias = "real"
region = "${local.aws_region}"
}
provider "aws" {
alias = "fake"
region = "${local.aws_region}"
access_key = "fake"
secret_key = "fake"
skip_credentials_validation = true
skip_metadata_api_check = true
skip_requesting_account_id = true
endpoints {
dynamodb = "http://localhost:4566"
lambda = "http://localhost:4566"
kinesis = "http://localhost:4566"
}
}
Run Code Online (Sandbox Code Playgroud)
如何在不重复代码的情况下使用 Localstack 的一个提供商和 AWS 的一个提供商?
我在 localstack 中设置了一个队列,我可以sqs list-queues使用 CLI 通过查询来验证该队列是否存在:
> aws --endpoint-url=http://localhost:4566 --region=ap-southeast-2 sqs list-queues
{
"QueueUrls": [
"http://localhost:4566/000000000000/question-renderer-requests-errors",
"http://localhost:4566/000000000000/question-renderer-requests"
]
}
Run Code Online (Sandbox Code Playgroud)
队列位于 Region ap-southeast-2,但是当我尝试通过 SDK 访问队列时,它找不到任何内容:
var cred = new BasicAWSCredentials("test", "test");
var sqsClientConfig = new AmazonSQSConfig()
{
RegionEndpoint = RegionEndpoint.APSoutheast2,
ServiceURL = "http://localhost:4566"
};
var sqsClient = new AmazonSQSClient(cred, sqsClientConfig);
var queues = await sqsClient.ListQueuesAsync(new ListQueuesRequest());
Run Code Online (Sandbox Code Playgroud)
我发现RegionEndpoint和ServiceURL是相互排斥的:
RegionEndpoint 和 ServiceURL 是互斥的属性。无论最后设置哪个属性,都会导致另一个属性自动重置为 null。
我需要将服务端点设置为http://localhost:4566指向 localstack,如何设置区域端点?我在这件事上走的路正确吗? …
我正在尝试在本地测试一个 lambda 函数,该函数在 S3 存储桶上列出存储桶。
为了拥有本地 S3 存储桶进行测试,我使用 localstack:
docker run --rm -it -p 4566:4566 -p 4510-4559:4510-4559 localstack/localstack
Run Code Online (Sandbox Code Playgroud)
然后我可以创建一个存储桶(它有效):
aws s3api --endpoint-url=http://localhost:4566 --region us-east-1 create-bucket --bucket images
Run Code Online (Sandbox Code Playgroud)
然后我有一个 lambda 尝试连接到 S3 并列出存储桶:
docker run --rm -it -p 4566:4566 -p 4510-4559:4510-4559 localstack/localstack
Run Code Online (Sandbox Code Playgroud)
为了在本地测试我的 lambda,我使用 SAM。这是模板:
aws s3api --endpoint-url=http://localhost:4566 --region us-east-1 create-bucket --bucket images
Run Code Online (Sandbox Code Playgroud)
当我执行 lambda 时:
sam local invoke AdBannerLambda -e test_data/payload.json
Run Code Online (Sandbox Code Playgroud)
我有这个错误:
START RequestId: 7c9da60f-9a68-476b-bcd8-c24da422e80c Version: $LATEST
Got an error retrieving buckets:
operation error S3: ListBuckets, exceeded maximum number of …Run Code Online (Sandbox Code Playgroud) localstack ×10
amazon-s3 ×3
aws-lambda ×2
docker ×2
serverless ×2
.net ×1
airflow ×1
amazon-sqs ×1
aws-sam ×1
aws-sdk-net ×1
go ×1
kubernetes ×1
mocking ×1
terraform ×1
ubuntu-18.04 ×1