投稿

3月, 2020の投稿を表示しています

LambdaにてIPアドレスから逆引きして環境を振分するパターン

小ネタです。 前回 の振り分けをいじくって、 X-Forwarded-For から IPアドレス を取ってきてそいつを 逆引き して判定する様に一部修正してみた。 ◆プログラム 呼出し元Lambda ---------- import json import os import socket import boto3 def lambda_handler(event, context): result = '' param = '' geh = os.getenv('REFER_OBJ') gev = os.getenv('KEY_NAME') mt = os.getenv('MATCH_VAL') hs = event[geh] #ヘッダー判定 if hs: if gev in hs: ipaddr = event[geh][gev] hostname=socket.gethostbyaddr(ipaddr)[0] if hostname == mt: fn = 'distribution-test-back' else: fn = 'distribution-prd-back' #クエリストリング取得 cp = event['company'] ds = event['destination'] input_event = { "param1": str(cp), "param2": str(ds) } Payload = json.dumps(input_event) response = boto3.client('lambda').invoke( FunctionName=fn, InvocationType='RequestResp

ヘッダーに埋められた値見て本番LambdaとステージングLambdaに振分け

イメージ
小ネタですね。今まで APIGateway でステージングと本番環境を分けるようなことしていたのですが、静的サイトとかする時にフロントのjsで一々書替すると事故りそうなので 静的ジェネレータ で書き出すときに ステージング 環境の場合はヘッダに何か付与するので、そのヘッダのパラメータを元にステージングと 本番 で見る先を1個のAPIGatewayで分けたいなぁというのがそもそものきっかけです。どこの項目のどういうキーがどういう値ならという部分は環境変数で切り出して修正できるようにしています。 そして未だに SAM とか Serveless は使わず マネジメントコンソール のエディタで触っています(爆 呼出し先でデータベース抽出してきて返す様にしておけばステージングで新しいテーブルを見させつつ、本番では旧テーブル参照とかいうことも簡単にできます。 ◆プログラム とりあえずは Lambda でサクッと関数作ります。先に IAM で[lambda:InvokeFunction]を持つロールを作る必要あります。その辺はググってください。 呼出し元Lambda -------------------- import json import os import boto3 def lambda_handler(event, context): result = '' param = '' geh = os.getenv('REFER_OBJ') gev = os.getenv('KEY_NAME') mt = os.getenv('MATCH_VAL') hs = event[geh] #ヘッダー判定 if hs: if gev in hs: param = event[geh][gev] if param == mt: fn = 'distribution-test-back' else: fn = 'distribution-prd-back' #クエリストリング取得 cp =

最終回:SFDCのデータを抽出してAWSのS3にCSVを出力する(その4)

イメージ
このシリーズいよいよ最終回です。今回は 前回 のクラス群をまとめて、そいつを バッチ 化するところをやっていきます。これでひとまず、SFDCに登録されたデータをSOQLで抽出して S3 に CSV としてアップロードということができました。ひとまずはやりたいことができたので一安心です。 ( 開発者エディション でやったので本番アップロード手順は知らない。) ◆大枠の手順 1.AWSでS3を設定する  1)S3バケット作成  2)IAMポリシー設定  3)IAMユーザ追加 2.SFDC設定  1)環境変数関連設定  2)パラメータ入力  3)リモートサイト許可 3.プログラム作成(単体レベル)  1)環境変数抽出  2)SOQLを使用してデータ抽出  3)S3にCSVファイルをアップロード 4.バッチ設定 ◆プログラム群 CsvSendController -------------------- global class CsvSendController implements Schedulable,Database.AllowsCallouts{ public void execute(SchedulableContext sc) { main(); } //メール送信 public void doSendMail(String subject,String body) { Messaging.SingleEmailMessage email = new Messaging.SingleEmailMessage(); email.setToAddresses(new String[] { 'Mailaddr@example.com' }); email.setSubject(subject); email.setPlainTextBody(body); List results = Messaging.sendEmail(new Messaging.Email[] { email }, false); if (!results.get(0).

SFDCのデータを抽出してAWSのS3にCSVを出力する(その3)

イメージ
今回はapexの単体プログラムがメインです。 apex 用エディタの起動はつまづかないと思いますが念のため、管理コンソールにログインして歯車マークをクリックして[開発者]コンソールを選択します。デバッグ方法などはググってみてください。 ちなみにSFDCでapexを使って何かしようとするとリリース時にはテストで75%のカバレッジが必要という落とし穴があります。なのでがっつりある程度処理を網羅するテストを書く必要があります。自分は テスト など書いたことなかったので非常に苦労しました。 ◆大枠の手順 1.AWSでS3を設定する  1)S3バケット作成  2)IAMポリシー設定  3)IAMユーザ追加 2.SFDC設定  1)環境変数関連設定  2)パラメータ入力  3)リモートサイト許可 3.プログラム作成(単体レベル)  1)環境変数抽出  2)SOQLを使用してデータ抽出  3)S3にCSVファイルをアップロード 4.バッチ設定 ◆プログラム群 1)環境変数抽出 GetEnvironment -------------------- public class GetEnvironment { // 環境変数をカスタム設定から取得する public Map GetEnv(){ try { Map settingMap = EnvironmentVars__c.getAll(); Map MapEnv = new Map (); for (String key : settingMap.keySet()) { EnvironmentVars__c env = settingMap.get(key); MapEnv.put(key,env.EnvParam__c); } return MapEnv; } catch(Exception e) { System.debug('Exception caught: ' + e.getMessage

SFDCのデータを抽出してAWSのS3にCSVを出力する(その2)

イメージ
前回に続いて、SFDCの抽出データをS3に出力する話の続き。今回はSFDC側の作業でプログラムを単体で実行するところがメイン ◆大枠の手順 1.AWSでS3を設定する  1)S3バケット作成  2)IAMポリシー設定  3)IAMユーザ追加 2.SFDC設定  1)環境変数関連設定  2)パラメータ入力  3)リモートサイト許可 3.プログラム作成(単体レベル)  1)環境変数抽出箇所  2)SOQLを使用してデータ抽出  3)S3にCSVファイルをアップロード 4.バッチ設定 ◆手順 2. SFDC 設定 1)環境変数関連設定 ・ ログイン して管理コンソールから[設定]をクリックする。 ・検索ボックスに「カスタム設定」と入力し検索し[カスタム設定]をクリックする。 ・カスタム設定にて[新規]ボタンをクリックする。 ・「カスタム設定の定義」で[表示ラベル]、[オブジェクト名]、[設定種別]、[表示]を設定して[保存]ボタンをクリックする。(*設定種別は「リスト」、表示は「保護」を指定) ・「カスタム設定」に戻り[表示ラベル]をクリックする。 ・「カスタム項目」で[新規]ボタンをクリックする。 *ここからの作業は4回分繰り返す(アクセスキー、シークレット、ドメイン、バケット名分 ・[テキスト]を選択し[次へ]ボタンをクリックする。 ・[項目の表示ラベル]、[文字数]、[項目名]を登録して[次へ]ボタンをクリックする。 項目名は「 S3Bucket」、「S3Domain」、「S3Key」、「S3Token」 ・確認画面となるので[保存]ボタンをクリックする。 2)パラメータ入力 ・[カスタム設定]をクリックして[Manage]をクリックする。 ・[新規]ボタンをクリックする。 ・Nameに[項目名]で指定した値を入力し、設定値を入力後[保存]ボタンをクリックする。

