かけだしいんふら

いんふら学習めも。

【AWS Lambda】PythonでS3からCSVを取得しRDSへ一括挿入してみた

検証用に作りました。もっとこうした方がいいよなどありましたら是非教えてください!:)

1. 何をしたいか

まず、自分が何をしたかったのかを簡単に説明します。

・S3にCSVをアップロードされたらLambdaを発火させる

・LambdaでアップロードされたCSVの全レコードを取得してRDS(MySQL)に一括挿入

2. Pythonコード

※RDS接続情報は本来機密情報なので、実際はべた書きしません

※pymysqlモジュールはLambda Layerに格納した前提です

import json
import boto3
import sys
import csv
import pymysql
import logging

#rds settings
rds_host  = "database-1.XXXXXXXX.ap-northeast-1.rds.amazonaws.com"
rds_user = "admin"
rds_password = "XXXXXX"
db_name = "testdb"

logger = logging.getLogger()
logger.setLevel(logging.INFO)

s3_client = boto3.client('s3')

def lambda_handler(event, context):
    logger.info("Starting to read csvfile from S3 ")
    bucket_name = event['Records'][0]['s3']['bucket']['name']
    csv_file = event['Records'][0]['s3']['object']['key']
    lines = csv_file_object['Body'].read().decode('utf-8').split()
            
    # read each line in csvfile 
    results = []
    csv_file = csv.reader(lines)
    # skip the header
    header = next(csv_file)
    
    for row in csv_file:
        results.append(row)
        print(row)
    print(results)

    logger.info("Connecting to RDS")
    # Connect to RDS
    connection = pymysql.connect(host=rds_host, user=rds_user, passwd=rds_password, db=db_name, connect_timeout=5)
    
    logger.info("Inserting records to RDS")
    sql_insert_Query = "INSERT INTO access (hostname, user, systemid) VALUES (%s,%s,%s)"
    cursor = connection.cursor()
    cursor.executemany(sql_insert_Query,results)
    connection.commit()
    print(cursor.rowcount, "Record inserted successfully into testdb table")
    

    return {
        'statusCode': 200,
        'body': json.dumps('Hello from Lambda!')
    }

CCNA合格したので、学習したことを残します

ざっくり以下の流れで書きます。 

  1. 学習時間
  2. 学習方法
  3. 前日・直前にしたこと
  4. 大事だと思ったこと(感想)

学習時間

学習しない日も含めて、約3ヶ月。
(1週間でとりましたとか言う人いますが、その記憶力ほしいです、ほんと)

時間で言うと、1ヶ月目は平日2時間前後。3ヶ月目は平日3時間で土日6時間前後。

学習方法

・1週間〜2週間目

以下の本をKindleで購入し読み込む。

  ・1週間でCCNAの基礎が学べる本 第2版 徹底攻略シリーズ
  OR 1週間でCCNAの基礎が学べる本 第3版
内容は、初学者が置いてかれないよう、丁寧な説明でかなりわかりやすかったです。
それでも私は、iPadとかに書き出して頭にいれてましたw

  

・3週目以降
その日に学習する項目を決めて、以下①〜④のサイクルでやってました。

(今日はVLANを理解するぞーみたいな。)

①以下の白本を書籍で購入し一周読む。
  ・シスコ技術者認定教科書 CCNA 完全合格テキスト&問題集[対応試験]200 -301
メルカリとかでもたまに見かけるので、早めにメルカリ検索通知設定しておくといいかもです。

各章の問題は忘れてそうな頃に解き直しもしていました。
この本がけっこう分厚い本で、一周さえ挫折しかけました。。

Ping-tで問題解く。
自社アカウントがあったので利用しました。
知識定着するし、本の内容を理解した気になってたことき気づけるので、よかったです。
参考までにレベル13くらいまでやりましたが、内容を理解さえすればレベルそこまで気にしなくていいんじゃね?派です。

③ネットで調べる。個人的に一番重要だと思う
本やPing-tをやってると、どうしてもわからないことがでてきます。
そんな時はググって、賢人がまとめてくださったサイトやYouTubeとかで理解してました。
あと、自分は英語受験のため、英語でググったり日本語→英訳できるかとかも意識してやってました。

④自分なりにまとめる。 
ここで私の記憶力補助にかかせない、相棒のiPadです。
実は、LPIC1・2・300合格した時もお世話になりました。
利用ツールは標準搭載のNotesです。
まとめた内容に、よく間違えるポイントとかもどんどん書きこんでいきました。

