2017-04-08 30 views
1

私はラムダ関数をC#で書いていますが、S3バケットにオブジェクトをアップロードしようとして失敗しています。テスト目的のために、私はバイト配列に入力文字列を変換し、オブジェクトの内容として使用しています。私のハンドラ関数は以下のように定義されています:AWS Lambda C#S3にオブジェクトをアップロード

public void FunctionHandler(string input, ILambdaContext context) 
{ 
    IAmazonS3 client = new AmazonS3Client(Amazon.RegionEndpoint.USEast1); 

    byte[] bytes = new byte[input.Length * sizeof(char)]; 
    Buffer.BlockCopy(input.ToCharArray(), 0, bytes, 0, bytes.Length); 

    using (MemoryStream ms = new MemoryStream()) 
    { 
     foreach (Byte b in bytes) 
     { 
      ms.WriteByte(b); 
     } 

     PutObjectRequest request = new PutObjectRequest() 
     { 
      BucketName = "BUCKET_NAME", 
      Key = "OBJECT_KEY", 
      InputStream = ms 
     }; 

     client.PutObjectAsync(request); 
    } 
} 

この関数はエラーなく実行されますが、オブジェクトはS3に書き込まれません。私はそれがPutObjectAsyncメソッドと関係があるかもしれないと感じますが、私は肯定的ではありません。 IAmazonS3インターフェースはPutObjectメソッドが含まれていますが、私は次のエラーが表示され、そのメソッドを使用しようとしたとき:

'IAmazonS3' does not contain a definition for 'PutObject'

C#のラムダ関数内でS3バケットにオブジェクトをアップロードするための最良の方法は何ですか?

答えて

2

これは私がS3オブジェクトをS3にC#ラムダ関数(そしてそれは動作する)から入れるのに使うヘルパー関数です。これをあなたの出発点として使用することができます。

あなたがバイトにあなたの文字列を変換すると、C#で/ラムダは、あなたがPutObjectAsyncメソッドを使用する必要がある理由わからない、ではないのputObject方法:あなたが適用されるべきである

public static async Task<bool> PutS3Object(string bucket, string key, string content) 
     { 
      try 
      { 
       using (var client = new AmazonS3Client(Amazon.RegionEndpoint.USEast1)) 
       { 
        var request = new PutObjectRequest 
        { 
         BucketName = bucket, 
         Key = key, 
         ContentBody = content 
        }; 
        var response = await client.PutObjectAsync(request); 
       } 
       return true; 
      } 
      catch (Exception ex) 
      { 
       Console.WriteLine("Exception in PutS3Object:" + ex.Message); 
       return false; 
      } 
     } 
1

は非同期

を待ちます

await client.PutObjectAsync(request);

関連する問題