Quantcast
Channel: 技術 –サーバーワークスエンジニアブログ
Viewing all 1210 articles
Browse latest View live

【YouTube配信】「30分でわかる AWS UPDATE!」の配信を開始!

$
0
0

こんにちは、技術1課の加藤です。

すでに何度かブログ記事を書いていますが、この度「30分でわかる AWS UPDATE!」と題し、 AWS のアップデート情報を解説する放送を開始しました!

今日は改めて「なぜ」「誰が」この放送を始めたのか、という話をしていきます。

30分でわかる AWS UPDATE! とは

1週間で発表されたAWS UPDATEの中から、サーバーワークスのエンジニアが気になったトピックをピックアップ、30分間でわかりやすく解説する、という放送です。

YouTubeライブを使い、毎週配信してます。

初回配信はこちら
【YouTube配信】「30分でわかる AWS UPDATE!」第1回を配信!

なんでこの放送始めたの?

実はこのAWS UPDATE!は、今期から立ち上がった教育事業を担当する部署のメンバー3人が中心となって行っています。みなさまに AWS の知識をお伝えするのがお仕事の3人です。

初心者の方から中級・上級者の方まで、ありとあらゆる方にスキルアップをしていただきたいと心から思っているチームです。

考えました。みなさまがどんな課題を持っているか。
悩みました。どうすれば課題を解決できるのか。
そうして始まったのが、この「AWS UPDATE!」です。

ぼくたちはみなさまが、AWS の強みである「アップデートスピード」に、実はちょこっと困らされているのでは、と考えました。

アップデートのスピードが早くてキャッチアップが大変!
アップデートだけ見ても、どう使うのか? どう嬉しいのか? なかなかイメージできない!

こんな悩み、一度は持ったことがあるんじゃないでしょうか。

では、我々 AWS のプロがあえて、重要!と思ったアップデートのみをピックアップし、それをわかりやすく噛み砕いてご説明すれば、この悩みを解消できるんじゃないか。

これが、我々が AWS UPDATE!を始めた理由です。

放送を通し、みなさまの AWS 活用のスピードと幅をぐんと広げていきたい。
そんな思いで、放送を行っています。

どんな人が喋ってるの?

先述の通り教育事業を行っている3人なわけですが、軽くご紹介をさせていただきます。
ぼくの方からゆるーいご説明もしますね!

加藤 和也

ぼくです。
最近YouTube配信を始めて、声を褒めていただくことが増えました。どうやら低音イケボらしいです。やったね。

放送内では基本、司会をやっています。癖の強い2人に話を振りながら30分間乗り切るのはなかなか大変なのです。たまにコメントで褒めてあげてください。

山中大志

我らが教育事業を行う技術1課の長。インフラ屋の弊社に開発やりたいと言って入ってきた強者です。

基本的にはしっかりしていて人当たりもいいイケメンさんって感じなのですが、ちょこちょこ謎の言動をぶっ込みます。放送でもたまにやります。

ぜひコメントで突っ込んであげてください。

小倉大

高身長で(ちょっと心配になるくらい)細身の彼ですが、北海道から東京に移り住み、最近も日本中を飛び回るタフガイです。(※ 本人曰く流石に移動多すぎて辛いらしい)

放送では優しく落ち着いた口調でアップデートを紹介してくれます。

個人的に小倉さんの笑い声が好きなので、ちょくちょく頑張って笑わせようとしてます。素敵な笑い声を聞きにきてください。

もっと放送が見てみたい!

過去の放送はこちらのプレイリストからご覧いただけます。
30分でわかる AWS UPDATE! | プレイリスト

また毎週の配信日程については公式 Twitter にてご連絡しておりますので、ぜひこちらをご確認ください。
サーバーワークス (@serverworks) · Twitter

チャンネル登録もよろしくお願いします!

週中だし、お昼。
見たいけど見落としちゃいそう…というそこのあなた!

こちらから、ぜひチャンネル登録をどうぞ!
サーバーワークスチャンネル


AWS利用料を使いすぎた話

$
0
0

こんにちは。CSM課の設樂です。
最近、お金の管理を徹底しようと銀行口座やクレジットカードをまとめて簡単に把握できるようにしました。
おかげでお財布がすっきりして、気持ちが良いです。

今回はそんな私がAWSの利用料を爆発的に増加させてしまったお話です。

1. 経緯

技術検証をするため、EC2およびEBSを利用していました。
検証環境は数日に渡って利用するため、EC2は利用時間帯のみ起動して使っていました。
また、Amazon EBS Fast Snapshot Restore(FSR)を利用してスナップショットを取得していました。
※Fast Snapshot Restore : スナップショットを各AZごとに有効化して、パフォーマンス向上が見込める素晴らしいサービス

Amazon EBS Fast Snapshot Restore
https://aws.amazon.com/jp/blogs/news/new-amazon-ebs-fast-snapshot-restore-fsr/

2. EBSスナップショットの利用料金

Amazon EBS スナップショット

EBS スナップショット 1 か月に格納されたデータ 1 GB あたり 0.05USD

Amazon EBS Fast Snapshot Restore

Fast Snapshot Restore 有効化された各 AZ で 1 DSU 時間あたり0.90USD

※DSU : データサービス単位時間の略で時間あたりのサービス利用時間(最低で 1 時間から毎秒ごとに発生)を示す

Amazon EBS の価格
https://aws.amazon.com/jp/ebs/pricing/

3. 利用料金の発生

数日の間、検証環境を使用していたところ、アラートを受け取りました。
予想外の料金に驚愕です。

Amazon EBS Fast Snapshot Restore 利用料

1個のFSRスナップショットあたり、7,128円 / 日
2個のFSRスナップショットを作成していたので、14,256円 / 日 でした。
10個、20個のFSRスナップショットを取っていたらと思うとゾッとします。。。
※1USD : 110円 換算

Amazon EBS Fast Snapshot Restore 計算式

0.90USD * 3 Availability Zone * 24 H

有効化された各 AZ で 1 DSU 時間あたり0.90USD ap-northeast-1a 24 時間
ap-northeast-1c
ap-northeast-1d

さいごに

EBS スナップショットだろうと、利用料金を甘く見ていました。
Amazon EBS スナップショットは容量に対しての課金であり、Amazon EBS Fast Snapshot Restoreは時間に対しての課金です。
機能の使い方によっては大幅に利用料金体系が異なる場合があります。
使用する前には必ず利用料金を計算してからでないと今回のようにヒヤリとするのでご利用は計画的に!

私も気を付けます。。。

AWS Service Catalogで制御された自由を

$
0
0

AWSの数多くあるサービスの中の1つとして、AWS Service Catalogというものがあります。
これは何に使えるのでしょうか?
モデルケースを考え、設定・利用方法を確認しました。

AWS Service Catalogとは

AWS Service Catalog では、AWS での使用が承認された IT サービスのカタログを作成および管理できます。この IT サービスには、仮想マシンイメージ、サーバー、ソフトウェア、データベースから包括的な多層アプリケーションアーキテクチャまで、あらゆるものが含まれます。AWS Service Catalog では、一般的にデプロイされた IT サービスを集中管理でき、一貫性のあるガバナンスを実現し、コンプライアンス要件を満たすと同時に、ユーザーは必要な承認済みの IT サービスのみをすばやくデプロイできます。

AWS Service Catalog

1.モデルケース

1-1.AWS Service Catalog導入前

開発チームのうさぎさん、ねこさん、くまさんはEC2インスタンスを欲しがっています。
IT管理者は3人から依頼を受け、開発用サブネットにEC2インスタンスを構築します。

IT管理者は思いました。
「毎回同じことをするのは大変だな。利用者自身でやってもらいたいな。」

開発者達も思いました。
「クラウドなのに時間かかるんだな。自分でやれば早くできそうなのに。」

1-2.クラウドなのに遅い。なぜ?

多くのAWSユーザーは意図的に権限が制限されます。
主な理由は、セキュリティ(適当な設定をされると危険、見えてはいけないものは隠したい)、コスト(高価なサービスを使われると予算的に困る)などの場合が多いです。
しかし、全ての設定をIT管理者が行うと、開発速度を妨げることになります。

1-3.AWS Service Catalog導入後

IT管理者が事前にサービスカタログを定義しておきます。
開発者達はいつでもService Catalog画面で数クリックでEC2インスタンスを作成できます。

2.設定手順

公式ドキュメントの AWS Service Catalog > 開始方法 を参考にし、多少アレンジを加えました。

2-1.ユーザーに許可することの定義

IT管理者は下記のパラメータのEC2インスタンス作成・削除のみを開発者グループに許可します。
インスタンス起動後はSSHでログインできますが、AWSのAPI的には他に何の権限も渡しません。

パラメータ
サブネット subnet-xxxx
AMI ami-xxxx
セキュリティグループ sg-xxxx
インスタンスタイプ t3.microかt3.smallを選択できる

2-2.製品の作成

EC2インスタンス作成のためのCloudFormationテンプレートを製品として登録します。

Service Catalog > 製品 > 新しい製品のアップロード

製品の詳細

CloudFormationテンプレート

今回は下記のテンプレートを作成しました。
これは特にService Catalogでしか使えないテンプレートではなく、CloudFormationとしても普通に使えるものです。

なお、Outputが重要で、今回はここでPrivateIpを定義しています。
Service Catalogのユーザーは、EC2コンソールで情報を見れません。
Outputで定義した情報は、Service Catalogコンソールで見ることができます。

AWSTemplateFormatVersion: '2010-09-09'
Description: This CloudFormation template to create EC2 instances.

Parameters:
  KeyName:
    Type: AWS::EC2::KeyPair::KeyName
    Description: Name of an existing EC2 KeyPair to enable access to instances.
  InstanceType:
    Type: String
    Default: t3.micro
    AllowedValues: ["t2.micro","t3.micro","t3.small","m5large" ]
    Description: EC2 instance type.

Metadata:
  AWS::CloudFormation::Interface:
    ParameterGroups:
    - Label:
        default: EC2 Instance Keypair Name
      Parameters:
        - KeyName
    - Label:
        default: Instance configuration
      Parameters:
        - [ InstanceType ]

Resources:
  Ec2Instance:
    Type: AWS::EC2::Instance
    Properties:
      InstanceType: !Ref InstanceType
      ImageId: ami-xxxx
      KeyName: !Ref KeyName
      NetworkInterfaces:
        - SubnetId: subnet-xxxx
          AssociatePublicIpAddress: false
          GroupSet:
             - sg-xxxx
          DeviceIndex: 0

Outputs:
  PrivateIp:
    Value: !GetAtt Ec2Instance.PrivateIp

製品作成の完了

2-3.ポートフォリオの作成

Service Catalog > ポートフォリオ > ポートフォリオの作成

任意のパラメータを入力していきます。

ポートフォリオ作成の完了

まだ中身は空ですが、ポートフォリオが作成できました。

2-4.ポートフォリオへ製品の追加

Service Catalog > ポートフォリオ > (作成したポートフォリオ名) > 製品 > ポートフォリオへの製品の追加

先ほど作成した製品を選択し、ポートフォリオへの製品の追加を押します。

2-5.ポートフォリオへ起動制約の追加

Service Catalog > ポートフォリオ > (作成したポートフォリオ名) > 制約 > 制約を作成

制約タイプで起動を選択します。
これはService Catalogが製品を起動する時に利用する時の権限の定義となります。
エンドユーザーにEC2の作成権限など与えないので、Service Catalogに権限を与える仕様です。

IAMロールを選択します。
今回はステップ 6: IAM ロールを割り当てる起動制約を追加するに書いてあるものをそのまま利用しました。
EC2インスタンス以外の製品を作成したい場合は、権限を調整する必要があるかもしれません。

2-6.ポートフォリオへテンプレート制約の追加

Service Catalog > ポートフォリオ > (作成したポートフォリオ名) > 制約 > 制約を作成

制約タイプでテンプレートを選択します。
CloudFormationテンプレートの中でパラメータとして選択できる項目がありましたが、そこに制約をかけます。

テンプレート制約ビルダー > 制約テキストエディター

InstanceTypeでt3.micro、またはt3.smallを選択できるようにしました。

{
  "Rules": {
    "Rule1": {
      "Assertions": [
        {
          "Assert": {
            "Fn::Contains": [
              [
                "t3.micro",
                "t3.small"
              ],
              {
                "Ref": "InstanceType"
              }
            ]
          },
          "AssertDescription": "Instance type should be t3.micro or t3.small"
        }
      ]
    }
  }
}

2-7.ポートフォリオへグループの追加

Service Catalog > ポートフォリオ > (作成したポートフォリオ名) > グループ、ロール、およびユーザー > グループ、ロール、またはユーザーの追加

ユーザーの所属するIAMグループ(ここではDeveloper)を追加します。

2-8.IAMグループへAWSServiceCatalogEndUserFullAccessポリシーを追加

IAMグループへはAWSServiceCatalogEndUserFullAccessポリシーだけ与えます。
このポリシーの中身を見ると、ほぼService Catalogと、Service Catalogに関連するCloudFormationの権限のみとなっています。

これで利用する準備は完了しました。

3.Service Catalogの利用

ここからは、エンドユーザー用のIAMユーザーで操作します。