前日・直前にしたこと

前日は、Notesにまとめた内容の見直しをしました。
同期されてるので、直前もiPhoneでざっくりNotesを見直しました。

大事だと思ったこと(感想)

CCNAに限らず他の試験でも言えることだと思いますが。


・好奇心を大切にする。
わからないとモチベーションも下がるので、わからない単語や説明があったら、自分のレベルに合った記事やYouTubeを探しました。

・どうやったらやる気があがるかを知っておく。
自分の場合、2ヶ月目あたりに急に仕事忙しくなったので、それを理由にサボる日がありました。そんな時は、自分がこれならできそうと思う学習(YouTubeとか)から入って机に向かうようにしました。

・略語を分解して意味を理解する

英字3文字用語や4文字用語がやたら出てきますが、みなさんどうやって覚えてますか?私は、分解すると覚えやすいと思う派です。
英語嫌いという方でも、ググれば意味なんてわかりますし、呪文のように覚えるよりも自分は効率いいと思いました。

以上!

Red Hat Update Infrastructure (RHUI)とは

RHUIについて意外と情報がまとまっていなかったので書きました。

 RHUIとは

RHUIとは、RedHatNetworkから最新のエラータやRPMパッケージを引っ張ってきて、クライアントがyumコマンドで問い合わせた際にその最新情報を配布できるシステム環境、です。

そのため、メリットとしてクライアントに配布するパッケージを一括管理できることと、HTTPS経由で更新パッケージやエラータを取得できることが挙げられます。
閉じた環境ですと、最新パッケージをわざわざネットからダウンロードしてくる必要があるため、クライアントが大量にいると管理するには大変便利だと思います。ただし、その分システム利用のための証明書更新など別の管理が発生するので、そこも考慮した上での利用するかの判断になりそうですね。

さて、RHUIそのものはシステム環境のようなものなので、ちゃんと登場人物がいます。
RHUA、CDSロードバランサーです。

登場人物たちを下図にまとめました。ロードバランサーは、RHUAの手前に置いているところもあるかと思います。

f:id:fuwana:20200423231010p:plain

RHUAは何しているのか?

RedHatNetworkから定期的に最新パッケージを取得し、クライアントに配布してくれるCDSとの共有ディスクに保存します。
また、以下項目についてはRHUAのコマンドラインからpulp-adminコマンドまたはrhui-managerで確認や設定変更が可能です。

・RHUAの最終更新日時や更新履歴の確認
・RedHatNetworkとRHUA間の同期タイミングの確認や設定変更 など


9.3. リポジトリーの同期を確認します。 3.1 | Red Hat Customer Portal

 

CDSは何しているのか?

クライアントへパッケージを配布するためのサーバー。可用性を担保するため、1つのRHUI環境に2つ以上のCDSが必要となります。

RHUAとの共有ディスクは、NASなど外部のストレージを利用するか、CDSの内臓ディスクをglusterfsとして使用するかのどちらかで構築することになります。

ちなみにglusterfsはオープンソース分散ファイルシステムで、複数CDS上の記憶領域を集約して、論理的に1つのファイルシステムとして扱います。
この時の論理的ファイルシステムを、glusterボリュームと呼びます。glusterボリュームは、コマンドで状態確認や起動・停止などの操作が可能です。

複数CDSは互いに同期し合っており、その同期状況もgluster peer statusコマンドやgluster volume statusコマンドで確認できます。

17.8. ボリュームステータスの表示 3.5 | Red Hat Customer Portal

第9章 Gluster コマンドラインインターフェースの使用 3.5 | Red Hat Customer Portal

LoadBalancerは何しているのか?

クライアントから情報ちょうだいと問い合わせが来たとき、複数CDSのどれかに問い合わせを投げるサーバーです。
クライアントから見たら受付窓口なので、クライアントのhostsファイルに設定するIPアドレスはこのサーバーのIPアドレスということになります。

HAproxyを利用したり、keepalivedを利用して冗長構成とることも可能です。規模やRHUIのバージョン(3.0より下とか)によってはこの子がない環境もあるかもしれません。

 

以上!

ヒヤリちょっと集Vol.1 Windowsリモート接続でサインアウトからはんぐった

ヒヤリとしたことを集めていこうと思います。

 

Windowsリモート接続でサインアウトからはんぐった時のお話

 いつも通り、仮想サーバにリモートデスクトップ接続し、作業を終えてサインアウトしようとした時のことです。

 

「あれ、サインアウトしてますから動かない.....。」

 

