标签: aws-sdk

使用 AWS S3 CopyObject 命令时一直找不到密钥

尝试使用 copyObject 命令 (AWS S3) 时出现以下错误。我使用的是 AWS PHP SDK,代码如下:

$this->client->copyObject(array(
    'Bucket'     => 'lms-courses',
    'Key'        => 'ideasfile.zip',
    'CopySource' => "lms-courses/lalala.zip",
));
Run Code Online (Sandbox Code Playgroud)

在“ https://s3-us-west-2.amazonaws.com/lms-courses/ideasfile.zip ”上执行“CopyObject”时出错;AWS HTTP 错误:客户端错误:PUT https://s3-us-west-2.amazonaws.com/lms-courses/ideasfile.zip导致404 Not Found响应: NoSuchKey指定的密钥不存在。lalala.zipE698888(截断...) NoSuchKey(客户端):指定的密钥不存在。- NoSuchKey指定的密钥不存在。lalala.zipE698888912B810F7DfHtqN5Hls4hGdTGY/pVv36XZPzoM4mJ5fAdhJjEjDufNUArvKCrqN27SjiG06u5hnC8G8yPdzA=

一段时间以来,我一直在为这个错误而苦苦挣扎。存储桶lms-courses存在, 也存在ideasfile.zip。我什至手动将该文件添加到存储桶中,只是为了以这种方式对其进行测试 - 以防它没有正确上传或其他原因。

我不明白为什么它说密钥不存在,当它显然存在时 - 我正在查看它。

php amazon-s3 amazon-web-services aws-php-sdk aws-sdk

0
推荐指数
1
解决办法
2114
查看次数

如何获取 EC2 实例的 VPC Id?

我需要使用 C# AWS SDK 识别当前 EC2 实例的 VpcId。我已经尝试这样做了几个小时,但没有真正的运气。

我目前的做法是这样的,

var currentInstanceId = Amazon.EC2.Util.EC2Metadata.InstanceId; // Get Current Instance Id

AWSCredentials creds = new BasicAWSCredentials(accessKey, secretKey);
var ec2Client = AWSClientFactory.CreateAmazonEC2Client(creds, clientRegionEndpoint);
var instances = ec2Client.DescribeInstances();

foreach (var reservation in instances.Reservations)
{
  foreach (var instance in reservation.Instances)
  {
    if (instance.InstanceId.Equals(currentInstanceId)) // Compare Instance Id with all available instances 
      return instance.VpcId;
  }
}
Run Code Online (Sandbox Code Playgroud)

我觉得应该有一种更简单的方法来做到这一点。对此的任何帮助将不胜感激。


更新:

在@jbird 的帮助下,我能够使用以下方法实现这一目标,

Amazon.EC2.Util.EC2Metadata.NetworkInterfaces.First().VpcId
Run Code Online (Sandbox Code Playgroud)

c# amazon-ec2 amazon-web-services aws-sdk

0
推荐指数
1
解决办法
1443
查看次数

使用资源 URL 删除 AWS S3 资源 - Java SDK

有没有办法通过 URL 使用 java sdk 从 AWS S3 中删除资源?

我知道您可以使用存储桶名称和 keyName 删除资源,如下所示:

s3client.deleteObject(new DeleteObjectRequest(bucketName, keyName));
Run Code Online (Sandbox Code Playgroud)

问题是我只能访问资源 URL,因此我需要操作字符串来提取存储桶名称和键名。

但如果有一种方法可以通过传递 url 来删除,那就干净多了。

java amazon-s3 amazon-web-services aws-sdk

0
推荐指数
1
解决办法
2492
查看次数

如何在代码中更改 AWS SDK 区域?

有必要定义

<add key="AWSRegion" value="us-east-1"/>
Run Code Online (Sandbox Code Playgroud)

App.config 中的应用程序设置以指定要使用的区域。

我需要以编程方式改变它

var creds = new BasicAWSCredentials(key, token);
using (var routes = AWSClientFactory.CreateAmazonRoute53Client(creds)){}
Run Code Online (Sandbox Code Playgroud)

如何在代码中指定区域?

.net c# aws-sdk asp.net-core

0
推荐指数
1
解决办法
809
查看次数

从 lambda 访问 s3 存储桶时出错 - InvalidBucketName

使用 Java AWS SDK,我创建了一个 lambda 函数来从 s3 存储桶读取 csv 文件。我已将存储桶公开,并且可以从任何浏览器轻松访问它和文件。为了测试它,我使用 lambda 控制台上的测试按钮。我只是使用 hello world 测试配置输入模板。
它失败了:

错误消息:指定的存储桶无效。(服务:Amazon S3;状态代码:400;错误代码:InvalidBucketName;请求 ID:XXXXXXXXXXXXXXX)

Lambda 函数和 s3 存储桶位于同一区域 (us-east-1)。

我已将 AmazonS3FullAccess 添加到 lambda_basic_execution 角色。

