LoginSignup
5
3

More than 3 years have passed since last update.

AWS Lambdaを使ってみる① | のび太とジャイアンのあの関係?

Posted at

はじめてAWS Lambdaを使ってみたので、備忘録もかねて遊んだ内容をここに記します。

AWS Lambdaを使って、あるS3バケットにデータをアップロードすると別のS3バケットにそれをコピーして保存するということを実現したいと思います(バックアップもどきみたいな)

そこで今回はのび太とジャイアンと名付けられた2つのS3バケットを用意して、のび太バケットにデータをアップロードすると、ジャイアンバケットに同じものが保存されるということをやります。

つまり、「オマエノモノハオレノモノ」ということです。

奪っているわけではないので、言わば、まさに、その中で、健全だということを申し上げたいと思っている次第であります。

※Lambdaの実行環境はをNode.js 12.xを使います

のび太バケットとジャイアンバケットをつくる

S3バケットをつくります
Bucket nameを入れてcreateするだけでOKです(それ以外なにも設定しなくてOK)
1.png

IAM でロールをつくる

LambdaをつくるにはそのLambda関数にロールを与えなければいけないからです。

Services > IAM > Roles > Create roleをclick
1). Lambdaを選択してNext: Permision
2). 今回はお勉強のためにポリシーを自分で書いてみたいと思うので、Create policyをclick(別タブでポリシーを作る用の画面が開きます)
3). JSONタブを押して以下を直書きしてReview Policy

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "s3:GetObject"
            ],
            "Resource": [
                "のび太バケットのARN/*"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "s3:PutObject"
            ],
            "Resource": [
                "ジャイアンバケットのARN/*"
            ]
        }
    ]

4). 名前をつけてCreate policy (OmaeNoMonoHaOreNoMonoという名前にしてみました)
5). ロールの設定画面に戻り、Filter Policyを選択してCustomer managedにチェックをいれると、↑でつくったOmaeNoMonoHaOreNoMonoポリシーが見つかります
2.png

6). OmaeNoMonoHaOreNoMonoポリシーにチェックしたらNext: Tags
7). なにも書かないでOK、Next: Review
8). Role nameを決めてCreate role(whats_yours_is_mineと名付けてみました)

  • Rolesの一覧に追加されていることを確認します
    3.png

  • whats_yours_is_mineロールの中身をみてみると、OmaeNoMonoHaOreNoMonoポリシーが適用されていることがわかります
    7aae9826-4b9c-4181-9472-785b824a4370-1920x475r.png

いざ、Lambda

Services > Lambda > Create functionをclick

1). lambdaGianismという名前にして以下の設定で作成
4.png

2). のび太バケットにデータがアップロードされたらこのLambda関数が発動されるようにトリガーを設定します。Add trggerを押して以下の設定にしてAdd
5.png
6.png

3). index.jsにコードを書いてく
参考: https://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/S3.html#copyObject-property
7.png

const AWS = require("aws-sdk");
const s3 = new AWS.S3();

exports.handler = (event) => {
    const sourceBucket = "nobi-nobita";
    const destinationBucket = "goda-takeshi-aka-gian";
    const objectKey = event.Records[0].s3.object.key;
    const copySource = encodeURI(sourceBucket + "/" + objectKey);
    const copyParams = { Bucket: destinationBucket, CopySource: copySource, Key: objectKey };
    s3.copyObject(copyParams, function (err, data) {
        if (err) {
            console.log(err, err.stack);
        } else {
            console.log('オマエノモノハ');
        }
    });
};

のび太バケットになんかアップロードしてみる

2020-05-30-231558.gif

参考:
https://www.youtube.com/watch?v=97q30JjEq9Y
これを元に作りました。
ちなみに動画通りだと実現できないです。

5
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
3