标签归档:aws

Chalice-面向AWS的Python无服务器微框架

Chalice是一个用python编写无服务器应用程序的框架。它允许您快速创建和部署使用AWS Lambda的应用程序。它提供:

  • 用于创建、部署和管理应用程序的命令行工具
  • 基于修饰器的API,用于与Amazon API Gateway、Amazon S3、Amazon SNS、Amazon SQS和其他AWS服务集成
  • 自动生成IAM策略

您可以创建睡觉接口:

from chalice import Chalice

app = Chalice(app_name="helloworld")

@app.route("/")
def index():
    return {"hello": "world"}

定期运行的任务:

from chalice import Chalice, Rate

app = Chalice(app_name="helloworld")

# Automatically runs every 5 minutes
@app.schedule(Rate(5, unit=Rate.MINUTES))
def periodic_task(event):
    return {"hello": "world"}

您可以将lambda函数连接到S3事件:

from chalice import Chalice

app = Chalice(app_name="helloworld")

# Whenever an object is uploaded to 'mybucket'
# this lambda function will be invoked.

@app.on_s3_event(bucket='mybucket')
def handler(event):
    print("Object uploaded for bucket: %s, key: %s"
          % (event.bucket, event.key))

以及SQS队列:

from chalice import Chalice

app = Chalice(app_name="helloworld")

# Invoke this lambda function whenever a message
# is sent to the ``my-queue-name`` SQS queue.

@app.on_sqs_message(queue='my-queue-name')
def handler(event):
    for record in event:
        print("Message body: %s" % record.body)

以及其他几个AWS资源

一旦您编写了代码,您只需运行chalice deployChalice负责部署您的应用程序

$ chalice deploy
...
https://endpoint/dev

$ curl https://endpoint/api
{"hello": "world"}

在不到30秒的时间内启动并运行。试一试这个项目,并在Github上与我们分享您的反馈

文档是可用的here

快速入门

在本教程中,您将使用chalice用于创建和部署基本睡觉应用编程接口的命令行实用程序。此快速入门使用Python3.7,但AWS Chalice支持AWS Lambda支持的所有版本的Python,包括python2.7、python3.6、python3.7、python3.8。我们建议您使用Python3的版本。您可以在Python download page

要安装Chalice,我们将首先在python3.7中创建并激活一个虚拟环境:

$ python3 --version
Python 3.7.3
$ python3 -m venv venv37
$ . venv37/bin/activate

接下来,我们将使用以下命令安装圣杯pip

$ python3 -m pip install chalice

您可以通过运行以下命令来验证您是否安装了圣杯:

$ chalice --help
Usage: chalice [OPTIONS] COMMAND [ARGS]...
...

凭据

在部署应用程序之前,请确保已配置凭据。如果您之前已将计算机配置为运行boto3(AWS SDK For Python)或AWS CLI,则可以跳过此部分

如果这是您第一次为AWS配置凭据,您可以按照以下步骤快速入门:

$ mkdir ~/.aws
$ cat >> ~/.aws/config
[default]
aws_access_key_id=YOUR_ACCESS_KEY_HERE
aws_secret_access_key=YOUR_SECRET_ACCESS_KEY
region=YOUR_REGION (such as us-west-2, us-west-1, etc)

如果需要有关所有支持的凭据配置方法的详细信息,请参阅boto3 docs

创建您的项目

接下来我们要做的是使用chalice用于创建新项目的命令:

$ chalice new-project helloworld

这将创建一个helloworld目录。cd放入此目录。您将看到已为您创建了几个文件:

$ cd helloworld
$ ls -la
drwxr-xr-x   .chalice
-rw-r--r--   app.py
-rw-r--r--   requirements.txt

您可以忽略.chalice目录,我们现在要关注的两个主要文件是app.pyrequirements.txt

我们来看一下app.py文件:

from chalice import Chalice

app = Chalice(app_name='helloworld')


@app.route('/')
def index():
    return {'hello': 'world'}

这个new-project命令创建了定义单个视图的示例应用程序,/,调用时将返回JSON正文{"hello": "world"}

正在部署

让我们部署此应用程序。一定要确保你在helloworld目录并运行chalice deploy

$ chalice deploy
Creating deployment package.
Creating IAM role: helloworld-dev
Creating lambda function: helloworld-dev
Creating Rest API
Resources deployed:
  - Lambda ARN: arn:aws:lambda:us-west-2:12345:function:helloworld-dev
  - Rest API URL: https://abcd.execute-api.us-west-2.amazonaws.com/api/

现在,您已经使用API Gateway和Lambda启动并运行了API:

$ curl https://qxea58oupc.execute-api.us-west-2.amazonaws.com/api/
{"hello": "world"}

尝试从中更改返回的词典index()功能。然后,您可以通过运行以下命令重新部署更改chalice deploy

下一步

现在,您已经使用以下工具创建了您的第一个应用程序chalice您可以修改您的app.py文件并重新运行chalice deploy要重新部署更改,请执行以下操作

此时,您可以采取以下几个步骤

  • Tutorials-从多个指导性教程中进行选择,这些教程将为您提供Chalice各种功能的分步示例
  • Topics-深入研究圣杯特定领域的文档。其中包含比教程更详细的文档
  • API Reference-有关Chalice公共API的所有类和方法的低级参考文档

