20190226のAWSに関する記事は14件です。

[AWS Lambda Tips] 自作ライブラリの保管場所は Lambda Layer じゃなくて GitHub にホストした npm package でも良かった

はじめに

以下の記事で「Lambda の共通モジュールを配置する場所は Lambda Layer くらいしかない」と書いたのですが、Github 上で公開した npm package でも同様の要件が満たせることがわかりました(なんでこんな初歩的なことを見落としてたのだろう。。)。

要件

  • 複数のLambda関数から利用できる、共通のライブラリーを1箇所で管理したい

解決方法

  1. 共通のライブラリーを Lambda Layer にデプロイする
  2. 共通のライブラリーを npm package として GitHub 上で公開する

共通のライブラリーを Lambda Layer にデプロイする

共通のライブラリーを Lambda Layer にデプロイすれば、他の Lambda Function から参照することができます。

pros

  • デプロイ箇所が Lambda Layer 1箇所なので、個々のLambda Function のそれぞれにデプロイするよりも早くデプロイできる。

cons

  • 管理するインフラリソースが1つ増えるので、アーキテクチャの複雑さは少し上昇する
    • つまり、考えないといけないことが増える
      • Lambda Layer にデプロイする資産のビルドやデプロイをどのように行うか?
      • デプロイされた資産と手元の資産で差分が生じた場合に確実に新しいリソースがデプロイされるか?
      • etc.

共通のライブラリーを npm package として GitHub 上で公開する

GitHub リポジトリーを npm のリポジトリのように使える方法があることを最近知りました。
https://qiita.com/billthelizard/items/b9571a3f276fdf24597c

この方法を使うと、Lambda Layer を使わなくても、ビルドプロセスで npm install するさいに共通のライブラリーを lambda function に含めることができます。

pros

  • 管理するインフラ要素が1つ減るので、アーキテクチャの複雑度が減少する
  • それによって、考えるべきことが減る

cons

  • 個々の Lambda Function に対して同じ資材を配布するので、デプロイに時間がかかる
    • デプロイ時間は Lambda Function の数に比例して増えます
    • とくに、 dependency として含まれる npm modules のファイル数が多い場合には注意です

まとめ

Lambda Function の共通モジュールの保管場所として、 Lambda Layer は1つの選択肢ですが、
管理するインフラ要素が増えることで考えることも増えます。
少ない数の Lambda Function にデプロイする場合や、 dependency に含まれる資材のファイル数が少ない場合は、 npm package として GitHub リポジトリで配布することも検討に入れましょう。

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

[AWS SAM ハマり] ローカルでビルドしたものをpackageするときは --template-file オプションはつけない

Overview

  • AWS SAM を使ってpackageを実行するとき、 --template-file オプションでテンプレートファイルを指定してしまうと --template-file で指定したファイルの CodeUri にあるリソースをもとに package を実行しようとする
  • ローカルでビルドしたものをデプロイするときは --teplate-file オプションはつけてはいけない

問題に気づいた経緯

  • ローカルでビルドしたものをデプロイするさいに、 node_modules 配下のファイルが Lambda Function にデプロイされていない
  • .aws-sam/build 配下には node_modules 配下のリソースが生成されている

build、package 実行時のコマンドは以下でした

sam build
sam package \
  --template-file template.yaml \
  --output-template-file packaged.yaml \
  --s3-bucket my-bucket \
;

原因

AWS SAM を使ってデプロイするとき、 --template-file オプションでテンプレートファイルを指定すると --template-file で指定したファイルの CodeUri にあるリソースをデプロイしようとするため.
CodeUri にはビルド前のリソースが指定されているので、これをデプロイしようとすると node_modules 配下は含まれていないため、デプロイ後の Lambda Function にも node_modules が含まれていない.

解決方法

ローカルでビルドしたものをpackageするときは --template-file オプションはつけない

sam build
sam package \
  --output-template-file packaged.yaml \
  --s3-bucket my-bucket \
;

教訓

ツールが中でどんな処理を行っているのかちゃんと把握しよう

アーティファクトの依存関係からして当たり前っちゃ当たり前ですね。。
template.yaml (入力) => sam build => pacakged.yaml (出力) という関係なので、
次のステップで sam package を実行するときに入力として template.yaml を指定するのはおかしいわけです。
package でこのオプションを指定するのは、ローカルでビルドした資材を直接 Lambda Function にデプロイする場合です。

参考

GitHub に Issue が上がっていました
https://github.com/awslabs/aws-sam-cli/issues/908

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Ubuntuにubuntuユーザ以外でsshする設定

初期状態でssh

  • 初期状態では、rootでsshする時に、次のメッセージが表示されconnectionが切られる
Please login as the user "ubuntu" rather than the user "root".
Connection to xx.xxx.xxx.xxx closed.

解決策

  • ubuntuユーザの持つ鍵情報をsshしたいユーザに上書きする
cp /home/ubuntu/.ssh/authorized_keys /root/.ssh/authorized_keys
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

crontabでAWS CLIの実行結果の出力が一部で途切れた

crontabにてAWS CLIでjsonでデータ取得しファイルに保存しようとしたけど
なぜか途中で途切れてハマった次第

describeした時、TAGの内容も出力されていたが、
crontabで実行させるとその日本語文字列部分からすっぱり途切れてたので、
もしかして・・とTAGの内容をアルファベットにしてみたら次に日本語文字列のところで途切れる・・

PYTHONIOENCODING=UTF-8 も試したがうまく行かず・・
あとは、環境変数のLANGかLC_ALLのどちらかかな?と試したところ
LC_ALL環境変数うまくいきました。

例)セキュリティグループをdescribeした場合

#!/bin/sh

#今回の肝はコレ
export LC_ALL=ja_JP.UTF-8

/usr/local/bin/aws ec2 describe-security-groups >  describe-security-groups.json
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Proxy経由でEC2にSSHポートフォワードでRDPした話

はじめに

社内からだとProxyがきつくてssh(Secure Shell)やRDP(RemoteDisktop)が出来ないなんてことがあります。
RDPポートを空けてしまうとセキュリティ的にもリスクが高くなりますので、
AWS上の閉ざされたネットワーク内のサーバにアクセスする方法を実践してみました。

やりたいこと

Untitled Diagram-ページ9 (3).png

こっから繋いで・・・こう!!

sshで踏み台サーバに接続を行ない、sshポートフォワードで、ローカルで任意のポートを指定することで、
private(外部に接続していない)サーバへRDPで接続を行ないます。

私の環境だとポートが'80'と'443'しか空いていません。HTTPHTTPSだけですね。
sshのポートを変更することで対応していますが、Proxyによっては中身をちゃんと見てブロックしている場合もあります。

構成図

Untitled Diagram-ページ9 (1).png