AmazonS3 s3Client = AmazonS3ClientBuilder.standard().build();
Run Code Online (Sandbox Code Playgroud)

也尝试过

AmazonS3 s3Client = AmazonS3ClientBuilder.defaultClient();
Run Code Online (Sandbox Code Playgroud)

然后打电话

S3Object s3object = s3Client.getObject(new GetObjectRequest(
                bucketName, keyName));
Run Code Online (Sandbox Code Playgroud)

存储桶名称是:

https://s3.amazonaws.com/<allAlphaLowerCaseBucketName>
Run Code Online (Sandbox Code Playgroud)

键名是:

<allAlphaLowerCaseKeyName>.csv
Run Code Online (Sandbox Code Playgroud)

任何帮助表示赞赏。

amazon-s3 aws-sdk aws-lambda

0
推荐指数
1
解决办法
6640
查看次数

使用Lambda函数和S3触发器未能写入DynamoDB

我正在尝试编写一个lambda函数,该函数会在将新映像写入S3存储桶时触发。触发器已经使用正确的S3存储桶进行了设置,因此我知道这不是问题。

lambda函数本身具有s3:GetObject和dynamodb。*角色(对于DynamoDB写操作应具有完全访问权限)。

这里的目标是简单地写一个我已经创建的名为'art'的表,并插入一个我试图从中获取的主键值(imageTitle)var imageName。然后,我想为该键分配一个属性,即存储在中的该图像的url var url

这只是我要尝试的简单练习,因此我可以继续进行更复杂的数据库写入。但是到目前为止,art即使我向S3存储桶中添加了触发触发器的新对象,也没有将任何内容写入表中。lambda函数是否可能未部署?我直接在Lambda Console的内联编辑器中编写了它并保存了它。

这是代码:

const AWS = require('aws-sdk');
const docClient = new AWS.DynamoDB.DocumentClient({region: 'us-east-1'});
const s3 = new AWS.S3();

