AWS
Page content
さあ AWS 使ってみよー。
API access
curlでやろうとするとめちゃ大変そうなので、普通は AWS SDK や AWS CLI を使おうね。(参考: もしもAWSのキーは分かっているけどcurlしか使えない状況でEC2をStopする必要が出た時のために )
共通設定
- アクセスキーの準備: https://aws.amazon.com/jp/developers/access-keys/
- 開発用の AWS 認証情報とリージョンのセットアップ:
~/.aws/
配下に認証や設定情報を置く。 AWS SDK も CLI も使うやつ。コードにべた書きよりは、こういうところに置いたほうが良い。ほか環境変数として読ませる方法もあるので.bashrc
に書くなどもまああるでしょう。 (参考: https://docs.aws.amazon.com/ja_jp/sdk-for-java/v1/developer-guide/setup-credentials.html)~/.aws/credentials
: 何より大事な認証情報。 profile を分けて列記することができます。[default] aws_access_key_id = xxxxxxxxxxxxxxxxxxxx aws_secret_access_key = yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy [private_developer1] aws_access_key_id = aaaaaaaaaaaaaaaaaaaa aws_secret_access_key = bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb
~/.aws/config
: credentials に一緒に書いても動くが、 credentials をあまり触りたくなければこうやって分けるのも有り。設定できる項目は色々ありそうだけど未調査。[default] region = ap-southeast-2 output = json [private_developer1] region = ap-northeast-1
AWS SDK (for Ruby)
ruby を例にやってみる。
まずは Gem のインストール
$ echo "gem 'aws-sdk', '~>3.0.1'" >> Gemfile $ bundle install --path=.bundle
CloudWatch Logs のストリーム一覧を参照をするには、以下のスクリプト。
require 'aws-sdk' require 'pp' ### get log_streams cw_client = Aws::CloudWatchLogs::Client.new(profile: 'private_developer1') # これで認証・リージョン情報を一発で切替えられる。明示しなければ default. もしくはキーやリージョンを1つずつ指定することもできます。 condition = { log_group_name: '/aws/lambda/myFunction', order_by: 'LastEventTime', descending: true, limit: 3 } resp = cw_client.describe_log_streams(condition) pp resp
出力の例:
$ bundle exec ruby log.rb #<struct Aws::CloudWatchLogs::Types::DescribeLogStreamsResponse log_streams= [#<struct Aws::CloudWatchLogs::Types::LogStream log_stream_name="2018/04/07/[$LATEST]24b194f210d745f392eff39b3e065692", creation_time=1523072480976, first_event_timestamp=1523072481197, last_event_timestamp=1523072481297, last_ingestion_time=1523072496405, upload_sequence_token= "49583088293918636945724255794924900074886787019464277122", arn= "arn:aws:logs:ap-northeast-1:7..........7:log-group:/aws/lambda/myFunction:log-stream:2018/04/07/[$LATEST]24b194f210d745f392eff39b3e065692", stored_bytes=0>, #<struct Aws::CloudWatchLogs::Types::LogStream log_stream_name="2018/03/14/[$LATEST]f967968c85fa45f694e318ca7ecfd747", creation_time=1521033900704, first_event_timestamp=1521033900840, last_event_timestamp=1521033934040, last_ingestion_time=1521033949215, upload_sequence_token= "49580220378413080199404320187250123504351385670314383698", arn= "arn:aws:logs:ap-northeast-1:7..........7:log-group:/aws/lambda/myFunction:log-stream:2018/03/14/[$LATEST]f967968c85fa45f694e318ca7ecfd747", stored_bytes=746>], next_token= "Kwfr0bfVKkYk4OrYazFRiRWUd07-P_.........Yezib7GrQ">
詳細の使い方は、 AWS公式のsdk documentation を参照
なお、 CloudWatchLogs のフィルタと検索をするには
filter_log_events
を使うんだけど、検索パターンの構文はこちら: https://docs.aws.amazon.com/ja_jp/AmazonCloudWatch/latest/logs/FilterAndPatternSyntax.html
API Gateway
API Gateway timeout にもっと注意!
- Lambda、Lambda プロキシ、HTTP、HTTP プロキシ、AWS 統合など、すべての統合タイプで 50 ミリ秒〜29 秒, デフォルト29秒 orz orz orz
APIGW のログ出力設定
- Create a new IAM role (for example, apigateway-cloudwatch-logs-role) with trust policy apigateway.amazonaws.com
- Attach aws exist policy AmazonAPIGatewayPushToCloudWatchLogs to this role
- Record this IAM role’s ARN
- Add this iam role’s arn to apigatewa-> settings -> CloudWatch log role ARN*
- serverless.yml で書く