3-1.製品の起動

Service Catalog > 製品リスト > (作成した製品)

製品の起動

製品バージョン

管理者側でCloudFormationテンプレートを修正したりすると、バージョンが増えていきます。
ここでは最新版を選びました。

パラメータ

今回はInstanceTypeにパラメータ制約をしたので、t3.microかt3.smallしか選択できません。

TagOption

ここでタグをつけると、EC2インスタンスにも反映されます。

通知

今回は選択しませんでした。

確認

完了

作成できると、以下のような画面になります。
CloudFormationテンプレートのOutputで定義したPrivateIpが確認できます。
IPアドレスがわかれば、ユーザーはSSHログインできますね。

3-2.製品の削除

不要になったら、ユーザー側で削除できます。

3-3.EC2コンソールでのリソースの見え方

管理者側

普通のEC2インスタンスとして、表示されます。

ユーザー側

EC2に権限が全く無いため、表示されません。

まとめ

AWS Service Catalogを使えば、管理者のコントロールしたAWSリソースの作成をユーザーに許可できます。
最初にCloudFormationテンプレートを作成するのは少し大変ですが、ユーザーからのリソース作成・削除の依頼が多い環境では検討する価値はあるかと思います。

AutoScaling グループからターゲットをデタッチしてみた件

$
0
0

こんにちは、SRE1課の冨塚です。

みなさんAuto Scaling利用していますか?負荷に応じてインスタンスをスケールアウトやスケールインしてくれる便利なサービスですよね。

ELB配下のEC2をAuto Scaling Groupで構成し状況に応じてスケーリングする環境があるとします。そんな中、稼働中のインスタンスをメンテナンスしたくてサービス止めたいんだけどな、とか思ったことありませんか?もしくはAuto Scaling Groupから外して管理したいんだけどな、などの利用シーンがあるかと思います。実際にサービス(たとえばHTTP)止めた場合はELBのヘルスチェックが失敗し異常とみなされたインスタンスは削除され新しいインスタンスが起動してきます。

そこで今回はメンテナンスしたいインスタンスをAuto Scaling Groupから外した(デタッチ)内容を紹介します。

やりたいこと

ALB+EC2構成でWebサービスを展開している環境で対象インスタンスをデタッチしたい。
EC2はAuto Scaling groupでスケーリングを制御していて、EC2の増減は発生させずに対応したい。

今回検証した構成は下記になります。

すること

  • Auto Scaling Groupから対象インスタンスをデタッチ

作業前の状態

今回の構成はALBで構築しています。最初にターゲットグループを確認します

登録済みターゲットに2台のインスタンスが表示されていることが確認できます

次にAuto Scaling Groupを確認します

Auto Scaling Groupにも2台のインスタンスが対象であることが確認できます

デタッチ作業

  1. EC2コンソール > Auto Scaling グループ > 詳細 を選択し現在の設定を確認します

    それぞれのインスタンス数は 希望=2、最小=1、最大4 で設定しています。
  2. デタッチしたいインスタンスを選択し、「操作」からデタッチを選択します

  3. 今回はEC2インスタンス増やしたくないので「負荷を分散するため、新しいインスタンスを Auto Scaling グループに追加します」のチェックはしないですすめます

    デタッチするとALBのターゲットからも外れてしまいます。そのためALBからバランシングされるEC2が1台減ることになりますので、デタッチする場合は負荷状況を考慮してから実施されることをおすすめします。

操作後はAuto Scaling Groupのライフサイクルの表示はデタッチ中になります

ここまでで対象インスタンスをAuto Scaling Groupからデタッチする作業は完了となります。

作業後の状態

デタッチが完了したらそれぞれ状態を確認していきます。

ALBのターゲットグループから対象インスタンスが外れていることを確認します

Auto Scaling Groupのインスタンスから対象インスタンスが表示されていないことを確認します

その他

  • インスタンスをAuto Scaling Groupへアタッチしたい場合
    デタッチしたインスタンスをもう一度Auto Scaling Groupへアタッチすることも可能です。アタッチする場合はインスタンス数の最大サイズを超えていないことを確認してください。
    Auto Scaling グループへの EC2 インスタンスのアタッチ
  • Auto Scaling Groupからデタッチせずにメンテナンスしたい場合
    今回ご紹介したデタッチ以外にもインスタンスをスタンバイ状態へ設定することが可能です。一時的にメンテナンスを実施する場合はこちらの内容をご検討ください。
    Auto Scaling グループからの一時的なインスタンスの削除

まとめ

  • EC2インスタンスを削除せずにAuto Scaling Groupからデタッチできた
  • デタッチ後にEC2インスタンスが自動で追加されない動作を確認できた

今回は動いているWebサーバを別のALBへ移すために実施した内容を記載してみました。その他でご紹介したデタッチ以外の対応方法もありますので、ご利用の環境とやりたいことに応じてご検討いただけると幸いです。

それではよいAWSライフをお送りください。

【その1:準備編】CloudEndure Disaster RecoveryでEC2をAZ間DR

$
0
0

CSM課の佐野です。寒くなったり暖かくなったりしますが、春らしい陽気が感じられるようになってきましたね。
最近は1ヶ月ほど在宅勤務をしており、引きこもりがちのせいか、外ではいろいろな花が咲いていることに気づくのが遅くなってしまいました。季節に置いて行かれそうです。

さて、今回はCloudEndure Disaster Recoveryのご紹介をします。
CloudEndureと言えば、CloudEndure Migrationという、オンプレミスからのリフト&シフト移行ソリューションが提供されていますが、CloudEndure Disaster Recoveryについては、サービス名のとおり災害対策を目的にしたソリューションです。

どんなことができるのか?どんな環境に有効?

  • EC2をオンプレミス-AWS間だけでなく、AWSのリージョン間、または同じVPC内のAZ間でも数分で自動データレプリケーションおよびフェイルオーバー・フェイルバックが可能
  • RPO:1秒以内/RTO:10分以内
  • CloudEndure Disaster Recovery自体の料金はレプリケーション対象EC2が1台につき0.028USD/時間の従量課金(1ヶ月20USD程度)になっており、低コストで災害対策が可能

これだけ見ても「おっ、なかなかいいのでは?」と思っていただけるのはないでしょうか。
CloudEndure Disaster Recoveryは、以下のようなEC2環境のDRに最適だと思います。

  • データ更新頻度の高いシステムで、DR発生時はEC2のデータを24時間前のAMIバックアップやEBSスナップショットからでなく、DR前の直近のデータの状態で復旧したい
  • DRだけでなく、リージョン内のAZ障害に備えて、単体EC2で動くシステムの障害復旧対策をしたい
  • 停止調整が難しいシステムのため、DRのフェイルオーバーテストを無停止で実施したい

CloudEndure Disaster Recoveryは他のクラスタソフトよりも比較的安く、AWSのアカウントとメールアドレスさえあれば始められます。
それでは、まずは実際にレプリケーションを始められるまでの準備を今回はご紹介していきます。

1.サブスクリプションの登録

AWSマネジメントコンソールから、AWS Marketplaceへアクセスします。
「サブスクリプションの管理」から「製品の検出」をクリックし、「CloudEndure Disaster Recovery to AWS」を検索して選択してください。

以下の画面に遷移したら、「Continue to Subscribe」をクリックしてサブスクリプションを購入しましょう。

このあと、CloudEndureコンソールにログインするメールアドレスとパスワードの登録作業の案内が続きます。
画面に従って登録し、登録したメールアドレスに届いたメールのリンクをクリックして、CloudEndure Disaster Recoveryの登録を完了させましょう。
(CloudEndureコンソールにログインするユーザは、あとから追加可能です)

参考:Registering to CloudEndure Disaster Recovery

2.IAMアクセスキーの登録

メールアドレスとパスワードの登録が完了すると、CloudEndureコンソールにサインインできます。
次回からどこでログインすればいいのか!?と思った方もいらっしゃると思いますが、以下からいつでもコンソールへログイン可能ですので、ご安心ください。
https://www.cloudendure.com/

CloudEndureコンソールに入ると、以下のようにプロジェクトのセットアップができてないよ!という画面が出てきます。
さっそく環境の登録設定をこなして、プロジェクトを設定していきましょう。
今回は初期に設定されている「Default Project」のまま利用していきます。

まずは、DR対象のEC2があるAWSアカウントにCloudEndure Disaster Recoveryがアクセスできるよう、IAMユーザを作成し、アクセスキーを設定します。
(1)「Setup & Info」をクリック
(2)「AWS CREDENCIALS」タブを選択
(3)「these permissons」をクリックしてIAMユーザに払い出すアクセスポリシーを確認し、設定 (※注1) 
   参考:AWS アカウントでの IAM ユーザーの作成
(4)IAMユーザのアクセスキーおよびシークレットアクセスキーを入力
(5)「SAVE」をクリック

(※注1)
筆者が検証したところ、CloudEndure側で指定されたポリシーでは、このあとのフェイルオーバー/フェイルバック動作が権限不足で失敗しました。
ポリシーに、以下の内容をご自身で追記されることをおすすめいたします。(Sidの部分は任意の値をお入れください)

{
            "Sid": "AddRule",
            "Effect": "Allow",
            "Action": [
                "ec2:AssociateRouteTable",
                "iam:PassRole"
            ],
            "Resource": "*"
        }

3.レプリケーションサーバの設定

IAMアクセスキーの設定が終わると、レプリケーション用の管理サーバ(レプリケーションサーバ)の起動設定の画面に遷移します。
レプリケーションサーバは、CloudEndure Disaster RecoveryがEC2のデータを常に復元できるよう、DR元環境とDR先環境を設定し、転送ブロックを受信するために自動起動されます。
詳細な設定項目がたくさんあるのですが、今回は以下だけ設定します。設定が完了したら、「SAVE REPLICATION SETTINGS」をクリックしてください。

設定項目 設定値 説明
Disaster Recovery Source
Disaster Recovery Target
AWS Asia Pacific (Tokyo) 同VPC内のAZ間DRをしたいため、どちらも東京リージョンを選択します。
Choose the default disk type to be used by the Replication Servers Use fast SSD data disks ディスクが500GBを超えた場合はgp2のEBSボリュームを選択するように設定します。
Choose the subnet where the Replication Servers will be launched 任意のサブネット レプリケーションサーバを起動するサブネットを選択します。
Choose the Security Groups to apply to the Replication Servers 任意のセキュリティグループ デフォルトで「CloudEndure Replicator Security Group」というTCP:15000がインバウンドに許可されたセキュリティグループが作られます。
そちらを使うか、任意で作成したものをご利用ください。

ここまでが、移行プロジェクト作成となります。

4.DRするEC2にCloudEndureエージェントのインストール

プロジェクトの作成まで長かったですが、まだEC2側の設定が残っていますので、もうちょっと頑張っていきましょう!
このプロジェクトの中でAZ間でDRしたいEC2に、CloudEndureエージェントをインストールします。

CloudEndureコンソール左メニューの「Machines」をクリックすると、プロジェクト専用のシリアルコードとインストール用のコマンドがLinuxおよびWindowsそれぞれで準備されていますので、基本的にはそちらをEC2上でそのまま実行するだけでOKです。EC2の再起動は不要です。
Windowsの場合は、エージェントのインストーラーを「Download the Agent Installer for Windows」のリンクからダウンロードし、任意のディレクトリに配置してからコマンドを実行してください。

また、CloudEndureエージェントが対応できるEC2のインストール要件については以下のようになっていますので、ご留意ください。

OS 要件
Linux 2GB以上の空きディスク容量
Python 2(2.4以上)またはPython 3(3.0以上)
Windows 2GB以上の空きディスク容量
.NETFramework 4.5以上
WMI(Windows Management Instrumentation)の有効化

参考:Agent Installation Requirements
参考:CloudEndure Disaster Recovery の特徴

筆者は今回Windows2016上のCドライブにインストーラを置き、以下のように実行してみました。
ものの数分でインストールできちゃうので、とっても簡単です。

5.CloudEndureコンソールへのEC2反映確認&レプリケーションの確認

エージェントが無事にインストールできると、AWSマネージドコンソール上に「3.レプリケーション用管理サーバの設定」で設定したレプリケーションサーバのEC2が自動的に作成されます。
この画像の赤枠がレプリケーションサーバ、その下の「Windows2016」が筆者がAZ間でDRしたいEC2です。

また、CloudEndureコンソールには「Machines」にエージェントを入れたEC2が反映され、データ初期同期が開始されていることを確認してください。

ここまででCloudEndure Disaster Recoveryの利用準備は完了です!たいへんお疲れ様でした!!

準備編のおわりに

CloudEndureエージェントを入れたEC2のデータは都度差分転送され、フェイルオーバーするための下準備が整いました。
この次のブログでは、実際にどのようにしてAZ間のフェイルオーバー/フェイルバックをするのか、具体的な操作についてご紹介したいと思います。

Amazon Data Lifecycle Manager(DLM)で1時間おきにスナップショットがとれるようになりました!

$
0
0

こんにちは、技術1課の小倉です。
2020/3/9にアップデートがあり、Amazon Data Lifecycle Manager(DLM)で1時間おきにスナップショットがとれるようになりました!ここでいうスナップショットとは、Amazon EBSのバックアップのことです。

