AWS利用料のレポートツール「Cost Reporter」

まいど、大阪の市田です。 AWSの料金確認といえば「Cost Explorer」が便利です。APIも提供されていて「AWS CLI」でも利用することが可能ですが、今回は簡単にCSVやJSON形式として出力できる「Cost Reporter」というツールをご紹介する小ネタでございます。 GitHub – FittedCloud/costreporter: Cost analysis from using … 続きを読む

IoTで電力を可視化しよう——「AWS IoT用電力計キット」

CTセンサーは4個付属し、主幹、各ブレーカーの10秒ごとの電力(watt)や時間ごとの電力使用量(kwh)、時間ごとの電気代(円)のリアルタイム表示ができ、AWS IoTのDynamoDBからデータをCSVで出力して詳細の分析を行うことも可能だ。 同キットを活用することで、ローコストで深夜の不要な電力や無駄な空調などを … 続きを読む

オージス総研、Apache Sparkを活用した不正アクセス監視業務効率化サービス

クラウドにはAWSを用いており、ログをAmazon S3上に保管し、分析テンプレートとこのApache Sparkを用いてCSV/PDFで分析結果を表示する枠組みで提供され、カスタムにも対応する。 標的型攻撃メールや内部の不正行為による情報流出や情報改ざんなどセキュリティや内部統制に関連する被害は増加傾向にあるが、同社 … 続きを読む

Glacier Selectを使ってみた

Amazon Glacier Select によってクエリを実行したアーカイブオブジェクトは、非圧縮のカンマ区切り値 (CSV) としてフォーマットされる必要があります。 You must have an S3 bucket to work with. In addition, the AWS account that you use to initiate an Amazon Glacier select job must have write permissions for the S3 … 続きを読む

AWSの料金表を自動作成したい

AWS の料金一覧画面から Google スプレッドシートに値をコピペするのに疲れたので、なんとか EC2 の料金表を自動生成できないかと思いました。試行錯誤の結果、ようやくデータ構造までは把握できました。

AWS Price List Service API

AWS Price List Service API (AWS Price List Service)で AWS の料金データを取得できます。今回は取っ掛かりとして AWS CLI を使うので、Pricing サブコマンドでやることになります。

この API は、使えるエンドポイントが以下に限られます。

このため、.aws/config は以下のようにしています。

$ cat .aws/config
[default]
output = json
region = us-east-1

Pricing で使えるサブコマンドは、以下の3種類です。

サブコマンド名 機能
describe-services サービスとその属性名の一覧
get-attribute-values サービス毎の属性値の一覧
get-products 価格の一覧

describe-services

describe-services を何も指定せずに呼び出すと、サービスとその属性名の一覧がずらずらと表示されます。なお便宜上、(JSONではなく)テキスト形式で出力しています。

$ aws pricing describe-services --output=text | head -5
SERVICES        AWSBudgets
ATTRIBUTENAMES  productFamily
ATTRIBUTENAMES  servicecode
ATTRIBUTENAMES  groupDescription
ATTRIBUTENAMES  termType

いろんなサービスがありますね。。

$ aws pricing describe-services --output=text | grep ^SERVICES | wc -l
92
$ aws pricing describe-services --output=text | grep ^SERVICES | head -5
SERVICES        AWSBudgets
SERVICES        AWSCloudTrail
SERVICES        AWSCodeCommit
SERVICES        AWSCodeDeploy
SERVICES        AWSCodePipeline

今回目的とするサービス(EC2)の正式なサービス名を調べます。

$ aws pricing describe-services --output=text | grep -i ec2
SERVICES        AmazonEC2

これ以降は、コマンドを発行する際にサービスコードを明示することで、なるべくデータ量を減らすようにします。

AmazonEC2 サービスで使えそうな属性名の候補を調べます。

$ aws pricing describe-services --output=text --service-code AmazonEC2 | wc -l
62
$ aws pricing describe-services --output=text --service-code AmazonEC2 | 
  grep -Ei '(type|cpu|ecu|memory)'
ATTRIBUTENAMES  volumeType
ATTRIBUTENAMES  locationType
ATTRIBUTENAMES  ecu
ATTRIBUTENAMES  gpuMemory
ATTRIBUTENAMES  elasticGpuType
ATTRIBUTENAMES  memory
ATTRIBUTENAMES  vcpu
ATTRIBUTENAMES  termType
ATTRIBUTENAMES  instanceType
ATTRIBUTENAMES  usagetype

