标签: localstack

如何在 docker-compose 关闭并稍后启动后保留 localstack S3 的数据

我是 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)

amazon-s3 docker docker-compose localstack

13
推荐指数
1
解决办法
1万
查看次数

在 Localstack 中部署时,boto3 出现“无法连接到端点 URL”错误

我正在使用 Localstack 来测试我在本地的更改。我的 lambda 函数应该执行 putObject 并在 s3 存储桶中创建对象。直接在 AWS 环境中进行测试时,该功能运行良好。但在 Localstack 中,它不起作用。我收到以下错误。

\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
\n\n

AWS 凭证:

\n\n
[default]\naws_access_key_id = AKI****************\naws_secret_access_key = gL************************\nregion = us-east-1\n
Run Code Online (Sandbox Code Playgroud)\n\n

Lambda函数代码:

\n\n
import 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)

boto3 aws-lambda localstack

12
推荐指数
1
解决办法
2万
查看次数

Localstack 抛出请求中包含的安全令牌无效

我将 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

12
推荐指数
1
解决办法
2万
查看次数

使用localstack和docker-compose自动创建SQS队列

有没有办法使用 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 时创建一些队列,而不是手动创建它。

docker-compose localstack

11
推荐指数
1
解决办法
1万
查看次数

将 localstack 与 Spring Cloud AWS 2.3 结合使用时出现未知主机

AWS S3 的“ResourceLoader”可以很好地处理这些属性:

\n
cloud:\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\n
Run Code Online (Sandbox Code Playgroud)\n

但是,当我在本地启动 localstack 容器并尝试将其与这些属性一起使用时(根据此发行文档:https ://spring.io/blog/2021/03/17/spring-cloud-aws-2-3 -现在可用):

\n
cloud:\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\n
Run Code Online (Sandbox Code Playgroud)\n

我得到这个例外:

\n
\n

17: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 …

spring-cloud-aws localstack

10
推荐指数
1
解决办法
5780
查看次数

我们如何在 docker 上运行 Neptune 图形数据库

我们如何在 docker 上运行 Neptune 图形数据库

由于 Neptune DB 最近已产品化,因此在 Localstack 上不可用,有人可以指导我如何将 AWS Neptune DB Service 部署到 docker 容器中

amazon-web-services docker docker-compose amazon-neptune localstack

8
推荐指数
1
解决办法
4626
查看次数

针对“localstack”运行时,Terraform 停留在“正在刷新状态...”

我用来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 …

aws-lambda terraform localstack

8
推荐指数
2
解决办法
2万
查看次数

Google BigQuery 本地模拟

是否有任何本地服务器实现,google BigQuery例如localstackfor AWS.

有一个关于应用程序引擎本地服务器实现的参考dev_appserver.py。我可以使用虚拟的 app.yaml 来运行它。

  • 我无法使用 localhost:8000/console 访问交互式控制台
  • 我可以bq在启动服务器后运行命令行实用程序吗dev_appserver.py --enable-console app.yaml

manual-testing go google-bigquery localstack

8
推荐指数
2
解决办法
7538
查看次数

如何使用 Testcontainers 将可执行文件复制到 Docker 容器

我正在尝试使用 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或的绑定模式 …

java docker junit5 testcontainers localstack

8
推荐指数
1
解决办法
5616
查看次数

Localstack:ES rest api 使用的端口

我正在使用 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

8
推荐指数
1
解决办法
3307
查看次数