支援対象地域:札幌、仙台、関東、愛知、関西、広島、福岡


はじめに

Amazon Web Serviceを始めたいけど、敷居が高くて始めにくいと感じている方は多いでしょう。 そんな方に向けて本記事ではAmazon Web Serviceのログインの仕方からストレージサービス「S3」の使い方、またAWS Lambdaを使ったS3との連携処理の作成を、初心者の方にわかりやすく紹介していきます。また気になるセキュリティ面に関しても抑えておくポイントを紹介していますので、この記事を読んで頂ければこれからのAmazon Web Serviceの環境を立てる上でも役に立つでしょう。是非読んでみてください。

AWSにログイン

では、さっそく始めていきます。 まずAmazon Web Serviceに登録しましょう。 Amazon Web Serviceは、個人での学習用途での利用範囲であれば基本的には無料で使えるという認識で問題ないです。今回利用するS3とLambdaは以下の範囲が無料になります。

Amazon S3:5GBまで無料
AWS Lambda:リクエスト100万件/月


登録ではだいたい以下のものを登録します。

プロフェッショナル、又は、個人利用
氏名
住所
電話番号
クレジットカード情報


登録が完了し、ログインするとAWSマネジメントコンソールのページに入ります。



これでログインは完了です。

多要素認証(MFA)を設定する

ログインが完了しましたが、現在はrootユーザーと言って、Amazon Web Serviceのすべての利用権限を持っている状態です。この状態だとユーザー名とパスワードが漏れてしまった場合、悪用される可能性があります。ですので、まずrootユーザーアカウントのセキュリティを強化します。 MFAを導入しますが、これは二重認証でのログインを可能にします。
AWSマネジメントコンソールの上部の自分のユーザー名から「マイセキュリティ資格情報」を選択します。 ガイダンスに従ってできますが、概ね以下を実施します。

1.自分が使っているスマホやPCに認証用のアプリをインストール(私は「Google認証」を使いました。)
2.Amazon Web Serviceで表示されるQRコードを読み込むと。自動でアプリが認識してくれます。
3.六桁の番号(トークン)が10秒置きぐらいに生成されますので、それを二回続けてAmazon Web Serviceに登録します。
4.これでお使いのデバイスとAmazon Web Serviceとの連携で取れて、次回のログインから、 アカウント名、パスワードとさらにMFAを入力して、ログインができるようになります。

アカウントの乗っ取りなどの手口は、パスワードを類推して手当たり次第試す、というのが一般的です。これをパスワードクラッキングと呼び、それ用のツールなどもあります。二重認証にしておけば、パスワードが見破られた場合でも、6桁の番号(トークン)は自分のデバイスでしか確認できません。さらに10秒毎に新しくなりますので、これを類推して破るのは不可能でしょう。
ただ近年では、類推ではなく、正規のページを装った偽のWebページを作成し、そこに誘導してアカウント名、パスワード、MFAを入力させる手口などもあるようです。 そうした場合も考えて、rootユーザーは極力使わないで、一般のユーザーを作って、それで毎回ログインするのが良いです。さらに適切な権限を付与してください。EC2やその他のサービスを勝手に始めたりできないように設定しておけば、万が一ユーザーでログインされても被害を最小限にとどめることができます。 ですので、ユーザーを作成することを強くお勧めします。 ユーザーの登録の仕方は、インターネットにたくさん転がっていますので、是非参考にして作成してください。

S3をはじめる

登録が完了しましたので、S3を始めていきましょう。
AWSマネジメントコンソールの「サービスを検索する」に「S3」と入れます。
すると以下のようにAmazon S3のページに入ります。



「バケットを作成する」を押下します。
するとバケット作成画面に入ります。以下を参考に進めていってください。

名前とリージョン

バケット名:バケットの名称になります。Amazon Web Service上で一意になる必要があります。またDNSに準拠する必要があるようです。DNSに準拠するとは以下の点を考慮する必要があるようです。

1.3~63文字
2.英数字、ドット 「.」、ハイフン 「-」のみ
3.英数字で開始し終了すること
4.一意であること(入力して一意では無い場合は、はじかれます。)


リージョン:アジアパシフィック(東京)にしておきましょう。
リージョンとは地域のことです。S3のバケットをどの地域に置くか、という意味です。 私は日本の関東県内に住んでいますので、近場の東京にしました。 リージョンに近ければ近い程、アクセスは早くなります。

既存のバケットから設定をコピー:これは既存のものが無いので、無視して大丈夫です。

オプションの設定

バージョニング:特に設定不要です。
S3内のすべてのオブジェクト(ファイルなど)のバージョンを保持します。 これを有効にすると、誤ってオブジェクトを削除したり、上書きした場合でも、古いバージョンから復元できたりするみたいです。 今回はテスト用のファイルを置くだけですので、特にバージョニングは不要です。

サーバーアクセスのログ記録:特に設定不要です。 バケットへのアクセスログを取得します。今回は外部に公開しませんので、特にログの取得は不要です。アクセスログが見たい場合は、有効にしても良いかもしれません。

Tags:特に設定不要です。 Tagsを使うとバケットの中のオブジェクトを分類できるようです。

オブジェクトレベルのログ記録:特に不要です。追加料金がかかるようです。

