我启动了一个运行良好的 localstack 容器,但我需要等待从位于的脚本创建的 s3 存储桶/docker-entrypoint-initaws.d完全正常运行,然后再启动我的其他容器。
我知道有可能等待 localstack 完全准备好:
healthcheck:
test: ["CMD", "curl", "http://localhost:4566/health?reload"]
Run Code Online (Sandbox Code Playgroud)
但是有没有一种方法可以检查特定 s3 存储桶的运行状况?
使用 Kinesis Consumer Library 版本 2 开发 Kinesis Consumer 并将 Dynamo DB 端点覆盖为 localstack 端点时,由于 SSL 握手错误,库无法创建租赁表。
我可以确认使用 AWS 的 Dynamo DB 时创建表成功,但是一旦我将端点 url 覆盖为 localstack url,Dynamo DB 客户端在多次重试后就无法创建租赁表。堆栈跟踪不是很有用,但 Wireshark 显示了所有 SSL 握手错误,因此我只能假设 Amazon SDK 不接受 localstack 证书。我找不到任何关于如何使用该software.amazon.awssdk包禁用证书验证的内容。
Region region = Region.of("us-east-1");
DefaultCredentialsProvider credentialsProvider = DefaultCredentialsProvider.create();
DynamoDbAsyncClient dynamoClient = DynamoDbAsyncClient.builder()
.region(region)
.endpointOverride(URI.create("https://localhost:4569"))
.credentialsProvider(credentialsProvider)
.build();
Run Code Online (Sandbox Code Playgroud)
/edit 这基于此处找到的 Amazon 示例: https: //docs.aws.amazon.com/streams/latest/dev/kcl2-standard-consumer-java-example.html
我正在使用 LocalStack 编写集成测试来模拟我对 Kinesis 的调用。我创建了一个 Kinesis 客户端,但是当我尝试在 Kinesis 上放置记录时出现错误:
com.amazonaws.services.kinesis.model.AmazonKinesisException: null (Service: AmazonKinesis; Status Code: 502; Error Code: null; Request ID: null)
我尝试使用以下方法禁用 CBOR 和证书检查:
System.setProperty(SDKGlobalConfiguration.DISABLE_CERT_CHECKING_SYSTEM_PROPERTY, "false");
Run Code Online (Sandbox Code Playgroud)
System.setProperty(SDKGlobalConfiguration.AWS_CBOR_DISABLE_SYSTEM_PROPERTY, "true");
我以这种方式构建客户端:
.withEndpointConfiguration(localstack.getEndpointConfiguration(LocalStackContainer.Service.KINESIS))
.withCredentials(localstack.getDefaultCredentialsProvider())
.build()
Run Code Online (Sandbox Code Playgroud)
我每次都收到502。S3 一切正常,只是 Kinesis 服务给我带来了麻烦。有没有人见过这样的事情?
我正在使用此docker-compose.yml文件在 docker 容器内运行 localstack 。
version: '2.1'
services:
localstack:
image: localstack/localstack
ports:
- "4567-4597:4567-4597"
- "${PORT_WEB_UI-8080}:${PORT_WEB_UI-8080}"
environment:
- SERVICES=${SERVICES- }
- DEBUG=1
- DATA_DIR=${DATA_DIR- }
- PORT_WEB_UI=${PORT_WEB_UI- }
- LAMBDA_EXECUTOR=docker
- KINESIS_ERROR_PROBABILITY=${KINESIS_ERROR_PROBABILITY- }
- DOCKER_HOST=unix:///var/run/docker.sock
volumes:
- "${TMPDIR:-/tmp/localstack}:/tmp/localstack"
- "/var/run/docker.sock:/var/run/docker.sock"
Run Code Online (Sandbox Code Playgroud)
要启动 localstack,我运行TMPDIR=/private$TMPDIR docker-compose up.
我创建了两个 lambda。当我运行时,aws lambda list-functions --endpoint-url http://localhost:4574 --region=us-east-1这是输出。
{
"Functions": [
{
"TracingConfig": {
"Mode": "PassThrough"
},
"Version": "$LATEST",
"CodeSha256": "qmDiumefhM0UutYv32By67cj24P/NuHIhKHgouPkDBs=",
"FunctionName": "handler",
"LastModified": "2019-08-08T17:56:58.277+0000",
"RevisionId": "ffea379b-4913-420b-9444-f1e5d51b5908",
"CodeSize": 5640253,
"FunctionArn": "arn:aws:lambda:us-east-1:000000000000:function:handler", …Run Code Online (Sandbox Code Playgroud) 我已经推送了 lambda 函数,因为我可以在 localstack 中看到它,基于下面的命令/输出
aws lambda get-function --function-name books1 --endpoint-url=http://localhost:4574
{
"Code": {
"Location": "http://localhost:4574/2015-03-31/functions/books1/code"
},
"Configuration": {
"Version": "$LATEST",
"FunctionName": "books1",
"CodeSize": 50,
"FunctionArn": "arn:aws:lambda:us-east-1:000000000000:function:books1",
"Environment": {},
"Handler": "main",
"Runtime": "go1.x"
}
}
Run Code Online (Sandbox Code Playgroud)
当我尝试执行它时,如下所示,出现错误,并且我的 localstack 正在 docker 容器内运行
aws --endpoint-url= http://localhost:4574 lambda 调用 --function-name books1 /tmp/output.json
An error occurred (InternalFailure) when calling the Invoke operation (reached max retries: 4): Error executing Lambda function: Unable to find executor for Lambda function "books1". Note that Node.js and .NET Core Lambdas …Run Code Online (Sandbox Code Playgroud) 我正在尝试利用localstack进行本地 AWS 模拟测试。具体来说,我想使用 Apache Camel S3 路由从 localstack S3 存储桶下载文件。但是,我遇到了错误。以下是我采取的步骤...
我通过输入创建了一个测试 localstack S3 存储桶...
aws --endpoint-url=http://localhost:4572 s3 mb s3://mytestbucket
Run Code Online (Sandbox Code Playgroud)
然后,我将测试文件上传到此存储桶...
aws --endpoint-url=http://localhost:4572 s3 cp docker-compose.yml s3://mytestbucket
Run Code Online (Sandbox Code Playgroud)
两个操作都成功完成。在我的 Java 代码中,我创建了一个 CDI Producer 来生成一个 com.amazonaws.services.s3.AmazonS3 客户端对象......
AWSCredentials credentials = new BasicAWSCredentials("XXXXX", "XXXXX");
AWSCredentialsProvider credentialsProvider = new AWSStaticCredentialsProvider(credentials);
AmazonS3ClientBuilder clientBuilder = AmazonS3ClientBuilder.standard()
.withEndpointConfiguration(new AwsClientBuilder.EndpointConfiguration("http://localhost:4572", "us-east-1"))
.withCredentials(credentialsProvider);
AmazonS3 s3Client = clientBuilder.build();
Run Code Online (Sandbox Code Playgroud)
最后,我创建了一个 Camel 路由,旨在将 mytestbucket 的内容下载到本地目录中......
<route id="s3test">
<from
uri="aws-s3://arn:aws:s3:::mytestbucket?amazonS3Client=#s3Client&deleteAfterRead=false&maxMessagesPerPoll=25&delay=5000" />
<log message="S3 consumer fired" loggingLevel="DEBUG" />
<log message="Sending S3 file to …Run Code Online (Sandbox Code Playgroud) 我的本地设置包括local apache-flink(通过brew安装)并localstack运行Kinesis服务。
我的 docker-compose 有
localstack:
image: localstack/localstack:0.10.7
environment:
- SERVICES=kinesis
ports:
- "4568:4568"
Run Code Online (Sandbox Code Playgroud)
和我的 Kinesis 消费者:
kinesisConsumerConfig.setProperty(ConsumerConfigConstants.AWS_ACCESS_KEY_ID, "123");
kinesisConsumerConfig.setProperty(ConsumerConfigConstants.AWS_SECRET_ACCESS_KEY, "123");
kinesisConsumerConfig.setProperty(ConsumerConfigConstants.AWS_ENDPOINT, "http://localhost:4568");
Run Code Online (Sandbox Code Playgroud)
但是当我运行 Flink 程序时,出现以下错误:
引起原因:org.apache.flink.kinesis.shaded.com.amazonaws.services.kinesis.model.AmazonKinesisException:null(服务:AmazonKinesis;状态代码:502;错误代码:null;请求 ID:null)
仅在使用时才会发生localstack。如果我连接到我的 AWS 账户上的 Kinesis 流,它会完美运行。
我正在使用 celery 构建一个 Flask 应用程序来执行后台任务。我的应用程序使用在 Docker 容器中运行的 localstack 来为我的消息代理在本地模拟 SQS。我已经让 Flask 和 celery 在本地运行,以便与 localstack 一起正常工作,我可以看到 Flask 接收请求,将消息添加到 SQS 队列,然后 celery 接收该任务并执行它。
我尝试将 Flask 和 celery 与 localstack 一起进行 dockerize,并且我的所有服务都按预期运行,除了 celery Worker 不执行队列中的任务。我可以在本地启动一个 celery 工作程序来读取队列并执行任务,但 docker celery 工作程序不会提取任何任务。
在 Flask 容器中运行 celery Worker 达到了相同的结果,并添加了--without-gossip我在这个github 线程中找到的参数。
我是否在 docker 架构中遗漏了一些导致 celery 无法从 SQS 队列中提取的内容?
这是我的 docker-compose.yml:
services:
dev:
build:
context: .
dockerfile: 'dev.Dockerfile'
ports:
- "5050:5000"
restart: always
volumes:
- .:/app
environment:
- GUNICORN_CMD_ARGS="--reload"
- docker_env=true
stdin_open: true …Run Code Online (Sandbox Code Playgroud) 我能够使用 localstack 在本地创建和测试 AWS。所以,我想知道是否有任何用例可以参考如何在 ci/cd 中添加 localstack 并运行您的测试用例?任何显示样本的指针将不胜感激。
我正在尝试在 docker 容器中使用 localstack。我为 s3 创建了 demo-bucket。我可以查看从终端上传的文件,但无法从代码访问 s3。我哪里出错了?我在下面分享我的代码。谢谢。我的 yml 文件如下所示:
version: "3.7"
services:
php:
image: php:7.4-fpm
volumes:
- ~/image.minyay.com/src:/var/www/html
- ~/image.minyay.com/docker/php.ini:/usr/local/etc/php/php.ini
web:
image: nginx:1.17
ports:
- 80:80
volumes:
- ~/image.minyay.com/src:/var/www/html
- ~/image.minyay.com/docker/site.conf:/etc/nginx/conf.d/site.conf
depends_on:
- php
localstack:
image: localstack/localstack:0.11.0
container_name: localstack
ports:
- "4563-4599:4563-4599"
- '8055:8080'
environment:
- SERVICES=s3
- DOCKER_HOST=unix:///var/run/docker.sock
- DATA_DIR=/tmp/localstack/data
volumes:
- /tmp/localstack:/tmp/localstack
- /var/run/docker.sock:/var/run/docker.sock
- ./aws:/docker-entrypoint-initaws.d
Run Code Online (Sandbox Code Playgroud)
我的 php 代码如下所示:
public function get_big_folder_in_s3($file_path){
try {
$pages = $this->s3->getPaginator('ListObjects', [
'Bucket' => $this->bucket,
'Prefix' => $file_path, //DESTINATION
]);
foreach …Run Code Online (Sandbox Code Playgroud) localstack ×10
amazon-s3 ×3
docker ×3
java ×3
aws-lambda ×2
apache-camel ×1
apache-flink ×1
aws-sdk ×1
celery ×1
error-code ×1
flask ×1
invoke ×1
php ×1
python-3.6 ×1