LoginSignup
2
1

More than 5 years have passed since last update.

AWS LambdaでQiitaに投稿してみる

Posted at

Qiita API V2を使ってAWS Lambdaから投稿

春になってAWS Lambdaを使ってみたい気持ちが芽生えたので、Qiita API経由で投稿してみました。ランタイムはNode.js 6.10です。普段JSをがっつり書いてないのでcallbackや変数宣言がこれでいいのか不安。ACCESS TOKENは環境変数でKMSを使って暗号化しました。

'use strict';

const https = require('https');
const AWS = require('aws-sdk');

const decrypt = (encrypted) => {
  const kms = new AWS.KMS();
  return kms.decrypt({
    CiphertextBlob: new Buffer(encrypted, 'base64')
  }).promise().then((data) => {
    return data.Plaintext.toString('ascii');
  });
};
const httpRequest = (params, postData) => {
  return new Promise((resolve, reject) => {
    const req = https.request(params, (res) => {
      let body = [];
      res.setEncoding('utf8');
      res.on('data', (chunk) => {
        body.push(chunk);
      });
      res.on('end', () => {
        const ret = {
          body: body.join(''),
          statusCode: res.statusCode,
          header: res.headers
        };
        resolve(ret);
      });
    });
    req.on('error', (e) => {
      console.error(e);
      reject(e);
    });
    req.end(postData);
  });
}

exports.handler = (event, context, callback) => {
  const getQiitaToken = decrypt(process.env.QIITA);
  // 複数の環境変数を復号化する用にPromise.all
  Promise.all([getQiitaToken]).then((value) => {
    const QIITA_TOKEN = value[0];
    const postData = JSON.stringify({
      'body': "# :sake::sake::sake::sake:\n:cherry_blossom::cherry_blossom::cherry_blossom::cherry_blossom::cherry_blossom::cherry_blossom:",
      'coediting': false,
      'gist': false,
      'private': true,
      'tags': [
        {
          'name': 'javascript'
        }
      ],
      'title': 'ohanami',
      'tweet': false
    });

    const options = {
      host: 'qiita.com',
      port: 443,
      path: '/api/v2/items',
      method: 'POST',
      headers: {
        'Content-Type': 'application/json',
        Authorization: `Bearer ${QIITA_TOKEN}`
      },
    };
    return httpRequest(options, postData);
  }).then((data) => {
    callback(null, data);
  });
};
2
1
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
2
1