Amazon Data Lifecycle Manager (DLM) が 1 時間のバックアップ間隔をサポート

今までは最短でも2時間おきでしたが、それよりも短い時間でとれるようになっています。そのため、EBSの障害やEBS内のデータ破損などが発生したとき、より最新の状態に近いスナップショットから復旧できるようになりました。

Amazon Data Lifecycle Manager(DLM)とは

ポリシーを作成することにより、EBSのスナップショットの作成、保持、削除を自動でできます。
1, 2, 3, 4, 6, 8, 12, 24時間おきにスナップショットを取得したり、世代管理や保持日数を指定して古いスナップショットを削除できたりします。

設定手順

新規作成

マネジメントコンソールにログインして、EC2のコンソールを開きます。
https://console.aws.amazon.com/ec2/

左メニューの[ライフサイクルマネージャー]をクリックし、[スナップショットのライフサイクルポリシーを作成する]をクリックします。

スナップショットのライフサイクルポリシーを作成する画面で、*がついている必須項目を入力します。
今回は[リソースタイプを選択]でインスタンスを選択していますので、[これらをタグを持つターゲット]で、EC2インスタンスのタグを設定しました(図ではタグのキーがName、値がserverlessframework)。

下にスクロールすると、[ポリシーを次の時間ごとに実行する]を今回のアップデートで指定可能になった1時間に設定します。[開始時刻]はこの設定が有効になる時間(≠ スナップショットを取得する時間)です。
今回は[保持タイプ]はカウント、[保持する]は5で設定しています。この設定ですと5世代までスナップショットが保管されます。

さらに下にスクロールして、[ポリシーの作成]をクリックします。成功のメッセージが出力されたら[閉じる]をクリックします。
これで設定は完了です。あとはスナップショットが取得されるのを待ちます。

左メニューの[スナップショット]をクリックすると取得されたスナップショットが確認できます。
DLMで作成されると説明に「Created for policy: …」と書かれます。

今回は保持するスナップショットを5に設定しています。
(15:52 – 19:53の計5つ)

スナップショットが5つとっている状態で次のスナップショットを取得すると一番古いスナップショットが削除されます(一番古いスナップショットが16:57になっています)。

既存設定の変更

既存設定の変更の場合は、EC2コンソールで、左メニューの[ライフサイクルマネージャー]をクリックして、変更対象のポリシーを選択し、[アクション] – [スナップショットのライフサイクルポリシーを変更する]をクリックします。

[ポリシーを次の時間ごとに実行する]を1に変更します。

[ポリシーの更新]をクリックします。

まとめ

スナップショットを1時間おきに取得することで、なにかEBSで障害が発生したときに障害発生時から1時間以内のデータから復旧させることができます。また、スナップショットは増分バックアップですので、取得回数を増やしても大きな出費にはならないことがほとんどです。
もしEBSのバックアップを検討している、またはもうDLMをお使いの方は1時間おきの取得を検討してみてはいかがでしょうか。

特定の接続元IPアドレスだけAmazon Connectを使いたいあなたへ

$
0
0
在宅勤務になって会社電話の対応に困っていませんか?
 
サーバーワークスでは代表電話がAmazon Connectになっているため、現在は在宅勤務推奨となっていますが今まで通り電話の応対ができています。
Amazon Connectはどこからでも利用できる点がメリットの一つです。
 
しかし「どこからでも利用できる」ことが会社的にNGのこともあるのではないでしょうか。
今日はその解決策についておはなしします。
 

よくあるご相談:接続元のIPアドレスを制限したい

Amazon Connect を利用する際に接続元IPアドレス制限をしたいというご要望をよく聞きます。
残念ながら Amazon Connect は、接続元IPアドレス制限をすることができません。
それなら Amazon Connectの利用をあきらめ…ないでください!
 

ほんとうに必要なのは接続元IPアドレス制限?

本来の目的を思い出してください。
接続元IPアドレス制限をしたいのですか?
 
誰でも自由に利用できることを防ぎたいのではないでしょうか。
そのための方法として接続元IPアドレス制限は適切なのでしょうか。
 
日本では長らく接続元IPアドレス制限の文化が育まれてきました。
しかしIPアドレスは簡単に偽装できてしまいます。
IPアドレス制限という考え方にあまり意味がないように思います。
 
意味がないとはわかっていても、会社のセキュリティーポリシーとして定められており準拠する必要があるケースはあると思います。
今は超えられないしきたり、そこと戦うのには時間がかかります。
 

サーバーワークスの場合

弊社の場合接続元IPアドレスを制限するという考え方はありません。
しかし高いセキュリティーを確保することは重要です。
 
サーバーワークスではOneLoginを利用して、 ID管理を一元化しています。
サーバーワークスは多くのクラウドサービスを利用していますが、すべての社内システムにはOneLogin経由でアクセスをしています。
多要素認証(MFA)を採用しているので、万一PCを利用されてしまっても社内システムにログインをすることができません。
 
そして Amazon Connect へのログインも、もちろんOneLoginで認証をしています。
 

Amazon Connectの認証方式

Amazon Connectの標準のユーザー認証方式はID/パスワードです。
これはセキュリティー的には高いものとは言い難いです。
 
別の方式として下記が用意されています
・既存のディレクトリへのリンク
・SAML 2.0 ベースの認証
 
サーバーワークスでは [SAML 2.0 ベースの認証] を採用し、OneLoginと連携をしています。
 

接続元IPアドレス制限のしきたりにも対応

OneLoginであれば事業拠点のグローバルIPアドレスのみに限定するような設定も可能です。
Amazon Connect の認証時にIPアドレスの制限を設けることで、「接続元IPアドレスを制限する」という要件をクリアすることができます。
 
IP制限はセキュリティーレベルを高めるとはあまり思えないので、多要素認証をぜひ利用してください。
スマートフォン等を業務利用できない場合は、「YubiKey」といったデバイスを利用する選択肢もあります。
 

在宅勤務とAmazon Connect

OneLoginと組み合わせれば、セキュリティーを担保しながらオフィスの電話をAmazon Connectに移行することが可能です。
それでもセキュリティーレベルを満たせない場合は、仮想デスクトップ環境 (VDI)を利用する選択肢もあります。
 
サーバーワークスでは
  • 電話(Amazon Connect)
  • ID管理(OneLogin)
  • 仮想デスクトップ(Amazon Workspaces)

を組み合わせたご提案も得意としています。
OneLoginとAmazon Connectを組み合わせた電話環境の構築はすぐにご用意可能です。
ご契約や貴社内運用準備にかかるリードタイムはどうしても必要になります点はご留意ください。
 
在宅勤務の電話対応問題は、Amazon Connectで解決しましょう。

Amazon Inspectorの評価結果をS3に集約する

$
0
0

AWSの様々なサービスでは、ログをS3バケットに保管できる仕様になっています。
しかし、残念なことにAmazon InspectorにはS3バケットへの出力機能がありません。

今回は、マルチアカウント・マルチリージョン環境でのInspectorの検知結果を、どのように1つのS3バケットに集約するかについて考えていきます。

1.Amazon Inspectorの評価結果の出力機能について

Amazon Inspectorの脆弱性の評価結果を、S3に出力することはできません。
評価結果には以下のいずれかでアクセスします。

  1. マネージメントコンソールからPDFまたはHTMLで評価レポートをダウンロード
  2. マネージメントコンソールから検知結果を確認、CSVでダウンロード
  3. SNS、イベントで通知される評価結果を指すURLからAPIで取得

3について説明を加えておきます。
Inspectorでは評価をする度に、arn:aws:inspector:ap-northeast-1:xxxxxxxxxxxx:target/xxxx/template/yyyyy/run/zzzzのようなARNが発行され、Amazon EventBridgeでイベント検知できます。
また、Inspectorの設定項目にオプションとしてSNS Topicが設定でき、こちらでも同様のARNを通知できます。

そのARNに対し、list-findingsをすれば、個々の検知結果のARNを取得できます。

~$ aws inspector list-findings --assessment-run-arns arn:aws:inspector:ap-northeast-1:xxxxxxxxxxxx:target/0-g3O5KfZD/template/0-fRLbBTop/run/0-BV8rzFjN
{
    "findingArns": [
        "arn:aws:inspector:ap-northeast-1:xxxxxxxxxxxx:target/0-g3O5KfZD/template/0-fRLbBTop/run/0-BV8rzFjN/finding/0-O0Zfj3eA",
        "arn:aws:inspector:ap-northeast-1:xxxxxxxxxxxx:target/0-g3O5KfZD/template/0-fRLbBTop/run/0-BV8rzFjN/finding/0-NwJjopiW",
        "arn:aws:inspector:ap-northeast-1:xxxxxxxxxxxx:target/0-g3O5KfZD/template/0-fRLbBTop/run/0-BV8rzFjN/finding/0-z991gY9x",
        "arn:aws:inspector:ap-northeast-1:xxxxxxxxxxxx:target/0-g3O5KfZD/template/0-fRLbBTop/run/0-BV8rzFjN/finding/0-MMoPGegp",
        "arn:aws:inspector:ap-northeast-1:xxxxxxxxxxxx:target/0-g3O5KfZD/template/0-fRLbBTop/run/0-BV8rzFjN/finding/0-yRKz72Kl",
        "arn:aws:inspector:ap-northeast-1:xxxxxxxxxxxx:target/0-g3O5KfZD/template/0-fRLbBTop/run/0-BV8rzFjN/finding/0-7S2CNIcg"
    ]
}

上記で得た個々のARNに対し、describe-findingsをすれば、検知結果の詳細を取得できます。

~$ aws inspector describe-findings --finding-arns arn:aws:inspector:ap-northeast-1:xxxxxxxxxxxx:target/0-g3O5KfZD/template/0-fRLbBTop/run/0-BV8rzFjN/finding/0-O0Zfj3eA
{
    "findings": [
        {
            "arn": "arn:aws:inspector:ap-northeast-1:xxxxxxxxxxxx:target/0-g3O5KfZD/template/0-fRLbBTop/run/0-BV8rzFjN/finding/0-O0Zfj3eA",
            "schemaVersion": 1,
            "service": "Inspector",
            "serviceAttributes": {
                "schemaVersion": 1,
                "assessmentRunArn": "arn:aws:inspector:ap-northeast-1:xxxxxxxxxxxx:target/0-g3O5KfZD/template/0-fRLbBTop/run/0-BV8rzFjN",
                "rulesPackageArn": "arn:aws:inspector:ap-northeast-1:406045910587:rulespackage/0-bBUQnxMq"
            },

<省略>
"id": "Disable root login over SSH",
            "title": "Instance i-09095f80a71c9d8f6 is configured to allow users to log in with root credentials over SSH, without having to use a command authenticated by a public key. This increases the likelihood of a successful brute-force attack.",
            "description": "This rule helps determine whether the SSH daemon is configured to permit logging in to your EC2 instance as root.",
            "recommendation": "To reduce the likelihood of a successful brute-force attack, we recommend that you configure your EC2 instance to prevent root account logins over SSH. To disable SSH root account logins, set PermitRootLogin to 'no' in /etc/ssh/sshd_config and restart sshd. When logged in as a non-root user, you can use sudo to escalate privileges when necessary. If you want to allow public key authentication with a command associated with the key, you can set **PermitRootLogin** to 'forced-commands-only'.",
            "severity": "Medium",
            "numericSeverity": 6.0,
            "confidence": 10,
            "indicatorOfCompromise": false,
            "attributes": [
                {
                    "key": "INSTANCE_ID",
                    "value": "i-09095f80a71c9d8f6"
                }
            ],
            "userAttributes": [],
            "createdAt": 1583825759.119,
            "updatedAt": 1583825759.119
        }
    ],
    "failedItems": {}
}

ここまで見ると、AWSに詳しい方なら、SNS、EventBridge、Lambda等の組み合わせ等で、S3への出力を自動化することも可能と推測すると思います。

しかし、もう少し他の方法も探ってみます。

2.Security Hubのイベント通知について

Security Hubには、GuardDutyやInspectorなどの検知結果を受け取れる機能があります。
Security HubにS3への出力機能があれば、Security Hub経由でInspectorの結果をS3に集約できると思ったのですが、残念ながらありませんでした。
ただし、Security Hubをソースとしたイベントは、Inspectorをソースとしたイベントと通知される内容が異なります。

イベントのソース イベント通知の中身
Inspector 脆弱性をたくさん検知しても、ARNが1つだけ通知される。
それに対して、list-findings、describe-findingsをする必要がある。
SecurityHub 脆弱性をたくさん検知したら、個別にdescribe-findingsの内容が通知される。

Security Hubのイベント通知内容なら、以下のフローでS3バケットに集約できそうです。
Lambda関数で頑張る必要がありません。

  1. Inspectorで評価した内容をSecurityHubに統合
  2. SecurityHubのイベントをEventBridgeでトリガーにする
  3. EventBridgeからKinesis Data Firehoseに送る
  4. Kinesis Data FirehoseからS3に送る

3.構成図

3-1.シングルリージョンの場合

