特定のIP、ユーザからはrootでのアクセスを許可する

特定のIPアドレス、ユーザからのアクセスの場合のみrootでのアクセスを許可する。

PasswordAuthentication no
PermitRootLogin no

Match Address 192.168.1.1/32
    PermitRootLogin without-password
    
Match User hoge
    PermitRootLogin without-password

Matchの引数で利用可能なもの

  • User(ユーザ名)
  • Group(グループ名)
  • Host(ホスト名)
  • LocalAddress(ローカルアドレス)
  • LocalPort(ローカルポート)
  • Address(アドレス)

参考

SSHD_CONFIG (5)

serverless framework で AWS lambdaのデプロイをする

主に利用方法のメモです。

前提

  • nodeはインストール済み
  • AWSの権限は設定済み

インストール

serverlessコマンドのエイリアスとしてslsコマンドが登録される。

$ npm install -g serverless
$ sls -v
1.30.0

新規サービスの作成

ここではpython3のテンプレートから作成する。利用できるテンプレートはsls create -hで確認できる。

$ sls create -t aws-python3 -p sample-app
$ cd sample-app
$ tree -L 1
.
├── handler.py # lambdaファンクションのテンプレート
└── serverless.yml # serverlessの設定ファイル

プラグイン機能

serverlessにはプラグイン機能が準備されている。

プラグインの検索

pythonプラグインを検索する。

$ sls plugin search --query python

プラグインのインストール

serverless-python-requirementsをインストールする。serverless-python-requirementsはrequirements.txtに記載されたモジュールをデプロイ時にまとめてパッケージ化してくれるプラグイン

$ sls plugin install -n serverless-python-requirements

サービスのデプロイ

プロファイルを指定する場合は--aws-profileオプションで、ステージを指定する場合は--stageオプションで行う。

$ sls deploy --aws-profile profile_file --stage prod

serverlessの設定

基本的な設定はドキュメントを参照。自身が運用するにあたってハマりどころだけ記載する。

既存のroleを指定する

既存のロールの権限を与えたい場合は、roleキーにIAMロールのarnを指定する。

provider:
  name: aws
  runtime: python3.6
  stage: ${opt:stage, 'dev'}
  region: ap-northeast-1
  role: arn:aws:iam::xxxxxxxxxx:role/lambda-role
  ...

stage毎に環境変数を変える

各ステージ用の設定ファイル作成

$ mkdir conf && cd conf
$ touch dev.yml, prod.yml 
$ vi dev.yml
DYNAMODB_TABLE: 'dev_dynamo_table'
# 本番用も同じように

serverlessの設定

stage毎の設定ファイルを読み込ませ、環境変数の設定で指定したstageの値をセットする。 devを指定した場合はdev.yml、prodを指定した場合はprod.ymlのDYNAMODB_TABLEの値がセットされることになる。

functions:
  speech-translation:
    handler: handler.handler
    events:
      - schedule: rate(30 minutes)
    environment:
      DYNAMODB_TABLE: ${self:custom.otherfile.environment.${self:provider.stage}.DYNAMODB_TABLE}

custom:
  otherfile:
    environment:
      dev: ${file(./conf/dev.yml)}
      prod: ${file(./conf/prod.yml)}

共通の環境変数を設定する

provider.environmentに指定する。

provider:
  ... 省略
  environment:
    DYNAMODB_ENDPOINT: 'https://dynamodb.ap-northeast-1.amazonaws.com'

注意事項

serverlessでデプロイした場合、タイムアウトが6秒に設定される。時間がかかる処理をする場合は変更する必要がある。

参考

DynamoDB ローカルのDockerをつくった

Vagrantに入れてたDynamoDB ローカルをDockerに移行した。

from openjdk:8-jre

RUN mkdir /usr/local/dynamodb
RUN curl https://s3-ap-northeast-1.amazonaws.com/dynamodb-local-tokyo/dynamodb_local_latest.tar.gz | tar zx -C /usr/local/dynamodb
WORKDIR /usr/local/dynamodb

ENTRYPOINT ["java",  "-Djava.library.path=./DynamoDBLocal_lib",  "-jar",  "DynamoDBLocal.jar"]
EXPOSE 8000

build

タグ名は適宜変更する。

docker build -t grmn/dynamodb-local <path_to_dockerfile>

run

docker run -itd -p 8000:8000 --rm grmn/dynamodb-local

github.com

You are using the runtime-only build of Vue where the template compiler is not available. Either pre-compile the templates into render functions, or use the compiler-included build.

Webpackを利用している場合、以下の記述を追加

module.exports = {
  // ...
  resolve: {
    alias: {
      'vue$': 'vue/dist/vue.esm.js',
    }
  }
}

参考

jp.vuejs.org