我想将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
我在自述文件中注意到我现在尝试了什么。
请指教 :)
我开发了一个 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) 我正在玩一个在 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) 我创建了一条路线和一个集成,但我无法使用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 中执行此操作非常简单:
如何在命令行中实现这一点?
我正在尝试编写集成测试。我想使用本地堆栈来启动一个模拟 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
我正在尝试使用 localstack 与 SQS 进行开发。
我正在关注这篇博客文章,但无论我尝试什么,我总是收到错误:
使用未知操作调用 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
localstack ×6
java ×3
amazon-sqs ×1
aws-cli ×1
aws-java-sdk ×1
aws-sdk ×1
aws-sdk-ruby ×1
python-3.x ×1
spring ×1