Security Hubには他アカウントの同一リージョンの検知結果を取り込める機能があります。
したがって、単一リージョンのみ利用の場合は、1つのマスターアカウントに集約できます。

3-2.マルチリージョンの場合

複数リージョンを使用している場合は、リージョンごとにSecurity Hubのマスターアカウントを作る必要があります。

4.設定

具体的な設定をみていきます。

4-1.S3バケット作成

バケット名は何でもいいのですが、今回はaws-logs-inspector-xxxxxxxxxxxx としておきます。
(xxxxxxxxxxxxはAWSアカウントID)

4-2.Security Hub設定

Security HubにInspectorを統合

各アカウントの各リージョンでSecurity HubにInspectorが統合されていることを確認します。

Security Hubのマスターアカウントにメンバーアカウントを追加

SecurityHubマスターアカウントでメンバーとなるアカウントを追加します。
その後、メンバー側で承認をすれば、ステータスが有効となります。

4-3.Firehose設定

Kinesis Data Firehoseを作成します。
Destinationとして、先ほど作成したS3バケットを指定します。

また、複数アカウント、複数リージョンから受け取るので、Prefixを下記のように指定します。
このPrefixには少し問題があるのですが、後で述べます。

パラメータ 設定値
Prefix AWSLogs/<マスターアカウントのAWSアカウントID>/Inspector/<リージョン>/

4-4.EventBridge設定

Security HubのマスターアカウントでEventBridgeルールの設定をします。

イベントパターンは下記のようにします。
sourceがaws.securityhubだけだと、GuardDutyなど他サービスからの通知も含んでしまいそうなので、ProductNameでInspectorにフィルタしています。

{
  "source": [
    "aws.securityhub"
  ],
  "detail-type": [
    "Security Hub Findings - Imported"
  ],
  "detail": {
    "findings": {
      "ProductFields": {
        "aws/securityhub/ProductName": [
          "Inspector"
        ]
      }
    }
  }
}

ターゲットには先ほど作成したFirehoseを指定します。

5.動作確認

Inspectorを動作させ、S3バケットに保存されていれば成功です。
S3バケット内は、Firehoseの標準機能により、自動的に年・月・日などの階層構造となります。

6.残された問題と解決方法

一通りの仕組みが出来上がりましたが、ここで2つの問題に気づいてしまいました。

問題1. 異なるアカウントのログも同じフォルダに入ってしまう

4-3.Firehose設定 で「このPrefixには少し問題がある」と述べました。
アカウントIDでフォルダの分類ができていません。

Prefixは、AWSLogs/<マスターアカウントのAWSアカウントID>/Inspector/<リージョン>/としました。
しかし、AWSアカウントが複数(例えばxxxxxxxxxxxx、yyyyyyyyyyyy)あった場合は、以下のように分類したいかもしれません。

  • AWSLogs/xxxxxxxxxxxx/Inspector/<リージョン>/
  • AWSLogs/yyyyyyyyyyyy/Inspector/<リージョン>/

解決方法としては、アカウントごとにFirehoseを分け、それぞれのPrefixを設定することが思いつきます。

この構成の問題は、管理するリソースが増えることです。
ただし、CloudFormationなどを使えば、リソースが増えることによる設定の手間はあまり考えないでいいかもしれません。

問題2.JSONが改行されないで1行で保存される

S3に保存されたファイルの中身をみてみると、JSON形式のメッセージが改行されずに1行に連結されてました。
例えば、Inspectorが1回の評価で5つの脆弱性を検知した場合、下記のように5つの検知結果が1行になって保存されます。

{ 検知結果1 }{ 検知結果2 }{ 検知結果3 }{ 検知結果4 }{ 検知結果5 }

しかし、下記のように改行されて保存して欲しい場合もあるのではないでしょうか。

{ 検知結果1 }
{ 検知結果2 }
{ 検知結果3 }
{ 検知結果4 }
{ 検知結果5 }

解決方法としては、FirehoseからLambdaを連携させて、改行文字を追加する方法があります。

具体的には、まずLambda関数を作成します。
base64でエンコードされているdataが渡されるので、それをデコードし、更にString型に変換して末尾に改行文字を追加しています。

import base64

def lambda_handler(event, context):
    output = []
    for record in event['records']:
        payload = base64.b64decode(record['data']).decode('utf-8')
        payload = str(payload) + '\n'
        payload = payload.encode("UTF-8")
        # Do custom processing on the payload here
        output_record = {
            'recordId': record['recordId'],
            'result': 'Ok',
            'data': base64.b64encode(payload)
        }
        output.append(output_record)
        
    print('Successfully processed {} records.'.format(len(event['records'])))
    
    return {'records': output}

次にFirehoseの「Transform source records with AWS Lambda」 で、その関数を指定します。

まとめ

  • InspectorのログはSecurity Hubのイベントから取得可能。
  • Firehoseを使うとS3への保存は便利。改行されない場合は、Lambdaで処理可能。

Amazon Connect 導入支援をお願いしたときのコスト感を知りたい

$
0
0
わたしがはじめてAmazon Connectの本番稼働案件を担当してからちょうど1年がたちました。
ありがたいことにその後複数のお客様のAmazon Connect本番導入を複数サポートさせていただきました。
そして自社の代表電話もAmazon Connectで運用することができるようになりました。
 
2018年12月に東京リージョンでAmazon Connectが利用できるようになって1年と少し。
1年でずいぶんとAmazon Connectをとりまく環境がかわってきました。
以前はAmazon Connectがほんとうに使えるかどうか、というご相談も多くありました。
最近は、Amazon Connectを導入する前提での具体的な相談が増えてきています。
 
そんな中「Amazon Connectの導入支援をお願いしたらどのくらいかかるのか概算
を知りたい」というお問い合わせが増えてまいりました。
 
 

他のコールセンターシステムとの違い

まずはじめにお伝えをしなければいけないのは、Amazon Connectは他のコールセンターシステムと違い機能一覧があり料金プランによって利用できる機能のマルバツがあるわけではありません。
ここが他のコールセンターシステムと比較するときにわかりにくい点でもあります。

Amazon Connectはコアとなるコンタクトセンター機能を提供しています。
不足している機能は自分たちでインテグレーションをして補う必要があります。
そのため要件定義をして、Amazon Connectの設計の範囲で実現できる機能、構築をする機能を明確にしていく必要があります。

ご要件(機能要件、非機能要件)が明確であれば概算をご用意することが可能です。
そこが明確になっていないとざっくりのコスト感をお出しするのがむずかしくなります。
しかし、Amazon Connectの構築範囲を明確にできるレベルで、要件定義を自分たちでできるお客様はごく一握りであるのが現状です。

それでも予算を確保したり、リプレイス計画をたてる都合上どうしても先にコストを知りたい
というご要望をいただきます。
そこで、今日は代表的なパターンでサーバーワークスが提供できるサービス提供範囲とコスト感の一部を公開しちゃいます。

 

1)コールセンター ミニマムスタートパターン

<サービス提供範囲>
まずは簡単な受発信ができるAmazon Connectの環境をサーバーワークスにて構築をさせていただきます。
この環境を用いて

  • 音声品質
  • ソフトフォンの機能
  • レポート機能
  • IVR機能
  • ACD機能

等を貴社主導でご評価いただきます。
サーバーワークスは評価期間中の技術支援をさせていただきます。
技術支援の中で実際の運用に向けたご相談にものらせていただきます。
オンサイトのAmazon Connect利用支援をメニューにすることも可能です。

<インテグレーション料金>
15万〜90万程度
構築する環境の要件、支援の提供範囲により金額が変わります

<本番導入へ向けて>
本番導入に向けて貴社にてご準備できる場合は以降のインテグレーション費用は不要です。
有償で本番導入設計、運用設計および設定をさせていただくことも可能です。

2)構築を含めたPoCパターン

<サービス提供範囲>
機能開発が必要な案件で、ミニマムな範囲の開発を行いPoC→本番導入というアプローチをすることがあります。
「コールセンター ミニマムスタートパターン」に追加して機能的なPoCも行うパターンです。
サーバーワークスでは設計、構築、PoC期間中の技術支援を提供させていただきます。
設計はお客様にすべて行っていただくのではなく「実現したいゴール」を共有していただき、サーバーワークスから詳細な設計のご提案をするパターンが主流です。
Amazon Connectの設計はわかりにくいので、だいたいのポイントをおさえたら構築をしてしまい、使ってもらいながら修正をするアジャイルアプローチをしています。

<インテグレーション料金>
70万〜500万程度
構築する機能要件、支援の知恵鏡範囲により金額が大きく変わります

<本番導入へ向けて>
本番導入に向けて、貴社と弊社にて役割分担をさせていただくことが多くなっています。
弊社の役割範囲によってかかるコストも変わってきます。

3)既存コンタクトセンター移設パターン

<サービス提供範囲>
このパターンの場合全体でどのくらいかかるかが知りたい情報となると思います。
概算を出すにしても機能要件、非機能要件をはっきりいただきたく思います。
そもそもご要件を満たすことができるのか、開発や3rdパーティのソリューションを活用することで実現可能か検討の上ご提案をさせていただきたいと思います。
CRMとの連携も必須となると思いますが、CRM部分については既存ベンダーと協力した体制で取り組ませていただくことも可能です。

<インテグレーション料金>
料金:400万〜1000万超
要件によりものすごく振れ幅が大きいです

 

おまけ)なんとびっくり!無料パターン

<サービス提供範囲>
サーバーワークスではAWSリセールサービス pieCe を提供しています。
このサービスの中にはサーバーワークスのサポートもついてきます。
このサポートの中にAmazon Connectのサポートも入っています。

Amazon Connectの一般的なご質問であれば、pieCeにご契約のお客様は無料でサポートをさせていただきます。
Amazon Connectインスタンス内で設定した内容や、貴社で構築したLambda関数などについてはサポート対象外となります点をご了承ください。

AWSに詳しいエンジニアがいて、Amazon Connectを自分たちで構築できそうな場合は、こちらの無料サポートパターンでご利用いただくことも可能です。
ただし、この場合も不安なことがあれば、実現したい内容や設計方針など一度弊社に事前にご相談いただけますと幸いです。
先に問題の回避方法や他社事例などをお伝えすることもできます。

このパターンでうまくいっている例もありますが、実装後に相談されて困ることもあります。
初の実運用案件であれば最初だけでもサーバーワークスをうまく活用することをおすすめいたします。

<インテグレーション料金>
無料

まとめ

サーバーワークスはPoCはもちろん、複数の実案件のAmazon Connect運用実績がございます。
そしてなんといっても自社内でAmazon Connectを実際に導入し運用している実績があります。

このような経験の中でたくさん失敗もしながらAmazon Connectの活用のナレッジを蓄積しています。
Amazon Connectの導入支援をわたしたちにぜひお手伝いさせてください。

そしてコスト感を知りたいというときは、Amazon Connectで実現したいことを可能な範囲で教えてください。
お問い合わせをお待ちしております。
https://www.serverworks.co.jp/contact/aws.html

打刻したかどうかをSlackに通知するBotを作った話

$
0
0

こんにちは!
今月から技術2課に配属になりました濱岡です。

先日、Nintendo Switchでどうぶつの森が発売になりましたね!
業務以外はほぼどうぶつの森をやってます。
お金を稼いで借金生活から脱却したいです。

さて今回は、打刻したかどうかSlackに通知するBotを作成しましたので、これについて書きます。

今回のBot作成の経緯

今回、これを作成するに至った経緯なんですが、、、課長からの無茶ぶりから始まりました。

「SFの出勤がチャンネルに流れるようにしたいんだけど、やり方調べてもらえないかな?」
とのこと。

とりあえず作ってみるかとなりまして作ってみたわけです。

いやあ、、、しんどかった、、、
Salesforceのデータの形がちょっと複雑で手間取りました。

それは置いておいて、そもそもなぜこのBotが必要かというお話をしますね。

以下の画像をみてください。
朝の課のチャンネルなのですが、こんなことになっています。

サーバーワークスではクラウドワークスタイルといっていわゆる在宅ワークをやっている方が多いのでこんな感じで出社してるよってチャンネルに書いているわけですね。
しかし、出勤の打刻自体はSalesforceで行っています。
これだとSalesforceで打刻+課のSlackへ投稿で二重で管理していることになってしまいます。
そこでSalesforceでの打刻がそのままSlackに通知されることで、この二重の管理を無くそうというわけです。

そもそもSalesforseで打刻してチャンネルで出社したよって書いて…二度手間ですよね笑

今回のBotの構成図

定時労働と裁量労働の方がいるので今回は11:00に通知されるようにしました。

言語はPython3.8を使用し、Salesforceから情報をとってくるためにsimple-salesforce、SlackのBotの通知にslackclientを使用しました。

結果

こんな感じで通知されます。

文章で察しているかと思いますがあるキャラクターっぽく文章を考えて見ました笑
打刻してないよ!って直接書くより、こんな感じで書くほうが、やわらくなっていいかなと個人的には思います。

まとめ

今回は打刻しているかどうかSlackに通知されるBotを作成しました。
これを同じようにして退社打刻しているかという通知も作成し、そしておやすみの人の通知も作成しました。
Salesforceでおやすみの申請もできるのでそこから情報を取得することができます。

