标签: localstack

Localstack:awscli 有效,aws-sdk 引发错误

我想将localstack与 ruby一起使用aws-sdk。aws sdk 似乎缺少一些配置或有错误,它引发了错误:

之后

Aws::S3::Resource.new.bucket('mybucket').exists?
Run Code Online (Sandbox Code Playgroud)

它提出了一个:

/usr/local/lib/ruby/2.2.0/net/http.rb:879:in `initialize': unable to connect to 
`mybucket.localstack`; SocketError: getaddrinfo: Name or service not known
(Seahorse::Client::NetworkingError)
Run Code Online (Sandbox Code Playgroud)

在同一个容器上,如果我awscli完全没有问题:

root@35afc611394b:/app/user# aws --endpoint-url=http://localstack:4572 s3 mb s3://test1
  make_bucket: test1
root@35afc611394b:/app/user# aws --endpoint-url=http://localstack:4572 s3 ls
  2006-02-03 16:45:09 test1
Run Code Online (Sandbox Code Playgroud)

我创建了一个 docker-compose.yml 来帮助解决这个问题:

https://github.com/ook/localstack-s3-problem

我在自述文件中注意到我现在尝试了什么。

请指教 :)

aws-sdk aws-sdk-ruby localstack

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

python 代码可以部署在 AWS lambda 中,但不能部署在 localstack 中

我开发了一个 python (v3.6) 项目,该项目在我的AWS 生产平台的无服务器 lambda 中部署并实际工作。该项目使用以下依赖项:

- awscli==1.16.10
- boto3==1.9.0
- botocore==1.12.0
- psycopg2==2.7.5
- SQLAlchemy==1.2.11
- SQLAlchemy-Utils==0.33.3
- jsonschema==2.6.0
Run Code Online (Sandbox Code Playgroud)

现在我想使用 localstack 在一个 lambda 中部署这个项目,我可以调用它来测试我的调用代码(不是我的项目实际工作的代码!)

要部署项目,首先我安装依赖项并创建一个 zip 文件:

pip install -r requirements.txt --upgrade -t ./
chmod -R 755 .
zip -r lambda.zip .
Run Code Online (Sandbox Code Playgroud)

然后,我使用命令(使用正在运行的 localstack):

aws lambda --region eu-east-1 --endpoint localhost:4574 \
    create-function --function-name mylambda \
    --zip-file fileb://lambda.zip
Run Code Online (Sandbox Code Playgroud)

但是,它从 localstack 返回错误:

....
localstack_1  |     from functools32 import lru_cache
localstack_1  | ImportError: No module named functools32
....
localstack_1 …
Run Code Online (Sandbox Code Playgroud)

python-3.x localstack

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

Localstack - 通过 java aws sdk 访问 SNS:NoSuchFieldError:ENDPOINT_OVERRIDDEN

我正在玩一个在 docker 上运行的 localstack 实例。我尝试访问 sns 服务,但在执行“listTopics()”或“createTopic()”等方法时收到错误我还没有在 Google 上找到任何帮助,所以有人知道这里出了什么问题吗?

错误:

Caused by: java.lang.NoSuchFieldError: ENDPOINT_OVERRIDDEN
    at com.amazonaws.services.sns.AmazonSNSClient.executeListTopics(AmazonSNSClient.java:1830) ~[aws-java-sdk-sns-1.11.875.jar:na]
    at com.amazonaws.services.sns.AmazonSNSClient.listTopics(AmazonSNSClient.java:1812) ~[aws-java-sdk-sns-1.11.875.jar:na]
    at com.amazonaws.services.sns.AmazonSNSClient.listTopics(AmazonSNSClient.java:1853) ~[aws-java-sdk-sns-1.11.875.jar:na]
    at com.example.dockerspringboot.DockerSpringBootApplication.getSnsClient(DockerSpringBootApplication.java:62) ~[classes/:na]
    at com.example.dockerspringboot.DockerSpringBootApplication$$EnhancerBySpringCGLIB$$a65fee3d.CGLIB$getSnsClient$2(<generated>) ~[classes/:na]
    at com.example.dockerspringboot.DockerSpringBootApplication$$EnhancerBySpringCGLIB$$a65fee3d$$FastClassBySpringCGLIB$$99ad7dfd.invoke(<generated>) ~[classes/:na]
    at org.springframework.cglib.proxy.MethodProxy.invokeSuper(MethodProxy.java:244) ~[spring-core-5.2.9.RELEASE.jar:5.2.9.RELEASE]
    at org.springframework.context.annotation.ConfigurationClassEnhancer$BeanMethodInterceptor.intercept(ConfigurationClassEnhancer.java:331) ~[spring-context-5.2.9.RELEASE.jar:5.2.9.RELEASE]
    at com.example.dockerspringboot.DockerSpringBootApplication$$EnhancerBySpringCGLIB$$a65fee3d.getSnsClient(<generated>) ~[classes/:na]
    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:na]
    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:na]
    at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:na]
    at java.base/java.lang.reflect.Method.invoke(Method.java:566) ~[na:na]
    at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:154) ~[spring-beans-5.2.9.RELEASE.jar:5.2.9.RELEASE]
    ... 98 common frames omitted
Run Code Online (Sandbox Code Playgroud)

我尝试通过 java aws sdk 访问 localstack sns 服务:

<dependency>
    <groupId>com.amazonaws</groupId>
    <artifactId>aws-java-sdk-sns</artifactId>
    <version>1.11.875</version>
</dependency>
Run Code Online (Sandbox Code Playgroud)

我的应用程序中抛出错误的代码如下所示:

private String serviceEndpoint = …
Run Code Online (Sandbox Code Playgroud)

java aws-java-sdk localstack

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

在 AWS-API-Gateway 中附加集成以通过 CLI 进行路由

我创建了一条路线和一个集成,但我无法使用awscli. 是否可以通过命令行执行此操作,或者只能通过 Web 界面执行此操作?

我的目标是在 Localstack Pro 中重现现有的 API-Gateway v2 配置(使用 AWS Web 控制台创建),在容器启动期间专门使用 aws-cli 工具进行设置。

我可以毫无困难地创建 API、路由和集成:

awslocal apigatewayv2 create-api --name="test-api" --protocol="http"
awslocal apigatewayv2 create-integration --api-id ebb87127 --integration-type AWS --integration-uri arn:aws:lambda:us-east-1:000000000000:function:some-lambda
awslocal apigatewayv2 create-route --api-id ebb87127 --route-key '$default'
Run Code Online (Sandbox Code Playgroud)

aws apigatewayv2 但我在文档下找不到任何将路由链接到集成的内容。

使用 Web 界面在“真正的”AWS 中执行此操作非常简单:

用于管理从路由到集成的链接的选项卡

创建新的集成并直接附加它

如何在命令行中实现这一点?

amazon-web-services aws-cli aws-api-gateway localstack

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

Spring 集成测试 - 没有 RunWith 注释的 AutoWiring 类(AWS localstack)

我正在尝试编写集成测试。我想使用本地堆栈来启动一个模拟 AWS 服务的 docker 容器。

此代码将启动 docker 容器,但不会自动装配来自我的 spring 应用程序的类。

@RunWith(LocalstackTestRunner.class)
@LocalstackDockerProperties(services = {"dynamodb","sns"})
@ActiveProfiles("test")
@SpringBootTest(classes = {TestApplication.class})
public class FlowTest {
    @Autowired
    private PublisherFactory publisherFactory;

    @Test
    public void publishMessage() {
        // publisherFactory is null here 
        Publisher publisher = publisherFactory.getInstance("test-event");
    }
}
Run Code Online (Sandbox Code Playgroud)

此代码将从我的应用程序自动装配类,但不会启动 Docker 容器

@RunWith(SpringRunner.class)
@LocalstackDockerProperties(services = {"dynamodb","sns"})
@ActiveProfiles("test")
@SpringBootTest(classes = {TestApplication.class})
public class FlowTest {
    @Autowired
    private PublisherFactory publisherFactory;

    @Test
    public void publishMessage() {
        //publisher not null here but Docker container not running
        Publisher publisher = publisherFactory.getInstance("test-event");
    } …
Run Code Online (Sandbox Code Playgroud)

java spring spring-integration amazon-web-services localstack

0
推荐指数
1
解决办法
427
查看次数

如何将 localstack 与 aws java sdk 结合使用?

我正在尝试使用 localstack 与 SQS 进行开发。

  • AWS客户端v2.20.60
  • localstack v2.0.2。

我正在关注这篇博客文章,但无论我尝试什么,我总是收到错误:

使用未知操作调用 sqs 时出现异常:操作检测失败。查询协议服务 ServiceModel(sqs) 请求中缺少操作。

这就是我创建 SqsClient 的方式:

    SqsClientBuilder builder = SqsClient.builder();
    builder.credentialsProvider(StaticCredentialsProvider.create(AwsBasicCredentials.create("test", "test")));
    builder.endpointOverride(new URI("http://localhost:4566"));
    builder.region(Region.of("us-west-2"));
    return builder.build();
Run Code Online (Sandbox Code Playgroud)

然后是任何 Sqs 操作,例如创建队列:

    sqsClient.createQueue(CreateQueueRequest.builder()
        .queueName("test2")
        .build());
Run Code Online (Sandbox Code Playgroud)

日志:

software.amazon.awssdk.request           : Retrying Request: DefaultSdkHttpFullRequest(httpMethod=POST, protocol=http, host=localhost, port=4566, encodedPath=/, headers=[amz-sdk-invocation-id, Content-Length, Content-Type, User-Agent, X-Amz-Target], queryParameters=[])
org.apache.http.wire                     : http-outgoing-3 >> "POST / HTTP/1.1[\r][\n]"
org.apache.http.wire                     : http-outgoing-3 >> "Host: localhost:4566[\r][\n]"
org.apache.http.wire                     : http-outgoing-3 >> "amz-sdk-invocation-id: 3f223a7a-773b-d41f-388a-b222efb26e25[\r][\n]"
org.apache.http.wire                     : http-outgoing-3 >> "amz-sdk-request: attempt=4; max=4[\r][\n]"
org.apache.http.wire                     : …
Run Code Online (Sandbox Code Playgroud)

java amazon-sqs amazon-web-services aws-java-sdk-2.x localstack

0
推荐指数
1
解决办法
2829
查看次数