我是 localstack 的新手,我复制了 docker-compose 示例。我确保将数据路径安装到我的机器中,并且我确实在主机 tmp 文件夹中看到它,此外,我在调用 s3 写入命令时看到我的数据被附加,但是在我杀死 docker-compose 并从头开始启动它之后,我看不到上一会话的数据。我需要添加一个特殊标志来重新加载数据吗?
docker-compose 文件:
version: '3.0'
services:
localstack:
image: localstack/localstack:latest
environment:
- AWS_DEFAULT_REGION=us-east-1
- EDGE_PORT=4566
- SERVICES=sqs,sns,s3
- DATA_DIR=/tmp/localstack/data
ports:
- '4566-4583:4566-4583'
volumes:
- "/tmp/localstack:/tmp/localstack"
- "/var/run/docker.sock:/var/run/docker.sock"
Run Code Online (Sandbox Code Playgroud)
运行示例:
aws --endpoint-url=http://localhost:4566 s3 mb s3://bucket-test
aws --endpoint-url=http://localhost:4566 s3 cp myfile.png s3://bucket-test
#Now this command will return the file
aws --endpoint-url=http://localhost:4566 s3 ls s3://bucket-test
# But after I will kill the docker and run docker-compose up again I will see nothing
Run Code Online (Sandbox Code Playgroud) 我正在使用 Localstack 来测试我在本地的更改。我的 lambda 函数应该执行 putObject 并在 s3 存储桶中创建对象。直接在 AWS 环境中进行测试时,该功能运行良好。但在 Localstack 中,它不起作用。我收到以下错误。
\n\n\n\n\n无法连接到端点 URL:\n " http://localhost:4572/doyouknowme/pokemon.jpeg "\n \xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0raise EndpointConnectionError(endpoint_url=request.url ,错误=e)ponset_exceptionlhost:4572/doyouknowme/pokemon.jpeg"
\n
AWS 凭证:
\n\n[default]\naws_access_key_id = AKI****************\naws_secret_access_key = gL************************\nregion = us-east-1\nRun Code Online (Sandbox Code Playgroud)\n\nLambda函数代码:
\n\nimport json\nimport urllib.parse\nimport boto3\nimport base64\n\nprint(\'Loading function\')\n# session = boto3.Session(profile_name=\'personal\')\n# s3 = session.client(\'s3\', endpoint_url=\'http://localhost:4574\')\n\ns3 = boto3.client(\'s3\', endpoint_url=\'http://localhost:4572\', region_name=\'us-east-1\')\n\n\ndef lambda_handler(event, context):\n # raise Exception(\'Something went wrong\')\n print("Received event: " + json.dumps(event, indent=2))\n\n\n try:\n image_data = base64.b64decode(event[\'image_data\'])\n response = s3.put_object(\n Body=image_data,\n Bucket=\'doyouknowme\',\n Key=\'pokemon.jpeg\',\n ContentType=\'image/jpeg\'\n )\n\n …Run Code Online (Sandbox Code Playgroud) 我将 Localstack 与 Testcontainers((testcontainers:localstack:1.15.2 )) 一起使用进行集成测试,并在测试设置中设置秘密,如下所示:代码示例
import com.amazonaws.services.secretsmanager.AWSSecretsManager;
import com.amazonaws.services.secretsmanager.AWSSecretsManagerClientBuilder;
import com.amazonaws.services.secretsmanager.model.CreateSecretRequest;
import org.junit.Rule;
import org.junit.Test;
import org.testcontainers.containers.localstack.LocalStackContainer;
import org.testcontainers.utility.DockerImageName;
import static org.testcontainers.containers.localstack.LocalStackContainer.Service.SECRETSMANAGER;
public class QueueServiceTest {
DockerImageName localstackImage = DockerImageName.parse("localstack/localstack:0.11.3");
@Rule
public LocalStackContainer localstack = new LocalStackContainer(localstackImage)
.withServices(SECRETSMANAGER).withEnv("LOCALSTACK_HOSTNAME", "localhost").withEnv("HOSTNAME", "localhost");
@Test
public void someTestMethod() {
AWSSecretsManager secretsManager = AWSSecretsManagerClientBuilder.standard()
.withCredentials(localstack.getDefaultCredentialsProvider()).withRegion(localstack.getRegion())
.build();
String secretString = "usrnme";
CreateSecretRequest request = new CreateSecretRequest().withName("test")
.withSecretString(secretString)
.withRequestCredentialsProvider(localstack.getDefaultCredentialsProvider());
secretsManager.createSecret(request);
}
}
Run Code Online (Sandbox Code Playgroud)
现在测试崩溃并出现错误:
com.amazonaws.services.secretsmanager.model.AWSSecretsManagerException:请求中包含的安全令牌无效。(服务:AWSSecretsManager;状态代码:400;错误代码:UnrecognizedClientException;请求 ID:314b0dee-69ed-4b08-9cd0-2618b8e14b25;代理:null)
在 com.amazonaws.http.AmazonHttpClient$RequestExecutor.handleErrorResponse(AmazonHttpClient.java:1819) 在 com.amazonaws.http.AmazonHttpClient$RequestExecutor.handleServiceErrorResponse(AmazonHttpClient.java:1403) 在 com.amazonaws.http.AmazonHttpClient$RequestExecutor.executeOneRequest (AmazonHttpClient.java:1372) 在 com.amazonaws.http.AmazonHttpClient$RequestExecutor.executeHelper(AmazonHttpClient.java:1145) 在 com.amazonaws.http.AmazonHttpClient$RequestExecutor.doExecute(AmazonHttpClient.java:802) …
amazon-web-services secret-manager testcontainers localstack
有没有办法使用 localstack 和 docker-compose.yml 自动创建 SQS 队列?
我的 docker-compose.yml:
version: '3.8'
services:
localstack:
image: localstack/localstack
ports:
- "4566:4566"
- "4571:4571"
- "${PORT_WEB_UI-8080}:${PORT_WEB_UI-8080}"
environment:
- SERVICES=${SERVICES- }
- DEBUG=${DEBUG- }
- DATA_DIR=${DATA_DIR- }
- PORT_WEB_UI=${PORT_WEB_UI- }
- LAMBDA_EXECUTOR=${LAMBDA_EXECUTOR- }
- KINESIS_ERROR_PROBABILITY=${KINESIS_ERROR_PROBABILITY- }
- DOCKER_HOST=unix:///var/run/docker.sock
volumes:
- "${TMPDIR:-/tmp/localstack}:/tmp/localstack"
Run Code Online (Sandbox Code Playgroud)
我希望在启动 docker-compose 时创建一些队列,而不是手动创建它。
AWS S3 的“ResourceLoader”可以很好地处理这些属性:
\ncloud:\n aws:\n s3:\n endpoint: s3.amazonaws.com <-- custom endpoint added in spring cloud aws 2.3\n credentials:\n accessKey: XXXXXX\n secretKey: XXXXXX\n region:\n static: us-east-1\n stack:\n auto: false\nRun Code Online (Sandbox Code Playgroud)\n但是,当我在本地启动 localstack 容器并尝试将其与这些属性一起使用时(根据此发行文档:https ://spring.io/blog/2021/03/17/spring-cloud-aws-2-3 -现在可用):
\ncloud:\n aws:\n s3:\n endpoint: http://localhost:4566\n credentials:\n accessKey: test\n secretKey: test\n region:\n static: us-east-1\n stack:\n auto: false\nRun Code Online (Sandbox Code Playgroud)\n我得到这个例外:
\n\n17:12:12.130 [reactor-http-nio-2] 错误 org.springframework.boot.autoconfigure.web.reactive.error.AbstractErrorWebExceptionHandler - [23efd000-1] 500 HTTP GET“/getresource/test”\ncom 服务器错误.amazonaws.SdkClientException:无法执行 HTTP 请求:mybucket.localhost\nat com.amazonaws.http.AmazonHttpClient$RequestExecutor.handleRetryableException(AmazonHttpClient.java:1207) ~[aws-java-sdk-core-1.11.951.jar: ?]\n抑制:reactor.core.publisher.FluxOnAssembly$OnAssemblyException:\n在以下站点观察到错误:\n|_ checkpoint \xe2\x87\xa2 org.springframework.boot.actuate.metrics.web .reactive.server.MetricsWebFilter [DefaultWebFilterChain]\n|_ 检查点 \xe2\x87\xa2 …
我们如何在 docker 上运行 Neptune 图形数据库
由于 Neptune DB 最近已产品化,因此在 Localstack 上不可用,有人可以指导我如何将 AWS Neptune DB Service 部署到 docker 容器中
amazon-web-services docker docker-compose amazon-neptune localstack
我用来Terraform将 lambda 发布到 AWS。当我部署到 AWS 时它工作正常,但在针对localstack.
下面是我的.tf配置文件,您可以看到我将 lambda 端点配置为http://localhost:4567.
provider "aws" {
profile = "default"
region = "ap-southeast-2"
endpoints {
lambda = "http://localhost:4567"
}
}
variable "runtime" {
default = "python3.6"
}
data "archive_file" "zipit" {
type = "zip"
source_dir = "crawler/dist"
output_path = "crawler/dist/deploy.zip"
}
resource "aws_lambda_function" "test_lambda" {
filename = "crawler/dist/deploy.zip"
function_name = "quote-crawler"
role = "arn:aws:iam::773592622512:role/LambdaRole"
handler = "handler.handler"
source_code_hash = "${data.archive_file.zipit.output_base64sha256}"
runtime = "${var.runtime}"
}
Run Code Online (Sandbox Code Playgroud)
以下是 docker compose …
是否有任何本地服务器实现,google BigQuery例如localstackfor AWS.
有一个关于应用程序引擎本地服务器实现的参考dev_appserver.py。我可以使用虚拟的 app.yaml 来运行它。
bq在启动服务器后运行命令行实用程序吗dev_appserver.py --enable-console app.yaml我正在尝试使用 JUnit 5 模块将可执行初始化 bash 脚本复制init.sh到使用 Testcontainers (1.13.0) 创建的 Localstack Docker 容器中:
@Container
static LocalStackContainer localStack = new LocalStackContainer("0.10.0")
.withServices(S3)
.withCopyFileToContainer(MountableFile.forClasspathResource("init.sh"), "/docker-entrypoint-initaws.d/init.sh");
Run Code Online (Sandbox Code Playgroud)
但在创建的 Docker 容器内,该文件缺少执行权限(使用以下命令查看文件权限进行检查)docker exec -it ID /bin/sh)。
在我的机器上,该文件具有以下权限:
$ ls -al
total 16
drwxr-xr-x 4 xyz staff 128 Apr 16 20:51 .
drwxr-xr-x 4 xyz staff 128 Apr 16 08:43 ..
-rw-r--r-- 1 xyz staff 135 Apr 16 20:14 application.yml
-rwxr-xr-x 1 xyz staff 121 Apr 16 20:51 init.sh
Run Code Online (Sandbox Code Playgroud)
我也尝试使用复制此文件,.withClasspathResourceMapping()但这需要一种仅提供READ_ONLY或的绑定模式 …
我正在使用 docker 运行 Localstack 和 image 0.11.1。我打开了es服务并暴露了端口4566- 根据文档(https://github.com/localstack/localstack):
从 0.11.0 版本开始,所有 API 都通过单个边缘服务公开,默认情况下可通过http://localhost:4566访问
我可以成功地使用 AWS CLI 列出域名并创建域名:
aws --endpoint-url=http://localhost:4566 es list-domain-names
aws --endpoint-url=http://localhost:4566 es create-elasticsearch-domain --domain-name my-domain --elasticsearch-version 7.4
Run Code Online (Sandbox Code Playgroud)
但是当我尝试索引文档时
curl -XPUT http://localhost:4566/my-domain/_doc/1 -d '{"hello": "World"}' -H 'Content-Type: application/json'
Run Code Online (Sandbox Code Playgroud)
它回复{"status": "running"}了我,我在日志中看到了消息:
信息:localstack.services.edge:无法找到主机“localhost:4566”的转发规则,路径“/my-domain/_doc/1”,目标标头“”,身份验证标头“”
然后我4571通过在 docker-compose.yml 中配置它来将端口添加到暴露的端口并尝试相同,但这次使用http://localhost:4571/my-domain/_doc/1 url 来索引文档。
curl -XPUT http://localhost:4571/my-domain/_doc/1 -d '{"hello": "World"}' -H 'Content-Type: application/json'
Run Code Online (Sandbox Code Playgroud)
有效。
我不明白 - 根据文档,我应该只使用端口,4566但它不起作用。我错过了什么吗?
我的 docker-compose.yml 暴露了两个端口:
... …Run Code Online (Sandbox Code Playgroud) localstack ×10
docker ×3
aws-lambda ×2
amazon-s3 ×1
boto3 ×1
go ×1
java ×1
junit5 ×1
terraform ×1