ちなみにこんな感じで通知されます。

  • 退社打刻
  • おやすみ

我ながらいっぱい作りましたね。

このようなBotを作ることで毎日のちょっとした手間を省くことができます。
ほんとにちょっとしたことなんですけどね笑

以上、濱岡でした!

Amazon EC2のT2インスタンスタイプを休止状態にできるようになりました!

$
0
0

こんにちは、技術1課の小倉です。
2020/3/19にアップデートがあり、Amazon EC2のT2インスタンスタイプを休止状態(ハイバネーション)にできるようになりました!

Amazon EC2 Hibernation で、T2 インスタンスタイプのワークロードを一時停止および再開できるようになりました

今まではM3、M4、M5、C3、C4、C5、R3、R4、R5のインスタンスタイプで休止状態にできていましたが、ここにT2が追加されました。利用用途としては、EC2上で稼働しているアプリケーションが起動に10分とか時間がかかるなど起動時間を短縮してサービスを再開することができます。料金は、休止状態ではインスタンスの料金はかかりません(EBSやEIPは停止の時と同様に料金は発生します)。

Amazon EC2 休止状態(ハイバネーション)とは

Amazon EC2 休止状態(ハイバネーション)とは、EC2を一時停止、再開できる機能です。
一時停止する前の状態(アプリケーションが起動しているなど)を保持して停止し、再開時には一時停止前と同じ状態で起動します。WindowsやMacのスリープ状態と同じです。動作としてはメモリ上に保管されているデータをルートEBSボリュームに格納されたファイルに保存して、一時停止前の状態を保持しています。

休止状態を使用するにあたり、いくつか制限事項があるため、以下に記載します。

対応OS

Amazon Linux
Amazon Linux 2
Ubuntu 16.04 および 18.04 LTS
Windows Server 2012、2012R2、2016、2019

対応EC2インスタンスタイプ

M3、M4、M5、C3、C4、C5、R3、R4、R5、T2

EBSボリューム

ルートEBSボリュームにメモリ分の空き容量があることと暗号化が必須
※暗号化が必要な理由は、メモリ上に機密情報が含まれていた場合、その情報を保護するため

EC2インスタンスのメモリサイズ

Windows の場合 最大 16 GB のメモリのインスタンス
その他のオペレーティングシステムの場合 メモリ が 150 GB 未満のインスタンス

設定手順

休止状態を使うためにはEC2の新規作成でしか設定ができないため、既存のEC2で利用するためにはAMIを取得して再作成が必要です。

EC2作成手順

マネジメントコンソールにログインして、EC2のコンソールを開きます。
https://console.aws.amazon.com/ec2/

左メニューの[インスタンス]をクリックして、[インスタンス作成]をクリックします。

ステップ 1: Amazon マシンイメージ (AMI)画面で、OSを選択します(今回はAmazon Linux 2を選択)。

ステップ 2: インスタンスタイプの選択画面で、インスタンスタイプを選択します(今回はt2.microを選択)

ステップ 3: インスタンスの詳細の設定画面で、EC2を作成するネットワークやサブネットを指定し、[停止 – 休止動作]にチェックを入れます。

ステップ 4: ストレージの追加画面で、EBSボリュームのサイズと暗号化の設定をします。
※暗号化についてのメッセージが表示されていますが、暗号化の設定をすると消えます。

ステップ 5: タグの追加画面で、必要に応じてタグを追加します(今回はタグ設定なし)。

ステップ 6: セキュリティグループの設定画面で、EC2に使用するセキュリティグループを指定します(今回は新規作成して22ポートを許可する設定にしています)。

ステップ 7: インスタンス作成の確認画面で、設定内容を確認して[起動]をクリックします。

キーペアの選択画面で、キーペアを指定して、[インスタンスの作成]をクリックします。
もしキーペアが無い場合は[新しいキーペアの作成]を選択して、[キーペアのダウンロード]をクリックして、ダウンロードが終わってから、[インスタンスの作成]をクリックします。

画面右下の[インスタンスの表示]をクリックして、EC2インスタンス一覧を表示します。
作成したEC2インスタンスを選択し、画面下の説明タブを選択し、下にスクロールすると休止状態の設定を確認できます。

休止状態へ変更

休止状態にするには、対象のEC2インスタンスを選択し、[アクション] – [インスタンスの状態] – [停止 – 休止]をクリックします。

確認画面で、[はい、停止 – 休止動作を有効化します]をクリックします。

ちょっと待つと、インスタンスのステータスがstoppedになり、状態遷移の理由メッセージに User initiated hibernateというメッセージが表示されます。

休止状態から再開

停止しているEC2からの起動と手順は一緒です。
対象のEC2インスタンスを選択し、[アクション] – [インスタンスの状態] – [起動]をクリックします。

確認画面で、[開始する]をクリックすると起動します。

ステータスチェックが2/2になるのは時間がかかりますが、インスタンスの状態がrunningになったらログイン可能で、休止状態にする前と同じ状態になっていました。
また、今回はEIPではなくパブリックIPアドレスを使っていましたが、休止状態にしてから起動したらIPアドレスは変更されていました。

まとめ

EC2上で起動に時間のかかるアプリケーションなどを使っている場合に休止状態を使うことで、起動時間を短縮することができます。今のところ、新規作成しか設定方法がありませんが、起動時間にお悩みの方は利用してみてはいかがでしょうか。

また、本ブログの内容は2020/3/25(水) 12:00よりYouTube Liveで配信される「30分でわかる AWS UPDATE!」でも取り上げる予定ですので、ぜひご覧ください!
もしリアルタイムで見逃しても、アーカイブ動画から内容を確認できます。

条件付きで最大50人のユーザーが Amazon WorkSpaces と Amazon WorkDocs を無料で使用できます

$
0
0

こんにちは、技術1課の小倉です。
2020/3/19にAWSからアナウンスがありましたが、条件付きで最大50人のユーザーが Amazon WorkSpaces と Amazon WorkDocs を無料で使用できるようになっています。

在宅勤務を実現するAmazon WorkSpaces および Amazon WorkDocs に関する新しい提案

無料で使用できる条件は以下です。

  • 今までWorkSpacesとWorkDocsを利用したことがないこと
  • 2020/4/1から6/30までの期間限定
  • 使用可能なバンドルは、Standard、Value、Performance
    バンドルとはOS、ストレージ容量、コンピューティング(CPU、メモリ容量)およびソフトウェアリソースの組み合わせ

Amazon WorkSpacesとAmazon WorkDocsとは

Amazon WorkSpacesとは、マネージド型の仮想デスクトップサービスです。リソース自体はAWSが管理していて、クライアントからWorkSpacesに接続するだけでWindowsなどのOSが使用可能です。メリットとしては、仮想デスクトップからはファイルやテキストのコピーなどが直接クライアントにできませんので、データを安全に扱うことができます。

Amazon WorkDocsとは、フルマネージドのファイルコラボレーションサービスです。例えると、Dropbox, Boxのようなサービスです。

高速セットアップ

今回の無料で利用できる対象は今まで使ったことがないユーザーですので、高速セットアップが利用できます(すでに設定が入っていると使用できません)。必要最低限の設定を入力するだけで、WorkSpacesとWorkDocsが作成できます。
Amazon WorkSpaces 高速セットアップを開始する

入力項目が少ないのですが、自動でいろいろ作ってくれます。
作られているものは以下です。

  • IAM ロールを作成して、Amazon WorkSpacesがElastic Network Interfaceを作成し、Amazon WorkSpacesディレクトリの一覧を表示できるようにする
  • Simple AD用のVPC、サブネット、セキュリティグループを作成する
  • VPCにSimple ADディレクトリをセットアップする
  • 指定したユーザーアカウントを作成し、ディレクトリに追加します
  • WorkSpaceインスタンスを作成します
  • 指定されたユーザーに招待 E メールを送信します

※WorkSpacesを利用するのにディレクトリが必要なのですが、自分たちで管理しているディレクトリサービスを使うこともできます。高速セットアップでは自動でSimple ADが作成されます。
Amazon WorkSpaces を使用して仮想デスクトップを起動します。

WorkSpaces(マネジメントコンソール側の設定)

WorkSpacesのコンソールを開き、[今すぐ始める]をクリックします。

高速セットアップの横にある[起動]をクリックします。

バンドルを選択し、ユーザー情報を入力して、[WorkSpacesの起動]をクリックします(画像のバンドルはStandard with Windows 10)。

WorkSpacesの作成が始まります。

20分くらい待つとWorkSpacesのステータスがAVAILABLEとなり使えるようになります。

WorkSpaces(クライアント側の設定)

ここからはクライアント側の設定です。
WorkSpacesがAVAILABLEになったらWorkSpaces設定時にユーザー情報で入力したメールアドレス宛にメールが届きます。
届いたメール内のリンクをクリックします。

リンクをクリックすると以下の画面が表示されるので、パスワードを設定して、[ユーザーの更新]をクリックします。

ユーザーの更新をクリックすると以下の画面が表示されるので、WorkSpacesにアクセスするためのソフトウェアをダウンロードします。

ダウンロードしたらクライアントにインストールします。

インストールが終わったら、Amazon WorkSpacesを起動します。
私は使ったことがあったので、以下は初期の画面ではないかもしれないですが、ログインに必要な情報としては、届いたメールに記載されていた登録コードの入力が必要です。ユーザー名はメールに記載されていて、パスワードは先ほど設定したものです。

[Sign in]をクリックするとWorkSpacesにアクセスできます。

WorkDocsの設定

WorkDocsは高速セットアップですでに作成済みです。
WorkDocsのコンソールを開くと確認できます。

WorkSpacesからWorkDocsへファイルを保管する設定をするのですが、画面キャプチャができていなかったので、言葉で説明します。

  • WorkSpacesのデスクトップにある、[Install Amazon WorkDocs]のアイコンをダブルクリックします。
  • [詳しくはこちら]をクリックします。
  • [WorkSpacesの登録コードを入力します]をクリックして登録コードを入力します。
  • WorkSpacesのユーザー名とパスワードを入力します。
  • 同期するフォルダを指定します。
  • 同期するファイルを選択します(今回はすべてを選択)。

ここまで設定して、同期するフォルダにファイルを置いてみます。

WorkDocsのコンソールを開き、URLのリンクをクリックします。

以下の画面でメールアドレスを入力して[ログイン]をクリックします。

以下の画面で、ユーザー名とパスワードを入力して[サインイン]をクリックします。

WorkDocsに保管されているファイル一覧が確認でき、先ほどWorkSpaces上で作成したファイルが同期されていることが確認できます。

ここまでで、WorkSpacesとWorkDocsの設定が完了しました。

まとめ

新型コロナウイルスの影響でいきなり在宅勤務をしなければならなくなったけど、会社のパソコンを家に持ち帰れないなど在宅勤務が難しい人もいると思います。自宅に仕事をする環境がない場合にWorkSpacesを使うことで私物のパソコンでもセキュアに仕事をすることができます。今回は2か月間、新規ユーザーに限りですが無料で使えますので、今まで使ったことがない人はご利用を検討してみてはいかがでしょうか。

また、本ブログの内容は2020/3/25(水) 12:00よりYouTube Liveで配信される「30分でわかる AWS UPDATE!」でも取り上げる予定ですので、ぜひご覧ください!
もしリアルタイムで見逃しても、アーカイブ動画から内容を確認できます。

Amazon ElastiCache for Redis がクロスリージョンレプリケーションに対応しました!

$
0
0

はじめに

こんにちは、技術 1 課の山中です。
春が訪れたので、入社以来変えていなかった Slack のプロフィール画像を新しいものに変えました。
春の格好をしてでかけたら、寒い。そんな毎日です。

Amazon ElastiCache for Redis がこの度クロスリージョンレプリケーションに対応したとのことですので、試していこうとおもいます!

Amazon ElastiCache for Redis がグローバルデータストアを発表

グローバルデータストアとは

グローバルデータストアは、 Amazon ElastiCache for Redis の新機能です。
グローバルデータストアは、以下の次のもので構成されます。

  • プライマリ (アクティブ) クラスタ

読み取りおよび書き込みを担当するクラスタです。
書き込まれたデータは、グローバルデータストア内の全てのクラスタに複製されます。

  • セカンダリ (パッシブ) クラスタ

読み取りのみを担当するクラスタです。
プライマリクラスタに書き込まれた更新が反映されます。
また、セカンダリクラスタはプライマリとは別のリージョンに作成する必要があります。

Image from Replication Across AWS Regions Using Global Datastore

グローバルデータストアの利点

グローバルデータストアを利用する利点は大きく 2 つあります。

  • 地理的に有利なパフォーマンス

アプリケーションをグローバルに展開するような場合に、地理的に適したリージョンにセカンダリクラスタをセットアップすることで、レイテンシを減らしアプリケーションの応答性を高めることができます。

  • 災害対策

プライマリクラスタが存在するリージョンで障害が発生した場合に、別リージョンにあるセカンダリクラスタをプライマリに昇格させることができます。
ただし、自動フェイルオーバには対応していないので、昇格させる際には手動での対応が必要となります。

制限事項

