freedom-man.com

ブログは俺のセーブポイント

Category: AWS (page 1 of 4)

AWS CLIのHTTPキャプチャ

AWSのREST APIはリファレンスもあるしSignatureの生成方法も載っているので、SDKが無いような言語でAPI叩きたい場合でも大抵問題ないんですが、それでも仕様が謎でどういうリクエスト投げれば良いんだ!?っていうケースもあると思います。

そんなときは各種SDKのコードを読むか、SDKを使ってAPIコールしてHTTPの中身を見るかして仕様を把握する感じになりますが、今回は後者のSDKを使ってAPIコールの中身を見る、というのをやっていきます。

Continue reading

ApexからAWS IoTのAPI叩いてみた

IoT Cloudがいつまで経っても利用できそうにないのでAWS IoTが面白そうなので
Apexから触ってみました。今回はThingは利用せずに、Message BrokerにHTTPで送ってRulesで処理をさせるという構成でやってみました。

Continue reading

Salesforceを認証プロバイダとしてCognitoを使ってみる

Salesforceを認証プロバイダとしてAmazon CognitoでAWSのAPIを叩く方法を書いていきます!
参考URLは以下。今回のソースやら設定方法は、ほぼこちらのパクリです。
Building an App Using Amazon Cognito and an OpenID Connect Identity Provider

Continue reading

ApexからAmazon Lambda叩いてみる。

Amazon Lambdaというすんばらしいサービスがプレビュー提供されたということでApexから触ってみた。

 

1. Lambda側のfunctionを書く

今回はChatter投稿するようなスクリプトを書いてみた。

上記スクリプトをindex.jsとして保存する。

必要なパッケージもローカルインストールしておく。今回はjsforceのみ。

2. 作成したLambda functionをアップロードする

node_modulesと対象のスクリプトファイルをまとめてzipファイルにする。

で、アップロードする。

AWS Lambda

Function Name, Description→適当に

Function Code→生成したZipファイルをアップロード。File nameとHandler nameはそのまま。

Role name→Functionの実行コンテキストになるロールを指定する。Create/Select Roleで作成・指定すればOK。

Advanced Settings→一回あたりのFunction実行の利用可能なメモリやタイムアウト時間を適当にセット。

3. 動作確認

作成したLambda Functionが正しく動作するかを確認する。

まずは確認対象のLambda Functionを選択してEdit/Testをクリック。

lambda_select

Customを選択して適当なJSONをセットしてInvokeをクリック

AWS Lambda_Test

下の方のExecution resultsにログが出るので確認。

lambda_test

日本語が???とかに文字化けてますが、CloudWatch側のログにはちゃんと残ってます。

CloudWatchで見る場合はLogsから対象のFunctionを選択して掘り下げていくとログが見れます。

lambda_log_list

lambda_log

4. Lambdaを呼び出すApexクラスを作成

現時点ではLambdaのドキュメントにはREST APIの仕様があまり書かれていないっぽくて

Signature Versionがどれに対応しているかとかよくわからなかったんですが、

JavascriptのSDK見たらSignatureのVersion指定のパラメータで

v2,v3,v4が指定できる的なことが書いてあったのでv4で実装してみたら、普通に呼び出せました!

Signature Version4での生成方法はこちら

 

で、いつも通り汚い感じですが、Apexで書くとこんな感じ↓

ApexでのSignature Version4の生成方法は過去の記事を参照ください!

リモートサイトの設定も忘れずに。

lambda_remotesite

あとは普通に呼び出すだけ!

で、Chatterを開くと…

lambda_chatter

Good!!

 

今回のサンプルだとApex→Lambda→Chatterというフローになっていて

Lambda経由のChatter投稿という意味なさげな感じになっていますが

実際にSalesforceで連携するときのユースケースとしては

S3にアップロードされたらChatterFeed作ってあげたり、他のSFDCのAPIを叩いたり

ApexトリガでDML走る度にLambda function動かすとか、そういった使い方になると思います。

 

一日しか触ってないですが、サーバ立てたりオートスケールの設定無しで

スケールするファンクションを簡単に作れるのは、非常に強力だなーと思いました。

ApexからAutoScaling触ってみる。

今回はAuto ScalingをApexからREST APIで触ってみます。

 

Auto Scalingは指定したインスタンスが落ちたら自動的に指定のインスタンス数になるまで

同じインスタンスを立ててくれたり、指定した時刻にインスタンスを動的に増減させることのできる

自動でスケーリングをしてくれるサービスです。(って名前そのまんまの説明…)

 

これを使うと、

「毎週日曜日は負荷が高いから自動的に処理をするインスタンス数を増やそう!」とか

「万が一インスタンスが落ちてもすぐにインスタンスを立ち上げるようにしよう!」とか

「不健全なインスタンスを落として健全なインスタンスだけ生かしたい!」とか

こういったスケールアウト、スケールインが自由自在にできちゃいます。

 

前回はEC2をREST APIを使って手動で立ち上げていて、

”EC2のREST APIを使ってスケジュール化するためにはApexバッチが必要”と書きましたが、

このAuto Scalingを使えばスケールアウトを自動化できるので

インスタンス数を0→1にスケールアウトするようなスケジューリングをAuto ScalingをCUIとかで

一回設定してあげれば自動インスタンス起動の処理ができちゃいます。

 

Auto Scalingのスケジューリングに関する参考URL↓

http://dev.classmethod.jp/cloud/auto-scaling-schedule/

http://blog.suz-lab.com/2012/04/ec2.html

 

また、Auto Scalingを利用しない単純なEC2インスタンス起動は、立ち上げた後は負荷が高かろうが

インスタンスが落ちようが、別のAPIでチェックしない限りは検知することができないのと

検知しても自動的にスケールさせたり、落ちた時に自動的にインスタンスを立ち上げるという

仕組みを自前で実装しなければなりません。

 

そこで、Auto Scalingの出番ということです!

 

ということで、今回のサンプル!↓

Auto ScalingはSignature Version2Version4の両方が使えるんですが、

Version4を推奨、とリファレンスに書いてあったので素直に4でやってます。

Signature Version4はDynamoDBのときにやっていたので、大枠はその回のコピペです。

 

っていうかやっぱりVersion4は複雑…。

ちゃんと間違っていたらResponseで答えを教えてくれるんで、正解にはたどり着きやすいんですけどねー。

(ちなみにSWFはResponseで答え教えてくれないっていう)

 

メソッドはupdateAutoScalingGroupしか無いですが、

SalesforceからコールするAPIとしてはこれで十分かと思われます。

 

基本的にはconsole GUIやCUIであらかじめ作成・スケジュール設定をした

launch configulationやauto scaling groupに対して

Salesforceはauto scaling groupの更新でインスタンスの増減をコントロールする運用を想定していて、

ワンタイムの設定のためにSalesforceでわざわざAPIを叩くのはあまり意味が無い気がするからです。

Older posts

© 2017 freedom-man.com

Theme by Anders NorenUp ↑