我正在研究 AWS CloudFormation,我创建了一个模板,我要求用户在其中选择环境。
根据选定的价值,我创建了资源。用户必须在 DEV、QA、PROD、UAT 等之间进行选择,但是当我将此值添加到 S3 存储桶名称 (-downloads.com) 后,这是不允许的,因为 S3 存储桶名称中不允许使用大写字母。
因此,我确实在 JSON 中进行了更改,其中我将fn::Transform与"Condition":"Lower" 一起使用, 但随后在创建以下资源时发生错误。
未找到名为 871247504605::String 的转换。用户请求回滚。
下面是我的 CloudFormation JSON
{
"AWSTemplateFormatVersion": "2010-09-09",
"Description": "Provides nesting for required stacks to deploy a full resource of ****",
"Metadata": {
"AWS::CloudFormation::Interface": {
"ParameterGroups": [
{
"Label": {
"default": "Enviroment Selection"
},
"Parameters": [
"selectedEnv"
]
}
],
"ParameterLabels": {
"selectedEnv": {
"default": "Please select Enviroment"
}
}
}
},
"Parameters": {
"selectedEnv": {
"Type": "String",
"Default": …
Run Code Online (Sandbox Code Playgroud) json amazon-s3 amazon-web-services aws-cloudformation aws-cloudformation-custom-resource
我正在 AppSync GraphQL 查询的帮助下处理 DynamoDB。
我有一个 DynamoDB 表,其中用户名是分区键(哈希键),时间戳值是排序键(范围键)。
我针对一个项目保存两件事,即一件事是阅读,第二件事是活动(如锻炼、运动等)。为了添加这两件事,我们有不同的 UI 屏幕。这两件事可能具有相同的时间戳,因此它将保存在一项中。
所以现在我需要一个可用于上述操作的 upsert(插入或更新)查询,因为当您尝试插入新的读数时,它将检查该项目是否存在。如果存在,那么它将更新,或者不更新,那么它将插入该项目,并且当用户想要添加新活动时,必须发生同样的事情。
我对文档感到困惑,并且没有找到用于执行 upsert 操作的确切 AppSync 请求映射解析器。
下面是 PutItem 请求映射解析器:-
{
"version": "2017-02-28",
"operation": "PutItem",
"key": {
"username": $util.dynamodb.toDynamoDBJson($ctx.identity.username),
"timestamp": $util.dynamodb.toDynamoDBJson($ctx.args.input.timestamp),
},
"attributeValues": $util.dynamodb.toMapValuesJson($ctx.args.input),
"condition": {
"expression": "attribute_not_exists(#timestamp)",
"expressionNames": {
"#timestamp": "timestamp",
},
},
}
Run Code Online (Sandbox Code Playgroud)
下面是 UpdateItem 请求映射解析器:-
{
"version": "2017-02-28",
"operation": "UpdateItem",
"key": {
"username": $util.dynamodb.toDynamoDBJson($ctx.identity.username),
"timestamp": $util.dynamodb.toDynamoDBJson($ctx.args.input.timestamp),
},
## Set up some space to keep track of things we're updating **
#set( $expNames …
Run Code Online (Sandbox Code Playgroud) amazon-web-services amazon-dynamodb graphql aws-appsync velocity-template-language
我想通过 AWS Lambda 使用 pysftp 库连接 EC2。我使用以下代码进行连接。
mysftp = pysftp.Connection(
host=Constants.MY_HOST_NAME,
username=Constants.MY_EC2_INSTANCE_USERNAME,
private_key="./clientiot.pem",
cnopts=cnopts,
)
Run Code Online (Sandbox Code Playgroud)
我已经将 .pem 文件和部署包放在 AWS Lambda 中。看这张图片:
有时它有时不起作用,就像有时它说找不到 .pem 文件一样。
"[Errno 2] No such file or directory: './clientiot.pem'"
Run Code Online (Sandbox Code Playgroud)
如何处理?有什么方法可以安全地访问 .pem 文件或 .pem 文件的数据。
我不想在 AWS lambda 中使用 .pem。
我想使用pysftp库(Python 脚本)将文件上传到 EC2 实例。所以我创建了小的 Python 脚本,它使用下面的行来连接
pysftp.Connection(
host=Constants.MY_HOST_NAME,
username=Constants.MY_EC2_INSTANCE_USERNAME,
private_key="./mypemfilelocation.pem",
)
some code here .....
pysftp.put(file_to_be_upload, ec2_remote_file_path)
Run Code Online (Sandbox Code Playgroud)
此脚本将使用 .pem 文件将文件从我的本地 Windows 机器上传到 EC2 实例,并且它可以正常工作。
现在我想使用具有 API 网关功能的AWS lambda来执行此操作。
所以我已将 Python 脚本上传到 AWS lambda。现在我不确定如何在 AWS lambda 中使用 pysftp 库,所以我找到了在 AWS lambda 层中添加 pysftp 库层的解决方案。我做到了
pip3 安装 pysftp -t ./library_folder
我制作了上述文件夹的 zip 并添加到 AWS lambda 层中。
但是我仍然有很多错误,比如一个一个:-
没有名为“pysftp”的模块
没有名为“paramiko”的模块
未定义符号:PyInt_FromLong
无法从部分初始化的模块 'bcrypt' 导入名称 '_bcrypt'(很可能是由于循环导入)
找不到 cffi 模块
我只是淡出上述错误我没有找到合适的解决方案。如何在我的 AWS lambda 中无缝使用 pysftp 库?
python amazon-web-services pysftp aws-lambda aws-lambda-layers
aws-lambda ×2
pysftp ×2
python ×2
amazon-s3 ×1
aws-appsync ×1
aws-cloudformation-custom-resource ×1
graphql ×1
json ×1
ssh ×1