- 投稿日:2019-02-26T23:35:07+09:00
[AWS Lambda Tips] 自作ライブラリの保管場所は Lambda Layer じゃなくて GitHub にホストした npm package でも良かった
はじめに
以下の記事で「Lambda の共通モジュールを配置する場所は Lambda Layer くらいしかない」と書いたのですが、Github 上で公開した npm package でも同様の要件が満たせることがわかりました(なんでこんな初歩的なことを見落としてたのだろう。。)。
要件
- 複数のLambda関数から利用できる、共通のライブラリーを1箇所で管理したい
解決方法
- 共通のライブラリーを Lambda Layer にデプロイする
- 共通のライブラリーを 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 リポジトリで配布することも検討に入れましょう。
- 投稿日:2019-02-26T22:08:59+09:00
[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
- 投稿日:2019-02-26T21:27:47+09:00
Ubuntuにubuntuユーザ以外でsshする設定
- 投稿日:2019-02-26T20:22:38+09:00
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
- 投稿日:2019-02-26T19:02:59+09:00
Proxy経由でEC2にSSHポートフォワードでRDPした話
はじめに
社内からだと
Proxy
がきつくてssh(Secure Shell)やRDP(RemoteDisktop)が出来ないなんてことがあります。
RDPポートを空けてしまうとセキュリティ的にもリスクが高くなりますので、
AWS
上の閉ざされたネットワーク内のサーバにアクセスする方法を実践してみました。やりたいこと
こっから繋いで・・・こう!!
sshで踏み台サーバに接続を行ない、sshポートフォワードで、ローカルで任意のポートを指定することで、
private(外部に接続していない)サーバへRDPで接続を行ないます。私の環境だとポートが'80'と'443'しか空いていません。
HTTP
とHTTPS
だけですね。
sshのポートを変更することで対応していますが、Proxy
によっては中身をちゃんと見てブロックしている場合もあります。構成図
ざっくりですが
AWS
側の構成はこんな感じですね。BastionServer(踏み台サーバ)には
EIP
を付与し、sshポートを'22' ⇒ '443'に変更しています。
NAT経由でpriveteサブネットに対してRDPポート(3389)をルーティングして下さい。
※構成については調べたら直ぐわかりますので割愛します。設定方法
【1】.接続方法
今回は出来る男をアピールするために
OpnenSSH
で接続します。勿論、
TeraTarm
やPutty
といったツールでも可能です。むしろそちらのほうが楽です。
私が使用している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
と先ほど設定したポートを指定します。入力したら「接続」ボタンを押下。
ログインパスワードの入力ウィンドウが表示されたら接続成功です!
- 投稿日:2019-02-26T17:52:54+09:00
terraformでrailsが動くAWSの環境を作る
ほとんど自分用のメモですが、ローカルだけに保存しておくのも微妙なので、Qiitaにあげておきます。
とあるサービスをリリースした際に使用したTerraformを軽く書き直して、githubにあげました
https://github.com/okbm/terraform-railsec2 + 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設定にしてる構成とか見かけたけど、やりすぎな気がするのでまぁ自分がわかりやすいのでいいやと思ってフィーリングでフォルダ掘った
- 投稿日:2019-02-26T16:51:08+09:00
パブリッククラウド認定資格まとめ
はじめに
色々なパブリッククラウドベンダーが認定資格を公開していますが、日本語でまとまっているサイトが見当たらないため整理してみました。本記事では全世界でのシェア率が高いと言われている以下のパブリッククラウドを対象にしています。
- 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)
- 公式サイト
- (英語) https://cloud.google.com/certification/?hl=en
- (日本語) https://cloud.google.com/certification/?hl=ja
- 英語版にしか表示されない認定があるため英語版を確認することを推奨
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
- 公式サイト
- (英語) https://www.microsoft.com/en-us/learning/browse-new-certification.aspx
- (日本語) https://www.microsoft.com/ja-jp/learning/browse-new-certification.aspx
- 英語版にしか表示されない認定があるため英語版を確認することを推奨
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
- 公式サイト
- Pearson VUE
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
- 投稿日:2019-02-26T16:51:08+09:00
パブリッククラウド認定資格まとめ 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
- 公式サイト
- (英語) https://www.microsoft.com/en-us/learning/browse-new-certification.aspx
- (日本語) https://www.microsoft.com/ja-jp/learning/browse-new-certification.aspx
- 英語版にしか表示されない認定があるため英語版を確認することを推奨
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)
- 公式サイト
- (英語) https://cloud.google.com/certification/?hl=en
- (日本語) https://cloud.google.com/certification/?hl=ja
- 英語版にしか表示されない認定があるため英語版を確認することを推奨
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
- 公式サイト
- Pearson VUE
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米ドル) 英語
- 投稿日:2019-02-26T16:31:25+09:00
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
部分の最後に/*
をつけ忘れて、ファイル見れないじゃん…ってなる。
- 投稿日:2019-02-26T16:24:55+09:00
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単位でのコスト管理が可能)
https://docs.aws.amazon.com/awsaccountbilling/latest/aboutv2/custom-tags.html
使い方
https://docs.aws.amazon.com/athena/latest/ug/workgroups.html
WorkgroupにアクセスできるようににIAMポリシーを修正する。
https://docs.aws.amazon.com/athena/latest/ug/example-policies-workgroup.html#example4-run-in-primary-accessworkgroupの使用
任意のWorkgroupを選択してSwitch Wrokgroupをクリック
いつもどおりクエリする
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グループを無効化することで可能です。
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使用とするとエラーになります。
Q.
デフォルトワークグループを管理者の指定グループに設定することは可能でしょうか。A.
デフォルトワークグループを指定のグループにするのはできませんが、一度SwitchGroupすれば次回の接続も設定が維持できるので、ある程度はこちらで対応できる。その他、何かあれば順次追加予定(2019/2/26)
お約束
投稿内容は私個人の意見であり、所属企業・部門見解を代表するものではありません。
- 投稿日:2019-02-26T14:24:59+09:00
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
Python2.7はサポート終了が間近にせまっているので、新規開発する方は私を見習わずに3系を使ってください。 ↩
- 投稿日:2019-02-26T14:06:04+09:00
[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 構成イメージ
全体の構成は以下のようなイメージです。
4 問合せフロー
今回の仕組みでは、2つの問合せフローが使用されています。
1つ目のフローで、代表電話にかかってきた電話をLEXを使って個人に転送して、2つ目のフローでLEXで個人を認識できない場合の録音メッセージを残す仕組みを実装しています。
①1つ目の問合せフロー
②2つ目の問合せフロー
5 LEX設定
LEXは日本語対応していないので、担当者の名前をローマ字で intents に担当者の名前を登録します。
作成したLEXはConnectの問合せフローから呼び出します。6 Lambda設定
ConnectからS3に通話録音のファイル(Wavファイル)が保存されたタイミングで、Lambdaを起動するように設定します。
今回のLambdaはPython3.6で作成してます。SNSのトピック、メッセージ、件名を設定します。
lambda_function.pyimport 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にメールを送信する設定を実施します。
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
- 投稿日:2019-02-26T14:06:04+09:00
[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 構成イメージ
全体の構成は以下のようなイメージです。
4 問合せフロー
今回の仕組みでは、2つの問合せフローが使用されています。
1つ目のフローで、代表電話にかかってきた電話をLEXを使って個人に転送して、2つ目のフローでLEXで個人を認識できない場合の録音メッセージを残す仕組みを実装しています。
①1つ目の問合せフロー
②2つ目の問合せフロー
5 LEX設定
LEXは日本語対応していないので、担当者の名前をローマ字で intents に担当者の名前を登録します。
作成したLEXはConnectの問合せフローから呼び出します。6 Lambda設定
ConnectからS3に通話録音のファイル(Wavファイル)が保存されたタイミングで、Lambdaを起動するように設定します。
今回のLambdaはPython3.6で作成してます。SNSのトピック、メッセージ、件名を設定します。
lambda_function.pyimport 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にメールを送信する設定を実施します。
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
- 投稿日:2019-02-26T14:06:04+09:00
[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 構成イメージ
全体の構成は以下のようなイメージです。
4 問合せフロー
今回の仕組みでは、2つの問合せフローが使用されています。
1つ目のフローで、代表電話にかかってきた電話をLEXを使って個人に転送して、2つ目のフローでLEXで個人を認識できない場合の録音メッセージを残す仕組みを実装しています。
①1つ目の問合せフロー
②2つ目の問合せフロー
5 LEX設定
LEXは日本語対応していないので、担当者の名前をローマ字で intents に担当者の名前を登録します。
作成したLEXはConnectの問合せフローから呼び出します。6 Lambda設定
ConnectからS3に通話録音のファイル(Wavファイル)が保存されたタイミングで、Lambdaを起動するように設定します。
今回のLambdaはPython3.6で作成してます。SNSのトピック、メッセージ、件名を設定します。
lambda_function.pyimport 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にメールを送信する設定を実施します。
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