動きが遅いのは毎度のことなのでそのうち抜けるかな~と思ってました。

 

~10分後~

 

「まだ...サインアウトできてないだと....完全にはんぐった。-_-」

 

~30分後~

 

他ユーザがないので仕方なく×ボタンで閉じて、再度リモートデスクトップ接続しても状況変わらず。

 

試しに「Ctrl + Alt + Delete」を押したら

下記画面でタスクマネージャーを選択し、再度ログインすることができました!

f:id:fuwana:20200211140958p:plain

Ctrl + Alt + Del

もちろんそのあとサインアウトもできました。(ほっ

 

まとめ

リモデではんぐったら「Ctrl + Alt + Delete」で一件落着。

焦るとこんなことも思い出せない自分に喝!!

ちなみに、この画面をお好みでカスタマイズできる方法があるのでのっけときます。

www.billionwallet.com

 

素人でも中古PC(Windows7)をファイルサーバーにできた! <2. 自宅内共有編>

前回に引き続き、ファイルサーバーを自宅内で共有させました。

これで自宅であればどのPCからでもアクセスできます。

ちなみに、ここではMacWindows(ファイルサーバー)という一方通行にしています。

 

外部からアクセスするよう設定される方もいますが

当方のような素人は知識が乏しいので怖くて絶対できません。

セキュリティできる人かっこいいな。

 

※念のためファイアーウォールが有効であることを確認してください

Windows側で準備

1. 共有フォルダを作成 

今回は共有フォルダ用に「はてな」というフォルダを作成します。

Windowsは共有フォルダになるとフォルダに鍵マークがつきます。

対象フォルダを右クリックから[オプション]を選択します。

特定の人物しか入れないように、[特定のユーザ]を選択。

f:id:fuwana:20200202165715p:plain

2. そのまま[共有]をぽち。[終了]をぽち。

共有フォルダのできあがり。

f:id:fuwana:20200202170310p:plain

3. コマンドプロンプトから「ipconfig /all」でIPアドレスを確認

ファイルサーバは、初期化した状態でネットに接続していないため、割り振られていない状態でした。

これを自分で割り振る必要があります。

 

一方、家のWiFiを使っているPCたちはもちろん割り当てられています。

このすでに割り振られたIPアドレスが基準になります。

 

個人契約でWiFiルータに接続している家庭がほとんどだと思いますが、

家庭に設置されたルーターさんが接続されるPCにその場その場で割り当てています。(DHCPによる動的アドレス)つまり、接続する度に、IPアドレスが変わります。

 

ルーターさんが他のPCに割り当てるであろうアドレスを避けなければならないのにどうしたらいいのか。

4. 他のPCのIPアドレスを確認

WindowsPCであれば「3」で記載したコマンドで確認できますが、

Macの場合はコマンドプロンプトから「ipcinfig」で確認できます。

結果の中で見る場所はここ。

 → 「en0」の「inet」部分 = PCのIPアドレス

 → 「en0」の「broadcast」部分の「255」

          例)XX.XX.XX.255 = 一番右だけ違う数字であれば家庭内で共有できる

 

例えば、Macで確認したPCのIPアドレスが「192.168.11.12」broadcastが「192.168.11.255」だったとします。

家庭内で共有するには「192.168.11.XX」のXX以外が同じで、「2~244」の中であれば共有可能です。

つまり、ファイルサーバーに割り振るIPアドレスは「192.168.11.20」でも「192.168.11.100」でもつながります。

 

※「192.168.11.1」はルーターに割り当てられている場合が多いので避けることが無難

※「192.168.200~240」が個人的にはいいと思います。他PCに割り当てられないような数字だもの。ちなみに自宅のルーター製品を検索すると、アドレス設定範囲が見れる方法がわかります。

 

今回は、「192.168.11.201」で設定してみます。

割当方法は画像で説明割愛。

f:id:fuwana:20200202170558p:plain

f:id:fuwana:20200202170604p:plain

f:id:fuwana:20200202170615p:plain

f:id:fuwana:20200202170626p:plain

f:id:fuwana:20200202170713p:plain

f:id:fuwana:20200202170728p:plain

5. 再度コマンドプロンプトから「ipconfig /all」でIPアドレスが振られたことを確認

Mac側から見てみよう!

1. Finderから[サーバへ接続]を選択
f:id:fuwana:20200202173459p:plain
2. 先ほどファイルサーバに設定したアドレスを画像のように入力し、[接続]をします

f:id:fuwana:20200202173725p:plain

