AWS CLIããLambda Functionãã¢ãããã¼ããTwitterã«Tweetãã¦ã¿ã
ä»æ¥ã¯Lambda FunctionãCLIããã¢ãããã¼ãããTwitterã«Tweetãã¦ã¿ãæã®ãã°ãæãã¾ãã
ä¹
ã
ã«ã¾ããã«Lambdaã触ã£ã¦ããã®ã§ãè¨æ¶ãå¼ã³èµ·ãã+èªåã¸ã®èªæãè¾¼ãã¦ãããã°è¨äºåãã¦ã¿ã¾ããã
äºåæºå
ã¾ãã¯ä½æ¥ãã©ã«ããä½æãã¾ãããã
# mkdir lambda-twitter && cd $_
Twitterã¸ã®Tweetã¯æ¯åº¦ããªãã¿ã®ãã¡ãã®ã©ã¤ãã©ãªãå©ç¨ãã¾ããã
# npm install twitter
Lambda Function
ç¶ãã¦å®éã®Lambda Functionã§ããä»åã¯ç¹ã«ãã©ã¡ã¼ã¿ãªã©ã¯åãåãããåºå®ã®æååã§ãI Love Twitterãã¨ã¤ã¶ããã¦ã¿ã¾ããã
ã¯ããã»ã¨ãã©twitterã©ã¤ãã©ãªã®ãµã³ãã«ããã®ã¾ã¾Lambda Functionåãã¦ã¿ããã¨ããã®ãå®æ
ã§ãã
# vim index.js
var Twitter = require('twitter');
var client = new Twitter({
consumer_key: 'xxxxxxxxxxxxxxxxxxxxxxxxx',
consumer_secret: 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx',
access_token_key: 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx',
access_token_secret: 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'
});
exports.handler = function(event, context) {
client.post('statuses/update', {status: 'I Love Twitter'}, function(error, tweet, response){
if (error) {
context.done(null, error);
}
console.log(tweet);
console.log(response);
context.succeed();
});
};
Lambda Functionãå§ç¸®
twitterã©ã¤ãã©ãªãå©ç¨ãããããzipå½¢å¼ã§å§ç¸®ãã¦ã¢ãããã¼ããã¾ãã
ãã®ããå
ã»ã©ä½æããLambda Functionããzipã§å§ç¸®ãã¾ãããã
# zip -r lambda-twitter.zip index.js node_modules
IAM Roleã®ä½æ
Lambda Functionã«ç´ä»ããIAM Roleãä½æãã¾ãã
ä»åã¯ãã¡ããCLIããå®è¡ãã¦ã¿ã¾ãããã
# mkdir roles
# vim roles/lambda-exec-role.json
{
"Version": "2012-10-17",
"Statement": [
{
"Action": "sts:AssumeRole",
"Principal": {
"Service": "lambda.amazonaws.com"
},
"Effect": "Allow",
"Sid": ""
}
]
}
# aws iam create-role --role-name lambda-exec-role --assume-role-policy-document file://roles/lambda-exec-role.json
{
"Role": {
"AssumeRolePolicyDocument": {
"Version": "2012-10-17",
"Statement": [
{
"Action": "sts:AssumeRole",
"Sid": "",
"Effect": "Allow",
"Principal": {
"Service": "lambda.amazonaws.com"
}
}
]
},
"RoleId": "xxxxxxxxxxxxxxxxxxxxx",
"CreateDate": "2016-04-23T14:45:34.538Z",
"RoleName": "lambda-exec-role",
"Path": "/",
"Arn": "arn:aws:iam::xxxxxxxxxxxx:role/lambda-exec-role"
}
}
Lambda Functionãä½æ
å ã»ã©ä½æããzipãã¡ã¤ã«ãããã³IAM Roleãæå®ãLambda Functionãä½æãã¾ãã
# aws lambda create-function --function-name lambda-twitter --runtime nodejs --role arn:aws:iam::xxxxxxxxxxxx:role/lambda-exec-role --handler index.handler --zip-file fileb://lambda-twitter.zip
{
"CodeSha256": "ZdOQM2MN4GaYNU8MZa4s2wh4Ya195b2KryMf7oEhFq8=",
"FunctionName": "lambda-twitter",
"CodeSize": 1273693,
"MemorySize": 128,
"FunctionArn": "arn:aws:lambda:ap-northeast-1:xxxxxxxxxxxx:function:lambda-twitter",
"Version": "$LATEST",
"Role": "arn:aws:iam::xxxxxxxxxxxx:role/lambda-exec-role",
"Timeout": 3,
"LastModified": "2016-04-23T15:29:40.632+0000",
"Handler": "index.handler",
"Runtime": "nodejs",
"Description": ""
}
Management Consoleãè¦ãã¨ãä½æããLambda Functionã追å ããã¦ãããã¨ã確èªã§ããã§ãããã
Lambda Functionãå®è¡
ã§ã¯ããããLambda Functionãå®è¡ãã¾ãã
# aws lambda invoke --function-name lambda-twitter output.txt
{
"StatusCode": 200
}
ã©ãããå®è¡ã«æåããããã§ãã
æ£ããTwitterã«ãæ稿ããã¦ãããã¨ã確èªã§ãã¾ããã
ä½åº¦ãå®è¡ããã¨ãManagement Consoleããããããããå®è¡ãã°ã確èªã§ããããã«ãªãã¾ããã
(ä½åº¦ãã¨ã©ã¼ã«ãªã£ã¦ããã®ã¯ã»ã»ã»å¯ãã¦ãã ãã)
ã¾ã¨ã
Lambda Functionã®ä½æããå®è¡ã¾ã§ããAWS CLIãç¨ãã¦è¡ã£ã¦ã¿ã¾ããã
次åã¯ä»åä½æããLambda FunctionãAPI Gatewayçµç±ã§å®è¡ãã¦ã¿ããã¨æãã¾ãï¼