AmazonEC2 に限っても、ATTRIBUTENAME(属性名)だけで 62 個もある…。

get-attribute-values

次に “instanceType” という属性名に着目して、その属性値の候補を取得します。

$ aws pricing get-attribute-values --output=text --service-code AmazonEC2 
  --attribute-name instanceType | wc -l
122
$ aws pricing get-attribute-values --output=text --service-code AmazonEC2 
    --attribute-name instanceType | grep -E 't[12]'
ATTRIBUTEVALUES t1.micro
ATTRIBUTEVALUES t2.2xlarge
ATTRIBUTEVALUES t2.large
ATTRIBUTEVALUES t2.medium
ATTRIBUTEVALUES t2.micro
ATTRIBUTEVALUES t2.nano
ATTRIBUTEVALUES t2.small
ATTRIBUTEVALUES t2.xlarge

インスタンスタイプだけで 122 個…。この調子ですべての組み合わせを表示しようとすると、表のサイズが爆発するのは明白です。API サーバにも無意味に負荷をかけそうなので、最初はとりあえず t1.micro の Linux インスタンス(かつ東京リージョンのみ)に絞ってやってみています。

get-products

このサブコマンドで価格の値が取れるのですが、そのままでは使い勝手がよくありません。

$ aws pricing get-products --service-code AmazonEC2  
  --filters Type=TERM_MATCH,Field=instanceType,Value=t1.micro 
            Type=TERM_MATCH,Field=operatingSystem,Value=Linux 
            'Type=TERM_MATCH,Field=location,Value=Asia Pacific (Tokyo)' 
  > t1-micro-linux-tokyo.txt
