VPC内からLambdaを実行する際のハマりどころ
VPC内のLambdaからEC2 Run Commandを実行しようとしたら、下記のエラーが出ました
Request has been terminated Possible causes: the network is offline, Origin is not allowed by Access-Control-Allow-Origin, the page is being unloaded, etc.
また、ログを確認すると、時間めいいっぱい使っている様子
Task timed out after 300.00 seconds.
試しにマネジメントコンソールから実行すると、即「Success」が返ってきたので 権限周りやコードに問題はなさそう…
しばらくして気が付きました
Lambdaがプライベートサブネット内にいる!
つまり、LambdaがEC2 Run Commandを実行する際に インターネットに接続できる環境でないとダメ!!
ということで、この場合はパブリックサブネットに NATサーバ or NAT Gatewayを立てれば問題なしでした^^
というか、サブネットの選択を間違えたかな。。 この場合はパブリックサブネットにLambdaを置くのがベストプラクティスになるのでしょうかー
【JAWS-UG CLI】 #64 ALB入門 に参加しました!
Lambdaで最新AMIを取得する!(Python)
Lambda(python)で最新AMI IDを取得するプログラムを書きました。
Windowsは「Windows Servier 2012 R2 Base」、Linuxは「Amazon Linux」の最新AMI IDを取得してます。 Filters部分をカスタマイズしてもらえれば、その他にも使えると思います!
import boto3 def lambda_handler(event, context): client = boto3.client('ec2') response = client.describe_images( Owners=['amazon'], Filters=[ { 'Name': 'root-device-type', 'Values': ['ebs'] }, { 'Name': 'architecture', 'Values': ['x86_64'] }, { 'Name': 'name', 'Values': ['Windows_Server-2012-R2_RTM-Japanese-64Bit-Base*'] } ] ) list = [] for x in response["Images"]: name = x["Name"] ami_id = x["ImageId"] list.append([name, ami_id]) list.sort(key=lambda x:x[0], reverse=True) print list[0][1]
import boto3 def lambda_handler(event, context): client = boto3.client('ec2') response = client.describe_images( Owners=['amazon'], Filters=[ { 'Name': 'root-device-type', 'Values': ['ebs'] }, { 'Name': 'architecture', 'Values': ['x86_64'] }, { 'Name': 'block-device-mapping.volume-type', 'Values': ['standard'] }, { 'Name': 'name', 'Values': ['amzn-ami-hvm*'] } ] ) list = [] for x in response["Images"]: name = x["Name"] ami_id = x["ImageId"] list.append([name, ami_id]) list.sort(key=lambda x:x[0], reverse=True) print list[0][1]
【備忘録】CloudWatchLogsのロググループ作成とログ保持期間を変更するワンライナー
以前、【備忘録】CloudWatchLogsのログ保持期間を変更するワンライナーを投稿しましたが、 今回は、少しバージョンアップして、CloudWatchLogsのロググループ作成とログ保持期間を変更するワンライナーです!
for LOGGROUPNAME in $(cat <CloudWatchLogsのロググループ名を入れたファイル>) ;do aws logs create-log-group --region ap-northeast-1 --log-group-name ${LOGGROUPNAME} && aws logs put-retention-policy --region ap-northeast-1 --log-group-name ${LOGGROUPNAME} --retention-in-days <ログ保持期間>;done
※事前に<CloudWatchLogsのロググループ名を入れたファイル>を作成しておいてください!
【備忘録】CloudWatchLogsのログ保持期間を変更するワンライナー
CloudWatchLogsのログ保持期間を変更するワンライナーです。
aws logs describe-log-groups --region ap-northeast-1 --query 'logGroups[].logGroupName' --output text| tr '¥t' '¥n' | while read LOGGROUP; do aws logs put-retention-policy --region ap-northeast-1 --log-group-name ${LOGGROUP} --retention-in-days 7; done
ロググループが50個ほどあったので楽チンに変更できました(°∀° )/
Data Migration Serviceを触ってみた!
- 移行元、移行先のどちらかがAWS上にある必要があるが、他はオンプレミスでも、DB on EC2でも、RDSでもOK
- 移行の種類は以下の3つから選択可能
- ダミーデータ1000件は問題なく移行できた
- 文字コードも変わらずそのまま移行できた
- 移行時間は1~2分程度
- 移行元に投入したデータの文字コードが間違っていた
- 指定したスキーマのテーブルが移行されない