現在 (2020/3/25)、グローバルデータストアは Amazon ElastiCache for Redis の 5.0.6 のみで利用可能です。
また、対応するインスタンスファミリーは M5 もしくは R5 です。

ためしてみる

ためしに使ってみましょう!
今回は、東京リージョンにプライマリ、バージニア北部リージョンにセカンダリを作ってみます。

Amazon ElastiCache のコンソールを開くと、 グローバルデータストア の項目ができています。

作成 ボタンをクリックしてみましょう。

グローバルデータストアの作成画面では、新規にクラスタを作成することもできますし、既存のクラスタをプライマリとしてセットアップすることもできます。
今回は東京リージョンに新規プライマリクラスタを作成します。

次の画面で、セカンダリクラスタの指定を行えます。

作成が開始し、 10 分ほど待つと、プライマリクラスタ (東京リージョン)、セカンダリクラスタ (バージニア北部リージョン) およびグローバルデータストアが available になりました。

グローバルデータストアの名前をクリックすると、レプリカへの同期にどれくらいのラグが発生しているのか見えるようです。

早速アクセスしてみましょう!!
まず、読み取り専用のセカンダリクラスタにデータを書き込んでみます。

$ redis-cli -h global-ds-1-useast1-001.xxxxxx.0001.use1.cache.amazonaws.com
global-ds-1-useast1-001.xxxxxx.0001.use1.cache.amazonaws.com:6379> ping
PONG
global-ds-1-useast1-001.xxxxxx.0001.use1.cache.amazonaws.com:6379> set paris france
(error) READONLY You can't write against a read only replica.

書き込もうとすると案の定、エラーがでて書き込めませんでした。
同様にプライマリクラスタにデータを書き込んでみます。

$ redis-cli -h global-ds-1-apnortheast1-001.xxxxxx.0001.apne1.cache.amazonaws.com
global-ds-1-apnortheast1-001.xxxxxx.0001.apne1.cache.amazonaws.com:6379> ping
PONG
global-ds-1-apnortheast1-001.xxxxxx.0001.apne1.cache.amazonaws.com:6379> set paris france
OK
global-ds-1-apnortheast1-001.xxxxxx.0001.apne1.cache.amazonaws.com:6379> set berlin germany
OK
global-ds-1-apnortheast1-001.xxxxxx.0001.apne1.cache.amazonaws.com:6379> set london uk
OK
global-ds-1-apnortheast1-001.xxxxxx.0001.apne1.cache.amazonaws.com:6379> keys *
1) "berlin"
2) "paris"
3) "london"

こちらは書き込むことができました!!!
これがセカンダリクラスタに同期されていれば完璧ですが、いかがでしょうか。

$ redis-cli -h global-ds-1-useast1-001.xxxxxx.0001.use1.cache.amazonaws.com
global-ds-1-useast1-001.xxxxxx.0001.use1.cache.amazonaws.com:6379> keys *
1) "london"
2) "berlin"
3) "paris"

きちんとデータが同期されていました!!!簡単、速い!

おわりに

いかがだったでしょうか。
こんなに簡単にクロスリージョンレプリケーションができるなんて、素晴らしいですね。
また、本ブログの内容は2020/3/25(水) の YouTube Live でも話しますので、是非ご覧ください!!

参考

【その2:フェイルオーバー編】CloudEndure Disaster RecoveryでEC2をAZ間DR

$
0
0

CSM課の佐野です。
前回の記事では、CloudEndure Disaster Recoveryを使い始めるまでのセットアップを中心に手順をご紹介しました。
本記事では、実際にフェイルオーバーがどのように動くのか、手順とともにご紹介したいと思います。

やりたいこと

以下のDRシナリオを仮定し、VPC内の別AZに作成したサブネットへのDRを手動で実行してみます。

  • EC2「Windows2016」はシングル構成で、東京リージョンのAZ「ap-northeast-1a」で稼働している
  • 「ap-northeast-1a」がAZ障害などで利用不可になった場合、同じVPC内の「ap-northeast-1c」のAZに作られたサブネットにEC2をフェイルオーバーする

これからの手順を実施する前に、まずはフェイルオーバーの準備ができているかを確認しましょう。
準備編で初期同期が完了したあと、以下の画面のように「Continuous Data Protection」と表示されていれば、継続的レプリケーションが実行できている状態になっています。
「Ready For Testing」と表示もできているので、フェイルオーバーもテスト実行できますね。さっそくこの「Windows2016」の行をクリックして次に進みましょう。

1.BLUEPRINTの設定

BLUEPRINTとは、名前のとおり「青写真」=「フェイルオーバー先の設定」のことです。
以下の画面に移ったら、「BLUEPRINT」タブをクリックして、フェイルオーバー先でのEC2の設定を登録します。

今回は仮定したDRシナリオに合わせ、このように入力してみました。デフォルトから変更箇所を抜粋しています。入力が完了したら、「SAVE BLUEPRINT」をクリックしてください。
(BLUEPRINTの画面は下半分しかスクロールできないので、ブラウザのウィンドウサイズを大きくして設定をおすすめします)

設定項目 設定値 説明
Machine Type Copy Source DR元のインスタンスタイプとDR先も同様にします。
Subnet DR先にしたいap-northeast-1cのサブネット DR先の既存VPCのサブネットを指定します。
Security groups 現在「Windows2016」に設定しているセキュリティグループ DR元と同様にします。
Private IP Create new 既存の別サブネット内なので、プライベートIPアドレスは新しく自動作成します。
Customにすると、利用IPアドレスを指定可能です。
Public IP (ephemeral) Yes 今回はパブリックIPアドレスを使用しているため、同じように付与しています。
IAM Role 現在「Windows2016」に設定しているIAMロール DR元と同様にします。
Initial Target Instance State Started フェイルオーバーしたDR先でEC2が起動しているようにします。
Disks SSD DR元のEBSがgp2のため、それと同様にします。

参考:Configuring a Machine’s Blueprint

2.無停止フェイルオーバーテスト

BLUEPRINTの設定が認識と合っているか、実際にDR先で利用可能な状態になっているかを確かめるために、フェイルオーバーテストが必ず必要になります。未テストだと、CLoudEndureコンソールに「Never tested!」と出ているので、テスト実行してみましょう。
「LAUNCH TARGET MACHINE」をクリックして、「Test Mode」をクリックしてください。

フェイルオーバー先のターゲットマシンを作成する確認画面が出てきます。
もしすでにDRテストなどでターゲットマシンとなるEC2を作っていた場合、古いほうは削除されてしまいますので、ご注意ください。
今回は初めて実施するため、そのまま「NEXT」をクリックします。

リカバリポイントの画面が出てきますので、復旧したい時点に合わせて選択します。
リカバリポイントは以下のように選択できます。

  • Latest:現在の時点でEBSスナップショットを取得し、それをリカバリポイントとしてフェイルオーバー先に反映する
  • 1時間以内:10分ごとにリカバリポイントを選択可能
  • 24時間以内:1時間ごとのリカバリポイントを選択可能
  • 30日以内:1日ごとのリカバリポイントを選択可能

実際にAWSコンソールではどうなっているか見てみましょう。
EBSスナップショットの画面を開くと、CloudEndureのレプリケーションサーバによって、DR対象EC2のEBSスナップショットがリカバリポイントに合わせて取得されているのがわかります。ここから復旧させるのですね。
容量の多いEBSをレプリケーションする場合はEBSスナップショット料金が結構かかりそうですね。。。

ここでは直近の状態から戻すことを想定して、「Latest」を選択して「CONTINUE WITH LAUNCH」をクリックし、テストフェイルオーバーを実施します。
実施中のログはCloudEndureコンソールの「Job Progress」から確認可能です。ステータスが「Complete Successfully」になればフェイルオーバーテストが無事に完了できています。

AWSコンソールでEC2を確認してみると、おお!ちゃんと指定したVPC内のサブネットに起動されています!30GBのディスクでDR先のEC2起動まで約6分、これは早いですね。
念のため、想定している設定になっているか(BLUEPRINTの設定が合っているか)、ログインしてシステムが利用可能かを確認してください。

注意していただきたい点は、フェイルオーバーしたEC2はキーペアの設定がないため、WindowsのAdministratorのパスワードをキーペアのままにしている場合、ログインパスワードの復号はDR元のEC2側でしかできなくなってしまいます。Administratorのパスワードはあらかじめ変更しておき、別途管理しておくなどの準備が必要になります。
Linuxも同様にキーペアの設定がAWSマネージドコンソール上でないように見えますが、鍵認証およびパスワード認証には変更ありませんので、DR前と同じユーザとキーペアでログインできます。

ここまで読んでいただいた方は「結局何が無停止フェイルオーバーテストなのか?」とお思いかもしれません。
そこでAWSマネージドコンソールを確認してみると、DR元となるEC2はもちろん停止していないのに加えて、テスト中もDR元からのリカバリポイントとなる、EBSスナップショットが継続的に取得され続けていることが画面からわかります。
つまり、常にレプリケーションを維持したままテストができるので、テスト中のデータロスはありません。安心ですね。

CludEndureコンソールに戻ると、テスト用EC2が「TARGET」として反映されています。
テストが完了してフェイルオーバーテストしたEC2が不要になりましたら、「ACTIONS」から「Delete Target Machine」を選択することでterminateすることができます。

参考:Testing a Failover

3.本番フェイルオーバー

フェイルオーバーテストを経て、設定と動作に影響がないことを確認したら、ここからが実際にDR発動した場合の手順となります。
テスト済みのEC2であること、BLUEPRINTの内容を確認して、「LAUNCH TARGET MACHINE」から「Recovery」を選択すると、実際のフェイルオーバーが実行されます。

ここからの手順はフェイルオーバーテストと同様です。リカバリポイントを選択して、EC2の復旧を実施してください。
ここではテストと同じく、「Latest」を選択してフェイルオーバーを実施しました。テストと同様、BLUEPRINTで設定した内容に沿ってターゲット側にEC2が復元されているかを確認してください。

参考:Performing a Failover

フェイルオーバー編のおわりに

CloudEndure Disaster Recoveryのフェイルオーバー動作、イメージがつきましたでしょうか。
何度でも無停止でテスト実行が可能なので、実際にテストして「もしも」のときに対応できる設定にしておきましょう。
次回は、DR発動後にフェイルバックする際の操作についてご紹介したいと思います。

[Python] 数字文字列のバリデーションチェックの実装方法

$
0
0

こんにちは、技術1課の加藤です。
今回は AWS 一切関係ない、 Python のお話。

先日、0埋めしたい数字文字列に変な値が入っていないか確認する、というバリデーションをプログラムに追加するタスクがありました。

数字文字列のチェックってそういえばどうしたらいいんだろう? と悩んだのでまとめてみました。

結論: メソッドがある

はい、これです。シラナカッタ。

Python には str 型に数値判定のメソッドが用意されています。
以下3つのメソッドが存在し、それぞれにちょこっとずつ判定できる内容が変わりますので場面によって使い分けてあげる必要があります。

  • str.isdecimal()
  • str.isdigit()
  • str.isnumeric()

3つのメソッドの違い

比較表はこんな感じ。

  str.isdecimal() str.isdigit() str.isnumeric()
半角・全角数字 True True True
特殊数字 (①など) False True True
漢数字 False False True

おわりに

数字にキャストして判定する、とかしないといけないのかなあと思っていたのでこのメソッドは便利ですね。

ちなみにこれらのメソッドはUnicode文字を対象にしているらしく、 Unicode がデフォルトの Python3 系では正常に動きますが Python2 系だと明示的に u をつけて Unicode 文字列であると指定をしてあげないとうまく動きません。

すでに Python 2系はサポート切れていますし、使う機会もないかとは思いますがこちらも覚えておくと良いことがあるかもしれません。


タグエディターで全タグが見れるわけではないのね

$
0
0

こんにちは!CSM課岩渕です。
システム構築した後、全リソースに正しいタグがちゃんと貼れているかまとめて確認したいときありますよね?
そんな時はタグエディタを使います。

タグ指定してリソースを検索したり、複数リソースのタグをまとめて一気に変更できたりします。
これは便利!
私も、システム構築完了後、タグ付け忘れがないか、確認してみました。

↓こんな感じで、東京リージョンの全リソースを対象に、
構築したシステムの全リソースに張り付けておいたタグ「Application:aaa.bbb.com」で検索してみて、、、

20個のリソースがヒットしました。これをCSVにエクスポートし、チェックしてみます。

ん? あれ、なんかおかしい、自分のタグ付け記録メモの件数と、タグエディターの検索ヒット数が全然違う。。。。
エンドポイントや、EFS、RDSのクラスター、などなど出力されてないよ。
ということで、以下を確認!

タグエディタのタグ付けでサポートされるリソース
https://docs.aws.amazon.com/ja_jp/ARG/latest/userguide/supported-resources.html#supported-resources-tagging-console

あ、そうなのね。全部は見れないのね。
タグ付け記録のメモ書き残しておいて良かった~

ということで、タグエディタで確認できないものは、自分のメモ書きを頼りにマネコンから最終チェックしました。自分用メモ大事ですね。

まとめ

このようにタグエディタでは全タグが見れるわけではないので、注意が必要ですね。
特に、特定システムの全リソースを対象に、タグをまとめて変更したり、追加したりする場合、
変更/追加漏れが発生しないよう、ご注意下さい!