如果您已经完成了对Chalice的实验,并且您想要进行清理,您可以使用chalice delete命令,则Chalice将删除它在运行chalice deploy命令

$ chalice delete
Deleting Rest API: abcd4kwyl4
Deleting function aws:arn:lambda:region:123456789:helloworld-dev
Deleting IAM Role helloworld-dev

反馈

我们也很想听到你的消息。请为您想要查看的其他功能创建任何Github问题,请访问https://github.com/aws/chalice/issues您也可以在GITER上与我们聊天:https://gitter.im/awslabs/chalice

Boto3 适用于Python的AWS SDK

Boto3-适用于Python的AWS SDK


Boto3是适用于Python的Amazon Web Services(AWS)软件开发工具包(SDK),允许Python开发人员编写利用Amazon S3和Amazon EC2等服务的软件。您可以在我们的doc site,包括支持的服务列表

2021年1月15日宣布了对Python2.7的弃用,2021年7月15日将放弃对Python2.7的支持。为了避免中断,在Python2.7上使用Boto3的客户可能需要升级他们的Python版本或固定Boto3的版本。有关更多信息,请参阅此blog post

快速入门

假设您有Python和virtualenv安装,设置您的环境并安装所需的依赖项,如下所示,或者您可以使用以下命令安装库pip

$ git clone https://github.com/boto/boto3.git
$ cd boto3
$ virtualenv venv
...
$ . venv/bin/activate
$ python -m pip install -r requirements.txt
$ python -m pip install -e .
$ python -m pip install boto3

使用Boto3

安装boto3之后

接下来,设置凭据(例如~/.aws/credentials):

[default]
aws_access_key_id = YOUR_KEY
aws_secret_access_key = YOUR_SECRET

然后,设置默认区域(例如,~/.aws/config):

[default]
region=us-east-1

可以找到其他凭证配置方法here

然后,从Python解释器执行以下操作:

>>> import boto3
>>> s3 = boto3.resource('s3')
>>> for bucket in s3.buckets.all():
        print(bucket.name)

运行测试

您可以使用在所有支持的Python版本中运行测试tox默认情况下,它将运行所有单元测试和功能测试,但您也可以指定自己的测试nosetests选项。请注意,这要求您安装了所有受支持的Python版本,否则您必须通过-e或运行nosetests命令直接执行:

$ tox
$ tox -- unit/test_session.py
$ tox -e py26,py33 -- integration/

您还可以使用默认的Python版本运行单独的测试:

$ nosetests tests/unit

获取帮助

我们使用GitHub问题来跟踪错误和功能请求,但解决这些问题的带宽有限。请使用以下社区资源获取帮助:

贡献

我们重视来自社区的反馈和贡献。无论是错误报告、新功能、更正还是其他文档,我们都欢迎您的问题和请求。请把这个通读一遍CONTRIBUTING在提交任何问题或拉回请求之前提交文档,以确保我们拥有有效回应您的贡献的所有必要信息

SDK主要版本的维护和支持

Boto3于2015年6月22日正式发布,目前处于可用性生命周期的全面支持阶段

有关SDK主要版本及其底层依赖项的维护和支持信息,请参阅《AWS SDK和工具共享配置和凭证参考指南》中的以下内容:

更多资源

Security Monkey监控AWS、GCP、OpenStack和GitHub组织的资产及其随时间的变化

Security Monkey监控您的AWS and GCP accounts有关不安全配置的策略更改和警报。支持OpenStack公共云和私有云。Security Monkey还可以监视和监控您的GitHub组织、团队和存储库

它提供单个UI来浏览和搜索您的所有帐户、地区和云服务。猴子会记住以前的状态,并能准确地告诉你什么时候发生了变化

Security Monkey可以扩展为custom account typescustom watcherscustom auditors,以及custom alerters

它可以在CPython2.7上运行。众所周知,它可以在Ubuntu Linux和OS X上运行

发展分支机构 大师级分支机构

特别注意事项:

Netflix对Security Monkey的支持已经减少,只对小错误进行了修复。也就是说,我们乐于接受并合并修复bug并添加新功能的请求(Pull-Request)

🚨⚠️🥁🎺请阅读:打破1.0的更改🎺🥁⚠️🚨

如果您是第一次升级到1.0,请查看Quickstart以及Autostarting文档,因为Security Monkey有一个新的部署模式。此外,还添加了新的IAM权限

项目资源

实例关系图

组成Security Monkey的组件如下(不是特定于AWS的):

访问图

Security Monkey通过提供的凭据访问帐户以进行扫描(“角色假设”,如果可用)

Caprover 可扩展的PaaS(自动Docker+nginx)

CapRover

适用于NodeJS、Python、PHP、Ruby、Go应用程序的最简单的应用程序/数据库部署平台和Web服务器软件包

不需要码头工人,nginx知识!



这是什么?

CapRover是一款极其易于使用的应用程序/数据库部署和Web服务器管理器,适用于NodeJS、Python、PHP、ASP.NET、Ruby、MySQL、MongoDB、Postgres、WordPress(等等)申请!

它的速度非常快,而且非常健壮,因为它在其简单易用的界面背后使用了Docker、nginx、LetsEncrypt和NetData

✔用于自动化和脚本编写的CLI

