概述
LocalStack在本地计算机上启动以下核心云API, 离线开发和测试您的云和无服务器应用程序!
注: 从版本开始0.11.0
,所有API都通过单个边缘服务 ,可在以下位置访问http://localhost:4566 默认情况下(可通过以下方式进行自定义EDGE_PORT
,进一步见下文)
ACM
API网关
云表单
CloudWatch
CloudWatch日志
DynamoDB
DynamoDB流
EC2
ElasticSearch服务
EventBridge(CloudWatch事件)
消防水龙带
IAM
Kinesis
KMS
兰姆达
红移
路由53
S3
秘书经理
SES
SNS
SQS
SSM
单步执行函数
STS
除上述外,Pro version of LocalStack 支持其他API和高级功能,包括:
放大
API网关V2(WebSockets支持)
应用程序自动缩放
AppSync
雅典娜
备份
批次
云前端
云迹(CloudTrail)
科尼托
成本资源管理器
ECS/ECR/EKS
ElastiCache
弹性豆茎
ELB/ELBv2
电子病历
冰川 /S3选择
IAM安全策略实施
物联网
Kinesis数据分析
Lambda层和容器图像
用于Kafka的托管流(MSK)
媒体商店
海王星图形DB
QLDB
RDS/Aurora无服务器
时间流
转接
X射线
对大多数服务的高级持久性支持
用于管理资源的交互式UI
测试报告仪表板
还有更多,更多的即将到来!(请查看我们的功能路线图 这里:https://roadmap.localstack.cloud )
要求
python
(最高支持Python 3.6至3.8)
pip
(Python包管理器)
Docker
JDK
(如果KINESIS_PROVIDER
是kinesis-mock
并且该系统不是AMD64系统。支持8+个)
正在安装
安装LocalStack的最简单方法是通过pip
:
注意事项 如请务必照办。不 使用sudo
或者root
User-LocalStack应该完全在本地非root用户下安装和启动。如果您在MacOS X Sierra中的权限有问题,请使用安装pip install --user localstack
正在运行
默认情况下,LocalStack使用以下命令在Docker容器内启动:
(请注意,在MacOS上,您可能需要运行TMPDIR=/private$TMPDIR localstack start --docker
如果$TMPDIR
包含Docker无法挂载的符号链接。)
注意事项 :2020-07-11起,默认镜像localstack/localstack
in Docker Hub指的是“轻量级版本”,它删除了一些大的依赖文件,比如Elasticsearch(如果需要,还可以懒惰地下载它们)。(请注意,localstack/localstack-light
将来可能会删除图像别名)。如果您需要完整的依赖项集,localstack/localstack-full
可以改为使用图像。请同时参阅USE_LIGHT_IMAGE
下面的配置
注意事项 :默认情况下,LocalStack使用标记的图像latest
它缓存在您的计算机上,并且将不 自动从Docker Hub拉取最新镜像(即需要手动拉取镜像)
(注意事项 :虽然强烈建议使用Docker,但也可以使用--host
启动标志。请注意,这将需要additional dependencies ,并且在某些操作系统(包括Windows)上不受支持。)
使用docker
您也可以直接使用docker,并使用以下命令开始使用localstack
docker run --rm -it -p 4566:4566 -p 4571:4571 localstack/localstack
若要在没有任何外部卷的情况下运行一次性容器,请执行以下操作。要启动服务子集,请使用-e "SERVICES=dynamodb,s3"
使用docker-compose
您也可以使用docker-compose.yml
文件,然后使用此命令(当前需要docker-compose
版本1.9.0+):
(请注意,在MacOS上,您可能需要运行TMPDIR=/private$TMPDIR docker-compose up
如果$TMPDIR
包含Docker无法挂载的符号链接。)
为便于互操作性,配置变量可以作为前缀LOCALSTACK_
在码头。例如,设置LOCALSTACK_SERVICES=s3
相当于SERVICES=s3
使用头盔
您可以使用Helm 通过运行以下命令在Kubernetes群集中安装LocalStack(Helm图表在中维护this repo ):
helm repo add localstack-repo https://helm.localstack.cloud
helm upgrade --install localstack localstack-repo/localstack
配置
您可以将以下环境变量传递给LocalStack:
以下环境配置可用于调试:
DEVELOP
:在启动本地堆栈服务之前启动调试服务器
DEVELOP_PORT
:调试服务器的端口号
WAIT_FOR_DEBUGGER
:强制LocalStack等待调试器启动服务
以下环境配置包括已弃用 :
USE_SSL
:是否使用https://...
使用SSL加密的URL(默认值:false
)。从版本0.11.3起不建议使用-每个服务端点现在都支持在同一端口上多路传输HTTP/HTTPS流量
此外,还包括以下内容只读 环境变量可用:
LOCALSTACK_HOSTNAME
:LocalStack服务可用的主机的名称。使用该主机名作为端点(例如,http://${LOCALSTACK_HOSTNAME}:4566
)以便从Lambda函数中访问服务 (例如,将项从Lambda存储到DynamoDB或S3)
将上述环境变量传递给LocalStack以启动Kinesis、Lambda、DynamoDB和SQS的示例:
SERVICES=kinesis,lambda,sqs,dynamodb localstack start
使用命令行验证坞站合成配置
您可以使用localstack config validate
用于检查常见配置错误的命令
默认情况下,它会验证docker-compose.yml
,则可以使用--file
参数,例如:
localstack config validate --file=localstack-docker-compose.yml
在运行时动态更新配置
列出的每个服务APIabove 在PATH下定义后门API/?_config_
中定义的配置变量,它允许动态更新config.py
您需要通过设置来启用此终结点ENABLE_CONFIG_UPDATES=1
例如,要动态设置KINESIS_ERROR_PROBABILITY=1
在运行时,使用以下命令:
curl -v -d '{"variable":"KINESIS_ERROR_PROBABILITY","value":1}' 'http://localhost:4566/?_config_'
服务运行状况检查
这项服务/health
检查边缘端口上的端点(http://localhost:4566/health
默认情况下)提供关于每个服务的状态的基本信息(例如,{"s3":"running","es":"starting"}
)。默认情况下,端点返回在启动期间确定的缓存值-状态值可以通过添加reload
查询参数:http://localhost:4566/health?reload
初始化新实例
首次启动容器时,它将执行扩展名为.sh的文件,这些文件位于/docker-entrypoint-initaws.d
或中定义的备用路径INIT_SCRIPTS_PATH
文件将按字母顺序执行。您可以使用以下命令在本地堆栈上轻松创建AWS资源awslocal
(或aws
)初始化脚本中的CLI工具
使用自定义SSL证书
要使用您自己的SSL证书而不是随机生成的证书,您可以放置一个文件server.test.pem
放入LocalStack临时目录($TMPDIR/localstack
,或/tmp/localstack
默认情况下)。该文件server.test.pem
必须包含密钥文件以及证书文件内容:
-----BEGIN PRIVATE KEY-----
...
-----END PRIVATE KEY-----
-----BEGIN CERTIFICATE-----
...
-----END CERTIFICATE-----
将自定义SSL证书与docker-compose配合使用
通常,使用docker-compose可以将此卷添加到docker-compose.yml到LocalStack服务中:
volumes:
- "${PWD}/ls_tmp:/tmp/localstack"
- "/var/run/docker.sock:/var/run/docker.sock"
本地目录/ls_tmp
必须包含三个文件(server.test.pem、server.test.pem.crt、server.test.pem.key)
通过CLI或代码访问基础架构
你可以把你的aws
使用本地基础架构的CLI,例如:
aws --endpoint-url=http://localhost:4566 kinesis list-streams
{
"StreamNames": []
}
使用以下命令安装aws CLI
,如果尚未安装
设置本地区域和凭据以运行LocalStack
AWS需要设置区域和凭证才能运行AWS命令。创建默认配置&凭据。以下密钥将要求提供访问密钥ID、秘密访问密钥、区域和输出格式
aws configure --profile default
# Config & credential file will be created under ~/.aws folder
注意事项 :请使用test
作为访问密钥ID和秘密访问密钥,以使S3预签名URL工作。我们增加了前缀url签名验证算法来验证前缀url及其有效期。您可以使用将凭据配置到系统环境中export
命令在Linux/Mac系统中运行。您还可以在中添加凭据~/.aws/credentials
直接归档
export AWS_ACCESS_KEY_ID=test
export AWS_SECRET_ACCESS_KEY=test
新的 :退房awslocal ,一个直接针对LocalStack运行命令的精简CLI包装器(无需指定--endpoint-url
再也没有了)。通过以下方式安装pip install awscli-local
,然后按如下方式使用:
awslocal kinesis list-streams
{
"StreamNames": []
}
更新 :使用环境变量$LOCALSTACK_HOSTNAME
来确定lambda函数中的目标主机。看见Configurations 部分了解更多详细信息。
将官方AWS CLI版本2 Docker映像与Localstack Docker容器配合使用
默认情况下,运行的容器amazon/aws-cli 与0.0.0.0:4566
在主机上,这意味着aws-cli无法通过您的shell访问本地堆栈
要确保两个坞站容器可以通信,请在坞站引擎上创建网络:
$ ▶ docker network create localstack
0c9cb3d37b0ea1bfeb6b77ade0ce5525e33c7929d69f49c3e5ed0af457bdf123
然后修改docker-compose.yml
指定要使用的网络:
networks :
default :
external :
name : " localstack"
使用此网络运行AWS Cli v2坞站容器(示例):
$ ▶ docker run --network localstack --rm -it amazon/aws-cli --endpoint-url=http://localstack:4566 lambda list-functions
{
" Functions" : []
}
如果您经常从坞站容器使用AWS CLI v2,请创建别名:
$ ▶ alias laws=' docker run --network localstack --rm -it amazon/aws-cli --endpoint-url=http://localstack:4566'
因此,您可以键入:
$ ▶ laws lambda list-functions
{
" Functions" : []
}
客户端库
正在调用API网关
而AWS上的API网关端点使用自定义DNS名称来标识API ID(例如,https://nmafetnwf6.execute-api.us-east-1.amazonaws.com/prod/my/path
),LocalStack使用特殊的URL路径指示符.../_user_request_/...
指示睡觉API方法的执行
API网关执行的URL模式为http://localhost:4566/restapis/<apiId>/<stage>/_user_request_/<methodPath>
上面的示例URL将映射到以下内容localhost
URL:
$ curl http://localhost:4566/restapis/nmafetnwf6/prod/_user_request_/my/path
与pytest集成
如果您想在集成测试中使用LocalStack(例如pytest),只需启动测试设置方法中的基础设施,然后清除tearDown方法中的所有内容:
from localstack.services import infra
def setup():
infra.start_infra(asynchronous=True)
def teardown():
infra.stop_infra()
def my_app_test():
# here goes your test logic
请参阅示例测试文件tests/integration/test_integration.py
有关更多详细信息,请参阅
与无服务器集成
您可以使用serverless-localstack
易于运行的插件Serverless LocalStack上的应用程序。有关更多信息,请查看此处的插件存储库:https://github.com/localstack/serverless-localstack
与Terraform集成
您可以使用Terraform 在本地配置您的资源。请参阅Terraform AWS提供商文档here 有关如何在上配置API端点的信息localhost
将本地代码与Lambda一起使用
要挂载本地文件夹,请确保LAMBDA_REMOTE_DOCKER
设置为false
然后将S3存储桶名称设置为__local__
或BUCKET_MARKER_LOCAL
如果已设置,并且S3键指向您的本地路径:
awslocal lambda create-function --function-name myLambda \
--code S3Bucket="__local__",S3Key="/my/local/lambda/folder" \
--handler index.myHandler \
--runtime nodejs8.10 \
--role whatever
注: 在使用时LAMBDA_REMOTE_DOCKER=false
,请确保正确设置HOST_TMP_FOLDER
LocalStack容器的环境变量(请参见上面的配置部分)
与Java/JUnit集成
为了在Java中使用LocalStack,该项目附带了一个简单的JUnit运行器,请参见下面的示例
...
import cloud.localstack.LocalstackTestRunner;
import cloud.localstack.TestUtils;
import cloud.localstack.docker.annotation.LocalstackDockerProperties;
@RunWith(LocalstackTestRunner.class)
@LocalstackDockerProperties(services = { "s3", "sqs", "kinesis:77077" })
public class MyCloudAppTest {
@Test
public void testLocalS3API() {
AmazonS3 s3 = TestUtils.getClientS3()
List<Bucket> buckets = s3.listBuckets();
...
}
}
有关更多详细信息和配置参数的完整列表,请参阅LocalStack Java Utils 存储库
故障排除
s3.setS3ClientOptions(S3ClientOptions.builder().setPathStyleAccess(true).build());
// There is also an option to do this if you're using any of the client builder classes:
AmazonS3ClientBuilder builder = AmazonS3ClientBuilder.standard();
builder.withPathStyleAccessEnabled(true);
...
发展中的
在本地开发或启动的要求
要开发新功能,或在本地启动堆栈(在Docker之外),需要以下附加工具:
make
npm
(Node.js包管理器)
java
/javac
(Java 8运行时环境和编译器)
mvn
(Maven,Java的构建系统)
moto
(用于测试)
docker-compose
(用于使用docker-compose运行本地堆栈)
mock
(用于单元测试)
pytest
(用于单元测试)
pytest-cov
(检查单元测试覆盖率)
开发环境
如果为了扩展/修改LocalStack而拉回回购,请运行以下命令以安装所有依赖项:
这将在本地Python viralenv目录中安装所需的pip依赖项.venv
(您的全局python包将保持不变),以及中的一些节点模块。./localstack/node_modules/
根据您的系统,某些pip/npm模块可能需要安装其他本地库。
Makefile包含一个目标,用于方便地运行用于开发的本地基础设施:
使用Vagant启动LocalStack(CentOS 8)
这类似于make docker-mount-run
,但不是启动docker centos虚拟机,而是将源代码挂载到其中
前提条件
流浪汉
vagrant plugin install vagrant-vbguest
启动流浪汉
make vagrant-start
(准备好提供系统密码)
使用流浪汉
vagrant ssh
sudo -s
cd /localstack
SERVICES=dynamodb DEBUG=1 make docker-mount-run
停止流浪汉
make vagrant-stop
或vagrant halt
删除流浪VM
请查看developer guide 其中包含一些关于如何开始开发(和调试)LocalStack功能的说明
测试
该项目包含一组可以通过make目标启动的单元和集成测试:
要检查代码覆盖率,请执行以下操作
完成新功能/错误修复后,运行单元测试并检查覆盖范围
# To run the particular test file (sample)
pytest --cov=localstack tests/unit/test_common.py
# To check the coverage in the console
coverage report
# To check the coverage as html (output will be redirected to the html folder)
coverage html
Web仪表板(已弃用)
这些项目还附带一个简单的Web仪表板,可用于查看已部署的AWS组件以及它们之间的关系
请注意,Web UI需要使用Docker映像的扩展版本(localstack/localstack-full
)
注: Web仪表板不再进行主动维护,可能会在即将发布的版本中删除
其他UI客户端
更改日志
请参阅CHANGELOG.md
要查看每个版本的完整更改列表,请执行以下操作
贡献
我们欢迎反馈、错误报告和拉请求!
对于拉取请求,请遵循以下指导原则:
添加对任何新功能和错误修复的测试。理想情况下,每个PR都应该增加测试覆盖率
遵循现有代码样式(例如,缩进)。Makefile中包含PEP8代码链接目标
在代码中添加合理数量的注释
在您的GitHub用户帐户上派生本地堆栈,在那里进行更改,然后根据主本地堆栈存储库创建PR
将不相关的更改分离到多个拉取请求中
每个PR 1个提交:请将多个提交压缩/重新设置为单个提交的基础(以保持历史记录的干净)
请注意,通过向此存储库贡献任何代码或文档(通过提出拉请求或其他方式),您明确同意Contributor License Agreement
贡献者
这个项目的存在要归功于所有做出贡献的人。
支持者
感谢我们所有的支持者!🙏[Become a backer ]
赞助商
通过成为赞助商来支持这个项目。您的徽标将在此处显示,并带有指向您的网站的链接。[Become a sponsor ]
随时间流逝的观星者
许可证
版权所有(C)2017-2020 LocalStack维护者和贡献者
版权所有(C)2016 Atlassian和其他
此版本的LocalStack是在Apache许可证2.0版(请参阅LICENSE.txt)下发布的。下载并使用本软件,即表示您同意End-User License Agreement (EULA)
我们基于多个第三方软件工具构建,包括:
第三方软件
许可证
Python/pip模块:
空速
BSD许可证
Amazon_kclpy
亚马逊软件许可证
Boto3
Apache License 2.0
覆盖范围
Apache License 2.0
文档选项
麻省理工学院许可证
弹性搜索
Apache License 2.0
烧瓶
BSD许可证
烧瓶招摇过市
麻省理工学院许可证
jsonpath-RW
Apache License 2.0
摩托
Apache License 2.0
请求
Apache License 2.0
子进程32
PSF许可证
Node.js/npm模块:
活塞利特(Kinesalite)
麻省理工学院许可证
其他工具:
弹性搜索
Apache License 2.0
本地-KMS
麻省理工学院许可证
Kinesis-模拟
麻省理工学院许可证
公告
2021-04-24 :我们要招人了! -如果您喜欢我们在LocalStack所做的工作,请查看我们的jobs board 然后给我们发一封电子邮件,告诉我们你的简历/背景/投资组合。我们期待着您的回音!
2020/12/28 :查看LocalStack Pro功能路线图 这里:https://roadmap.localstack.cloud -请通过创建和提升功能请求来帮助我们确定积压工作的优先顺序。期待您的反馈!
2020-09-15 :PR#2905中合并了一个重大(突破性)更改-从以下版本开始v0.11.5
,所有服务现在仅通过边缘服务(端口4566)公开!请更新您的客户端配置以使用此新端点
2019-10-09 :LocalStack Pro已推出! 我们非常兴奋地宣布推出LocalStack Pro-具有附加API和高级功能的LocalStack企业版。请访问以下地址查看免费试用https://localstack.cloud
2018-01-10 :需要帮助! 请fill out this survey 支持查尔默斯理工大学进行的一项关于无服务器和功能即服务(FAAS)服务使用情况的研究。调查只需要你5-10分钟的时间。非常感谢您的参与!!
2017-08-27 :我们需要你的支持! LocalStack正在快速发展,我们现在有数千名开发人员定期使用该平台。上个月,我们记录了惊人的100k测试运行,25k+DynamoDB表、20k+SQS队列、15k+Kinesis Streams、13k+S3存储桶和10k+Lambda函数在本地创建-成本为0美元(更多详细信息将很快公布)。bug和功能请求如潮水般涌入,我们现在需要来自你 保持开放源码版本的积极维护。请给我退房Open Collective 并成为一名backer 或supporter 今天是项目的第一天!谢谢大家的贡献。♥
2017/07/20 :请注意:从版本开始0.7.0
,将推送Docker映像并使其处于最新状态新名称 localstack/localstack
(这意味着您可能需要更新您的配置项配置。)请参阅更新后的End-User License Agreement (EULA) 用于新版本。旧的Docker映像(atlassianlabs/localstack
)仍然可用,但不会再维护