かべぎわブログ

ブログです

Serverlessでstageごとに別のRoleをつかう

Serverlessでstageごとに別のRoleをつかってデプロイしてあげたい。

serverless.yml

service: lambda-test

provider:
  name: aws
  runtime: python3.8
  region: ap-northeast-1
  profile: ${self:custom.profiles.${opt:stage,self:provider.stage}}
  stage: ${opt:stage}

functions:
  hikisuu: 
    handler: handler.lambda_handler

custom:
  pythonRequirements:
    dockerizePip: true
  profiles:
    dev: dev_role
    prod: prod_role

こうデプロイする

sls deploy --stage dev

docker volumeでPermission deniedが発生したとき

dockerでボリュームマウントしたときにPermissionDeniedとなってマウントしたものにアクセスできない事象が発生した。

$ docker run -v /home/vagrant/docker_ansible/playbooks/:/work  local_ansible ls 
ls: cannot open directory '.': Permission denied

なんやろなーと思っていたらSELinuxが悪さをしている。
じゃあsetenforce 0しましょうっていうのもちょっと微妙だなー安直すぎるなーみたいなときにしらべていた解決法。

解決法

このとおり。
:zをつけてあげる

コンテナでデータを管理する — Docker-docs-ja 1.9.0b ドキュメント

たとえばこんなかんじ。

$ docker run -v /home/vagrant/docker_ansible/playbooks/:/work:z  local_ansible ls 

DockerでAnsibleをうごかす

ローカルで適当にうごかすかーみたいなときによくやる構成。

ディレクトリ構成

.
├── Dockerfile
└── playbooks
    └── playbook.yml

Dockerfile

FROM python:3.8

RUN pip install pip --upgrade
RUN pip install ansible

WORKDIR /work

ビルドして

docker build . -t local_ansible

マウントして実行

docker run -v /Users/kabegiwa/git/docker_ansible/playbooks/:/work local_ansible ansible-playbook playbook.yml