✔便于访问和方便的Web GUI

✔不能锁定!删除CapRover,您的应用程序将继续工作!

✔引擎盖下的码头工人蜂拥而至,进行集装箱化和集群化

✔Nginx(完全可定制的模板)在引擎盖下,用于负载均衡

✔让我们在幕后加密以获得免费的SSL(HTTPS)

我是认真的!谁应该关心CapRover?

  • 不喜欢花费数小时和数天时间设置服务器、构建工具、向服务器发送代码、构建服务器、获取SSL证书、安装证书、反复更新nginx的[web]开发人员
  • 开发人员使用昂贵的服务,如Heroku、Microsoft Azure等,并希望将其成本降低到原来的1/4(Heroku对其1 GB实例每月收费25美元,而同一服务器在Valltr上的收费是5美元!)
  • 喜欢写更多关于showResults(getUserList())而且不是很多$ apt-get install libstdc++6 > /dev/null
  • 喜欢在服务器上安装MySQL、MongoDB等的开发人员,方法是从下拉菜单中选择并单击Install!
  • 设置CapRover服务器需要多少服务器/坞站/Linux知识?答:复制粘贴知识!!有关要复制和粘贴的内容的信息,请转到“入门”;-)

了解更多信息!

有关更多详细信息和文档,请访问https://CapRover.com/

贡献者

这个项目的存在要归功于所有做出贡献的人。[Contribute]

支持者

感谢我们所有的支持者!🙏

Data-science-ipython-notebooks-数据科学Python笔记本:深度学习

数据-科学-IPython-笔记本

索引

深度学习

演示深度学习功能的IPython笔记本

张量流教程

其他TensorFlow教程:

笔记本电脑 描述
tsf-basics 在TensorFlow中学习基本操作,TensorFlow是Google提供的各种感知和语言理解任务的库
tsf-linear 在TensorFlow中实现线性回归
tsf-logistic 在TensorFlow中实现Logistic回归
tsf-nn 在TensorFlow中实现最近邻居
tsf-alex 在TensorFlow中实现AlexNet
tsf-cnn 卷积神经网络在TensorFlow中的实现
tsf-mlp 在TensorFlow中实现多层感知器
tsf-rnn 递归神经网络在TensorFlow中的实现
tsf-gpu 了解TensorFlow中的基本多GPU计算
tsf-gviz 了解TensorFlow中的图形可视化
tsf-lviz 了解TensorFlow中的损耗可视化

张量流练习

笔记本电脑 描述
tsf-not-mnist 通过为TensorFlow中的培训、开发和测试创建带有格式化数据集的Pickle,了解简单的数据管理
tsf-fully-connected 在TensorFlow中使用Logistic回归和神经网络逐步训练更深更精确的模型
tsf-regularization 通过训练全连通网络对TensorFlow中的notMNIST字符进行分类来探索正则化技术
tsf-convolutions 在TensorFlow中创建卷积神经网络
tsf-word2vec 在TensorFlow中对Text8数据训练跳格模型
tsf-lstm 在TensorFlow中对Text8数据训练LSTM字符模型

Theano-教程

笔记本电脑 描述
theano-intro Theano简介,它允许您高效地定义、优化和计算涉及多维数组的数学表达式。它可以使用GPU并执行高效的符号微分
theano-scan 学习扫描,这是一种在Theano图中执行循环的机制
theano-logistic 在Theano中实现Logistic回归
theano-rnn 递归神经网络在Theano中的实现
theano-mlp 在Theano中实现多层感知器

Keras-教程

笔记本电脑 描述
角膜 KERAS是一个用Python编写的开源神经网络库。它可以在TensorFlow或Theano上运行
setup 了解教程目标以及如何设置Kera环境
intro-deep-learning-ann 介绍使用KERAS和人工神经网络(ANN)进行深度学习
theano 通过使用权重矩阵和梯度了解Theano
keras-otto 通过观看卡格尔·奥托挑战赛了解凯拉斯
ann-mnist 基于KERAS的MNIST人工神经网络的简单实现
conv-nets 使用KERAS了解卷积神经网络(CNN)
conv-net-1 使用KERA识别MNIST中的手写数字-第1部分
conv-net-2 使用KERA识别MNIST中的手写数字-第2部分
keras-models 将预先培训的型号(如VGG16、VGG19、ResNet50和Inception v3)与KERA配合使用
auto-encoders 了解有关KERAS自动编码器的信息
rnn-lstm 使用KERAS了解递归神经网络(RNN)
lstm-sentence-gen 了解与KERA配合使用长短期内存(LSTM)网络的RNN

深度学习-其他

笔记本电脑 描述
deep-dream 基于Caffe的计算机视觉程序,使用卷积神经网络来查找和增强图像中的图案

科学工具包-学习

演示SCRICKIT学习功能的IPython笔记本

笔记本电脑 描述
intro 介绍笔记本到SCRICKIT-学习。Scikit-Learning添加了对大型多维数组和矩阵的Python支持,以及对这些数组进行操作的高级数学函数库的大型库
knn 在SCRICKIT-LEARN中实现k-近邻
linear-reg 在SCRICKIT-LEARCH中实现线性回归
svm 在SCRKIT-LEARN中实现带核和不带核的支持向量机分类器
random-forest 在SCRICKIT-LEARN中实现随机森林分类器和回归器
k-means 在SCRICIT-LEARN中实现k-均值聚类
pca 主成分分析在SCRICIT-LEARCH中的实现
gmm 在SCRICIT-LEARN中实现高斯混合模型
validation 在SCRICKIT-LEARN中实现验证和模型选择