デフォルト暗号化:特に不要です。オブジェクトを暗号化して保持します。

アクセス許可の設定

パブリックアクセスをすべてブロック:デフォルトで問題ないです。 これはS3に対して外部からのアクセスを許可するかどうかです。 いったんパブリックアクセスをすべてブロックしておきます。

以上で設定完了です。 以下のようにバケットで作成されているはずです。



Lambdaを書く

では最後にAWS Lambdaを書いて実行してみましょう。 今回はファイルがS3のバケットにアップロードされたのを引き金にして、lambdaを実行し、バケットの情報やファイルの情報をログに出力させます。



まず、左上のAWSアイコンを押して、AWSマネジメントコンソールに戻ります。
検索の個所に「lambda」と入れてください。
lambdaを押すとlambdaのページに移動します。
右の「関数の作成」を押下します。
「一から作成を押下します。」
関数名は、任意で作成してください。私は、「myFunction」にしました。
ランタイムは、今回はJavaScriptを動かすことができる「Node.js」にします。
他にもJavaやPythonなども動かすことができるようです。
アクセス権限は、デフォルトで問題ないです。



トリガーの設定

トリガーの設定をします。



トリガーを選択:今回はS3にファイルがアップロードされたことを引き金にします。
バケット:自分の作ったバケット名を選択します。
イベントタイプ:イベントタイプはファイルが置かれた時なのでPUTを選択します。
プレフィックス-オプション:特に不要です。
サフィックス-オプション:徳に不要です。
再帰呼び出し:デフォルトで問題ないです。


以上でトリガー設定は完了です。

コード記述

Node.jsを使って書いていきます。
Node.jsはJavaScriptをサーバー側で動かすための実行環境になります。

以下のように記載してください。


1.exports.handler = (event, context, callback) => {
2.var Bucket = event.Records[0].s3.bucket.name;
3. var ObjKey = event.Records[0].s3.object.key;
4. var FilePath = Bucket + '/' + ObjKey;
5. console.log('BucketName : ' + Bucket);
6. console.log('ObjKey : ' + ObjKey);
7. console.log('FilePath : ' + FilePath);
8.
9.}


1行目は、三つの引数を設定して関数を定義しています。

eventの引数には、起動されたAmazon Web Seriviceのイベントデータが入ります。今回はS3のイベント情報です。ちなみにオブジェクト形式(Json)で入ります。
contextには、 Lambda 関数の名前や実行iDなどのランタイム情報が入ります。
callbackには、呼び出し元に情報を返すために設定します。設定しない場合、NULLが返ります。


2、3行目でevent引数に入ってきたイベント情報から、バケット名とファイル名を取得します。
S3で通知されるイベントは以下のようにJson形式になっています。
以下から取得したい情報を選択します。


{
"Records": [
{
"eventVersion": "2.1",
"eventSource": "aws:s3",
"awsRegion": "us-east-2",
"eventTime": "2019-09-03T19:37:27.192Z",
"eventName": "ObjectCreated:Put",
"userIdentity": {
"principalId": "AWS:AIDAINPONIXQXHT3IKHL2"
},
"requestParameters": {
"sourceIPAddress": "205.255.255.255"
},
"responseElements": {
"x-amz-request-id": "D82B88E5F771F645",
"x-amz-id-2":
"vlR7PnpV2Ce81l0PRw6jlUpck7Jo5ZsQjryTjKlc5aLWGVHPZLj5NeC6qMa0emYBDXOo6QBU0Wo="
},
"s3": {
"s3SchemaVersion": "1.0",
"configurationId": "828aa6fc-f7b5-4305-8584-487c791949c1",
"bucket": {
"name": "lambda-artifacts-deafc19498e3f2df",
"ownerIdentity": {
"principalId": "A3I5XTEXAMAI3E"
},
"arn": "arn:aws:s3:::lambda-artifacts-deafc19498e3f2df"
},
"object": {
"key": "b21b84d653bb07b05b1e6b33684dc11b",
"size": 1305107,
"eTag": "b21b84d653bb07b05b1e6b33684dc11b",
"sequencer": "0C0F6F405D6ED209E1"
}
}
}
]
}

4行目でバケット名とファイル名を合わせて、ファイルパスを作成しています。
5行目~7行目でログに出力しています。

これで保存して、デプロイします。

※リージョンを「アジアパシフィック(東京)」にしておいてください。

<S3にアップロードしてみる>

では、S3のバケットにファイルをアップロードしてみましょう。
下記写真のアップロードからアップロードしてください。



結果を確認する

S3にアップロードされたことで、Lambdaのスクリプトが起動されたはずです。
Lambdaのページに戻り、作成した関数名のページを開きます。 上部のモニタリングを開きます。



下部の「Recent invocation」に表示されている一番上のログをクリックします。



以下のように表示されていれば成功です。



最後に

いかがでしたでしょうか? Amazon Web Serviceのログインの仕方からLambdaの実行までを見ていきました。 サービスや機能が豊富過ぎて、操作に慣れるのに時間がかかりそうですが、 S3やLambdaに関してのイメージをつかめたのではないでしょうか? S3以外にも無料で使えるサービスは豊富にありますので、 別のサービスとLambdaを連携させてみるのも良いかもしれません。 是非色々やってみてください。 以上です。