要在CloudFormation中使用Node.js Lambda函数上传文件到DeviceFarm URL,可以按照以下步骤操作:
Resources:
MyLambdaFunction:
Type: AWS::Lambda::Function
Properties:
Code:
ZipFile: |
const AWS = require('aws-sdk');
const devicefarm = new AWS.DeviceFarm();
exports.handler = async (event) => {
// 上传文件到DeviceFarm URL的代码逻辑
}
Handler: index.handler
Runtime: nodejs12.x
MyLambdaFunction:
Type: AWS::Lambda::Function
Properties:
...
Role: !GetAtt MyLambdaFunctionRole.Arn
MyLambdaFunctionRole:
Type: AWS::IAM::Role
Properties:
AssumeRolePolicyDocument:
Version: '2012-10-17'
Statement:
- Effect: Allow
Principal:
Service: lambda.amazonaws.com
Action: sts:AssumeRole
Policies:
- PolicyName: DeviceFarmAccess
PolicyDocument:
Version: '2012-10-17'
Statement:
- Effect: Allow
Action: devicefarm:*
Resource: '*'
部署CloudFormation模板:使用AWS CLI或AWS管理控制台等工具,将CloudFormation模板部署到AWS账号中。
编写上传文件到DeviceFarm URL的代码逻辑:在Lambda函数的代码逻辑中,使用AWS SDK的DeviceFarm模块来上传文件到DeviceFarm URL。以下是一个简单的代码示例:
const AWS = require('aws-sdk');
const devicefarm = new AWS.DeviceFarm();
exports.handler = async (event) => {
const uploadParams = {
name: 'MyFile',
type: 'FILE',
projectArn: 'arn:aws:devicefarm:us-west-2:123456789012:project:PROJECT_ID',
contentType: 'application/octet-stream',
content: Buffer.from('Hello, DeviceFarm!'),
};
const uploadResponse = await devicefarm.createUpload(uploadParams).promise();
const uploadUrl = uploadResponse.upload.url;
// 使用uploadUrl上传文件的逻辑
return 'File uploaded successfully!';
};
在上述代码中,我们使用createUpload方法创建一个上传,并获取上传URL。然后,可以使用这个URL来上传文件。
注意:在实际使用时,需要替换projectArn为有效的DeviceFarm项目ARN,并根据实际需求修改上传文件的逻辑。
以上是一个简单的解决方法,供参考。根据实际需求和设定,请酌情调整和修改代码。