统计推理法

演示使用SciPy功能进行统计推断的IPython笔记本

笔记本电脑 描述
尖刺的 SciPy是构建在Python的Numpy扩展上的数学算法和便利函数的集合。它为用户提供用于操作和可视化数据的高级命令和类,从而大大增强了交互式Python会话的功能
effect-size 通过分析男性和女性的身高差异,探索量化效应大小的统计数据。使用行为危险因素监测系统(BRFSS)的数据来估计美国成年女性和男性的平均身高和标准偏差
sampling 利用BRFSS数据分析美国男女平均体重探索随机抽样
hypothesis 通过分析头胎婴儿与其他婴儿的差异来探索假设检验

熊猫

演示熊猫功能的IPython笔记本

笔记本电脑 描述
pandas 用Python编写的用于数据操作和分析的软件库。提供用于操作数值表和时间序列的数据结构和操作
github-data-wrangling 通过分析中的GitHub数据,了解如何加载、清理、合并和要素工程Viz回购
Introduction-to-Pandas 熊猫简介
Introducing-Pandas-Objects 了解熊猫对象
Data Indexing and Selection 了解有关熊猫中的数据索引和选择的信息
Operations-in-Pandas 了解有关在熊猫中操作数据的信息
Missing-Values 了解有关处理熊猫中丢失的数据的信息
Hierarchical-Indexing 了解有关熊猫中的分层索引的信息
Concat-And-Append 了解有关组合数据集的信息:在熊猫中合并和追加
Merge-and-Join 了解有关组合数据集的信息:在熊猫中合并和连接
Aggregation-and-Grouping 了解有关在熊猫中聚合和分组的信息
Pivot-Tables 了解有关熊猫中的透视表的信息
Working-With-Strings 了解有关熊猫中的矢量化字符串操作的信息
Working-with-Time-Series 了解有关在熊猫中使用时间序列的信息
Performance-Eval-and-Query 了解高性能熊猫:熊猫中的eval()和query()

Matplotlib

演示matplotlib功能的IPython笔记本

笔记本电脑 描述
matplotlib Python 2D绘图库,以各种硬拷贝格式和跨平台交互环境生成出版物质量数据
matplotlib-applied 将matplotlib可视化应用于Kaggle比赛以进行探索性数据分析。了解如何创建条形图、直方图、子图2格网、归一化图、散点图、子图和核密度估计图
Introduction-To-Matplotlib Matplotlib简介
Simple-Line-Plots 了解有关Matplotlib中的简单线条图的信息
Simple-Scatter-Plots 了解有关Matplotlib中的简单散点图的信息
Errorbars.ipynb 了解有关在Matplotlib中可视化错误的信息
Density-and-Contour-Plots 了解Matplotlib中的密度和等高线绘图
Histograms-and-Binnings 了解有关Matplotlib中的直方图、二进制和密度的信息
Customizing-Legends 了解有关在Matplotlib中自定义地块图例的信息
Customizing-Colorbars 了解有关在Matplotlib中自定义色带的信息
Multiple-Subplots 了解有关Matplotlib中的多个子图的信息
Text-and-Annotation 了解有关Matplotlib中的文本和注记的信息
Customizing-Ticks 了解有关在Matplotlib中自定义刻度的信息
Settings-and-Stylesheets 了解有关自定义Matplotlib的信息:配置和样式表
Three-Dimensional-Plotting 了解有关在Matplotlib中进行三维打印的信息
Geographic-Data-With-Basemap 了解有关在Matplotlib中使用底图的地理数据的信息
Visualization-With-Seaborn 了解有关海运可视化的信息

麻木的

演示NumPy功能的IPython笔记本

笔记本电脑 描述
numpy 添加了对大型多维数组和矩阵的Python支持,以及对这些数组进行运算的大型高级数学函数库
Introduction-to-NumPy NumPy简介
Understanding-Data-Types 了解有关Python中的数据类型的信息
The-Basics-Of-NumPy-Arrays 了解NumPy阵列的基础知识
Computation-on-arrays-ufuncs 了解有关NumPy数组的计算:泛函
Computation-on-arrays-aggregates 了解有关聚合的信息:NumPy中的最小值、最大值以及介于两者之间的所有内容
Computation-on-arrays-broadcasting 了解有关数组计算的信息:在NumPy中广播
Boolean-Arrays-and-Masks 了解有关NumPy中的比较、掩码和布尔逻辑的信息
Fancy-Indexing 了解NumPy中的奇特索引
Sorting 了解有关在NumPy中对数组进行排序的信息
Structured-Data-NumPy 了解结构化数据:NumPy的结构化数组

Python-Data

IPython笔记本,演示面向数据分析的Python功能