3. 共有できたことを確認できました!

f:id:fuwana:20200202173950p:plain

 

おわり。

素人でも中古PC(Windows7)をファイルサーバーにできた! <1. 事前準備編>


家に眠っていた古いPCをせっかくなのでファイルサーバとして現役復帰させてみました。

今回は準備段階としてディスクの初期化を行います。

 PCスペック

Amazonで買ったわけではありませんが、富士通の「ESPRIMO D550/B」です。

でもこれ、有線キーボードじゃないと認識してくれないので要注意。

 

事前準備(ディスクの初期化)

何せ中古ですし、約10年前に使用していたものなので、ディスクのお掃除が必要です。

出荷直後の状態に戻そうと初期化を実施しました。

最初はBIOS画面からできるだろうと再起動 →「F2」でやってみたのですが、BIOS画面から初期化ができそうなオプションがない!!

 

でも、今回使用したPCでは以下のやり方であっさりできました。Win7に振り回された感あります。。。

※スクショではないので画質悪いです

1. [スタートボタン]-[コントロールパネル]-[システムとセキュリティ]-[バックアップと復元]を開きます

f:id:fuwana:20200202121018j:plain

2. [バックアップと復元]から[システム設定またはコンピュータの回復]を押します

f:id:fuwana:20200202121323j:plain

3. 下記画面にいくので[高度な回復方法]を押します

f:id:fuwana:20200202121540j:plain

4. 下記画面にいくので[コンピュータを出荷時の状態に戻す]を押します

f:id:fuwana:20200202121816j:plain

5. 今回バックアップなしでいくので[スキップ]を押します

f:id:fuwana:20200202122027j:plain

6. [再起動]を押します

f:id:fuwana:20200202122452j:plain

7. 待機!

f:id:fuwana:20200202122935j:plain

8. 待ってるとトラブル解決ナビが出てくるので、[リカバリ]タブを選択

f:id:fuwana:20200202123310j:plain

9. [Cドライブのみ、ご購入時の状態に戻す]を選択し、[実行]を選択!

 

ちなみに、[全ドライブをご購入時状態に戻す]は富士通のトラブル解決用のドライバーディスクを挿入しないとできません。

f:id:fuwana:20200202123600j:plain

10.  [同意する]を選択

f:id:fuwana:20200202123951j:plain

11.  [リカバリ領域]を選択し、[OK]

f:id:fuwana:20200202124242j:plain

その後、警告画面が出てきますが本当に初期化しちゃうよ?!という画面なので、

構わず「OK」を押します。

f:id:fuwana:20200202125356j:plain

リカバリーが始まります。当方は、20Gほどしかデータがなかったので数分で終わりました。

12. [ハードディスク領域変更ツール]が立ち上がるので、区画割合を決めて[実行]を押下

当方はパートナーと家でファイル共有したかったので、今回Dドライブを大きめに割当てたいところです。

ですが、このまま進めてもあとで区画を再割当する方法も記載したいのでこのまま進めます。(もちろんここで自分のやりたい割当をさっさと済ませた方がいいです)

f:id:fuwana:20200202125455j:plain

12. この設定でいいか聞かれるので[はい]を押下

ちなみに今こんな割当ですが、

あーやっぱり変えたいと思ったらこのあと記載する再割当作業をします。

<現在>

Cドライブ:104GB

Dドライブ:32GB

<再割当後>

Cドライブ:32GB

Dドライブ:104GB

13. 初期設定画面が勝手に立ち上がるので[実行する]を押下

PCの初期設定作業です。これで必要なシステム構成、ユーザ情報ファイルなどが作成されCドライブに格納されます。

f:id:fuwana:20200202153646j:plain

これで初期化は完了です。

ここからは先は、もしディスクの再割当をする場合を記載します。

 〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜

14. [コントロールパネル]-[システムとセキュリティ]-[管理ツール]から[ハードディスクパティションの作成とフォーマット]を選択

f:id:fuwana:20200202154910j:plain

15. ディスク管理画面が開くので、まずはCドライブを縮小。赤枠のCドライブを右クリックし、[ボリュームの縮小]を選択

今回はこんな感じで変えていきます。

 Cドライブ:104GB  → 32GB

 Dドライブ:32GB → 104GB 

f:id:fuwana:20200202155148j:plain

16. Cドライブは32GBにするために、[縮小する領域のサイズ]を手打ち入力します

ここでは、Cドライブを32GB (32 × 1024 = 32768) にするために

