Serverless Frameworkを利用してTwitterに呟く
作ってみた
インストール
git clone https://github.com/hogehoge0604/serverless-twitter-bot.git
- npm installを実行して必要なパッケージを取得します
cd serverless-twitter-bot npm install
- 設定ファイルを編集します
module.exports = () => { return { region: 'ap-northeast-1', bucket: '<S3_BUCKET_NAME>', // Lambda time zone timezone: 'Asia/Tokyo', // Access-Control-Allow-Origin origin: '*', twitter: { CONSUMER_KEY: '<CONSUMER_KEY>', CONSUMER_SECRET: '<CONSUMER_SECRET>', ACCESS_TOKEN_KEY: '<ACCESS_TOKEN_KEY>', ACCESS_TOKEN_SECRET: '<ACCESS_TOKEN_SECRET>' } } }
<S3_BUCKET_NAME> = S3のバケット名
<CONSUMER_KEY> = developer.twitter.comから取得したAPI keyを設定
<CONSUMER_SECRET> = developer.twitter.comから取得したAPI secret keyを設定
<ACCESS_TOKEN_KEY> = developer.twitter.comから取得したAccess tokenを設定
<ACCESS_TOKEN_SECRET> = developer.twitter.comから取得したAccess token secretを設定
- デプロイする
serverless deploy
使い方
テキストファイルを記載したファイルをS3に格納することで
10分に一度テキストファイルをランダムに取得して、取得したファイルに記載してある文字列をツイートします
ファイルが少ないと同じ投稿が続いて、同一ツイートの連投エラーになるので注意が必要です
ThinkPadにDocker for Windowsをインストールする
Docker for Windowsをインストールしたら幾つか躓きポイントがあったので備忘録。
前提
Hyper-Vを有効化できるようBIOSの設定を変更する
Hyper-Vを有効化しようとしたら
「Hyper-Vをインストールできません:ファームウェアで、仮想化サポートが無効になっています。」
と出て一部有効化できなかったので以下サポート情報をもとに設定を変更します。
https://support.lenovo.com/jp/ja/solutions/ht500006
ただこのサポート情報はCPUがIntelのケースで自分のPCはAMDなので
表示内容は若干違い「Security」タブの「AMD V(TM) Technology」を
「Enabled」に変更しました。
Hyper-Vを有効化する
「プログラムと機能」から「Windowsの機能の有効火または無効化」にアクセスし
Hyper-Vにチェックを入れて保存。再起動で有効化します。
問題発生
有効化後、何度再起動しても以下の表示が出るようになりました。
「ハードウェア設定が変更されました。変更を有効にするには、コンピューターを再起動してください」
「高速スタートアップ」が有効になっているとHyper-Vの変更が適切に効かないのでは
と思い無効化して再起動してみましたが結果は変わらず。
次いでサービスから「AMD External Events Utility」がスタートアップ時に起動しないよう
設定を変更したところ表示されないようになりました。
# 「高速スタートアップ」の無効化は意味があったのか否か判別がつかなかったので一応記載
Dockerをインストール
https://store.docker.com/editions/community/docker-ce-desktop-windows
後は普通にインストーラを取得してインストールします。
これでDocker for windowsが試せるようになりました。
Serverless で手軽にAWS SNSを利用する
作ってみた
インストール
git clone https://github.com/hogehoge0604/serverless-sns.git
- npm installを実行して必要なパッケージを取得します
cd serverless-sns npm install
- 設定ファイルを編集します
module.exports = () => { return { region: 'ap-northeast-1', sns: { displayname: '<DISPLAY_NAME>', subscription: [{ Endpoint: '<MAIL_ADDRESS>', Protocol: 'email', }] } } }
<DISPLAY_NAME> = SNSトピックを識別するための文字列を設定
<MAIL_ADDRESS> = メール送信先のメールアドレスを設定
- デプロイする
serverless deploy
正常にデプロイ処理が完了したら設定したメールアドレスあてに
購読確認のメールが送られてくるのでリンクを押下すると設定完了になります
- 試してみる
購読設定まで完了後に以下を叩くとdataに入力した件名と本文を記載した
メールが送られてきます
serverless invoke --function notification --data '{"subject": "subject test", "message": "message test"}'
用途
これ単体だとお手軽にAWS SNSを試せる点以外に特徴はないですが
うまく使えれば様々な場面で通知を組み込みやすくなるのではないかと思います
Windows Subsystem for LinuxでElasticsearchを利用する
Java8をインストールする
Javaがまだインストールされていない場合はJavaをインストールします
折角なのでJava8をインストールしたいと思います
apt-add-repository ppa:openjdk-r/ppa apt update apt-get install openjdk-8-jdk
以下ページを参考にさせていただきました
https://bowtips.blogspot.jp/2017/01/java-8openjdk.html
rootで実行できないのでアカウントを作成する
Elasticsearchを実行するにあたってroot権限で実行すると以下のエラーが発生します
root以外のアカウントが存在しない場合は適当なアカウントを作成します
useradd elasticsearch
ちなみに途中までrootユーザでかつ/root/フォルダの中で作業をしていて
実行時だけユーザを変更して実行したところ以下のエラーが出てしばらくハマりました
Elasticsearchを取得する
www.elastic.co 公式を参考に以下コマンドでElasticsearchを取得します
curl -L -O https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-6.2.4.tar.gz tar -xvf elasticsearch-6.2.4.tar.gz
起動する
cd elasticsearch-6.2.4/bin ./elasticsearch
以下URLにアクセスできればインストール完了です
http://127.0.0.1:9200/
VBScriptでOutlookから本文を抽出してExcelに追記する
作ってみた
VBScriptを使ってちょっとしたツールを作成してみました github.com
概要
Outlookから件名が設定項目記載の条件に一致するメールを対象に
本文を抽出してExcelに追記するツールになります
使い方
- Githubからoutlook-to-excel.vbsをダウンロードする
- Excelファイルを新規作成する
- outlook-to-excel.vbsを開き抽出条件、出力先のExcelに応じて設定項目を修正する
- outlook-to-excel.vbsをダブルクリックする
ダブルクリックで実行後、正常終了するとExcelに追記しましたと表示されます
設定項目
設定は以下項目を設定可能です
正規表現については、条件に一致する括弧内の文字列が追記対象になります
動かしてみる
以下のようなメールが受信トレイにあったとします。
このメール本文の■以降を抽出します。
件名と本文の抽出条件は以下のようにします
' 抽出対象の件名。設定した文字列が含まれるメールを対象とする config.Add "pickup_title", "お問い合わせ" ' 本文抽出条件 config.Add "body_grep_rule", "■(.+)$"
outlook-to-excel.vbsを実行すると以下のような警告が出る場合がありますので許可を押してください
警告内容に不安がある場合はoutlook-to-excel.vbsのソースコードを確認したうえで
問題ないと判断できたら許可を押下いただければと思います
許可いただければoutlook-to-excel.vbsが実行され
Excelを開くと以下のように追加されていることが確認できます
VBScriptで〇〇を利用する
以下開発時に調べた内容になります
連想配列を利用する
Set dict = CreateObject("Scripting.Dictionary")
仕様は以下を参照
https://msdn.microsoft.com/ja-jp/library/cc428065.aspx
正規表現を利用する
Set reg = New RegExp reg.Pattern = <抽出条件> reg.Execute(<検索対象文字列>)
仕様は以下を参照
https://msdn.microsoft.com/ja-jp/library/cc392403.aspx
正規表現の仕様は以下を参照
https://msdn.microsoft.com/ja-jp/library/cc392437.aspx
Excelを利用する
Set excel = CreateObject("Excel.Application") excel.Application.Workbooks.Open(<Excelファイルまでのパス>)
仕様は以下を参照
https://msdn.microsoft.com/ja-jp/library/office/ff198091.aspx
Outlookを利用する
Set Application = CreateObject("Outlook.Application")
仕様は以下を参照
https://msdn.microsoft.com/ja-jp/library/office/ff863377.aspx
メールから取得できるプロパティ値は以下を参照
https://msdn.microsoft.com/ja-jp/VBA/Outlook-VBA/articles/mailitem-object-outlook#%E3%83%97%E3%83%AD%E3%83%91%E3%83%86%E3%82%A3
serverless-client-s3を利用してS3にファイルを転送する
プラグイン導入
READMEにはnpm installが記載されていますがその通りに実行した場合
古いパッケージが取得されてデプロイすると以下のエラーが発生します
Serverless plugin "serverless-client-s3" initialization errored: S.getServerlessPath is not a function
この問題は2018/4/1時点の事象になります。そのうち修正はされると思いますが
今回はGithubからインストールすることにします
npm install --save git://github.com/serverless/serverless-client-s3.git
試してみる
プラグインがインストールできたら実際に試してみます
serverless.yml
service: serverless-client-s3-test plugins: - serverless-client-s3 custom: client: bucketName: Bucket Name provider: name: aws region: ap-northeast-1 stage: dev resources: Resources: S3: Type: AWS::S3::Bucket Properties: BucketName: ${self:custom.client.bucketName}
また、serverless.ymlと同階層にclient/dist/フォルダを作成し
その中に転送対象の資材を格納します。
格納したらデプロイ&S3への格納処理を実施する
serverless deploy serverless client deploy
これでS3に資材が格納されました
フォルダ名を変更したい場合は、distributionFolderを設定することで変更可能です。
serverless.yml
custom: client: bucketName: Bucket Name # client/test/ # distributionFolder: test # test/ # distributionFolder: ../test
ファイルを削除したい場合はフォルダ内のファイルを削除して
再度serverless client deployを実行すると削除されます
Serverless FrameworkでQRコードを生成するAPIを作成する
QRコードを生成してS3に格納するAPIを作ってみました。
以下Githubになります。
README記載の手順でQRコードの作成&削除のAPIが作成できます。
以降は開発中に調べた内容になります。
ハマった点
src/create.jsにて生成したコードをS3に送信する前に
ストリームデータにサイズを設定しないと以下のようなエラーが発生します
Error: Cannot determine length of [object Object]
そこでtransform内の処理で合計サイズを取得しinputStreamに設定することで対応しました
nodejsについて詳しくないのでもう少しいい方法があったら教えていただきたいです
API Gatewayについて
API Gatewayのバイナリサポートは現状プラグインを導入する必要があるようです。
今回は画像取得用のAPIを作らず、S3の画像に直接アクセスできるように
public-read権限を付与する形で対応しました。
もしバイナリサポートを有効にしたい場合は以下のプラグインを使うといいようです。
www.npmjs.com
また、入力値のチェックはAPI GatewayではなくLambda側で処理するようにしました。
API Gateway側で制御したい場合は現状以下のようなプラグインを導入する必要があるようです。
www.npmjs.com