Red Hat Linux 8からEFSマウントヘルパーでEFSマウント

$
0
0

こんにちは!CSM課岩渕です。
EFSを使ったシステムを初めて構築しました。構築の過程で困ったところ含め、作成からマウントまでを、初めてEFSを使うよ!という方を対象に、残しておきたいと思います。どなたかの一助になれば嬉しいです!

システム構成

まず、システム構成をざっくり。
・開発用のEC2からは開発用のEFSへ
・本番用のEC2(AZ-a、AZ-c)からは本番用のEFSへ
という構成です。
(実際には他にもCloudFront、WAF、RDS等々ありましたが、
今回はEFSに特化したブログとするため、それらは構成図から端折りました。)

EC2にはRed Hat Enterprise Linux 8(以下、RHEL8)を導入しており、
今回はこのRHEL8にEFSマウントヘルパーをインストールしてマウントしたいと思います。

EFS用のセキュリティグループ作成

では、最初にEFSのセキュリティグループを開発用、本番用とそれぞれ作っておきましょう。
・開発用EFSへは開発用EC2からのみ接続可能
・本番用EFSへは本番用EC2からのみ接続可能
という具合にしておきます。

開発EFS用セキュリティグループ(インバウンド)
タイプ プロトコル ポート範囲 ソース
NFS TCP 2049 開発用EC2のセキュリティグループIDを指定
本番EFS用セキュリティグループ(インバウンド)
タイプ プロトコル ポート範囲 ソース
NFS TCP 2049 本番用EC2のセキュリティグループIDを指定

EFSの作成

次にEFSの作成です。
EFSの作成は、以下の4ステップで作成できちゃいます。びっくりですね。
ステップ1:ネットワークアクセスを設定する
ステップ2:ファイルシステムの設定を行う
ステップ3:クライアントアクセスを設定
ステップ4:確認と作成

それでは、やってみましょう。
最初に開発用EFSから。
開発用EFSのアクセス元であるEC2はAZ-aにしかないので、EFSのマウントターゲットもAZ-aにのみ設定します。

開発用EFS:ステップ1
VPC 開発/本番用EC2の設置されたVPCを選択
マウントターゲット:AZ-a AZ-a内の開発用EC2が設置されたサブネット
上記作成の開発EFS用セキュリティグループを選択

ここでのポイントとしては、マウントターゲットをAZ-aの「開発用EC2が設置されたサブネット」にしていることです。
これは、「AWS Black Belt Online SeminarのQA」を参考にしました。

Q. 作成時のsubnet指定は、EFSをマウントするEC2インスタンスが所属しているsubnetを選択すればよいですか?

A. はい。 EC2 インスタンスが属するサブネットに EFS マウントターゲットを作成することができます。この場合、ネットワーク的にもアクセス効率の良い構成になります。
https://aws.amazon.com/jp/blogs/news/webinar-bb-efs-2018/

ステップ2ではNameタグだけ設定し、その他はデフォルト、
ステップ3もデフォルト設定のままとし、
ステップ4で「ファイルシステムの作成」を押下して作成完了させます。
※「ステップ2、3の設定についての解説が欲しかったのに~」という方、すいません!
 今回はデフォルト設定のままで先に進みます~
以下が作成結果です。

続いて本番用EFSを作成します。
本番用EFSへのアクセス元EC2はAZ-a, cの両方に存在するため、マウントターゲットもそれぞれに設定します。
また、サブネットは本番用EC2が設置されたサブネットを選択します。

本番用EFS:ステップ1
VPC 開発/本番用EC2の設置されたVPCを選択
マウントターゲット:AZ-a AZ-a内の本番用EC2が設置されたサブネット
上記作成の本番EFS用セキュリティグループを選択
マウントターゲット:AZ-c AZ-c内の本番用EC2が設置されたサブネット
上記作成の本番EFS用セキュリティグループを選択

ステップ2以降は、開発用EFSと同様にして、最後に「ファイルシステムの作成」を実行しましょう。

ここまでで、開発、本番用EFSの作成が完了しました!
上記画面の中央付近にある「Amazon EC2のマウント手順(ローカルVPCから)」というリンクをクリックして
マウント手順を確認しておきましょう。
マウントツールのインストール方法の解説が記されていますね。親切ですね~
でも、今回は、EC2がRHEL8で、EFSマウントヘルパーを使用するので、ここに記載されている手順とは違う手順でインストールします。詳細は以下で記しますね。
その前に下にスクロールして「ファイルシステムのマウント」方法も見ておきましょう。
ふむふむ、おや?
No.3のところの「現在、Amazon VPCはDNS名を使用したマウントを有効にするように設定されていません。~~[DNS解決の編集]および[DNSホスト名の編集]を選択し、両方が[はい]に設定されていることを確認します。」
ってどういうこと? 調べてみました。

DNS 解決と DNS ホスト名の両方が有効な場合、
・パブリック IP アドレスを持つインスタンスは、対応するパブリック DNS ホスト名を受け取ります。
・Amazon が提供する DNS サーバーは、Amazon が提供するプライベート DNS ホスト名を解決できます。
https://docs.aws.amazon.com/ja_jp/vpc/latest/userguide/vpc-dns.html#vpc-dns-support

ということなので、VPCの「DNS解決」、「DNSホスト名」が両方とも「有効」になっていないとAmazonが提供するDNSサーバがEFSのDNS名をプライベートアドレスに解決できないということみたいです。
VPCを確認してみましょう。
「DNSホスト名」が無効になっていますね。
じゃ、これを有効化すればいいのか!って、ちょっと待て、このVPCには既に多くのリソースが動いているんだけど有効化することの影響って何かあるのかしら? 諸先輩方に聞いたところ、問題なしという結論だったのですが、気になって眠れないのでAWSサポートに聞いてみました。

DNS ホスト名を有効にした際に注意すべき点としては、同名のパブリックホストゾーンとプライベートホストゾーンが存在した場合に、プライベートホストゾーンから優先して名前解決が行われる点でございます。

1. リゾルバー は、プライベートホストゾーンの名前がリクエスト内のドメイン名と一致するかどうかを評価します (accounting.example.com など)。次のいずれかに該当すると、一致したとみなされます。
 …  一致するプライベートホストゾーンがない場合、リゾルバー はリクエストをパブリック DNS リゾルバーに転送します。リクエストは通常の DNS クエリとして解決されます。

https://docs.aws.amazon.com/ja_jp/Route53/latest/DeveloperGuide/hosted-zone-private-considerations.html#hosted-zone-private-considerations-public-private-overlapping

ふ~ん、そうなのか~、プライベートホストゾーンって使ったこと無いし、、、今回の環境でも、使われていないので大丈夫ってことだな!
ということで「DNS ホスト名」を有効化しました。
「DNSホスト名」を有効化するには、対象VPCを選択して「アクション」-「DNSホスト名の編集」で可能です。
No.3のマウント用コマンドが表示されるようになりましたね。
開発用、本番用それぞれのマウント手順リンク画面から、確認しておきましょう。それぞれ用のファイルシステムIDがコマンド中に記載されてます。やさしい~

EFSマウントヘルパーの導入

上記でEFSの作成、及びファイルシステムIDを使ったマウントの下準備が整ったので、EC2にEFSマウントヘルパーを入れて、マウントできるようにしていきましょう!
あと少し!

以下コマンドでソースコードをGitHubから取得して、RPMパッケージをビルド&インストールします。
開発用EC2、本番用EC2(AZ-a, AZ-c)でそれぞれ実施していきます。

$ sudo yum install -y git
$ sudo yum install -y rpm-build
$ git clone https://github.com/aws/efs-utils
$ sudo yum -y install make
$ cd ./efs-utils
$ sudo make rpm
$ sudo yum -y install ./build/amazon-efs-utils*rpm

マウント確認

それでは、いよいよマウントです。
本番用EC2(AZ-a)でマウントしてみましょう
マウントコマンドは、上記で確認した「Amazon EC2のマウント手順(ローカルVPCから)」からコピペしてきましょう。

$ mkdir efs   ←マウントポイント用ディレクトリを作成
$
$ sudo mount -t efs fs-exxxxxd:/ efs  ←マウント
$
$ df -h     ←マウント後確認
Filesystem                                      Size  Used Avail Use% Mounted on
devtmpfs                                        3.7G     0  3.7G   0% /dev
tmpfs                                           3.7G     0  3.7G   0% /dev/shm
tmpfs                                           3.7G   17M  3.7G   1% /run
tmpfs                                           3.7G     0  3.7G   0% /sys/fs/cgroup
/dev/nvme0n1p2                                  200G  3.6G  197G   2% /
tmpfs                                           747M     0  747M   0% /run/user/1000
fs-exxxxxd.efs.ap-northeast-1.amazonaws.com:/  8.0E     0  8.0E   0% /home/ec2-user/efs
$ ↑マウントできましたね!
$
$ cd /home/ec2-user/efs
$ sudo touch test_from_prd_a
$ ll
total 4
-rw-r--r--. 1 root root 0 Mar 23 12:24 test_from_prd_a
$ ↑マウントしたディレクトリ内にファイル配置できました!

引き続き本番EC2(AZ-c)でマウントして、ファイル作成を試行、また、上記の本番EC2(AZ-a)で作成済みのファイルが見れることを確認してみましょう。

$ mkdir efs
$ sudo mount -t efs fs-exxxxxd:/ efs
$ cd ./efs
$ sudo touch test_from_prd_c
$ ll
total 8
-rw-r--r--. 1 root root 0 Mar 23 12:24 test_from_prd_a ←本番EC2(AZ-a)で作成済みファイル
-rw-r--r--. 1 root root 0 Mar 23 12:25 test_from_prd_c ←本番EC2(AZ-c)で今作成したファイル
$

本番用EC2のAZ-aで作成済みのファイルが見えて、AZ-c側でもファイル配置できましたね。
開発用EC2でも同様に開発用EFSのファイルシステムIDでマウントしてみて下さい。

まとめ

長くなってしまいましたが、EFSの作成から、RHEL8へのEFSマウントヘルパー導入+マウントと終わってみれば、簡単でしたね。(いつも終わってみれば簡単なんですが、、、終わるまでが長い、、、)
このブログがEFSをこれから始める、どなたかの一助になったら、こんな嬉しいことはありません。
では、また!

Amazon Chimeの会議参加者数が最大250人になりました!

$
0
0

こんにちは、技術1課の小倉です。
2020/3/30にアップデートがあり、Amazon Chimeの会議参加者数が最大250人になりました!

Amazon Chime のすべての会議においてサポートされる参加者数が最大 250 人に

Amazon Chimeはオンラインの会議システムで、今まで最大100人でしたが、本アップデートで250人に増えました。
いろいろな事情があってリモートワークをする人が増えていると思います。Amazon Chime以外にもオンラインの会議システムはいくつかありますが、Amazon Chimeも選択肢の一つに入ると考えています。

今回のアップデート以外のAmazon Chimeの主な特徴です。

  • オンライン会議の進行を妨げる要因を減らす仕組み
    • 途中から参加する人を自動的にマイクをミュート状態で参加させる
    • 25人以上の参加者の会議時はステータス変更、参加/退席時の通知音を無効

また、2020/3/6から6/30まではAmazon Chimeを初めて使用するユーザは、Amazon Chime Pro機能を無料で利用できます。この機会に使い心地などいろいろ試してみてはいかがでしょうか。

Amazon Chime 料金表

設定手順

事前設定

Amazon Chimeのコンソール画面を開きます。
Accountsの画面が表示されるので、[New account]をクリックします。

Create accountの画面で、[Account name]を入力して、[Create account]をクリックします。

Account一覧の画面でAccountが作成されたことを確認し、作成したAccount名をクリックします。

Usersの画面が表示されるので、[Invite users]をクリックします。

Invite new users画面で、追加するユーザのEメールアドレスを入力して、[Invite users]をクリックします。

Users一覧画面に戻り、ユーザが追加されていることを確認します。

追加したEメールアドレスあてに招待メールが届きますので、[Accept!]をクリックします。

Amazon ChimeのWebページが開くので、今回は[Use the web application]をクリックします([Download Amazon Chime]でもアプリを端末にインストール後に同じ設定ができます)。

Emailアドレスを入力して、[Sign in / Sign up]をクリックします。

[Login with Amazon]をクリックします。

Amazon Chimeを利用するにはAmazon.co.jpのアカウントが必要です。今回利用するEmailアドレスでAmazon.co.jpのアカウントは持っていませんので、[Amazonアカウントを作成]をクリックします。
すでにAmazon.co.jpのアカウントを持っている場合は、Amazonアカウントの作成は不要でログインをします。

アカウントを作成画面で、名前、Eメールアドレス、パスワードを入力して、[Amazonアカウントを作成]をクリックします。

設定したEメールアドレス宛にコードが届きますので、以下の画面にコードを入力して、[アカウントの作成]をクリックします。

以下の画面が表示されるので、[許可]をクリックします。

以下の画面が表示されたら設定したEメールアドレス宛に確認メールが届いていますので、メールを確認します。

以下のメールの[Verify Me]をクリックします。