笔记本电脑 描述
data structures 使用元组、列表、字典、集学习Python基础知识
data structure utilities 学习Python操作,如切片、范围、xrange、二等分、排序、排序、反转、枚举、压缩、列表理解
functions 了解更高级的Python功能:函数作为对象、lambda函数、闭包、*args、**kwargs curying、生成器、生成器表达式、itertools
datetime 了解如何使用Python日期和时间:datetime、strftime、strptime、timeDelta
logging 了解有关使用RotatingFileHandler和TimedRotatingFileHandler进行Python日志记录的信息
pdb 了解如何使用交互式源代码调试器在Python中进行调试
unit tests 了解如何在Python中使用NOSE单元测试进行测试

Kaggle-and-Business分析

中使用的IPython笔记本kaggle竞争和业务分析

笔记本电脑 描述
titanic 预测泰坦尼克号上的生还者。学习数据清理、探索性数据分析和机器学习
churn-analysis 预测客户流失。练习逻辑回归、梯度增强分类器、支持向量机、随机森林和k近邻。包括对念力矩阵、ROC图、特征重要性、预测概率和校准/识别的讨论

电光

演示电光和HDFS功能的IPython笔记本

笔记本电脑 描述
spark 内存集群计算框架,对于某些应用程序速度最高可提高100倍,并且非常适合机器学习算法
hdfs 在大型群集中跨计算机可靠地存储非常大的文件

MapReduce-Python

演示使用mrjob功能的Hadoop MapReduce的IPython笔记本

笔记本电脑 描述
mapreduce-python 在Python中运行MapReduce作业,在本地或Hadoop群集上执行作业。演示Python代码中的Hadoop流以及单元测试和mrjob用于分析Elastic MapReduce上的Amazon S3存储桶日志的配置文件。Disco是另一个基于python的替代方案。

AWS

演示Amazon Web服务(AWS)和AWS工具功能的IPython笔记本

另请查看:

  • SAWS:增强型AWS命令行界面(CLI)
  • Awesome AWS:库、开源Repos、指南、博客和其他资源的精选列表
笔记本电脑 描述
boto 针对Python的官方AWS SDK
s3cmd 通过命令行与S3交互
s3distcp 组合较小的文件,并通过接受模式和目标文件将它们聚合在一起。S3DistCp还可用于将大量数据从S3传输到您的Hadoop群集
s3-parallel-put 将多个文件并行上传到S3
redshift 充当建立在大规模并行处理(MPP)技术之上的快速数据仓库
kinesis 通过每秒处理数千个数据流的能力实时流式传输数据
lambda 运行代码以响应事件,自动管理计算资源

命令

IPython笔记本,演示Linux、Git等的各种命令行

笔记本电脑 描述
linux 类UNIX且大多兼容POSIX的计算机操作系统。磁盘使用情况、拆分文件、grep、sed、curl、查看正在运行的进程、终端语法突出显示和Vim
anaconda 发布用于大规模数据处理、预测分析和科学计算的Python编程语言,旨在简化包管理和部署
ipython notebook 基于Web的交互式计算环境,您可以在其中将代码执行、文本、数学、绘图和富媒体组合到单个文档中
git 强调速度、数据完整性并支持分布式非线性工作流的分布式修订控制系统
ruby 用于与AWS命令行和Jekyll交互,Jekyll是可托管在GitHub页面上的博客框架
jekyll 简单、支持博客的静电站点生成器,适用于个人、项目或组织站点。呈现Markdown或Textile and Liquid模板,并生成一个完整的静电网站,准备好由Apache HTTP Server、NGINX或其他Web服务器提供服务
pelican 基于Python的Jekyll替代方案
django 高级Python Web框架,鼓励快速开发和干净、实用的设计。它对共享报告/分析和博客很有用。较轻的替代方案包括PyramidFlaskTornado,以及Bottle

杂项

演示各种功能的IPython笔记本

笔记本电脑 描述
regex 数据争论中有用的正则表达式小抄
algorithmia Algorithmia是一个算法市场。本笔记本展示了4种不同的算法:人脸检测、内容摘要、潜在狄利克雷分配和光学字符识别

笔记本-安装

python

Anaconda是Python编程语言的免费发行版,用于大规模数据处理、预测分析和科学计算,旨在简化包管理和部署

按照说明进行安装Anaconda或者更轻的miniconda

设备-设置

有关设置数据分析开发环境的详细说明、脚本和工具,请参阅dev-setup回购

跑步-笔记本

要查看交互式内容或修改IPython笔记本中的元素,必须首先克隆或下载存储库,然后再运行笔记本。有关IPython笔记本的更多信息可以找到here.

$ git clone https://github.com/donnemartin/data-science-ipython-notebooks.git
$ cd data-science-ipython-notebooks
$ jupyter notebook

使用Python 2.7.x测试的笔记本电脑

学分

贡献

欢迎投稿!有关错误报告或请求,请submit an issue

联系方式-信息

请随时与我联系,讨论任何问题、问题或评论

许可证

这个存储库包含各种内容;有些是由Donne Martin开发的,有些是来自第三方的。第三方内容在这些方提供的许可下分发

由Donne Martin开发的内容按照以下许可证分发:

我在开放源码许可下向您提供此存储库中的代码和资源。因为这是我的个人存储库,您获得的我的代码和资源的许可证来自我,而不是我的雇主(Facebook)

Copyright 2015 Donne Martin

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

   http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.

Localstack 一个功能齐全的本地AWS云堆栈

概述

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_PROVIDERkinesis-mock并且该系统不是AMD64系统。支持8+个)

