Help us understand the problem. What is going on with this article?

Serverless Frameworkで既存のS3バケットにトリガーをアタッチする

More than 3 years have passed since last update.

Serverless Frameworkで既存のS3バケットにトリガーをアタッチしようとすると、デプロイ時に以下のようなエラーが出てしまった。

Serverless: Packaging service...
Serverless: Uploading CloudFormation file to S3...
Serverless: Uploading service .zip file to S3 (3.85 KB)...
Serverless: Updating Stack...
Serverless: Checking Stack update progress...
.........................Serverless: Deployment failed!

  Serverless Error ---------------------------------------

     An error occurred while provisioning your stack: S3BucketServerlessexample
     - mybucket already exists
     in stack arn:aws:cloudformation:us-east-1:872755943855:stack/example-dev/06bf9a10-f42b-11e6-a0f4-500c221b72d1.

CloudFormation側の制限により、既存のS3バケットに手を加えることができないらしい。

解決策

結論としてはserverless-external-s3-eventというプラグインを使った。使い方はREADMEがわかりやすいので割愛する。

デプロイコマンドのあとに、sls s3deployを流す必要があるので、以下のようなコマンドをまとめて実行するyarnコマンドだけ作成した。

sls deploy --stage development && sls s3deploy --stage development

IAM権限を絞っている場合は、以下のように該当バケットに対して権限を加える必要がある。

{
    "Effect": "Allow",
    "Action": [
        "s3:Get*",
        "s3:List*",
        "s3:PutBucketNotification"
    ],
    "Resource": [
        "arn:aws:s3:::BUCKET-NAME",
        "arn:aws:s3:::BUCKET-NAME/*"
    ]
}

これで、既存のS3バケットにもトリガーを設置することができた。

okmttdhr
dmmcom
総合エンタテイメントサイト「DMM.com」を運営。会員数は2,900万人を突破。動画配信、FX、英会話、ゲーム、太陽光発電、3Dプリンタなど40以上のサービスを展開。沖縄での水族館事業参入、ベルギーでのサッカークラブ経営など、様々な事業を手掛ける。また2018年より若手起業家の支援を強化、「DMM VENTURES」による出資や、M&Aなどを積極的に展開している。
https://dmm-corp.com
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away