Lou*_*han 4 amazon-s3 aws-cloudformation boto3 aws-lambda
我的团队想要在 cloudformation 模板中创建一个 S3 存储桶,而不为其分配存储桶名称(让 cloudformation 自行命名)。
从我的 lambda 函数将文件放入 S3 存储桶时,有没有办法让我获取 S3 存储桶的名称,而无需手动查看 AWS 控制台并检查创建的名称?
使用无服务器应用程序模型 (SAM),您可以在函数属性中包含环境变量
AWSTemplateFormatVersion: '2010-09-09'
Description: "Demo"
Transform: 'AWS::Serverless-2016-10-31'
Resources:
MyLambdaFunction:
Type: 'AWS::Serverless::Function'
Properties:
Runtime: nodejs10.x
Handler: index.handler
CodeUri: ./src
Policies:
- Version: '2012-10-17'
Statement:
- Action:
- s3:PutObject
Effect: 'Allow'
Resource: !Sub ${MyS3Bucket.Arn}/*
Environment:
Variables:
BUCKET_NAME: !Ref MyS3Bucket
MyS3Bucket:
Type: 'AWS::S3::Bucket'
Run Code Online (Sandbox Code Playgroud)
然后您的函数可以使用process.env.BUCKET_NAMEnode.js访问环境变量。在python 中,我认为你会使用os.environ['BUCKET_NAME']
const aws = require('aws-sdk');
const s3 = new aws.S3();
exports.handler = async (event) => {
const params = {
Body: 'The Body',
Bucket: process.env.BUCKET_NAME,
Key: 'abc123',
}
return s3.putObject(params).promise();
}
Run Code Online (Sandbox Code Playgroud)
我认为这适用于任何不使用 SAM 转换的 CloudFormation 模板。
您可以用来Fn::GetAtt从新创建的 S3 存储桶中获取值。您可以在这里查看。
S3 引用和获取属性文档
问题是如何将值传递给 lambda 函数。这是可能有效的步骤。
UserData,或者Metadata如果您已经在使用 cloud-init ,则使用 。希望这有帮助。
| 归档时间: |
|
| 查看次数: |
6850 次 |
| 最近记录: |