正在安装

安装LocalStack的最简单方法是通过pip

pip install localstack

注意事项如请务必照办。使用sudo或者rootUser-LocalStack应该完全在本地非root用户下安装和启动。如果您在MacOS X Sierra中的权限有问题,请使用安装pip install --user localstack

正在运行

默认情况下,LocalStack使用以下命令在Docker容器内启动:

localstack start

(请注意,在MacOS上,您可能需要运行TMPDIR=/private$TMPDIR localstack start --docker如果$TMPDIR包含Docker无法挂载的符号链接。)

注意事项:2020-07-11起,默认镜像localstack/localstackin 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+):

docker-compose up

(请注意,在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:

  • EDGE_PORT:边缘服务的端口号,所有API调用的主要入口点(默认值:4566)
  • SERVICES:要启动的服务名称(API)的逗号分隔列表。服务名称基本上对应于service names of the AWS CLI(kinesislambdasqs等),尽管LocalStack仅支持其中的一部分。示例值:kinesis,lambda,sqs启动Kinesis、Lambda和SQS。此外,可以指定以下速记值来运行预定义的服务集合:
    • serverless:运行通常用于无服务器应用程序的服务(iamlambdadynamodbapigateways3sns)
  • DEFAULT_REGION:与API通话时使用的AWS区域(默认值:us-east-1)
  • EDGE_BIND_HOST:边缘服务绑定到的地址。(默认值:127.0.0.1,在码头集装箱中0.0.0.0)
  • HOSTNAME:要在内部公开服务的主机的名称(默认值:localhost)。使用此选项来自定义框架内部通信,例如,如果使用docker-compose在不同容器中启动服务
  • HOSTNAME_EXTERNAL:要在外部公开服务的主机的名称(默认值:localhost)。例如,当将队列URL从SQS服务返回到客户端时,使用此主机
  • HOSTNAME_FROM_LAMBDA:端点主机,在该主机下可以从Lambda容器访问API(可选)。这在码头组成堆栈中使用本地容器主机名是有用的(例如,HOSTNAME_FROM_LAMBDA=localstack)如果主容器的IP地址和容器名称都不可用(例如,在CI中)。常与…连用LAMBDA_DOCKER_NETWORK
  • DEBUG:用于提高日志级别并打印更多详细日志的标志(用于故障排除)
  • <SERVICE>_PORT_EXTERNAL:向外部公开特定服务的端口号(默认为上面的服务端口)。SQS_PORT_EXTERNAL例如,将队列URL从SQS服务返回到客户端时使用
  • IMAGE_NAME:要使用的LocalStack Docker映像的特定名称和标签,例如,localstack/localstack:0.11.0(默认值:localstack/localstack)
  • USE_LIGHT_IMAGE:是否使用轻量级Docker镜像(默认为:1)。被覆盖IMAGE_NAME
  • KINESIS_PROVIDER:确定正在使用的模拟。有效值为kinesalitekinesis-mock(默认)
  • KINESIS_ERROR_PROBABILITY:0.0(默认值)和1.0之间的十进制值随机注入ProvisionedThroughputExceededExceptionKinesis API响应中的错误
  • KINESIS_SHARD_LIMIT:整数值(默认值:100)或Infinity(以禁用),导致Kinesis API开始引发异常以模仿default shard limit
  • KINESIS_LATENCY:毫秒整数值(默认值:500)或0(禁用),导致Kinesis API延迟返回响应,以模拟实时AWS调用的延迟。以下API调用受此影响:
    • CreateStream
    • 删除流
    • RegisterStreamConsumer
    • StartStreamEncryption
    • 停止流加密
    • DeregisterStreamConsumer
    • 合并碎片
    • 拆分碎片
    • 更新硬计数
  • KINESIS_INITIALIZE_STREAMS:以逗号分隔的流名称字符串及其对应的要在启动期间初始化的分片计数。例如:“my-first-stream:1,my-ther-stream:2,my-last-stream:1”。仅适用于kinesis-mockKinesis_Provider
  • DYNAMODB_ERROR_PROBABILITY:0.0(默认值)和1.0之间的十进制值随机注入ProvisionedThroughputExceededExceptionDynamoDB API响应中的错误
  • DYNAMODB_HEAP_SIZE:设置DynamoDB值的Java EE最大内存大小为(整数)m表示MB,(整数)G表示GB默认值(256M),全表扫描需要更多内存
  • STEPFUNCTIONS_LAMBDA_ENDPOINT:在STEP函数中用作Lambda服务端点的URL。默认情况下,这是LocalStack Lambda端点。使用default要选择原始AWS Lambda端点,请执行以下操作
  • LAMBDA_EXECUTOR:用于执行Lambda函数的方法。可能的值包括:
    • local:在本地计算机的临时目录中运行Lambda函数
    • docker:在单独的Docker容器中运行每个函数调用
    • docker-reuse:为每个函数创建一个Docker容器,并跨调用重用它

    dockerdocker-reuse,如果LocalStack本身在Docker内部启动,则docker命令需要在容器内可用(通常需要在特权模式下运行容器)。默认值为docker,回退到local如果Docker不可用

  • LAMBDA_REMOTE_DOCKER确定是否将Lambda代码复制或装载到容器中。可能的值包括:
    • true(默认):您的Lambda函数定义将通过复制zip文件传递到容器(可能较慢)。它允许远程执行,其中主机和客户端不在同一台计算机上
    • false:您的Lambda函数定义将通过挂载卷(可能更快)传递给容器。这需要将Docker客户端和Docker主机安装在同一台计算机上。另外,HOST_TMP_FOLDER必须正确设置,并且像这样的卷装载${HOST_TMP_FOLDER}:/tmp/localstack如果您使用的是docker-compose,则需要进行配置
  • BUCKET_MARKER_LOCAL:本地运行lambdas的可选存储桶名称
  • LAMBDA_DOCKER_NETWORK:可选Docker网络,用于运行lambda函数的容器
  • LAMBDA_DOCKER_DNS:运行lambda函数的容器的可选DNS服务器
  • LAMBDA_DOCKER_FLAGS:传递给Lambda Docker的其他标志run/create命令(例如,用于指定自定义卷装载)
  • LAMBDA_CONTAINER_REGISTRY使用备用docker注册表拉取lambda执行容器(默认:lambci/lambda)
  • LAMBDA_REMOVE_CONTAINERS:lambdas执行完毕后是否移除容器(默认:true)
  • TMPDIR:LocalStack容器内的临时文件夹(默认值:/tmp)
  • HOST_TMP_FOLDER:装载为的主机上的临时文件夹$TMPDIR/localstack放到LocalStack容器中。仅在使用时装载Lambda卷时需要LAMBDA_REMOTE_DOCKER=false
  • DATA_DIR:保存持久数据的本地目录(目前仅支持以下服务:Kinesis、DynamoDB、Elasticsearch、S3、Secretsmanager、SSM、SQS、SNS)。将其设置为/tmp/localstack/data要启用持久性(/tmp/localstack挂载到Docker容器中),则保留为空以禁用持久化(默认)
  • PERSISTENCE_SINGLE_FILE:指定是否应合并持久性文件。(默认值:true)
  • PORT_WEB_UI:Web用户界面/仪表板的端口(默认:8080)。请注意,Web UI现在已弃用(需要使用激活START_WEB=1),并要求使用localstack/localstack-fullDocker镜像
  • <SERVICE>_BACKEND:用于特定服务的自定义端点URL,其中<SERVICE>是大写的服务名称(当前适用于:APIGATEWAYCLOUDFORMATIONDYNAMODBELASTICSEARCHKINESISS3SNSSQS)。这样就可以轻松地将第三方服务集成到LocalStack中。您可以查看一个elasticsearch example here
  • FORCE_NONINTERACTIVE:使用Docker运行时,禁用--interactive--tty旗帜。在无头运行时很有用
  • DOCKER_FLAGS:允许在Docker中运行LocalStack时将自定义标志(例如,卷装载)传递给“docker run”
  • DOCKER_CMD:用于运行Docker容器的shell命令,例如,设置为"sudo docker"以sudo身份运行(默认值:docker)
  • SKIP_INFRA_DOWNLOADS:是否跳过下载其他基础架构组件(例如,特定的Elasticsearch版本)
  • START_WEB:用于控制是否应在Docker中启动Web UI的标志(默认值:false;已弃用)
  • LAMBDA_FALLBACK_URL:调用不存在的Lambda时使用的回退URL。记录DynamoDB(值)中的调用dynamodb://<table_name>)或将调用作为POST请求(值http(s)://...)
  • LAMBDA_FORWARD_URL:用于转发所有lambda调用的URL(用于通过外部服务运行lambdas)
  • DISABLE_CORS_CHECKS:是否禁用所有CSRF缓解(默认值:0)
  • DISABLE_CUSTOM_CORS_S3:是否通过S3禁用CORS覆盖(默认值:0)
  • DISABLE_CUSTOM_CORS_APIGATEWAY:禁用由apigateway覆盖CORS的内容(默认值:0)
  • EXTRA_CORS_ALLOWED_ORIGINS:允许与本地堆栈通信的来源的逗号分隔列表
  • EXTRA_CORS_ALLOWED_HEADERS:要添加到的以逗号分隔的标头名称列表Access-Control-Allow-HeadersCORS标头
  • EXTRA_CORS_EXPOSE_HEADERS:要添加到的以逗号分隔的标头名称列表Access-Control-Expose-HeadersCORS标头
  • LAMBDA_JAVA_OPTS:允许传递自定义JVM选项(例如,-Xmx512M)到在Docker中执行的Java lambdas。使用_debug_port_用于配置调试端口的占位符(例如,-agentlib:jdwp=transport=dt_socket,server=y,suspend=y,address=_debug_port_)
  • MAIN_CONTAINER_NAME:指定主坞容器名称(默认值:localstack_main)
  • INIT_SCRIPTS_PATH:指定扩展名为.sh的初始化文件的路径,这些文件默认位于/docker-entrypoint-initaws.d
  • LS_LOG:指定日志级别(‘trace’、‘debug’、‘info’、‘warn’、‘error’、‘warning’)当前重写DEBUG配置。启用LS_LOG=trace打印详细的请求/响应消息

以下环境配置可用于调试:

  • 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,如果尚未安装

pip install awscli

设置本地区域和凭据以运行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-cli0.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将映射到以下内容localhostURL:

$ 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易于运行的插件ServerlessLocalStack上的应用程序。有关更多信息,请查看此处的插件存储库: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_FOLDERLocalStack容器的环境变量(请参见上面的配置部分)

与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存储库

故障排除

  • 如果您将AWS Java库与Kinesis配合使用,请参阅CBOR protocol issues with the Java SDK guide如何禁用kinesalite不支持的CBOR协议
  • 访问本地S3:为避免域名解析问题,需要开启路径样式访问在您的S3SDK客户端上。大多数AWS SDK都提供配置来实现这一点,例如,对于Java:
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);
...
  • 正在挂载临时工。目录:请注意,在MacOS上,您可能必须运行TMPDIR=/private$TMPDIR docker-compose up如果$TMPDIR包含Docker无法挂载的符号链接。(请在此处查看详细信息:https://bitbucket.org/atlassian/localstack/issues/40/getting-mounts-failed-on-docker-compose-up)
  • 如果您看到像这样的Lambda错误Cannot find module ...在使用时LAMBDA_REMOTE_DOCKER=false,请确保正确设置HOST_TMP_FOLDER环境变量,并将临时文件夹从主机挂载到LocalStack容器
  • 如果您在以下位置遇到文件权限问题pip install在MacOS下(例如,Permission denied: '/Library/Python/2.7/site-packages/six.py'),则您可能需要重新安装pipVia Homebrew(请参见this discussion thread)。或者,尝试使用--user标志:pip install --user localstack
  • 如果您在OpenShift内部署,请注意:Pod必须以root,并且用户必须将权能添加到正在运行的Pod中,才能允许Elasticsearch作为非根用户运行localstack用户
  • 如果您在Mac OS中遇到lambdas性能较慢的问题,您可以(1)尝试mounting local code directly into the Lambda container,或(2)禁止在docker-compose中将临时目录挂载到LocalStack容器中。(另见https://github.com/localstack/localstack/issues/2515)
  • 环境变量no_proxy由LocalStack重写。(内部请求将直接通过localhost,绕过任何代理配置)
  • 要对LocalStack启动问题进行故障排除,可以通过运行以下命令检查调试日志DEBUG=1 localstack start
  • 如果您遇到与Node/NodeJS相关的错误,您可以找到(此问题备注:https://github.com/localstack/localstack/issues/227#issuecomment-319938530)很有帮助
  • 如果您正在使用AWS Java库并需要禁用SSL证书检查,请添加-Dcom.amazonaws.sdk.disableCertChecking添加到java调用

发展中的

在本地开发或启动的要求

要开发新功能,或在本地启动堆栈(在Docker之外),需要以下附加工具:

  • make
  • npm(Node.js包管理器)
  • java/javac(Java 8运行时环境和编译器)
  • mvn(Maven,Java的构建系统)
  • moto(用于测试)
  • docker-compose(用于使用docker-compose运行本地堆栈)
  • mock(用于单元测试)
  • pytest(用于单元测试)
  • pytest-cov(检查单元测试覆盖率)

开发环境

如果为了扩展/修改LocalStack而拉回回购,请运行以下命令以安装所有依赖项:

make install

这将在本地Python viralenv目录中安装所需的pip依赖项.venv(您的全局python包将保持不变),以及中的一些节点模块。./localstack/node_modules/根据您的系统,某些pip/npm模块可能需要安装其他本地库。

Makefile包含一个目标,用于方便地运行用于开发的本地基础设施:

make infra

使用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-stopvagrant halt
删除流浪VM
  • vagrant destroy

请查看developer guide其中包含一些关于如何开始开发(和调试)LocalStack功能的说明

测试

该项目包含一组可以通过make目标启动的单元和集成测试:

make test

要检查代码覆盖率,请执行以下操作

完成新功能/错误修复后,运行单元测试并检查覆盖范围

# 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组件以及它们之间的关系

localstack web

请注意,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-09LocalStack Pro已推出!我们非常兴奋地宣布推出LocalStack Pro-具有附加API和高级功能的LocalStack企业版。请访问以下地址查看免费试用https://localstack.cloud
  • 2018-01-10需要帮助!fill out this survey支持查尔默斯理工大学进行的一项关于无服务器和功能即服务(FAAS)服务使用情况的研究。调查只需要你5-10分钟的时间。非常感谢您的参与!!
    • 这项研究的结果是可以找到的here
  • 2017-08-27我们需要你的支持!LocalStack正在快速发展,我们现在有数千名开发人员定期使用该平台。上个月,我们记录了惊人的100k测试运行,25k+DynamoDB表、20k+SQS队列、15k+Kinesis Streams、13k+S3存储桶和10k+Lambda函数在本地创建-成本为0美元(更多详细信息将很快公布)。bug和功能请求如潮水般涌入,我们现在需要来自保持开放源码版本的积极维护。请给我退房Open Collective并成为一名backersupporter今天是项目的第一天!谢谢大家的贡献。♥
  • 2017/07/20:请注意:从版本开始0.7.0,将推送Docker映像并使其处于最新状态新名称localstack/localstack(这意味着您可能需要更新您的配置项配置。)请参阅更新后的End-User License Agreement (EULA)用于新版本。旧的Docker映像(atlassianlabs/localstack)仍然可用,但不会再维护