SFDCのデータを抽出してAWSのS3にCSVを出力する(その1)

イメージ
SFDC でたまたま、必要があったので色々と調べてみました。「普通のやり方ではCSV出力をバッチでできない」とかいうことだそうなので、 データローダ を使ったやり方とかもあるみたいですが要件にそぐわないので、少し格闘しました。 バッチで AWSのS3 に CSV を出力したいというのがそもそもの与件です。 ◆大枠の手順 1.AWSでS3を設定する  1)S3バケット作成  2)IAMポリシー設定  3)IAMユーザ追加 2.SFDC設定  1)環境変数関連設定  2)パラメータ入力  3)リモートサイト許可 3.プログラム作成(単体レベル)  1)環境変数抽出箇所  2)SOQLを使用してデータ抽出  3)S3にCSVファイルをアップロード 4.バッチ設定 ◆手順 1.AWSでS3を設定する 1)S3バケット作成 ・AWSの管理コンソールでS3設定を開くバケットを選択して[バケットの作成]をクリックする。 ・[バケット名]を入力し[作成]ボタンをクリックする。 2)IAMポリシー設定 ・AWSの管理コンソールでIAM設定を開く[ポリシー]を選択し[ポリシーの作成]ボタンをクリックする。 ・ポリシーの作成の箇所で[JSON]を選択する。真ん中の箇所にJSONを入力する [ポリシーの確認]をクリック 参考:JSON ---- { "Version": "2012-10-17", "Statement": [ { "Action": [ "s3:ListAllMyBuckets", "s3:GetBucketLocation" ], "Effect": "Allow", "Resource": "arn:aws:s3:::*"