$ cat t1-micro-linux-tokyo.txt
{
    "PriceList": [
        "{"product":{"productFamily":"Compute Instance","attributes":{"memory(以下、死ぬほど長い文字列)...

jq というコマンドを通すといい感じに整形してくれるらしいのですが、どうもうまくパースしてくれません。いろいろと試してみたところ、配列の中身全体が “” で囲まれているのが問題のようです。ということで、この引用符を外してやると、うまく見えるようになりました。ついでにバックスラッシュも外します。

$ cat t1-micro-linux-tokyo.txt | 
  sed -e 's/\//g' -e 's/"{/{/g' -e 's/}"/}/g' | 
  jq
{
  "PriceList": [
    {
      "product": {
        "productFamily": "Compute Instance",
        "attributes": {
          "memory": "0.613 GiB",
          "vcpu": "1",
          "instanceType": "t1.micro",
          "tenancy": "Shared",
          "usagetype": "APN1-BoxUsage:t1.micro",
          "locationType": "AWS Region",
          "storage": "EBS only",
          "normalizationSizeFactor": "0.5",
          "instanceFamily": "Micro instances",
          "operatingSystem": "Linux",
          "servicecode": "AmazonEC2",
          "physicalProcessor": "Variable",
          "licenseModel": "No License required",
          "ecu": "Variable",
          "currentGeneration": "No",
          "preInstalledSw": "NA",
          "networkPerformance": "Very Low",
          "location": "Asia Pacific (Tokyo)",
          "servicename": "Amazon Elastic Compute Cloud",
          "processorArchitecture": "32-bit or 64-bit",
          "operation": "RunInstances"
        },
        "sku": "ERVWZ4V3UBYH4NQH"
      },
      "serviceCode": "AmazonEC2",
      "terms": {
        "OnDemand": {
          "ERVWZ4V3UBYH4NQH.JRTCKXETXF": {
            "priceDimensions": {
              "ERVWZ4V3UBYH4NQH.JRTCKXETXF.6YS6EN2CT7": {
                "unit": "Hrs",
                "endRange": "Inf",
                "description": "$0.026 per On Demand Linux t1.micro Instance Hour",
                "appliesTo": [],
                "rateCode": "ERVWZ4V3UBYH4NQH.JRTCKXETXF.6YS6EN2CT7",
                "beginRange": "0",
                "pricePerUnit": {
                  "USD": "0.0260000000"
                }
              }
            },
            "sku": "ERVWZ4V3UBYH4NQH",
            "effectiveDate": "2017-12-01T00:00:00Z",
            "offerTermCode": "JRTCKXETXF",
            "termAttributes": {}
          }
        },
        "Reserved": {
          "ERVWZ4V3UBYH4NQH.NQ3QZPMQV9": {
            "priceDimensions": {
              "ERVWZ4V3UBYH4NQH.NQ3QZPMQV9.2TG2D8R56U": {
                "unit": "Quantity",
                "description": "Upfront Fee",
                "appliesTo": [],
                "rateCode": "ERVWZ4V3UBYH4NQH.NQ3QZPMQV9.2TG2D8R56U",
                "pricePerUnit": {
                  "USD": "316"
                }
              },
              "ERVWZ4V3UBYH4NQH.NQ3QZPMQV9.6YS6EN2CT7": {
                "unit": "Hrs",
                "endRange": "Inf",
                "description": "USD 0.0 per Linux/UNIX (Amazon VPC), t1.micro reserved instance applied",
                "appliesTo": [],
                "rateCode": "ERVWZ4V3UBYH4NQH.NQ3QZPMQV9.6YS6EN2CT7",
                "beginRange": "0",
                "pricePerUnit": {
                  "USD": "0.0000000000"
                }
              }
            },
            "sku": "ERVWZ4V3UBYH4NQH",
            "effectiveDate": "2015-04-30T23:59:59Z",
            "offerTermCode": "NQ3QZPMQV9",
            "termAttributes": {
              "LeaseContractLength": "3yr",
              "OfferingClass": "standard",
              "PurchaseOption": "All Upfront"
            }
          },
          "ERVWZ4V3UBYH4NQH.6QCMYABX3D": {
            "priceDimensions": {
              "ERVWZ4V3UBYH4NQH.6QCMYABX3D.2TG2D8R56U": {
                "unit": "Quantity",
                "description": "Upfront Fee",
                "appliesTo": [],
                "rateCode": "ERVWZ4V3UBYH4NQH.6QCMYABX3D.2TG2D8R56U",
                "pricePerUnit": {
                  "USD": "138"
                }
              },
              "ERVWZ4V3UBYH4NQH.6QCMYABX3D.6YS6EN2CT7": {
                "unit": "Hrs",
                "endRange": "Inf",
                "description": "USD 0.0 per Linux/UNIX (Amazon VPC), t1.micro reserved instance applied",
                "appliesTo": [],
                "rateCode": "ERVWZ4V3UBYH4NQH.6QCMYABX3D.6YS6EN2CT7",
                "beginRange": "0",
                "pricePerUnit": {
                  "USD": "0.0000000000"
                }
              }
            },
            "sku": "ERVWZ4V3UBYH4NQH",
            "effectiveDate": "2015-04-30T23:59:59Z",
            "offerTermCode": "6QCMYABX3D",
            "termAttributes": {
              "LeaseContractLength": "1yr",
              "OfferingClass": "standard",
              "PurchaseOption": "All Upfront"
            }
          },
          "ERVWZ4V3UBYH4NQH.38NPMPTW36": {
            "priceDimensions": {
              "ERVWZ4V3UBYH4NQH.38NPMPTW36.2TG2D8R56U": {
                "unit": "Quantity",
                "description": "Upfront Fee",
                "appliesTo": [],
                "rateCode": "ERVWZ4V3UBYH4NQH.38NPMPTW36.2TG2D8R56U",
                "pricePerUnit": {
                  "USD": "100"
                }
              },
              "ERVWZ4V3UBYH4NQH.38NPMPTW36.6YS6EN2CT7": {
                "unit": "Hrs",
                "endRange": "Inf",
                "description": "Linux/UNIX (Amazon VPC), t1.micro reserved instance applied",
                "appliesTo": [],
                "rateCode": "ERVWZ4V3UBYH4NQH.38NPMPTW36.6YS6EN2CT7",
                "beginRange": "0",
                "pricePerUnit": {
                  "USD": "0.0090000000"
                }
              }
            },
            "sku": "ERVWZ4V3UBYH4NQH",
            "effectiveDate": "2016-10-31T23:59:59Z",
            "offerTermCode": "38NPMPTW36",
            "termAttributes": {
              "LeaseContractLength": "3yr",
              "OfferingClass": "standard",
              "PurchaseOption": "Partial Upfront"
            }
          },
          "ERVWZ4V3UBYH4NQH.HU7G6KETJZ": {
            "priceDimensions": {
              "ERVWZ4V3UBYH4NQH.HU7G6KETJZ.2TG2D8R56U": {
                "unit": "Quantity",
                "description": "Upfront Fee",
                "appliesTo": [],
                "rateCode": "ERVWZ4V3UBYH4NQH.HU7G6KETJZ.2TG2D8R56U",
                "pricePerUnit": {
                  "USD": "62"
                }
              },
              "ERVWZ4V3UBYH4NQH.HU7G6KETJZ.6YS6EN2CT7": {
                "unit": "Hrs",
                "endRange": "Inf",
                "description": "Linux/UNIX (Amazon VPC), t1.micro reserved instance applied",
                "appliesTo": [],
                "rateCode": "ERVWZ4V3UBYH4NQH.HU7G6KETJZ.6YS6EN2CT7",
                "beginRange": "0",
                "pricePerUnit": {
                  "USD": "0.0090000000"
                }
              }
            },
            "sku": "ERVWZ4V3UBYH4NQH",
            "effectiveDate": "2015-04-30T23:59:59Z",
            "offerTermCode": "HU7G6KETJZ",
            "termAttributes": {
              "LeaseContractLength": "1yr",
              "OfferingClass": "standard",
              "PurchaseOption": "Partial Upfront"
            }
          },
          "ERVWZ4V3UBYH4NQH.4NA7Y494T4": {
            "priceDimensions": {
              "ERVWZ4V3UBYH4NQH.4NA7Y494T4.6YS6EN2CT7": {
                "unit": "Hrs",
                "endRange": "Inf",
                "description": "Linux/UNIX (Amazon VPC), t1.micro reserved instance applied",
                "appliesTo": [],
                "rateCode": "ERVWZ4V3UBYH4NQH.4NA7Y494T4.6YS6EN2CT7",
                "beginRange": "0",
                "pricePerUnit": {
                  "USD": "0.0180000000"
                }
              }
            },
            "sku": "ERVWZ4V3UBYH4NQH",
            "effectiveDate": "2016-08-31T23:59:59Z",
            "offerTermCode": "4NA7Y494T4",
            "termAttributes": {
              "LeaseContractLength": "1yr",
              "OfferingClass": "standard",
              "PurchaseOption": "No Upfront"
            }
          }
        }
      },
      "version": "20180131042456",
      "publicationDate": "2018-01-31T04:24:56Z"
    }
  ],
  "FormatVersion": "aws_v1"
}

返されるデータの構造がわかったので、後は必要な項目だけを抜き出して CSV で出力してやれば、Google スプレッドシートにインポートで取り込めそうです。ということで、今日はここまでです。


っと、ここまで書いてから投稿しようとしたら、AWS Price List API の使用 とかいうよさげなページがあるのに気づいたのでこれから読みます。。。

(参照)

続きを読む

aws-sdk-phpで5GB以上のファイルをS3にアップロードする方法

何の話?

S3に5GB以上のファイルを、aws-sdk-phpのS3のputObjectを使ってアップロードしようとしたら、以下のエラーが出た。

1ファイルあたりのアップロードできる上限サイズは、5368709120byte(5.36870912GB)なのに、
5506553726byte(5.506553726GB)アップロードしようとしてると怒られている。

Error executing "PutObject" on "https://xxxx.s3.ap-northeast-1.amazonaws.com/path/filename"; 
AWS HTTP error: Client error: `PUT https://xxxx.s3.ap-northeast-1.amazonaws.com/path/filename` resulted in a `400 Bad Request` 
<?xml version='1.0' encoding='utf-8'?>
<error>
    <code>
        EntityTooLarge
    </code>
    <message>
        Your proposed upload exceeds the maxim (truncated...)
    EntityTooLarge (client): Your proposed upload exceeds the maximum allowed size -
        <?xml version='1.0' encoding='utf-8'?>
    </message>
</error>
<error>
    <code>
        EntityTooLarge
    </code>
    <message>
        Your proposed upload exceeds the maximum allowed size
    </message>
    <proposedsize>
        5506553726
    </proposedsize>
    <maxsizeallowed>
        5368709120
    </maxsizeallowed>
    <requestid>
        DCB569101CF240C0
    </requestid>
    <hostid>
        xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
    </hostid>
</error>

AWSのよくある質問を見ると

Q: どれほどの量のデータを保存できますか?

格納可能なデータの総量とオブジェクトの数には制限はありません。個別の Amazon S3 オブジェクトのサイズは、最低 0 バイトから最大 5 テラバイトまでさまざまです。1つの PUT にアップロード可能なオブジェクトの最大サイズは 5 GB です。100 MB 以上のオブジェクトの場合は、Multipart Upload 機能を使うことをお考えください。

https://aws.amazon.com/jp/s3/faqs/

総量とオブジェクトの数には制限はないが、1つの PUT にアップロード可能なオブジェクトの最大サイズは 5 GBらしい。
100 MB 以上のオブジェクトの場合は、Multipart Upload 機能を使うことをお考えください、とある。

MultipartUploaderとは

以下のサイトにMultipartUploaderを使って、5GB以上のファイルでもアップロードする方法が書いてある。
最大5TBのファイルまでアップロードできるらしい。
Amazon S3 オブジェクトのサイズの上限までってことか。

With a single PutObject operation, you can upload objects up to 5 GB in size. However, by using the multipart uploads (e.g., CreateMultipartUpload, UploadPart, CompleteMultipartUpload, AbortMultipartUpload), you can upload object up to 5 TB in size.

Amazon S3 Multipart Uploads

MultipartUploaderを使ってみる

composer

aws-sdk-phpがインストールされていることが前提。
composer以外の方法でインストールしてもOK。

composer.json
{
    "autoload": {
        "psr-4": {
        }
    },
    "require": {
        "aws/aws-sdk-php": "3.*"
    }
}

PHPのソースを作成

以下のソースで、5GB以上のファイルもアップロードできた。

<?php

require(dirname(__FILE__) . '/vendor/autoload.php');

use Aws\S3\S3Client;
use Aws\S3\MultipartUploader;
use Aws\Exception\MultipartUploadException;

$s3Client = S3Client::factory([
    'version' => '2006-03-01',
    'key' => 'xxxxxxxx',
    'secret' => 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx',
    'region' => 'ap-northeast-1'
]);


$bucketname = 'sample-bucket';
$from_path = './bigdata.csv';
$to_path = 'dirname/bigdata.csv';

$uploader = new MultipartUploader($s3Client, $from_path, [
    'bucket' => $bucketname,
    'key'    => $to_path,
]);

try {
    $result = $uploader->upload();
    print_r($result);
    echo $result['ObjectURL'];
} catch (MultipartUploadException $e) {
    echo $e->getMessage();
}

以上

続きを読む

Amazon Connect でコールセンターを作成する。

はじめに

気がついたらAmazon Connectで日本の番号が取得できるようになってたので、試しに使ってみることにしました。

Amazon Connectとは?

クラウドベースのコンタクトセンター。日本で言うコールセンターです。AWSの管理コンソール上から数ステップで自信の顧客に合わせたコンタクトセンターをセットアップすることができます。

料金は?無料利用枠は?

サービス利用と直接ダイヤルイン(DID)、アウトバンドコールに対して料金が発生します。
無料利用枠として1ヶ月あたり90分のサービス利用と1ヶ月あたり30分のインバウンドDIDとアウトバンドコール利用できます。
ただ、AWSサービスの利用料金などは日々変更されるため、利用前に確認することをおすすめます。
Amazon Connect 料金について

Amazon Connect のセットアップ

まずはコールセンターを作るための土台作りです。

Amazon Connect のサービス画面へ行き、「今すぐ始める」から初期セットアップを行います。
スクリーンショット 2018-01-20 10.01.45.png

Amazon Connect のリソース設定

ステップ1:ID 管理

まずはユーザー管理についての設定です。Amazon Connect で利用するアクセスURLを設定します。
スクリーンショット 2018-01-20 10.02.46.png

ステップ2:管理者

管理者の情報を入力します。
スクリーンショット 2018-01-20 10.03.32.png

ステップ3:テレフォニーオプション

通話の着信、発信についての設定を行います。今回はデフォルトです。
スクリーンショット 2018-01-20 10.03.44.png

ステップ4:データストレージ

通話記録などのレポート保存先の設定を行います。
スクリーンショット 2018-01-20 10.03.56.png

ステップ5:レビューと作成

設定内容の確認をし、問題なければ「インスタンスの作成」をクリックします。
スクリーンショット 2018-01-20 10.04.08.png

スクリーンショット 2018-01-20 10.04.16.png

完了

以上で Amazon Connect のセットアップが完了しました。
「今すぐ始める」ボタンをクリックすると Amazon Connect の画面に移ります。
スクリーンショット 2018-01-20 10.05.31.png

注意点として、Amazon Connect を利用するにはブラウザはChromeかFirefoxにしないとダメみたいです。
スクリーンショット 2018-01-20 10.05.48.png
Safariでアクセスしようとしたら警告が出て起動できませんでした。。。

1. 電話番号を取得する

通話の受信と発信のためには、電話番号を取得する必要があります。

概要画面から「管理者としてログイン」をクリックします。

スクリーンショット 2018-01-20 11.27.21.png

ダッシュボードから「1.電話番号を取得する」にある「開始」ボタンをクリックします。
スクリーンショット 2018-01-20 11.28.17.png

「国/地域」で日本を選択して「電話番号」で番号を選択肢たら「次へ」をクリックします。
ちなみに電話番号の指定はできませんがいくつか候補が出てくるのでその中から好きなのを選択できました。
スクリーンショット 2018-01-21 12.10.25.png

「Continue」をクリックして電話番号の取得は完了です。
スクリーンショット 2018-01-21 12.10.44.png

2. オペレーション時間の設定

オペレーション時間の設定では、キューの利用可能時間帯を定義します。
いわゆる受付時間の設定です。
「新しい時間の追加」で新規にオペレーション時間を設定します。
スクリーンショット 2018-01-21 12.15.06.png

今回は日本でのサポート設定を行うので名前はjapan-supportとしています。
タイムゾーンを「Asia/Tokyo」にし、時間を「09:00 AM – 05:00 PM」に設定して「新規追加」をクリックします。
screencapture-kooooohei-awsapps-connect-operating-hours-manage-1517224465908.png

3. キューの作成

キューの作成では、問い合わせを最適なエージェントにルーティングします。基本的には2で設定したオペレーション時間と1で取得した電話番号の紐付けです。

名前と説明を入力し、2で設定したオペレーション時間と1で取得した電話番号を選択して「新しいキューの追加」をクリックします。
screencapture-kooooohei-awsapps-connect-queues-create-1517227855838.png

4. プロンプトの作成

プロンプトの作成では、問い合わせフローでオーディオを再生する場合に使用できるメディアを登録できます。

登録するには「+プロンプトの新規作成」をクリックします。
スクリーンショット 2018-01-30 0.50.38.png

すると登録画面に移るため、あらかじめ録音しておいた .wav ファイルをアップロードします。それか、レコードのタブをクリックするとマイクを使ってその場で録音することができます。

screencapture-kooooohei-awsapps-connect-prompts-create-1517241066926.png

5. 問い合わせフローの作成

問い合わせフローの作成が行えます。既存フローがいくつか用意されてありますが、顧客に合わせたサポートフローを作成することも可能です。また、CRMやデータベースなどの他システムと結合をしたり、Amazon Lexと結合することも可能です。

スクリーンショット 2018-01-30 1.09.47.png

カスタマイズフローは以下のようにアクションとなるオブジェクトをつなぎ合わせることで作成できます。
ここでは取得した電話番号に電話がかかって来たら自分の携帯電話へ転送する仕組みとなっています。

スクリーンショット 2018-01-30 1.10.36.png

6. ルーティングプロファイルの作成

ルーティングプロファイルは、エージェントの問い合わせへの対応元となるキューのコレクションです。 ルーティングプロファイルにより、エージェントは適切な優先度で複数のキューに対応できます。
つまり、グルーピングされたキューの中で優先順位をつけて処理する設定です。

新たに作成する場合は「新しいプロファイルを追加」をクリックします。
スクリーンショット 2018-01-30 9.56.03.png

名前、説明を入力したら、キューを追加して「新しいプロファイルを追加」をクリックします。
screencapture-kooooohei-awsapps-connect-routing-profiles-create-1517273807485.png

7. ユーザーの設定

ユーザー管理により、ユーザーの追加、管理、および削除が可能になります。 ルーティングプロファイルやアクセス権限などユーザー固有の設定は、ユーザーの作成後に割り当てることができます。

初めは初期設定時に作成されたAdminのみが存在します。新たに追加する場合は「新しいユーザーの追加」をクリックします。
スクリーンショット 2018-01-30 9.57.40.png

「作成:新しいユーザーをセットアップする。」を洗濯して「次へ」をクリックします。
「アップロード:ユーザーをテンプレートから(CSV)」でCSVにテンプレとして保存しておけばそこから作成もできるみたいです。
スクリーンショット 2018-01-30 9.58.05.png

ユーザー情報を入力して「保存」します。
screencapture-kooooohei-awsapps-connect-users-1517274167160.png

内容に問題なければ「ユーザーの作成」をクリックして完了です。
スクリーンショット 2018-01-30 10.02.57.png

さらにユーザーを追加したい場合は「他のユーザーの作成」を、完了する場合は「戻る」をクリックすればOKです。
スクリーンショット 2018-01-30 10.03.15.png

おわりに

今回、AmazonConnectを触ってみて「こんなに簡単にコールセンター作れるの!?」と驚きました。本当に数ステップで設定できます。
ここでは詳細な設定方法の記載はしてませんが問い合わせフローでの画像は電話転送設定です。
リージョンが海外だからか、試した感想としては転送までに数秒のタイムラグがありました。それでもとても数秒なのでフロントで受ける電話番号が固定できるという意味ではとても便利だと思います。

続きを読む

クラウドに乗せないほうがいいシステム、その見極め方

AWSやMicrosoft Azureなどのクラウドベンダーは、金融機関のシステム管理の指針であるFISC(金融情報システムセンター)の「金融機関等コンピュータシステムの安全対策基準・解説書」や、医薬品や医療機器向けの指針「コンピュータ化システム適正管理ガイドライン(CSV)」への対応リファレンスなどを用意し始めている … 続きを読む

AWS S3勉強まとめ

ブロックストレージ
EBS, インスタンスストア
→EC2にマウントして活用
→Block番号で管理

オブジェクトストレージ
S3, Glacier
→安価かつ高い耐久性を持つオンラインストレージ
→オブジェクト、それに付随するメタデータ、そのオブジェクトにアクセスするためのユニークなIDで構成

ファイルストレージ
EFS
→EC2から同時マウントできる共有ストレージサービス
→ファイルシステム

・S3特徴
→容量無制限、安価なストレージ(1GB3円)、データ容量に依存しない性能(RAIDやサーバー台数を考える必要なし)

・S3用途
①コンテンツ配信、保管サーバ
②ログ&データハブストレージ
③バックアップやDR

バケット
オブジェクトの保存場所。デフォルト100個/1アカウントまで作成可能。名前はグローバルでユニークな必要あり。
オブジェクト
データ本体。URLが付与される
キー
オブジェクトの格納URL
メタデータ
オブジェクトに付随する属性情報。システム定義メタデータ、ユーザ定義メタデータあり
リージョン
バケットを配置するAWSのロケーション
アクセスコントロールリスト(ACL)
バケットやオブジェクトのアクセス管理

・ストレージクラス
スタンダード
標準低頻度アクセスストレージ:スタンダードに比べて安価だが、データの読出し容量に対して課金
Glacier:最も低コスト。データの取り出しにコストと時間
低冗長化ストレージ:Glacierから取り出したデータの置き場所として利用

結果整合性(Eventual Consistency Readモデル)
「更新はそのうち全体に反映される」
読み取り一貫性
– あるトランザクションがデータを変更中のとき、ほかのトランザクションからは変更される前のデータを参照します。
– ほかのトランザクションからは変更前の確定されたデータを参照します。
– あるユーザーAが値をUPDATEしたとき、ユーザーBがそのデータを参照すると、戻ってくる値はUPDATE前の値となります。
– あるトランザクションで変更した確定前のデータをほかのトランザクションから参照することはできません。

・パソコンのファイルシステムやデータベースと同じようにロックやトランザクション処理は行われない
参考URL:https://dev.classmethod.jp/cloud/amazon-s3-eventually-consistent-and-consistent-read/

・アクセス管理
①ユーザポリシー
→IAMuserに対して権限設定
②バケットポリシー
→バケットごとに権限設定。クロスアカウントで使用する際など
③ACL
→バケット、オブジェクトごとに指定可能(オブジェクトACLが優先)

署名付きURL
AWS SDKで作成。S3のプライベートなオブジェクトに対して一定時間アクセスを許可

・Webサイトホスティング機能
静的なWebサイトをS3のみでホスティング可能
– バケット単位で指定
– 独自ドメインの設定→ドメイン名をバケット名として指定
– リダイレクト機能→任意のドメインにリダイレクト設定が可能
CloudFrontとの経由で配信することを推奨。バケットポリシーでHTTP/HTTPSリクエストのみを許可可能

VPCエンドポイント
プライベートサブネットからNATゲートウェイなどを経由せずに直接S3とセキュアに通信可能
同一リージョンのみ

S3 support for IPv6
追加費用なし
静的ウェブホスティングは使用不可

・暗号化
– サーバーサイド暗号化(サーバリソースを利用して格納データの暗号化)
– クライアントサイド暗号化(クライアント側で暗号化したデータをS3にアップロード)

クロスリージョンレプリケーション
異なるリージョン間のS3バケットオブジェクトのレプリケーションを実施
→オブジェクトに対する動作を非同期でレプリケーション
→対象元バケットはバージョニングの機能を有効にする必要あり
※リージョン間データ転送費用が発生

バージョン管理機能
誤操作による削除対策に有効
バケットに対して設定
任意のオブジェクトを参照可能
バージョニングのオブジェクト分も課金。保存期間も指定可能

ライプサイクル管理
バケット内のオブジェクトに対して、ストレージクラスの変更や、削除処理の自動化
データ登録→Standard保存(一定期間過ぎたら削除)→Standard-IA移動(一定期間過ぎたら削除)→Glacierにアーカイブ(一定期間過ぎたら削除)

・アーカイブ
S3上のデータを削除でGlacier側のデータも削除
S3には8KBのオブジェクト名とメタデータのみ保管

・復元
オブジェクトごと
一時的にS3の低冗長化ストレージに指定日数複製(Glacierと低冗長化ストレージ両方課金)
復元にかかる時間の選択肢は3つ
①Expedited:緊急のアクセス
②Standard:3-5時間。標準的
③Bulk:大量のデータ。5-12時間
それぞれによってコストが異なる

・オブジェクト移動
Standard⇔Standard-IA→Glacier
→Glacier

S3分析
Standard-IAとGlacierどちらにいつ移動すればいいだろうかという疑問に答える可視化ツール
→ライフサイクルポリシーの設定値の参考になる

S3インベントリ
S3のオブジェクトのリストを一気にcsvファイルで取得
スケジュールかも可能

・イベント通知
SNS:メール送信
SQS:キューメッセージの登録
Lambda:ファンクションの実行

・CloudWatchによる監視
ストレージメトリクス:バケット単位。1日単位でのレポート。追加費用なし
リクエストメトリクス:オブジェクト単位。通常のCloudWatch料金

CloudTrailによるAPI(操作ログ。Get, Delete, Putなど)管理
S3への操作ログを収集
監査対象とは別のS3バケットの用意推奨

Logging
バケットに対するアクセスログの出力設定可能

Tag管理
バケット/オブジェクトに対してタグの指定可能

・パフォーマンスの最適化
大きなサイズのファイルをアップロード、ダウンロード
RANGE GETを活用。マルチパートアップロード機能
大量のGETリクエストが発生する場合はCloudFrontを併用することを推奨

Transfer Acceleration(高速ファイル転送サービス)
AWSのエッジネットワークから最適化されたAWSのネットワークを経由する。
S3のデータ転送コストとは別に加算
※通常の転送より高速でない場合は、課金されない

コンテンツ配信サーバ
データをS3に配置、CloudFrontでキャッシュさせる
CloudFrontで静的コンテンツ配信。CloudFrontの料金はかからない
Webサーバーで動的コンテンツは処理

ログ&データハブストレージ
オンプレ:Direct Connectでログデータ収集
外部データソース;Kinesisで収集
AWS;S3に保管。Glacierにアーカイブ
分析:Redshift, EMR, Atenaなど

バックアップ、DR
クロスリージョンでデータの複製を保持
リージョン内でもDR設定

参考URL:https://www.slideshare.net/AmazonWebServicesJapan/aws-black-belt-online-seminar-2017-amazon-s3

続きを読む