つまり、[縮小後の合計サイズ] が 32768 となるように

[縮小する領域のサイズ] に 縮小前の合計サイズ - 32768 を打ち込みます。

 

「32768」にする理由は、単位がそもそも人間のわかりやすいGBとここで設定する単位(MiB)が違うこと、そして人間とパソコンの世界では表し方が異なるためです。

ざっくり知りたい方はこちらのサイトが参考になります。

https://wa3.i-3-i.info/word12969.html

f:id:fuwana:20200202155737j:plain

 

17.  残念ながらDドライブは拡張ができないので、一旦削除して割り当てなおします。赤枠のDドライブを右クリックし、[ボリュームの削除]を選択

f:id:fuwana:20200202161002j:plain

18.  削除したDドライブ分が「未割当」状態になるので、赤枠を右クリックで[新しいシンプルボリューム]を選択

f:id:fuwana:20200202161444j:plain

19.  最大ディスク領域の「107368」をそのまま[シンプルボリュームサイズ]に割り当てるため入力

ここでも割り当てたい104GBをPC寄りの単位に表示されているだけです。

104GB × 1024 = 107368 MiB

f:id:fuwana:20200202161629j:plain

20.  あとはデフォルトで[次へ]を押下していき[完了]!

f:id:fuwana:20200202162219j:plain

最後までお付き合いありがとうございました。

AWS認定ソリューションアーキテクトアソシエイト(SAA)不合格!ネット信じすぎちゃダメ絶対

 

 

今日、AWS認定試験受けてきました。

結果は不合格。そんな人が何を言えるの?

 

いえいえ。この方法では無理だよって伝えたいんです!涙

もし同じような勉強方法で臨む人いたら、ぜひ見直してください。

 

準備期間は約3週間。

1日2時間は勉強しました。

 

でも、インフラ知識は非エンジニアと同じレベルの私。

ネットに落ちてる合格体験記を参考にしても、まったく歯が立ちませんでした。

インフラ経験豊富な方や、AWS案件参画した方は、本記事ガン無視してください...。

 

勉強前の私

サービス1つもわかりませんでした。

  • AWS聞いたことある
  • EC2おいしいの?
  • Amazon Auroraなんかかっこいい

 

勉強準備

  1. 合格体験記読んだり情報収集(1日)
  2. 本で概要把握(2週間)
    それぞれ2周しました。
    ・『合格対策 AWS認定ソリューションアーキテクト - アソシエイト』
    ・『AWS認定資格試験テキスト AWS認定 ソリューションアーキテクト-アソシエイト』
  3. 本の問題を全問正解するまで解く。
    間違えた問題は、自分で整理用ノートにまとめる(1週間)
  4. よく出るサービスをホワイトペーパーで読む(3日)
  5. 公式模試を受験 → 7割以上正解
  6. 下記サイトの無料問題を全問正解するまで解く
    AWS WEB問題集で学習しよう | 赤本ではなく黒本の問題集から学習する方向け

 

実際は・・・

規定上、詳細は言えませんが。

  • 本で見たことないサービス続出
  • 基本、問題文は長い
  • 模試より確実に難しい(でも模試とほぼ同じUIだからその点よかった)

2018年改訂以降、難しくなったとはいえ

合格できるだろうとちょっと自信もってた自分が情けない。

 

受験してわかったこと

  • 本の知識だけでは到底及ばない
  • 各サービスは暗記ではなく、どんなケースで使われるのかといった理解が必要
  • インフラの基本知識がないと、長文で何言ってるのかわからなくなる
  • 合格体験記は旧試験の場合が多いので、信じすぎちゃだめ!

問題解けるようになるまでやって、わかった気でいました。

あと、サービスの機能を聞いてくるとかそんなかわいい問題出ません。

 

方法を見直してこれをどのくらいやったらできたよって報告したい!涙

近いうちに再受験します!

 

余談

試験会場によりますが、怪しい行動していないか目の前のライブカメラで見られます。

私は、腹痛で悶え苦しみながら解いてました。(薬局の薬きかないんです...)

恐らくカメラの向こうの人は、察してくれたのか、しばらくそっとしてくれました。

しかし、数分後とうとうチャットごしで「両手は机の上に置いてください」と言われました。(むしろあの時、数分間ありがとうございます)

 

まさに私は苦しむカエルの恰好で受験しました。げこ。

 

女性のみなさんへ

生理きつめの人で当たってしまったら迷わず延期しましょう。地獄です。

(試験は1日前ならキャンセルできるらしい)