exports.handler = async (event, context, callback) => {
    //var sourceBucket = event.Records[0].s3.bucket.name;
    var sourceKey = event.Records[0].s3.object.key;
    var imageName = sourceKey.stringify;

    //generate imageURL
    var url = "https://s3.amazonaws.com/myapp-20181030214040-deployment/public/" + imageName;

    var params = {
        TableName : 'art',
        Item: {
            imageTitle: imageName,
            imageURL: url
        }
    };
    docClient.put(params, function(err, data) {
       if (err) console.log(err);
       else …
Run Code Online (Sandbox Code Playgroud)

amazon-web-services amazon-dynamodb aws-sdk aws-lambda

0
推荐指数
1
解决办法
380
查看次数

EC2 Java StartInstancesRequest 从“待处理”变为“正在停止”,再变为“已停止”

我有以下情况:

  • 专用租赁m4.large运行 RHEL6
  • 使用 AWS 控制台手动启动它效果很好
  • 尝试启动它的 Lambda 函数(用 Java 编写)失败,因为实例状态为:已停止 -> 待处理 -> 正在停止 -> 已停止

我有一个 Lambda 函数,用于记录 VPC 上的所有 EC2 状态更改,如下所示:

'use strict';
exports.handler = (event, context, callback) => {
  console.log('LogEC2InstanceStateChange');
  console.log('Received event:', JSON.stringify(event, null, 2));
  callback(null, 'Finished');
}
Run Code Online (Sandbox Code Playgroud)

还有另一个 Lambda 函数,尝试根据计划启动 EC2 实例,用 Java 编写,代码量很大,但其核心是这样的:

public void handleRequest(Object input, Context context) {
  final List<String> instancesToStart = getInstancesToStart(); //implementation not shown
  try {
    StartInstancesRequest startRequest = new StartInstancesRequest().withInstanceIds((String[]) instancesToStart.toArray());
    context.logger.log("StartInstancesRequest: " + startRequest.toString());
    StartInstancesResult res …
Run Code Online (Sandbox Code Playgroud)

java amazon-web-services aws-sdk

0
推荐指数
1
解决办法
812
查看次数

DynamoDB:查询总是返回空值

我是 DynamoDB 的新手,我只是创建了一个表,在其中插入了一些虚拟行来测试读/写功能。

在此处输入图片说明

这是我的数据。

我创建了一个 Lambda 来访问这些数据,通过 Partition Key ok Sort Key 但我每次都以空返回结束:'(

这是我的 lambda 代码:

    const dynamodb = new AWS.DynamoDB.DocumentClient({apiVersion: '2012-08-10', region: 'eu-west-1'});

exports.handler = async (event,context,callback) => {
    var params = {
        TableName : "DontMissAPlaceTable",
        KeyConditionExpression: "Partition_Key = :id",
        ExpressionAttributeValues: {
            ":id": {"S" :  "media_001"}
        }
    };
    dynamodb.query(params, function(err, data) {
        if (err) {
            console.log(err, err.stack);
            callback(null, {
                statusCode: '500',
                body: err
            });
        } else {
            console.log(data)
            callback(null, {
                statusCode: '200',
                body: data
            });
        }
    })

};
Run Code Online (Sandbox Code Playgroud)

我一开始以为是无法访问该表,但似乎我拥有正确的权限。 …

amazon-web-services amazon-dynamodb aws-sdk aws-lambda

0
推荐指数
1
解决办法
2067
查看次数

使用 AWSCredentials 构建 AmazonS3Client 实例的首选方式

AmazonS3Client已被弃用,取而代之的是AmazonS3ClientBuilder。AmazonS3Client 构造函数接受 AWSCredentials 实例,客户端可以通过该实例传递 AWS 访问和密钥。

AWSCredentials credentialsProvider = ... ;
AmazonS3Client amazonS3Client = new AmazonS3Client(credentialsProvider.getCredentials());
Run Code Online (Sandbox Code Playgroud)

使用 AmazonS3ClientBuilder 时,使用必要的 AWS 凭证实例化 AmazonS3 客户端的首选方法是什么?

java amazon-s3 amazon-web-services aws-sdk

0
推荐指数
1
解决办法
1530
查看次数

使用 React 将文件上传到 AWS S3 时使用进度处理程序

我最近才接触AWS SDK,因此如果我的方法完全是胡说八道,请原谅。

我想将一个简单的媒体文件上传到我的 S3。我正在遵循本教程,到目前为止我可以毫无问题地上传文件。对于用户性来说,进度条将是一个很好的额外功能,因此我正在研究如何实现这一点。我很快发现当前的 AWS SDK v3不再支持httpUploadProgress但我们应该使用@aws-sdk/lib-storage。使用这个库,我仍然可以将文件上传到 S3,但我无法让进度跟踪器工作!我认为这与我没有完全理解如何async在 React 组件中进行处理有关。

这是我的缩小组件示例(我在这里使用 Chakra UI)

const TestAWS: React.FC = () => {
  const inputRef = useRef<HTMLInputElement | null>(null);
  const [progr, setProgr] = useState<number>();

  const region = "eu-west-1";
  const bucketname = "upload-test";

  const handleClick = async () => {
    inputRef.current?.click();
  };

  const handleChange = (e: any) => {

    console.log('Start file upload');

    const file = e.target.files[0];
    const target = { …
Run Code Online (Sandbox Code Playgroud)

amazon-s3 reactjs aws-sdk

0
推荐指数
1
解决办法
7182
查看次数

使用AWS Swift SDK将图像上传到S3

我正在尝试使用 AWS Swift SDK 中的 putObject 方法将图像上传到 S3 存储桶。我已按照此处的说明进行操作:https://docs.aws.amazon.com/sdk-for-swift/latest/developer-guide/examples-s3-objects.html

我可以将字符串添加到 s3 存储桶,但不知道如何添加图像。我尝试将图像转换为 jpegdata 和 pngdata,但无济于事。

这是我的代码:

//      AWS S3 image upload
        func uploadFile(withImage image: UIImage) {
            let s3Client = try? S3Client(region: "us-west-2")

            let bucketName = "xxxxx"
            let imageData = image.pngData()
            guard let dataToUpload = "Text to upload working".data(using: .utf8) else {
                return
            }
            let body = ByteStream.from(data: imageData!)
            s3Client!.putObject(input: PutObjectInput(body: body, bucket: bucketName, contentType: "image/png", key: "Test")) { result in
                switch(result) {
                case .success(let response):
                    if let eTag = …
Run Code Online (Sandbox Code Playgroud)

amazon-s3 amazon-web-services ios swift aws-sdk

0
推荐指数
1
解决办法
1991
查看次数

如何检查 Node.JS AWS Lambda 数据?

我对 Lambda 和 Node.JS 都很陌生。我本来想用 Python 编写这个函数,但老板说他喜欢用 Node 编写。我正在编写一个 AWS Lambda 函数来在一天结束时关闭指定的 EC2 实例。我无法检查describeInstances 是否正在获取正确的数据。

现在代码显示返回String(instances);,但我尝试了许多不同的操作,例如return instances.response.data;在尝试对数据或其他内容进行字符串化时出现错误。

var AWS = require('aws-sdk');
var ec2 = new AWS.EC2();
AWS.config.update({region: 'us-west-2'});

exports.handler = async (event) => {

 var params = {
  Filters: [
     {
    Name: "tag:Parking", 
    Values: [
       "true"
    ]
   }
  ]
 };

var instances = ec2.describeInstances(params, function(err, data) {
   if (err) console.log(err, err.stack); // an error occurred
   else return data; // successful response
 });

 //return Object.getOwnPropertyNames(instances);
 //return instances.response.httpResponse; …
Run Code Online (Sandbox Code Playgroud)

javascript amazon-web-services node.js aws-sdk aws-lambda

-1
推荐指数
1
解决办法
390
查看次数