ざっくりですがAWS側の構成はこんな感じですね。

BastionServer(踏み台サーバ)にはEIPを付与し、sshポートを'22' ⇒ '443'に変更しています。
NAT経由でpriveteサブネットに対してRDPポート(3389)をルーティングして下さい。
※構成については調べたら直ぐわかりますので割愛します。

設定方法

【1】.接続方法

今回は出来る男をアピールするためにOpnenSSHで接続します。

勿論、TeraTarmPuttyといったツールでも可能です。むしろそちらのほうが楽です。
私が使用しているPCがwindows7ですので、GitBashのインストール時に梱包されていたOpnenSSHを利用します。

Windows10だとPowershellに標準でインストールされていますので、Powershellで問題ありません。
念のためインストールされているか確認しておきます。

$ssh -V
OpenSSH_7.6p1, OpenSSL 1.0.2m  2 Nov 2017

認証方式は秘密鍵方式にします。特に理由はありません。
予めBastionServerでssh-keygenを利用して秘密鍵(privateKey.pem)を作成してあります。

【2】.ssh接続

ツールから設定する場合はProxyを指定する箇所がありますので簡単ですが、
直接繋ぐ場合はProxyCommandで指定する必要があります。

オプションの-iで事前に作成した秘密鍵を設定します。

-oで設定パラメータとなるproxyCommandを書き込みます。
今回は純粋なproxyとして使用するので、connect -Hで設定を行ないます。

最後はuser@globalIP -p 443でsshのポートを指定しつつBastionServerのユーザとIPを指定します。
※ 通常のsshなら'22'となります。