以下の画面が表示されたら事前準備は完了です。

ミーティング作成手順

設定が終わったら、https://app.chime.aws/ にアクセスすると以下の画面が表示されます。

ミーティングを作成する方法は2つあります。

  • instant meeting : ミーティング用URLを簡単に作成できます。URLを共有することでオンライン会議ができます。
  • Schedule a meeting : カレンダーに登録することで時間を指定したオンライン会議のURLを作成できます。
instant meetingの作成方法

MEETINGS AND CALLSの横にある㊂マークをクリックし、[Start an instant meeting]をクリックします。

Starting an instant meetingの画面で、今回は[Generate a new ID]を選択して[Start]をクリックします(My personal meeting IDは固定のmeeting IDです)。

Choose meeting audioの画面で、[Use my computer’s mic and speakers]をクリックします。

以下の画面が表示されます。表示されているURLを共有することでオンライン会議に参加できます。(以下は、自分とTestというユーザで接続しています)。

これでinstant meetingの作成方法は終わりです。

Schedule a meetingの作成方法

MEETINGS AND CALLSの横にある㊂マークをクリックし、[Schedule a meeting]をクリックします。

Meeting Scheduling assistantの画面で、今回は[Generate a new ID]を選択して、[Next]をクリックします(Generate a new ID and require moderator to startは1人以上のモデレータの参加が必須のミーティングを作成するオプションです)。

登録したメールアドレスで利用しているカレンダー(GoogleならGoogleカレンダー、MicrosoftならMicrosoft  Outlookなど)に予定を作成します。必要な参加者以外に2に記載されている2ユーザを必須で追加し、予定のメモに3の内容を入力して予定を作成します。その後、[I am done]をクリックします。

以下、Googleカレンダーへの登録例です。

これで、共有されたURLにアクセスすることで時間を指定したオンライン会議を作成することができます。
以上でSchedule a meetingの作成方法は終わりです。

まとめ

Amazon Chimeはオンライン会議システムです。いろいろな事情でリモートワークが進む中でオンラインでの会議が増えてきていると思います。様々なオンライン会議システムがありますが、初めて使うユーザは2020/6/30までPro機能を無料で利用できますので、まずはお試しで使ってみてはいかがでしょうか。

また、本ブログの内容は2020/4/8(水) 12:00よりYouTube Liveで配信される「30分でわかる AWS UPDATE!」でも取り上げる予定ですので、ぜひご覧ください!
もしリアルタイムで見逃しても、アーカイブ動画から内容を確認できます。

AWS DeepComposerで遊んでみた その2

$
0
0

こんにちは!技術2課の濱岡です。
どうぶつの森が毎日の日課になっています。
先日、マグロを釣ろうと奮闘していたらリュウグウノツカイが釣れました。

さて、今回はAWS DeepComposerで遊んでみた第2弾です。
前回はこちらですのでよろしければ読んでみてくださいね。

前回はすでに用意されているモデルを使って遊んでみました。
今回は一歩進んで実際にモデルを作って曲を作成してみたいと思います。

アルゴリズムの選択

まずはAWS DeepComposerの画面からTrain a modelを選択します。

どのアルゴリズムでモデルを生成するか選択します。
以下の2つがあります。

  • Muse GAN
    こちらは音楽を生成するために作られたアルゴリズムになります。
  • U-Net
    こちらはもともとは画像の作成で作られたものです。
    Muse GANに比べるとシンプルなアルゴリズムで理解しやすいって書いてました。

とりあえず、私はMuse GANを選択しました。

データセットの選択

次にデータセットを選択します。
学習させるデータのことですね。
Muse GANではデータセットとしては音楽のジャンルが選べるようになっています。
どんな曲を作りたいかで選択すればいいかなと思います。
U-Netではbachのみです。

私はsymphonyを選択しました。

ハイパーパラメータの設定

以下のパラメータ値があります。
簡単ですが、解説しますね。

  • Epochs

この値は1つのデータを何回繰り返し学習させるかという値です。
機械学習では、パラメータが多すぎると1回学習しただけでは学習したパラメータに反映されないんですね。
というわけで何回も学習をさせるわけです。
ここで指定できる値は70-200までの値になります。

  • Learning rate

この値、言葉で説明するのは難しいのですが…
日本語で書くと学習率というやつです。
繰り返し学習をして中身の値を更新していくのですが、その値をどれくらいの幅で更新するかという値です。
大きいと大きく値が変化していきます。
ここで指定できるのは0.01-0.0001までの値になります。

  • Update ratio
    この値はモデルの重みの値の更新の数を表しています。
    この値が大きいほどいい感じにしてくれるみたいですが、その分学習の時間が大きくなります。
    ここで指定できるのは1-5までの値になります。

今回は難しいことを考えずに全部デフォルトの値で行きます。

あとはモデルの名前や説明などいい感じに書いてください。
そしてStart trainingを押すと学習が始まります。

ここでこんな記述が

Models usually take ~8 hours to train but can vary depending on the hyperparameters selected.

どういう値にするかによって変わるそうですが学習に8時間程度かかるんですね…

この間にどうぶつの森できますね。
マグロ釣ってきます。

そして次の日

ちゃんとモデルができました!

ためしに2つ作ったので合計16時間ほどかかりました。
(U-Netの方も作ってみたかったのです。。。)
最初、2つ平行してトレーニングをやろうとしたのですが、できませんでした。

そしてあとは前回と同様に曲を作成するだけです。
詳細はこちらをみてくださいね。

前回はすでにあるモデルを使って曲を作成しましたが、今回は自分で作ったモデルを使います。
Select a modelを押して自分が作成したモデルを選択してSelect modelを押します。

そしてあとは曲を作成するだけ!

前回と同様にきらきら星でやってみることにします。
では、最初に作ったMuse GANのモデルから


お、、、おう、、、ちょっとこれは聴けないかも、、、

次にU-Netで作ったモデル

こっちの方がよさそう….???

U-Netで作られた曲は全部ピアノで構成されていてMuse GANは色々な楽器が使われているんですね。

料金

AWSの機械学習のサービスは料金高いイメージなのですが、実際どれくらいかかるのかというのを書いておきますね。

AWS DeepComposer – トレーニング:1.26 USD/時
AWS DeepComposer – 推論:2.14 USD/時
※2020/04/07現在

となっておりますので
今回だとトレーニング1つ8時間とすると
1.26(USD/時) × 8(時間) = 10.08USD

1USD = 110円とすると約1,109円

推論に関しては料金のページに

この音楽の生成 (または推論) には通常、約 1 分 (0..0167 時間) かかります。

と書かれているので1曲作成するのに1分とすると
2.14(USD/時) × 約0.017(時間) = 0.03638(USD)

1USD = 110円とすると約4円

1つのモデルの生成して1つ曲を作成するのに約1,113円ですね。

いいお値段です笑

はじめは無料利用枠や無料トライアルもあるので活用してくださいね。
詳しくはこちらをご覧ください。

まとめ

今回は実際にモデルを作成して曲を作成してみました!

これは色々改善の余地がありそう…!!!
かなり直感的にできるので、機械学習初めてで…という方がとりあえずやってみるというのにいいかもしれません。
みなさんも色々試してみてくださいね!

以上、濱岡でした!

DTMF 入力で終了キーのカスタマイズができるようになりました

$
0
0

はじめに

こんにちは、技術 1 課の山中です。
どうぶつの森みなさんやってますか?今作から私はやり始めました。
なかなか理想の島を作るのはむずかしいですね、みんなで一緒にがんばりましょう。

ということで、今回は Amazon Connect に関するアップデートです。
今まで Amazon Connect の問い合わせフローで DTMF の入力を行う場合、終了キーとして # (シャープ) がデフォルトで設定されていました。
今回のアップデートで * (アスタリスク)## (シャープ2個)0000 など終了キーのカスタマイズができるようになりました。

Amazon Connect adds custom terminating keypress for DTMF

終了キーとしては # (シャープ), * (アスタリスク), 0から9の数字 のうち 最大 5 文字までの組み合わせ が指定可能です。

DTMF とは

そもそも DTMF とはなんでしょう?

DTMF(英: Dual-Tone Multi-Frequency)は、0から9までの数字と、*、#、A、B、C、Dの記号の計16種類の符号を、低群・高群の2つの音声周波数帯域の合成信号音で送信する方法である。別名「トーン信号」「プッシュ信号」「PB信号[1]」(PBは push button の略)とも呼ばれ、その信号音は人間の可聴域にあるため日本語では「ピ、ポ、パ」とも擬音語表記される。

DTMF -Wikipedia-

なるほど、DTMF はプッシュ式の電話でボタンを押した際になる ピ、ポ、パ という音の信号のことのようですね。
DTMF は電話をかける時以外にも、通話中に情報の入力として使用されることがあります。
例えば飛行機の予約照会などを DTMF を利用して行うことができます。
今回のアップデートの肝は、この通話中の情報入力が柔軟にできるようになった、というところのようですね。

ためしてみる

これまでのフロー

例えば飛行機の予約照会をこれまでのフローでやろうとするとどうなるのか。
前提として予約の照会には 日付と予約番号 が必要と仮定すると、Amazon Connect のコールフローは以下のように組み立てることができます。

1 の部分で日付を取得し date に格納、 2 の部分で予約番号を取得し reservation_number に格納しています。
それぞれのパラメタに格納後、 Lambda 関数に渡します。
今回用意した、 Lambda 関数はコールフローから渡された内容をログに出力するだけのシンプルなものです。

def lambda_handler(event, context):
    print(event['Details']['ContactData']['Attributes'])
    return {}

このフローを電話番号にセットし電話をかけてみましょう。

私: (電話をかける)
電話口: ご利用予定日を入力してください。入力が終わったらシャープを入力してください。
私: (0501# を入力)
電話口: 予約番号を入力してください。入力が終わったらシャープを入力してください。
私: (1234567# を入力)

切れる

この場合 Lambda 関数のログには以下が出力されました。

{'date': '0501', 'reservation_number': '1234567'}

# (シャープ) がデフォルトの終了キーとなっているので、例えば以下のように利用予定日として 0501#0502# を入力しても1つ目の # (シャープ) で入力が分割されてしまいます。
(今回だと 1 つ目の # (シャープ) 以降の入力は次の DTMF 入力として扱われている)

私: (電話をかける)
電話口: ご利用予定日を入力してください。入力が終わったらシャープを入力してください。
私: (0501#0502# を入力)

切れる

Lambda 関数のログには以下が出力されます。

{'date': '0501', 'reservation_number': '0502'}

また、 * (アスタリスク) はデフォルトでは入力キャンセルのためのキーなので、途中で * (アスタリスク) を入力すると先に入力した内容がキャンセルされます。

私: (電話をかける)
電話口: ご利用予定日を入力してください。入力が終わったらシャープを入力してください。
私: (0501* を入力)
電話口: 予約番号を入力してください。入力が終わったらシャープを入力してください。
私: (1234567* を入力)

切れる

Lambda 関数のログには以下が出力されます。

{'date': '*', 'reservation_number': '*'}

終了キーのカスタマイズ

終了キーをカスタマイズして、必要な情報を 1 つずつではなく一度に入力できるようにしてみましょう。
検証用に新しくコールフローを以下のように作成しました。
必要な情報を一度に受け付けるため、はじめに作成したコールフローの 2 の部分を削除し、受け付けた情報を input パラメタに格納するようにしました。

顧客の入力を保存する カードを開くと 終了するキープレスを指定 という項目が増えています。
今回は ## (シャープを2個) を終了キーとして設定しました。
必要な日付と予約番号は # (シャープ) で区切って入力してもらいます。

電話番号に紐付け、早速電話をかけてみます。

私: (電話をかける)
電話口: ご利用予定日と予約番号をシャープで区切って入力してください。入力が終わったらシャープを2回入力してください。
私: (0501#1234567## を入力)

切れる

Lambda 関数のログには以下が出力されました。

{'input': '0501#1234567'}

きちんと入力した内容が取得できています!

キャンセルキーのカスタマイズ

今回のアップデートで終了キーのカスタマイズだけでなく、 キャンセルキー * (アスタリスク) の無効化 もできるようになりました。
顧客の入力を保持する カードに キャンセルキーを無効化 チェックボックスが用意されていますので、チェックをつけて無効化してみましょう。

早速電話をかけ、入力時に * (アスタリスク) を入れてみます。

私: (電話をかける)
電話口: ご利用予定日と予約番号をシャープで区切って入力してください。入力が終わったらシャープを2回入力してください。
私: (05*01#1234*567## を入力)

切れる

Lambda 関数のログには以下が出力されました。

{'input': '05*01#1234*567'}

* (アスタリスク) を入力してもキャンセルされることなく、きちんと入力値として認識されています。

おわりに

システムの用途によると思いますが、ユーザに連続して情報を入力してもらうようなケースでは使いどころがありそうですね。

また、本ブログの内容は 2020/4/8(水) 12:00より YouTube Liveで配信される「30分でわかる AWS UPDATE!」でも取り上げる予定ですので、ぜひご覧ください!
もしリアルタイムで見逃しても、アーカイブ動画から内容を確認できます。

参考

Viewing all 1210 articles
Browse latest View live