serverless-s3-local 写入真正的 S3 存储桶
serverless-s3-local writing to real S3 bucket
我在开发过程中使用带有 serverless-s3-local 插件的无服务器框架来测试我的代码。然而,尽管处于离线模式,但正在写入真正的 S3 存储桶。我如何更改我的配置以在离线模式下使用本地伪造的 s3 存储桶?
相关 serverless.yml 部分:
plugins:
- serverless-stack-output
- serverless-plugin-include-dependencies
- serverless-layers
- serverless-deployment-bucket
- serverless-s3-local
- serverless-offline
custom:
#...
s3:
bucketName: test-s3-buck
host: localhost
serverless-offline:
ignoreJWTSignature: true
httpPort: 4000
noAuth: true
directory: /tmp
resources:
Resources:
#...
Bucket:
Type: AWS::S3::Bucket
Properties:
BucketName: ${self:custom.s3.bucketName}
端点调用 S3:
import boto3
def post(event, context):
s3_path = "/test.txt"
body = "test"
encoded_string = body.encode("utf-8")
s3 = boto3.resource("s3")
bucket_name = "test-s3-buck"
s3.Bucket(bucket_name).put_object(Key=s3_path, Body=encoded_string)
response = {
"statusCode": 200,
"body": "Created."
}
return response
启动无服务器脱机:
serverless offline start
在 serverless-s3-local 中的自述文件中,我们有:
const S3 = new AWS.S3({
s3ForcePathStyle: true,
accessKeyId: 'S3RVER', // This specific key is required when working offline
secretAccessKey: 'S3RVER',
endpoint: new AWS.Endpoint('http://localhost:4569'),
});
你可以实现the same withboto
:
import boto3
client = boto3.client(
's3',
aws_access_key_id='S3RVER',
aws_secret_access_key='S3RVER'
)
这意味着,当您 运行 您的 serverless offline start
时,您需要将 aws 访问密钥 ID 设置为 S3RVER
并将 aws 秘密访问密钥设置为 S3RVER
,否则,将使用真正的桶。
同样在自述文件中,有设置 s3local
aws 配置文件的说明,https://github.com/ar90n/serverless-s3-local#triggering-aws-events-offline
实现它的另一种方法是 运行 你的带有环境变量的命令:
AWS_ACCESS_KEY_ID=S3RVER AWS_SECRET_ACCESS_KEY=S3RVER serverless offline start
这样,代码中的 aws-sdk 将读取离线模式的正确值
我在开发过程中使用带有 serverless-s3-local 插件的无服务器框架来测试我的代码。然而,尽管处于离线模式,但正在写入真正的 S3 存储桶。我如何更改我的配置以在离线模式下使用本地伪造的 s3 存储桶?
相关 serverless.yml 部分:
plugins:
- serverless-stack-output
- serverless-plugin-include-dependencies
- serverless-layers
- serverless-deployment-bucket
- serverless-s3-local
- serverless-offline
custom:
#...
s3:
bucketName: test-s3-buck
host: localhost
serverless-offline:
ignoreJWTSignature: true
httpPort: 4000
noAuth: true
directory: /tmp
resources:
Resources:
#...
Bucket:
Type: AWS::S3::Bucket
Properties:
BucketName: ${self:custom.s3.bucketName}
端点调用 S3:
import boto3
def post(event, context):
s3_path = "/test.txt"
body = "test"
encoded_string = body.encode("utf-8")
s3 = boto3.resource("s3")
bucket_name = "test-s3-buck"
s3.Bucket(bucket_name).put_object(Key=s3_path, Body=encoded_string)
response = {
"statusCode": 200,
"body": "Created."
}
return response
启动无服务器脱机:
serverless offline start
在 serverless-s3-local 中的自述文件中,我们有:
const S3 = new AWS.S3({
s3ForcePathStyle: true,
accessKeyId: 'S3RVER', // This specific key is required when working offline
secretAccessKey: 'S3RVER',
endpoint: new AWS.Endpoint('http://localhost:4569'),
});
你可以实现the same withboto
:
import boto3
client = boto3.client(
's3',
aws_access_key_id='S3RVER',
aws_secret_access_key='S3RVER'
)
这意味着,当您 运行 您的 serverless offline start
时,您需要将 aws 访问密钥 ID 设置为 S3RVER
并将 aws 秘密访问密钥设置为 S3RVER
,否则,将使用真正的桶。
同样在自述文件中,有设置 s3local
aws 配置文件的说明,https://github.com/ar90n/serverless-s3-local#triggering-aws-events-offline
实现它的另一种方法是 运行 你的带有环境变量的命令:
AWS_ACCESS_KEY_ID=S3RVER AWS_SECRET_ACCESS_KEY=S3RVER serverless offline start
这样,代码中的 aws-sdk 将读取离线模式的正确值