複数AWS環境にserverlessを適用するときに環境変数を切り替えたい
About
lambdaの適用方法が辛かったので調べたら、ちょっとマシになりました。
動作環境
- serverless@1.33.1
辛み
- lambdaを複数環境に当てないといけない
- 環境変数を指定するの辛いのでいい感じにしたい
適用方法
$ AWS_PROFILE=hoge sls deploy --region ap-northeast-1 $ AWS_PROFILE=fuga sls deploy --region ap-northeast-1
AWS_PROFILEを使って切り替える感じです。
仕組み
service: hoge # NOTE: update this with your service name custom: environment: ${file(env.yml):${env:AWS_PROFILE}} plugins: - serverless-python-requirements provider: name: aws runtime: python3.6 stage: dev region: ap-northeast-1 functions: logalert: handler: handler.handler ... environment: ENV: ${env:AWS_PROFILE, 'default'} SENTRY_DSN: ${self:custom.environment.sentry_dsn}
AWS_PROFILEを起点にして環境変数を切り替える感じにしてみました。
# test default: sentry_dsn: <dsn_key> hoge: sentry_dsn: <dsn_key> fuga: sentry_dsn: <dsn_key>
環境変数を追加しても切り替えが便利そうですね。
メモ:ALBのログをAthenaで見る
About
ALBのログをAthenaで見たかったので
データベースの作成
CREATE EXTERNAL TABLE IF NOT EXISTS alb_logs ( type string, time string, elb string, client_ip string, client_port int, target_ip string, target_port int, request_processing_time double, target_processing_time double, response_processing_time double, elb_status_code string, target_status_code string, received_bytes bigint, sent_bytes bigint, request_verb string, request_url string, request_proto string, user_agent string, ssl_cipher string, ssl_protocol string, target_group_arn string, trace_id string, domain_name string, chosen_cert_arn string, matched_rule_priority string, request_creation_time string, actions_executed string, redirect_url string, new_field string ) ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.RegexSerDe' WITH SERDEPROPERTIES ( 'serialization.format' = '1', 'input.regex' = '([^ ]*) ([^ ]*) ([^ ]*) ([^ ]*):([0-9]*) ([^ ]*)[:-]([0-9]*) ([-.0-9]*) ([-.0-9]*) ([-.0-9]*) (|[-0-9]*) (-|[-0-9]*) ([-0-9]*) ([-0-9]*) \"([^ ]*) ([^ ]*) (- |[^ ]*)\" \"([^\"]*)\" ([A-Z0-9-]+) ([A-Za-z0-9.-]*) ([^ ]*) \"([^\"]*)\" \"([^\"]*)\" \"([^\"]*)\" ([-.0-9]*) ([^ ]*) \"([^\"]*)\"($| \"[^ ]*\")(.*)') LOCATION 's3://your-alb-logs-directory/AWSLogs/<ACCOUNT-ID>/elasticloadbalancing/region';
特定時間のリクエストを分析する
SELECT request_verb, domain_name, count(*) as count FROM (SELECT from_iso8601_timestamp(time) AS request_time, * FROM "default"."alb_logs") WHERE request_time BETWEEN date_parse('2018-10-11 11:00:00', '%Y-%m-%d %H:%i:%S') AND date_parse('2018-10-11 23:00:00', '%Y-%m-%d %H:%i:%S') GROUP BY request_verb,domain_name order by domain_name