CodePipeline で S3 バケット直下にファイルをデプロイする方法を教えてください

2022.04.26

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

困っていた内容

CodePipeline のアクションプロバイダー「Amazon S3」を使って、S3 バケットにファイルをデプロイしています。ウェブサイト用の素材で S3 バケット直下にファイルをデプロイしたいのですが、うまく設定できません。「S3 オブジェクトキー」の値を設定すれば良さそうですが、/を設定すると/というパスが作成され、必須属性のため空白にもできません。
S3 のバケット直下にファイルをデプロイするにはどうしたら良いでしょうか?

どう対応すればいいの?

「デプロイする前にファイルを抽出する」を選択してください。

CodePipeline ではほとんどの場合ステージで作成されたアーティファクトを圧縮します。「S3 オブジェクトキー」を設定すると、作成されたアーティファクトを指定したオブジェクト名(ファイル名)にリネームして圧縮された状態でデプロイします。そのため、ファイルとしてデプロイしたい場合は、「デプロイする前にファイルを抽出する」を選択して解凍(展開)が必要となります。

CodePipeline でパイプラインを作成します。 - AWS CodePipeline

ほとんどのソースステージおよびビルドステージの出力アーティファクトは圧縮されます。Amazon S3 zip を除くすべてのパイプラインソースプロバイダーは、ソースファイルを Zip してから、次のアクションに入力アーティファクトとして提供します。

「デプロイする前にファイルを抽出する」を選択するとデプロイ時に展開されるほか、必須項目「S3 オブジェクトキー」が任意項目「デプロイパス」変わるため、空白を設定しバケット直下にファイルをデプロイできます。

やってみた

アクションの編集から「デプロイする前にファイルを抽出する」を選択し、「デプロイパス」を空白にします。

パイプラインを実行し、S3 のバケット直下にファイルをデプロイされることを確認します。

参考資料