[JAWS-UG CLI] Cognito #2 S3コンテンツの作成


前提条件
========


Cognito (Identity)への権限
-------------------

* Cognito (Identity)に対してフル権限があること。


AWS CLIのバージョン
-------------------

* 以下のバージョンで動作確認済

  * AWS CLI 1.8.3

```bash:コマンド:
aws --version
```

```text:結果(例):
      aws-cli/1.8.3 Python/2.7.5 Darwin/13.4.0
```

0 準備
======


0.1. 識別子プールIDの指定
-------------------------

```bash:変数の設定:
COGNITO_IDPOOL_ID=<IDプールの識別子>
```

識別子プール名の存在するリージョンも指定します。

```bash:変数の設定:
AWS_REGION='ap-northeast-1'
```


0.2. S3バケット名の指定
-----------------------

```bash:変数の設定:
S3_BUCKET_NAME=<S3バケット名>
```


0.3. ファイル名の指定
---------------------

```bash:変数の設定:
FILE_CONTENTS='post.html'
```


1. コンテンツの作成
===================

```bash:変数の確認:
cat << ETX

        COGNITO_IDPOOL_ID: ${COGNITO_IDPOOL_ID}
        AWS_REGION:        ${AWS_REGION}
        S3_BUCKET_NAME:    ${S3_BUCKET_NAME}
        FILE_CONTENTS:     ${FILE_CONTENTS}

ETX
```

```bash:コマンド:
cat << EOF > ${FILE_CONTENTS}
      <!DOCTYPE html>
      <meta charset="UTF-8">
      <script src="https://sdk.amazonaws.com/js/aws-sdk-2.2.0.min.js"></script>
      <title>お問い合わせフォーム</title>
      <script>
        var func = function(id) { return document.getElementById(id); };
        AWS.config.region = "${AWS_REGION}";
        AWS.config.credentials = new AWS.CognitoIdentityCredentials({IdentityPoolId: "${COGNITO_IDPOOL_ID}"});
        AWS.config.credentials.get(function(err) {
            if (!err) {
                console.log("Cognito Identify Id: " + AWS.config.credentials.identityId);
            }
        });

        function uploadFile() {
          AWS.config.region = '${AWS_REGION}';
          var s3BucketName = "${S3_BUCKET_NAME}";
          var now = new Date();
          var obj = {"title": func("title").value, "mail": func("mail").value ,"contents": func("contents").value, "date": now.toLocaleString()};
          var s3 = new AWS.S3({params: {Bucket: s3BucketName}});
          var blob = new Blob([JSON.stringify(obj, null, 2)], {type:'text/plain'});
          s3.putObject({Key: "uploads/" +now.getTime()+".txt", ContentType: "text/plain", Body: blob, ACL: "public-read"},
          function(err, data){
            if(data !== null){
              alert("お問い合わせ完了致しました");
            }
            else{
              alert("Upload Failed" + err.message);
            }
          });
        }
      </script>

      <div>
        <div>
          <form>
            <table>
              <tr>
                <th>件名</th>
                <td><input id="title" type="text" name="title" maxlength="40" value="" /></td>
              </tr>
              <tr>
                <th>メールアドレス</th>
                <td><input id="mail" type="email" name="mail" size="20" maxlength="50" /></td>
              </tr>
              <tr>
                <th>お問い合わせ内容</th>
                <td><textarea id="contents" cols="70" rows="6" name="contents"></textarea></td>
              </tr>
            </table>
            <div>
              <input onClick="uploadFile();" type="button" value="送信" id="button" />
            </div>
          </form>
        </div>
      </div>
EOF

cat ${FILE_CONTENTS}
```

2. コンテンツの転送
===================

```bash:コマンド:
aws s3 cp ${FILE_CONTENTS} "s3://${S3_BUCKET_NAME}/"
```

```text:結果(例)
      upload: ./post.html to s3://example-handson-20150928/post.html
```


完了
====