一日遅れて投稿。
記事
-
採用市場に中堅エンジニアがほぼ居ない/どこに行ったのか目撃情報を集めてみた
- おもろい。ここで言う中堅ってのがどの層を指してるのかが、不明瞭だけど、業界横断した人脈さえあれば、転職市場に出なくてもなんとかなっちゃってるんだろうなぁ
調べた
LambdaでDocumentDBいじる方法
pythonは大学で数時間触れたレベルでしかないんですが、なんとなく感覚で書いてみます。
-
DocumentDBのクライアントはこんな感じ
- 関数定義の方法
def 関数名(引数名1, 引数名2, ...):
処理1
処理2
...
関数を括弧で囲わない言語はちょっと違和感があるなぁ
-
ステータス取得してるQiita
- AWS DocumentDBのステータスを通知するLambda関数
- 上記記事にAWSのマネージドポリシーのAmazonDocDBReadOnlyAccessをあててねって書いてあるけど、AmazonDocDBReadOnlyAccessのポリシーの中身ってこんな感じなんよね
{
"Version": "2012-10-17",
"Statement": [
{
"Action": [
"rds:DescribeAccountAttributes",
"rds:DescribeCertificates",
"rds:DescribeDBClusterParameterGroups",
"rds:DescribeDBClusterParameters",
"rds:DescribeDBClusterSnapshotAttributes",
"rds:DescribeDBClusterSnapshots",
"rds:DescribeDBClusters",
"rds:DescribeDBEngineVersions",
"rds:DescribeDBInstances",
"rds:DescribeDBLogFiles",
"rds:DescribeDBParameterGroups",
"rds:DescribeDBParameters",
"rds:DescribeDBSubnetGroups",
"rds:DescribeEventCategories",
"rds:DescribeEventSubscriptions",
"rds:DescribeEvents",
"rds:DescribeOrderableDBInstanceOptions",
"rds:DescribePendingMaintenanceActions",
"rds:DownloadDBLogFilePortion",
"rds:ListTagsForResource"
],
"Effect": "Allow",
"Resource": "*"
},
{
"Action": [
"cloudwatch:GetMetricStatistics",
"cloudwatch:ListMetrics"
],
"Effect": "Allow",
"Resource": "*"
},
{
"Action": [
"ec2:DescribeAccountAttributes",
"ec2:DescribeAvailabilityZones",
"ec2:DescribeInternetGateways",
"ec2:DescribeSecurityGroups",
"ec2:DescribeSubnets",
"ec2:DescribeVpcAttribute",
"ec2:DescribeVpcs"
],
"Effect": "Allow",
"Resource": "*"
},
{
"Action": [
"kms:ListKeys",
"kms:ListRetirableGrants",
"kms:ListAliases",
"kms:ListKeyPolicies"
],
"Effect": "Allow",
"Resource": "*"
},
{
"Action": [
"logs:DescribeLogStreams",
"logs:GetLogEvents"
],
"Effect": "Allow",
"Resource": [
"arn:aws:logs:*:*:log-group:/aws/rds/*:log-stream:*",
"arn:aws:logs:*:*:log-group:/aws/docdb/*:log-stream:*"
]
}
]
}
上記からも、DocumentDB専用のポリシーは無くて、RDBと一緒ってことが分かります。
オチとしては、結局DocumentDBをいじりたかったら、RDBをいじるようなコードを書いて、'Engine'がdocdbのものだけを対象にすればよかったということが判明。めでたしめでたし。
-
Lambdaで吐いたログは、LambdaのResultで見ようとすると、ちょっとしか見えないので、基本的にはCloudwatchで見ようね
-
pythonのinってメチャクチャ汎用性高いのね
- Pythonのin演算子でリストなどに特定の要素が含まれるか判定
- 配列に対してはphpのin_array的な挙動になるし、辞書型に対してはarray_key_exist的な挙動を見せる
-
しかも部分一致も結構楽に書けそう
-
日付取得
-
正規表現
そもそもboto3ってなんだっけ
- AWS SDK for Pythonの別称
-
なんでbotoなん?
- アマゾンカワイルカの別名がBoto Vermelhoらしく、そこからとってるらしい
- AWS SDK for Python である boto という名前の意味と由来
- アマゾンカワイルカ
yyyymmddフォーマットチェッカ作ってみた
import re
def is_yyyymmdd(yyyymmdd):
if not re.fullmatch(r'\d{8}', yyyymmdd) :
return False
try:
newDataStr="%04s/%02s/%02s"%(yyyymmdd[0:4],yyyymmdd[4:6],yyyymmdd[6:8])
newDate=datetime.datetime.strptime(newDataStr,"%Y/%m/%d")
return True
except ValueError:
return False
最初はこちら を参考に作っていたが、yyyymmddをチェックしたかったのと、
newDataStr="%04d/%02d/%02d"%(year,month,day)
の部分が、intで日付が来ることが想定されていたコードっぽかった為、ちょっと修正した。