41690


[マルチポスト](https://teratail.com/questions/113303)

UnityからAmazon S3にファイルをアップロードし、公開状態にする  
<https://qiita.com/arumani/items/a0fd345dd224fb5d05db>

を参考に同じことをしようとしていますが，S3の処理で失敗します。

[code]

    using System.IO;
    using System.Collections;
    using System.Collections.Generic;
    using UnityEngine;
    using Amazon;
    using Amazon.S3;
    using Amazon.S3.Model;
    using Amazon.CognitoIdentity;
    
    public class TestS3 : MonoBehaviour {
    
        // 以下AWSのテンプレ
        void Start () {
            UnityInitializer.AttachToGameObject(this.gameObject);
            AWSConfigs.HttpClient = AWSConfigs.HttpClientOption.UnityWebRequest;
            CognitoAWSCredentials credentials = new CognitoAWSCredentials (
                "ID プールの ID", // ID プールの ID
                RegionEndpoint.APNortheast1 // リージョン
            );
    
            // S3の設定とアップ
            AmazonS3Client S3Client = new AmazonS3Client (credentials, RegionEndpoint.GetBySystemName(RegionEndpoint.APNortheast1.SystemName));     
            string S3BucketName = "バケット名";
            string fileName = "アップしたいファイル名";
    
            var stream = new FileStream(Application.streamingAssetsPath +
                Path.DirectorySeparatorChar + fileName,
                FileMode.Open, FileAccess.Read, FileShare.Read);
    
            Debug.Log(Application.streamingAssetsPath +
                Path.DirectorySeparatorChar + fileName);
            var request = new PostObjectRequest()
            {
                Bucket = S3BucketName,
                Key = fileName,
                InputStream = stream,
                CannedACL = S3CannedACL.PublicRead // 公開状態
            };
    
            S3Client.PostObjectAsync(request, (responseObj) =>
                {
                    if (responseObj.Exception == null)
                    {
                        Debug.Log("success");
                    }
                    else
                    {
                        Debug.Log("fail");// ←これになる
                    }
                });     
        }   
    }
    
[/code]

どうすればうまくいくでしょうか？

特にわからなかったとこがIAMの設定で，  
・ロールポリシーの作成 をクリック  
・Policy Generator の枠内にある 選択 をクリック  
とうがどこを押せばいいのかわかりませんでしたので以下のように設定しました。

[code]

    {
        "Version": "2012-10-17",
        "Statement": [
            {
                "Sid": "VisualEditor0",
                "Effect": "Allow",
                "Action": [
                    "mobileanalytics:PutEvents",
                    "cognito-sync:*"
                ],
                "Resource": "*"
            },
            {
                "Sid": "VisualEditor1",
                "Effect": "Allow",
                "Action": "s3:*",
                "Resource": "*"
            }
        ]
    }
    
[/code]


CC BY-SA 3.0
2018-02-13T08:32:34.800
41687
2018-02-13T11:58:12.163
2018-02-13T08:40:29.327
8100
8100
question
unity3d aws unity2d
UnityからAmazon S3にファイルをアップロードし、公開状態にする


<https://github.com/aws/aws-sdk-net/issues/332>  
に書かれているようにRegionを明記すれば成功した。具体的には以下

[code]

    var request = new PostObjectRequest()
    {
        Bucket = S3BucketName,
        Key = fileName,
        InputStream = stream,
        CannedACL = S3CannedACL.PublicRead, // 公開状態
        Region = RegionEndpoint.APNortheast1 // ←これを追加！！！！      
    };
    
[/code]


CC BY-SA 3.0
2018-02-13T11:58:12.163
41690
2018-02-13T11:58:12.163
8100
41687
answer