$ ssh -i privateKey.pem -o ProxyCommand='connect -H proxy.xxx.jp:80 %h %p' ec2-user@66.66.66.66 -p 443
Last login: Mon Feb 25 09:43:02 2019 from aaa.xxx.yyy.jp

       __|  __|_  )
       _|  (     /   Amazon Linux 2 AMI
      ___|\___|___|

https://aws.amazon.com/amazon-linux-2/
6 package(s) needed for security, out of 8 available
Run "sudo yum update" to apply all updates.
[ec2-user@ip-10-0-1-10 ~]$

問題なくssh接続することが出来ました。

【3】.sshポートフォワードでRDP接続

次はsshポートフォワードを利用して、RDP接続を行ないます。
先ほどの接続文字に、-Lのオプションをつけるだけなので簡単です。

-L (ローカルで使用するポート):(目的サーバのアドレス):(目的サーバで待ち受けてるポート番号)

・ローカルで使用するポート:13389(何でもいいです。)
・目的サーバのアドレス:10.0.2.10(グローバルではないので注意)
・目的サーバで待ち受けてるポート番号:3389(RDPデフォルトポート)

$ ssh -i privateKey.pem -o ProxyCommand='connect -H proxy.xxx.jp:80 %h %p' -L 13389:10.0.2.10:3389 ec2-user@66.66.66.66 -p 443
Last login: Tue Feb 26 09:02:48 2019 from aaa.xxx.yyy.jp

       __|  __|_  )
       _|  (     /   Amazon Linux 2 AMI
      ___|\___|___|

https://aws.amazon.com/amazon-linux-2/
6 package(s) needed for security, out of 8 available
Run "sudo yum update" to apply all updates.
[ec2-user@ip-10-0-2-10 ~]$

表示は通常のssh接続と変わりません。

sshを接続したままリモートディスクトップを開き、
localhost、または127.0.0.1と先ほど設定したポートを指定します。

image.png

入力したら「接続」ボタンを押下。

image.png

ログインパスワードの入力ウィンドウが表示されたら接続成功です!

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

terraformでrailsが動くAWSの環境を作る

ほとんど自分用のメモですが、ローカルだけに保存しておくのも微妙なので、Qiitaにあげておきます。

とあるサービスをリリースした際に使用したTerraformを軽く書き直して、githubにあげました
https://github.com/okbm/terraform-rails

ec2 + rds + https + route53で動くごく普通の構成です。
rubyのインストールはやってますが、railsのインストールは別途必要です。

対応できていないところ

  • 最新のTerraformのバージョンではない
    • 0.11.08で動かしている(現時点での最新は0.11.11)
  • stg対応
    • stgが環境的に存在していない。
    • 0.11.10でworkspaceができたのでそれでやったほうがいいと思います。
  • tfstateをs3で管理するところ

ハマったところ

  • ec2立ち上がった後にRubyのインストール等したいので、remote-execで実行しようとしたけど、インスタンスが起動するまでIPアドレス等がわからないので結局動かない
    • null_resource をつかってec2のwebが立ち上がった後に起動にした
  • 設定を書いて、apply してを繰り返しているとめんどくさくなったので、 dtan4/terraforming: Export existing AWS resources to Terraform style (tf, tfstate)を使って、コンソールで入れたやつを抜いたりした
  • フォルダ構成が未だによくわからない
    • 1ファイル1設定にしてる構成とか見かけたけど、やりすぎな気がするのでまぁ自分がわかりやすいのでいいやと思ってフィーリングでフォルダ掘った
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

パブリッククラウド認定資格まとめ

はじめに

色々なパブリッククラウドベンダーが認定資格を公開していますが、日本語でまとまっているサイトが見当たらないため整理してみました。本記事では全世界でのシェア率が高いと言われている以下のパブリッククラウドを対象にしています。

  • AWS (Amazon Web Services)
  • Microsoft Azure
  • GCP (Google Cloud Platform)
  • Alibaba Cloud

他のパブリッククラウドについてはほとんど知識がないため記載できていませんが、もし良い情報があれば追記したいと思います。

更新履歴

  • 本記事は2019年2月26日時点の情報を元に記載しています。
  • パブリッククラウドの認定資格は頻繁にアップデートがあるため本記事の情報が古くなっている場合がありえます。資格取得を計画される際には必ず公式サイトを確認頂くことを推奨します。
  • 受験料は原則税別で記載しています。
更新日 更新内容
2019年2月26日 初版作成

AWS (Amazon Web Services)

9つの認定資格と2つのベータ試験が公開されています。Foundational / Associate / Professionalの3つのレベルごとに用意されたRole-based (役割別) のグループと、Specialty (専門知識) のグループに分かれています。以下は認定資格の全体像です。

認定資格の一覧は以下の通りです。体感的な難易度は Foundational < Associate < Specialty <= Professional という感じです。詳細については以下の記事をご参照ください。

AWS認定9冠制覇したのでオススメの勉強法などをまとめてみる - Qiita

Foundational

認定資格名 認定資格名 (日本語) 試験時間 受験料 対応言語 公式サイトURL
AWS Certified Cloud Practitioner AWS 認定クラウドプラクティショナー 90分 100米ドル 英語/日本語 https://aws.amazon.com/jp/certification/certified-cloud-practitioner/

Associate

認定資格名 認定資格名 (日本語) 試験時間 受験料 対応言語 公式サイトURL
AWS Certified Solutions Architect - Associate AWS 認定ソリューションアーキテクト – アソシエイト 130分 150米ドル 英語/日本語/韓国語/中国語 https://aws.amazon.com/jp/certification/certified-solutions-architect-associate/
AWS Certified Developer - Associate AWS 認定デベロッパー – アソシエイト 130分 150米ドル 英語/日本語 https://aws.amazon.com/jp/certification/certified-developer-associate/
AWS Certified SysOps Administrator - Associate AWS 認定 SysOps アドミニストレーター – アソシエイト 130分 150米ドル 英語/日本語/中国語 https://aws.amazon.com/jp/certification/certified-sysops-admin-associate/

Professional

認定資格名 認定資格名 (日本語) 試験時間 受験料 対応言語 公式サイトURL
AWS Certified Solutions Architect – Professional AWS 認定ソリューションアーキテクト - プロフェッショナル 170分 300米ドル 英語/日本語 https://aws.amazon.com/jp/certification/certified-solutions-architect-professional/
AWS Certified DevOps Engineer – Professional AWS 認定DevOps エンジニア- プロフェッショナル 170分 300米ドル 英語/日本語 https://aws.amazon.com/jp/certification/certified-devops-engineer-professional/

Specialty

認定資格名 認定資格名 (日本語) 試験時間 受験料 対応言語 公式サイトURL
AWS Certified Advanced Networking - Specialty AWS 認定高度なネットワーキング – 専門知識 170分 300米ドル 英語/日本語 https://aws.amazon.com/jp/certification/certified-advanced-networking-specialty/
AWS Certified Big Data - Specialty AWS 認定ビッグデータ – 専門知識 170分 300米ドル 英語/日本語/韓国語/中国語 https://aws.amazon.com/jp/certification/certified-big-data-specialty/
AWS Certified Security - Specialty AWS 認定セキュリティ – 専門知識 170分 300米ドル 英語/日本語/韓国語/中国語 https://aws.amazon.com/jp/certification/certified-security-specialty/

ベータ試験

実際の試験にはまだ反映されていないベータ試験の一覧です。受付期間を過ぎているものは受験できません。

認定資格名 試験時間 受験料 対応言語 受付期間
AWS Certified Machine Learning - Specialty Beta 180分 150米ドル 英語 2018年11月26日?〜2018年12月末?
AWS Certified Alexa Skill Builder - Specialty Beta 180分 150米ドル 英語 2019年1月7日〜2019年2月1日

GCP (Google Cloud Platform)

3つの認定資格と4つのベータ試験が公開されています。Associate / Professional / G Suiteの3つのグループに分かれています。以下はグループ別の認定資格の一覧です。

Associate

認定資格名 試験時間 受験料 対応言語 公式サイトURL
Associate Cloud Engineer 120分 125米ドル 英語/日本語/スペイン語/ポルトガル語/フランス語/ドイツ語 https://cloud.google.com/certification/cloud-engineer

Professional

認定資格名 試験時間 受験料 対応言語 公式サイトURL
Professional Cloud Architect 120分 200米ドル 英語/日本語/スペイン語/ポルトガル語 https://cloud.google.com/certification/cloud-architect
Professional Data Engineer 120分 200米ドル 英語/日本語/スペイン語/ポルトガル語 https://cloud.google.com/certification/data-engineer

ベータ試験

認定資格名 試験時間 受験料 対応言語 受付状況 公式サイトURL
Professional Cloud Developer 120分 200米ドル 英語 終了 https://cloud.google.com/certification/cloud-developer
Professional Cloud Network Engineer 240分 120米ドル (正式版は200米ドル) 英語 受付中 https://cloud.google.com/certification/cloud-network-engineer
Professional Cloud Security Engineer 240分 120米ドル (正式版は200米ドル) 英語 受付中 https://cloud.google.com/certification/cloud-security-engineer
G Suite 120分 75米ドル N/A N/A https://cloud.google.com/certification/gsuite

Microsoft Azure

5つの認定資格と3つのベータ試験が公開されています。Fundamentals / Associate / Expertの3つのレベルに分かれています。

認定資格と試験の対応について

マイクロソフトの認定資格を取得するためには、認定資格に対応する1つ又は複数の試験に合格する必要があります。マイクロソフトではAzure以外にもWindowsやMicrosoft 365など大量の認定及び試験があり、各試験には独自の番号(例: 70-533)が割り振られています。
認定資格と試験番号の対応関係が覚えにくいという欠点がありましたが、最近見直しが行われており、改善されつつあります(それでもやっぱりちょっと分かりにくいですが)。

Fundamentals

認定資格名 試験名 試験時間 受験料 対応言語 公式サイトURL
Microsoft Azure Fundamentals Exam AZ-900: Microsoft Azure Fundamentals 90分 99米ドル 英語 https://www.microsoft.com/ja-jp/learning/exam-AZ-900.aspx

Associate

認定資格名 試験名 試験時間 受験料 対応言語 公式サイトURL
Azure Administrator Associate Exam AZ-100: Microsoft Azure Infrastructure and Deployment 180分 165米ドル 英語 https://www.microsoft.com/ja-jp/learning/exam-AZ-100.aspx
Exam AZ-101: Microsoft Azure Integration and Security 180分 165米ドル 英語 https://www.microsoft.com/ja-jp/learning/exam-AZ-101.aspx
Exam AZ-102: Microsoft Azure Administrator Certification Transition
(試験70-533からの移行用)
180分 99米ドル 英語 https://www.microsoft.com/ja-jp/learning/exam-AZ-102.aspx
Azure Developer Associate Exam AZ-202: Microsoft Azure Developer Certification Transition 180分 99米ドル 英語 https://www.microsoft.com/ja-jp/learning/exam-AZ-202.aspx
Exam AZ-203: Developing Solutions for Microsoft Azure 180分 165米ドル 英語 https://www.microsoft.com/ja-jp/learning/exam-AZ-203.aspx

Expert

認定資格名 試験名 試験時間 受験料 対応言語 公式サイトURL
Azure Solutions Architect Expert Exam AZ-300: Microsoft Azure Architect Technologies 180分 165米ドル 英語 https://www.microsoft.com/ja-jp/learning/exam-AZ-300.aspx
Exam AZ-301: Microsoft Azure Architect Design 180分 165米ドル 英語 https://www.microsoft.com/ja-jp/learning/exam-AZ-301.aspx
Exam AZ-302: Microsoft Azure Solutions Architect Certification Transition
(試験70-535からの移行用)
180分 99米ドル 英語 https://www.microsoft.com/ja-jp/learning/exam-AZ-302.aspx
Azure DevOps Engineer Expert Exam AZ-400: Microsoft Azure DevOps Solutions 180分 165米ドル 英語 https://www.microsoft.com/ja-jp/learning/exam-AZ-400.aspx

ベータ試験

認定資格名 試験名 試験時間 受験料 対応言語 公式サイトURL
Azure AI Engineer Associate Exam AI-100: Designing and Implementing an Azure AI Solution 220分 165米ドル 英語 https://www.microsoft.com/ja-jp/learning/exam-AI-100.aspx
Azure Data Scientist Associate Exam DP-100: Designing and Implementing a Data Science Solution on Azure 220分 165米ドル 英語 https://www.microsoft.com/ja-jp/learning/exam-DP-100.aspx
Azure Data Engineer Associate Exam DP-200: Implementing an Azure Data Solution 220分 165米ドル 英語 https://www.microsoft.com/ja-jp/learning/exam-DP-200.aspx
Exam DP-201: Designing an Azure Data Solution 220分 165米ドル 英語 https://www.microsoft.com/ja-jp/learning/exam-DP-201.aspx

Alibaba Cloud

8つの認定資格が公開されています。Associate / Professional / Expertの3つのレベルに分かれています。本記事執筆時点では受験料がディスカウントされていました。以下はレベル別の認定資格の一覧です。

Alibaba Cloud Certified Associate (ACA)

認定資格名 試験時間 受験料 対応言語 公式サイトURL
ACA Cloud Computing Certification 90分 120米ドル (元値は200米ドル) 英語 https://edu.alibabacloud.com/certification/aca_cloudcomputing
ACA Big Data Certification 90分 120米ドル (元値は200米ドル) 英語 https://edu.alibabacloud.com/certification/aca_bigdata
ACA Cloud Security Associate 90分 120米ドル (元値は200米ドル) 英語 https://edu.alibabacloud.com/certification/aca_cloudsecurity

Alibaba Cloud Certified Professional (ACP)

認定資格名 試験時間 受験料 対応言語 公式サイトURL
ACP Cloud Computing Certification 120分 120米ドル (元値は200米ドル) 英語 https://edu.alibabacloud.com/certification/acp_cloudcomputing
ACP Big Data Certification 120分 120米ドル (元値は200米ドル) 英語 https://edu.alibabacloud.com/certification/acp_bigdata
ACP Security Solutions Certification 120分 120米ドル (元値は200米ドル) 英語 https://edu.alibabacloud.com/certification/acp_security

Alibaba Cloud Certified Expert (ACE)

認定資格名 試験時間 受験料 対応言語 公式サイトURL
ACE Cloud Computing Certification 150分 168米ドル (元値は280米ドル) 英語 https://edu.alibabacloud.com/certification/ace_cloudcomputing
ACE Big Data Certification 150分 168米ドル (元値は280米ドル) 英語 https://edu.alibabacloud.com/certification/ace_bigdata
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

パブリッククラウド認定資格まとめ AWS/Azure/GCP/Alibaba

はじめに

色々なパブリッククラウドベンダーが認定資格を公開していますが、日本語でまとまっているサイトが見当たらないため整理してみました。
本記事では全世界でのシェア率が高いと言われている以下のパブリッククラウドを対象にしています。

  • AWS (Amazon Web Services)
  • Microsoft Azure
  • GCP (Google Cloud Platform)
  • Alibaba Cloud

他のパブリッククラウドについてはほとんど知識がないため記載できていませんが、もし良い情報があれば追記したいと思います。

更新履歴など

更新日 更新内容
2019年2月26日 初版作成
  • パブリッククラウドの認定資格は頻繁にアップデートがあるため本記事の情報が古くなっている場合がありえます。資格取得を計画される際には必ず公式サイトを確認頂くことを推奨します。
  • 受験料は原則税別で記載しています。

AWS (Amazon Web Services)

9つの認定資格と2つのベータ試験が公開されています。Foundational / Associate / Professionalの3つのレベルごとに用意されたRole-based (役割別) のグループと、Specialty (専門知識) のグループに分かれています。以下は認定資格の全体像です。

認定資格の一覧は以下の通りです。体感的な難易度は Foundational < Associate < Specialty <= Professional という感じです。詳細については以下の記事をご参照ください。

AWS認定9冠制覇したのでオススメの勉強法などをまとめてみる - Qiita

Foundational

認定資格名 認定資格名 (日本語) 試験時間 受験料 対応言語
AWS Certified Cloud Practitioner AWS 認定クラウドプラクティショナー 90分 100米ドル 英語/日本語

Associate

認定資格名 認定資格名 (日本語) 試験時間 受験料 対応言語
AWS Certified Solutions Architect - Associate AWS 認定ソリューションアーキテクト – アソシエイト 130分 150米ドル 英語/日本語/韓国語/中国語
AWS Certified Developer - Associate AWS 認定デベロッパー – アソシエイト 130分 150米ドル 英語/日本語
AWS Certified SysOps Administrator - Associate AWS 認定 SysOps アドミニストレーター – アソシエイト 130分 150米ドル 英語/日本語/中国語

Professional

認定資格名 認定資格名 (日本語) 試験時間 受験料 対応言語
AWS Certified Solutions Architect – Professional AWS 認定ソリューションアーキテクト - プロフェッショナル 170分 300米ドル 英語/日本語
AWS Certified DevOps Engineer – Professional AWS 認定DevOps エンジニア- プロフェッショナル 170分 300米ドル 英語/日本語

Specialty

認定資格名 認定資格名 (日本語) 試験時間 受験料 対応言語
AWS Certified Advanced Networking - Specialty AWS 認定高度なネットワーキング – 専門知識 170分 300米ドル 英語/日本語
AWS Certified Big Data - Specialty AWS 認定ビッグデータ – 専門知識 170分 300米ドル 英語/日本語/韓国語/中国語
AWS Certified Security - Specialty AWS 認定セキュリティ – 専門知識 170分 300米ドル 英語/日本語/韓国語/中国語

ベータ試験

実際の試験にはまだ反映されていないベータ試験の一覧です。受付期間を過ぎているものは受験できません。

認定資格名 試験時間 受験料 対応言語 受付期間
AWS Certified Machine Learning - Specialty Beta 180分 150米ドル 英語 2018年11月26日?〜2018年12月末?
AWS Certified Alexa Skill Builder - Specialty Beta 180分 150米ドル 英語 2019年1月7日〜2019年2月1日

Microsoft Azure

5つの認定資格と3つのベータ試験が公開されています。Fundamentals / Associate / Expertの3つのレベルに分かれています。

認定資格と試験の対応について

マイクロソフトの認定資格を取得するためには、認定資格に対応する1つ又は複数の試験に合格する必要があります。マイクロソフトではAzure以外にもWindowsやMicrosoft 365など大量の認定及び試験があり、各試験には独自の番号(例: 70-533)が割り振られています。
認定資格と試験番号の対応関係が覚えにくいという欠点がありましたが、最近見直しが行われており、改善されつつあります(それでもやっぱりちょっと分かりにくいですが)。

Fundamentals

認定資格名 試験名 試験時間 受験料 対応言語
Microsoft Azure Fundamentals Exam AZ-900: Microsoft Azure Fundamentals 90分 99米ドル 英語

Associate

認定資格名 試験名 試験時間 受験料 対応言語
Azure Administrator Associate Exam AZ-100: Microsoft Azure Infrastructure and Deployment 180分 165米ドル 英語
Exam AZ-101: Microsoft Azure Integration and Security 180分 165米ドル 英語
Exam AZ-102: Microsoft Azure Administrator Certification Transition
(試験70-533からの移行用)
180分 99米ドル 英語
Azure Developer Associate Exam AZ-202: Microsoft Azure Developer Certification Transition 180分 99米ドル 英語
Exam AZ-203: Developing Solutions for Microsoft Azure 180分 165米ドル 英語

Expert

認定資格名 試験名 試験時間 受験料 対応言語
Azure Solutions Architect Expert Exam AZ-300: Microsoft Azure Architect Technologies 180分 165米ドル 英語
Exam AZ-301: Microsoft Azure Architect Design 180分 165米ドル 英語
Exam AZ-302: Microsoft Azure Solutions Architect Certification Transition
(試験70-535からの移行用)
180分 99米ドル 英語
Azure DevOps Engineer Expert Exam AZ-400: Microsoft Azure DevOps Solutions 180分 165米ドル 英語

ベータ試験

認定資格名 試験名 試験時間 受験料 対応言語
Azure AI Engineer Associate Exam AI-100: Designing and Implementing an Azure AI Solution 220分 165米ドル 英語
Azure Data Scientist Associate Exam DP-100: Designing and Implementing a Data Science Solution on Azure 220分 165米ドル 英語
Azure Data Engineer Associate Exam DP-200: Implementing an Azure Data Solution 220分 165米ドル 英語
Exam DP-201: Designing an Azure Data Solution 220分 165米ドル 英語

GCP (Google Cloud Platform)

3つの認定資格と4つのベータ試験が公開されています。Associate / Professional / G Suiteの3つのグループに分かれています。以下はグループ別の認定資格の一覧です。

Associate

認定資格名 試験時間 受験料 対応言語
Associate Cloud Engineer 120分 125米ドル 英語/日本語/スペイン語/ポルトガル語/フランス語/ドイツ語

Professional

認定資格名 試験時間 受験料 対応言語
Professional Cloud Architect 120分 200米ドル 英語/日本語/スペイン語/ポルトガル語
Professional Data Engineer 120分 200米ドル 英語/日本語/スペイン語/ポルトガル語

ベータ試験

認定資格名 試験時間 受験料 対応言語 受付状況
Professional Cloud Developer 120分 200米ドル 英語 終了
Professional Cloud Network Engineer 240分 120米ドル (正式版は200米ドル) 英語 受付中
Professional Cloud Security Engineer 240分 120米ドル (正式版は200米ドル) 英語 受付中
G Suite 120分 75米ドル N/A N/A

Alibaba Cloud

8つの認定資格が公開されています。Associate / Professional / Expertの3つのレベルに分かれています。本記事執筆時点では受験料がディスカウントされていました。以下はレベル別の認定資格の一覧です。

Alibaba Cloud Certified Associate (ACA)

認定資格名 試験時間 受験料 対応言語
ACA Cloud Computing Certification 90分 120米ドル (元値は200米ドル) 英語
ACA Big Data Certification 90分 120米ドル (元値は200米ドル) 英語
ACA Cloud Security Associate 90分 120米ドル (元値は200米ドル) 英語

Alibaba Cloud Certified Professional (ACP)

認定資格名 試験時間 受験料 対応言語
ACP Cloud Computing Certification 120分 120米ドル (元値は200米ドル) 英語
ACP Big Data Certification 120分 120米ドル (元値は200米ドル) 英語
ACP Security Solutions Certification 120分 120米ドル (元値は200米ドル) 英語

Alibaba Cloud Certified Expert (ACE)

認定資格名 試験時間 受験料 対応言語
ACE Cloud Computing Certification 150分 168米ドル (元値は280米ドル) 英語
ACE Big Data Certification 150分 168米ドル (元値は280米ドル) 英語
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

S3でWebSite Hostingした時にIPアドレスで制限をかける

S3にstaticなHTMLをおいて、それを特定のIPからのみ見えるようにする方法。

いつも迷ってしまうので備忘録で書いておく。

Access Control List は変更する必要なし。( List objects の everyone も - のまま)
バケットの中のファイルもPrivateな設定のままでOK。

{
    "Version": "2012-10-17",
    "Id": "Policy1551163444222",
    "Statement": [
        {
            "Sid": "Stmt1551163442413",
            "Effect": "Deny",
            "Principal": "*",
            "Action": "s3:*",
            "Resource": "arn:aws:s3:::[Bucket Name]/*",
            "Condition": {
                "NotIpAddress": {
                    "aws:SourceIp": "[IP]"
                }
            }
        },
        {
            "Sid": "Stmt1551164678580",
            "Effect": "Allow",
            "Principal": "*",
            "Action": "s3:*",
            "Resource": "arn:aws:s3:::[Bucket Name]/*",
            "Condition": {
                "IpAddress": {
                    "aws:SourceIp": "[IP]"
                }
            }
        }
    ]
}

いつも思ったように動かなくてもがくのは Resource 部分の最後に /* をつけ忘れて、ファイル見れないじゃん…ってなる。

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Athena Workgroup小ネタ

はじめに

2019/2/18にAthenaのWorkgroup機能がリリースされました。
https://aws.amazon.com/jp/about-aws/whats-new/2019/02/athena_workgroups/

Workgroup機能のまとめると以下になります。

  • Workgroupに対してクエリ上限を設定可能
  • Workgroup単位でスキャン量などのメトリクスが取得可能
  • Workgroupnに対してタグ付け可能でコストアロケーションタグとしても使用可能(Workgroup単位でのコスト管理が可能)

image.png

https://docs.aws.amazon.com/awsaccountbilling/latest/aboutv2/custom-tags.html

使い方

https://docs.aws.amazon.com/athena/latest/ug/workgroups.html

Workgroupの作成
image.png
image.png

WorkgroupにアクセスできるようににIAMポリシーを修正する。
https://docs.aws.amazon.com/athena/latest/ug/example-policies-workgroup.html#example4-run-in-primary-access

workgroupの使用

任意のWorkgroupを選択してSwitch Wrokgroupをクリック
image.png

一番右側のWorkgroupの表示が変わります。
image.png

image.png

いつもどおりクエリする

primary workgroupは、デフォルトで作成されているWorkgroupで、明示的にWorkgroupを選択肢ない場合は、こちらが使用される。
https://docs.aws.amazon.com/athena/latest/ug/workgroups-create-update-delete.html#specify-wkgroup-to-athena-in-which-to-run-queries

小ネタ

Q.
デフォルトのPrimary workgroupの使用を禁止できるか?

A.
Primaryグループは削除はできないのですが、無効化可能です、そのためprimary以外のワークグループ選択を強制は、primaryグループを無効化することで可能です。
image.png

IAMポリシーのリソースでWorkgroupを指定して制御も可能です。

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "VisualEditor0",
            "Effect": "Deny",
            "Action": [
                "athena:*"
            ],
            "Resource": "arn:aws:athena:ap-northeast-1:**********:workgroup/primary"
        },
        {
            "Sid": "VisualEditor1",
            "Effect": "Allow",
            "Action": [
                "athena:*"
            ],
            "Resource": "arn:aws:athena:ap-northeast-1:**********:workgroup/test"
        }
    ]
}

上記のIAMポリシーが付与されているIAMユーザがPrimary workgroupにSwtich使用とするとエラーになります。

image.png

Q.
デフォルトワークグループを管理者の指定グループに設定することは可能でしょうか。

A.
デフォルトワークグループを指定のグループにするのはできませんが、一度SwitchGroupすれば次回の接続も設定が維持できるので、ある程度はこちらで対応できる。

その他、何かあれば順次追加予定(2019/2/26)

お約束

投稿内容は私個人の意見であり、所属企業・部門見解を代表するものではありません。

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Lambdaをboto3で構築する

Lambdaを自動構築するプログラムを作成する機械がありました。
boto3でやっている記事を探したのですが、文献が多くなく、
特に最近機能が追加されたLayer周りの記事はほぼないので、自分で書いてしまおうと。
最終的には公式ドキュメント読めば済むと思いますが、自分のためを含めて記事にします。

前提

使用言語はPython2.71(おそらくPython3.6でも動きますが、未確認)
boto3のバージョンは1.9.97を使用
lambdaを手で構築したことがあり、ある程度の仕組みや用語がわかる(例:ハンドラやroleなどがわかる)

本題

まずはLambdaの作成

lambdaに適応するコードはZIP圧縮して任意の場所に用意しておきます。
(今回の例では zip/file/path というpathに用意)
lambdaを実行するためのroleは事前に作成して用意しておきます。
Timeout、MemorySize、は最大で用意します(未指定でも可。その場合初期値)
環境変数にも任意の値を入れます。(未指定でも可。その場合、環境変数はなし)

region = "us-east-1"
access_key = "xxxxxxxx"
secret_key = "yyyyyyyy"
lambda_ = boto3.client('lambda', region_name=region, aws_access_key_id=access_key, aws_secret_access_key=secret_key)
iam = boto3.client("iam", region_name=region, aws_access_key_id=access_key, aws_secret_access_key=secret_key)

role = iam.get_role(RoleName="role-name")["Role"]["Arn"]
zip_file = open("zip/file/path", "rb").read()

lambda_.create_function(
    FunctionName="test_func", #関数名
    Runtime="python2.7", #ランタイム
    Role=role, #実行ロール
    Handler="lambda_function.lambda_handler", #ハンドラ
    Code={"ZipFile": zip_file}, #ソースコード(ZIPファイルアップロード)
    Timeout=60*15, #タイムアウト(秒数)
    MemorySize=3008, #メモリ(MB)
    Environment={ "Variables":{'AAA':'aaa', 'BBB':'bbb'} }, #環境変数
)

ZIPファイルでは上げられない大きさのファイル(10MB以上)を上げる場合は、コードをZIP圧縮してS3にアップします。そして、create_functionのCodeに指定するDictを {'S3Bucket':'bucket_name','S3Key': 'file_key'} にするとS3にあげたコードを適応することができます。

作ったLambda関数にトリガを設定する

boto3のLambdaクラスのドキュメントを見ても、それらしきメソッドが見つからなかったのですが、
どうやらトリガを引きたいもののリソースをいじるようです。
下記の例はS3にファイルが入ったときに実行するトリガを設定した場合

#トリガを付けるためにS3からの実行権の付与
self.lambda_.add_permission(
    FunctionName="test_func",
    StatementId='1', #権限の固有ID。以降権限を書き換えるときはここで指定した値で更新する。
    Action='lambda:InvokeFunction',
    Principal='s3.amazonaws.com',
    SourceArn="arn:aws:s3:::bucketname",
)

#トリガの設定
FunctionArn = create_function_ret['FunctionArn'] #create_functionの戻り値
s3Resource.BucketNotification(bucketname).put(
    NotificationConfiguration={'LambdaFunctionConfigurations': [{
        'LambdaFunctionArn': FunctionArn,
        'Events': ['s3:ObjectCreated:*'],
        'Filter': { 'Key': { 'FilterRules':[{'Name':'prefix', 'Value':'lambda_trigger/'}] } }
    },]}
)

Lambda関数のArnはcreate_function()を実行したときのReturnにFunctionArnというフィールドで格納されているので、関数作成と一連で行うのであれば、そこから持ってくるのが楽。

登録したLambda関数の設定値を変更

ソースコードの修正とその他の設定の修正は別メソッドを使用することになるので注意。
なお、FunctionName以外は省略可なので、更新する部分のみ値を渡すのでOK

#ソースコードの変更
lambda_.update_function_code(
    FunctionName="test_func", #関数名
    ZipFile=open("zip/file/path", "rb").read(),
)

#その他の設定の変更
lambda_.update_function_configuration(
    FunctionName="test_func", #関数名
    Runtime="python2.7", #ランタイム
    Role=role, #実行ロール
    Handler="lambda_function.lambda_handler", #ハンドラ
    Timeout=60*15, #タイムアウト(秒数)
    MemorySize=3008, #メモリ(MB)
    Environment={ "Variables":{'AAA':'aaa', 'BBB':'bbb'} }, #環境変数
)

Layerを登録する

今回はあらかじめ手で登録しておくという設計にしたので、boto3での構築は未実施。
以下の手順をやる場合はあらかじめ、手動でLayerを登録しておいてください。

Lambda関数にLayerを付ける

create_functionのLayersパラメータを指定するだけでLayerを付けることができます。

#Lambda関数を新規登録する場合
res = lambda_.create_function(
    FunctionName="test_func", #関数名
    Runtime="python2.7", #ランタイム
    Role=role, #実行ロール
    Handler="lambda_function.lambda_handler", #ハンドラ
    Code={"ZipFile": zip_file}, #ソースコード(ZIPファイルアップロード)
    Layers=['arn',], # <=NEW! 上記で登録したLayerのArnを調べて入れる
)

#作成済みのLambda関数の設定を変更する場合
lambda_.update_function_configuration(
    FunctionName="test_func", #関数名
    Layers=['arn',],
)

別アカウントのLayerを付ける

別アカウントのLayerを紐づけるためには、そのLayerにアクセス権限を付ける必要がある。
なお、私がはまったことですが、別リージョンのLayerはつけられないので注意。

aws_id = '123456789012'

#Layerが登録されているアカウントの情報
layer_region = "us-east-1"
layer_access_key = "aaaaaaaa"
layer_secret_key = "bbbbbbbb"
layer_lambda = boto3.client('lambda', region_name=region, aws_access_key_id=access_key, aws_secret_access_key=secret_key)

#当該のアクセス権の削除を試みる(なぜこんなこと行うかは後述)
try:
    layer_lambda.remove_layer_version_permission(
        LayerName='common', #Layerの名前
        VersionNumber=1, #Layerのバージョン
        StatementId=1, #削除する権限の固有ID。
    )
except ClientError as e:
    #もしルールがない場合は下記のメッセージでエラーが出るので、無視する。
    if e.response['Error']['Code'] == 'ResourceNotFoundException': pass
    else: raise

#アクセス権を新規付け直し
layer_lambda.add_layer_version_permission(
    LayerName='common', #Layerの名前
    VersionNumber=1, #Layerのバージョン
    StatementId='1', #権限の固有ID。権限を削除するときはここで指定した値で更新する。
    Action='lambda:GetLayerVersion',
    Principal=aws_id, #このLayerに許可するAWSアカウント
)

#以下、前述の方法でLayerを付けられるようになる

権限は、既に登録されているか確認したり、上書きすることができない。(boto3で行う方法があったら教えてください)
そのため、複数回登録してしまう可能性が有ったり、設定を変更したりする場合は、一度消してから再登録する。
手元で試した限りでは、LayerをLambdaに紐づけた後は権限を外してもLayerが外れることも動作しないことも起こらなかったので、この方法で問題ないし、紐づけ後に毎回消してしまっても問題ないかもしれない。

まとめ

lambda周りのboto3(特にLayer周り)は正直あまり使いやすいとは言えませんでしたが、上記を使って基本的な事はできるようになりました。
使いやすさに関しては次版以降のアップデートで強化されていくことに期待しましょう。

参考

https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/lambda.html


  1. Python2.7はサポート終了が間近にせまっているので、新規開発する方は私を見習わずに3系を使ってください。 

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

[Amazon Connect] 代表電話をLEXを使って個人に転送し、転送できない場合は録音メッセージを残す仕組みを作ってみた

1 はじめに

Amazon Connect(以下、Connect)を使用して、代表電話にかかってきた電話をLEXを使って個人に転送して、LEXで個人を認識できない場合は録音メッセージを残してメールで連絡する仕組みを作ってみました。

2 ユーザシナリオ

ユーザシナリオは以下の通りです。

Connect)お電話ありがとうございます。こちらは〇〇株式会社です。
Connect)お話になりたい担当者の名前を浅野、佐々木、田中のようにおっしゃってください。

<登録済の担当者の場合>
User)佐々木さん
Connect)佐々木におつなぎします。
Connect)※個人電話への転送

<登録されていない担当者の場合>
User)中田さん
Connect)認識できませんでした。電話を転送させていただきます。
Connect)留守録にメッセージを残していただければ折り返しご連絡させていただきます。
Connect)20秒以内にメッセージをお話しください。
User)※メッセージを録音
Connect)メッセージをお預かりしました。電話をお切りください。
Connect)※S3に通話録音が作成されたらML(Mailing List)へメールで連絡

3 構成イメージ

全体の構成は以下のようなイメージです。

概要図.PNG

4 問合せフロー

今回の仕組みでは、2つの問合せフローが使用されています。

1つ目のフローで、代表電話にかかってきた電話をLEXを使って個人に転送して、2つ目のフローでLEXで個人を認識できない場合の録音メッセージを残す仕組みを実装しています。

①1つ目の問合せフロー

フロー1.PNG

②2つ目の問合せフロー

フロー2.PNG

5 LEX設定

LEXは日本語対応していないので、担当者の名前をローマ字で intents に担当者の名前を登録します。
作成したLEXはConnectの問合せフローから呼び出します。

LEX.PNG

6 Lambda設定

ConnectからS3に通話録音のファイル(Wavファイル)が保存されたタイミングで、Lambdaを起動するように設定します。

Lambda1.PNG

Lambda3.PNG

今回のLambdaはPython3.6で作成してます。SNSのトピック、メッセージ、件名を設定します。

lambda_function.py
import boto3
import datetime

now = datetime.datetime.today()

sns = boto3.client('sns')
TOPIC_ARN = u'arn:aws:sns:ap-northeast-1:999999999999:xxxxxxxxSendMail'
msg = u'〇〇株式会社の代表電話に通話が録音されました。録音内容を確認してください。\nAmazonS3/connect-xxxxx/connect/xxxxx/CallRecordings'
subject = u'〇〇株式会社の代表電話に通話が録音されました'

def lambda_handler(event, context):
    request = {
    'TopicArn': TOPIC_ARN,
    'Message': msg,
    'Subject': subject
    }
    response = sns.publish(**request)
    return 'Successfully mail processed records'

7 SNS設定

トピックを作成し、サブスクリプションで代表電話のMLにメールを送信する設定を実施します。

SNS.PNG

8 最後に

今回は、Connectと日本語対応していないLEXを組み合わせて担当者への電話転送する機能、および担当者に転送できない場合の留守録機能を実装しました。

通話録音のファイル(Wavファイル)をGoogle Speech APIなどを用いてテキスト化してメールに添付してあげればわざわざ留守録内容を聞かなくても良くなりますが、そこまでの実装は今後実施していく予定です。

9 参考にさせていただいたリンク

https://dev.classmethod.jp/cloud/aws/amazon-connect-voice-message/
https://qiita.com/ai-2723/items/dab1df52eda4d57f7539

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

[Amazon Connect] 会社の固定電話をLEXを使って個人に転送し、転送できない場合は録音メッセージを残す仕組みを作ってみた ~電話番はもう嫌だ!!~

1 はじめに

Amazon Connect(以下、Connect)を使用して、会社の固定電話にかかってきた電話をLEXを使って個人に転送して、LEXで個人を認識できない場合は録音メッセージを残してメールで連絡する仕組みを作ってみました。

2 ユーザシナリオ

ユーザシナリオは以下の通りです。

Connect)お電話ありがとうございます。こちらは〇〇株式会社です。
Connect)お話になりたい担当者の名前を浅野、佐々木、田中のようにおっしゃってください。

<登録済の担当者の場合>
User)佐々木さん
Connect)佐々木におつなぎします。
Connect)※個人電話への転送

<登録されていない担当者の場合>
User)中田さん
Connect)認識できませんでした。電話を転送させていただきます。
Connect)留守録にメッセージを残していただければ折り返しご連絡させていただきます。
Connect)20秒以内にメッセージをお話しください。
User)※メッセージを録音
Connect)メッセージをお預かりしました。電話をお切りください。
Connect)※S3に通話録音が作成されたらML(Mailing List)へメールで連絡

3 構成イメージ

全体の構成は以下のようなイメージです。

概要図.PNG

4 問合せフロー

今回の仕組みでは、2つの問合せフローが使用されています。

1つ目のフローで、代表電話にかかってきた電話をLEXを使って個人に転送して、2つ目のフローでLEXで個人を認識できない場合の録音メッセージを残す仕組みを実装しています。

①1つ目の問合せフロー

フロー1.PNG

②2つ目の問合せフロー

フロー2.PNG

5 LEX設定

LEXは日本語対応していないので、担当者の名前をローマ字で intents に担当者の名前を登録します。
作成したLEXはConnectの問合せフローから呼び出します。

LEX.PNG

6 Lambda設定

ConnectからS3に通話録音のファイル(Wavファイル)が保存されたタイミングで、Lambdaを起動するように設定します。

Lambda1.PNG

Lambda3.PNG

今回のLambdaはPython3.6で作成してます。SNSのトピック、メッセージ、件名を設定します。

lambda_function.py
import boto3
import datetime

now = datetime.datetime.today()

sns = boto3.client('sns')
TOPIC_ARN = u'arn:aws:sns:ap-northeast-1:999999999999:xxxxxxxxSendMail'
msg = u'〇〇株式会社の代表電話に通話が録音されました。録音内容を確認してください。\nAmazonS3/connect-xxxxx/connect/xxxxx/CallRecordings'
subject = u'〇〇株式会社の代表電話に通話が録音されました'

def lambda_handler(event, context):
    request = {
    'TopicArn': TOPIC_ARN,
    'Message': msg,
    'Subject': subject
    }
    response = sns.publish(**request)
    return 'Successfully mail processed records'

7 SNS設定

トピックを作成し、サブスクリプションで代表電話のMLにメールを送信する設定を実施します。

SNS.PNG

8 最後に

今回は、Connectと日本語対応していないLEXを組み合わせて担当者への電話転送する機能、および担当者に転送できない場合の留守録機能を実装しました。

通話録音のファイル(Wavファイル)をGoogle Speech APIなどを用いてテキスト化してメールに添付してあげればわざわざ留守録内容を聞かなくても良くなりますが、そこまでの実装は今後実施していく予定です。

9 参考にさせていただいたリンク

https://dev.classmethod.jp/cloud/aws/amazon-connect-voice-message/
https://qiita.com/ai-2723/items/dab1df52eda4d57f7539

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

[Amazon Connect] 会社の固定電話をLEXを使って個人に転送し、転送できない場合は録音メッセージを残す仕組みを作ってみた~電話番はもう嫌だ!!~

1 はじめに

Amazon Connect(以下、Connect)を使用して、会社の固定電話にかかってきた電話をLEXを使って個人に転送して、LEXで個人を認識できない場合は録音メッセージを残してメールで連絡する仕組みを作ってみました。
(会社の固定電話からAmazon Connectへの転送はPBXで設定)

2 ユーザシナリオ

ユーザシナリオは以下の通りです。

Connect)お電話ありがとうございます。こちらは〇〇株式会社です。
Connect)お話になりたい担当者の名前を浅野、佐々木、田中のようにおっしゃってください。

<登録済の担当者の場合>
User)佐々木さん
Connect)佐々木におつなぎします。
Connect)※個人電話への転送

<登録されていない担当者の場合>
User)中田さん
Connect)認識できませんでした。電話を転送させていただきます。
Connect)留守録にメッセージを残していただければ折り返しご連絡させていただきます。
Connect)20秒以内にメッセージをお話しください。
User)※メッセージを録音
Connect)メッセージをお預かりしました。電話をお切りください。
Connect)※S3に通話録音が作成されたらML(Mailing List)へメールで連絡

3 構成イメージ

全体の構成は以下のようなイメージです。

概要図.PNG

4 問合せフロー

今回の仕組みでは、2つの問合せフローが使用されています。

1つ目のフローで、代表電話にかかってきた電話をLEXを使って個人に転送して、2つ目のフローでLEXで個人を認識できない場合の録音メッセージを残す仕組みを実装しています。

①1つ目の問合せフロー

フロー1.PNG

②2つ目の問合せフロー

フロー2.PNG

5 LEX設定

LEXは日本語対応していないので、担当者の名前をローマ字で intents に担当者の名前を登録します。
作成したLEXはConnectの問合せフローから呼び出します。

LEX.PNG

6 Lambda設定

ConnectからS3に通話録音のファイル(Wavファイル)が保存されたタイミングで、Lambdaを起動するように設定します。

Lambda1.PNG

Lambda3.PNG

今回のLambdaはPython3.6で作成してます。SNSのトピック、メッセージ、件名を設定します。

lambda_function.py
import boto3
import datetime

now = datetime.datetime.today()

sns = boto3.client('sns')
TOPIC_ARN = u'arn:aws:sns:ap-northeast-1:999999999999:xxxxxxxxSendMail'
msg = u'〇〇株式会社の代表電話に通話が録音されました。録音内容を確認してください。\nAmazonS3/connect-xxxxx/connect/xxxxx/CallRecordings'
subject = u'〇〇株式会社の代表電話に通話が録音されました'

def lambda_handler(event, context):
    request = {
    'TopicArn': TOPIC_ARN,
    'Message': msg,
    'Subject': subject
    }
    response = sns.publish(**request)
    return 'Successfully mail processed records'

7 SNS設定

トピックを作成し、サブスクリプションで代表電話のMLにメールを送信する設定を実施します。

SNS.PNG

8 最後に

今回は、Connectと日本語対応していないLEXを組み合わせて担当者への電話転送する機能、および担当者に転送できない場合の留守録機能を実装しました。

通話録音のファイル(Wavファイル)をGoogle Speech APIなどを用いてテキスト化してメールに添付してあげればわざわざ留守録内容を聞かなくても良くなりますが、そこまでの実装は今後実施していく予定です。

9 参考にさせていただいたリンク

https://dev.classmethod.jp/cloud/aws/amazon-connect-voice-message/
https://qiita.com/ai-2723/items/dab1df52eda4d57f7539

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む