ERROR: Named volume "data:/var/lib/mysql:rw" is used in service "xxxx" but no declaration was found in the volumes section.
トップレベルにもvolumes
を指定しないとだめ。
version: "3" services: db: image: db volumes: - data-volume:/var/lib/db backup: image: backup-service volumes: - data-volume:/var/lib/backup/data volumes: data-volume:
参考
yumでnode.jsをインスールする
6系の場合
$ curl -sL https://rpm.nodesource.com/setup_6.x | bash - $ yum install nodejs
参考
特定の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(アドレス)
参考
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にはプラグイン機能が準備されている。
プラグインの検索
$ 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秒に設定される。時間がかかる処理をする場合は変更する必要がある。
参考
Error: Could not locate Flask application. You did not provide the FLASK_APP environment variable.
英文そのまま。環境変数FLASK_APP
を設定する。
export FLASK_APP=application.py flask run
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