dotnet new
、AWSサーバーレスWebAPIテンプレート(ASP.NET Core 2.0)を使用して新しいプロジェクトを作成しました。 これには、ValuesControllerおよびS3ProxyControllerサンプルコードが含まれます。.appsettings
ファイルのリージョンを変更するためにfind-replaceを実行しました。aws configure
を実行して、デフォルトのプロファイルのキーID、アクセスキー、およびリージョンをaws-west-2に設定しました。この後、 dotnet lambda deploy-serverless
を実行し、 us-east-1
を使用しようとしています。 これはテンプレートまたはAWSCLIの問題ですか?
Error: S3 bucket must be in the same region as the configured region us-west-2. is in the region us-east-1.
AWSに新しいdotnetによって生成されたserverless.template
をアップロードしましたが、そこからスタックを作成しようとすると、次のエラーが発生しました。
Error creating change set: Transform AWS::Serverless-2016-10-31 failed with: Invalid Serverless Application Specification document. Number of errors found: 1. Resource with id [ProxyFunction] is invalid. 'CodeUri' is not a valid S3 Uri of the form "s3://bucket/key" with optional versionId query parameter.
テンプレートに問題があるようです。 私はCloudFormationの経験があまりなく、まだ調査中です。
今日、私は最終的にエラーメッセージを理解することによっていくらかの進歩を遂げました:)
クラウド形成テンプレートの「ProxyFunction」リソースでは、 CodeUri
パラメーターが空の文字列に設定されています。 空の文字列がそこでサポートされていない理由の調査を続けています。
どうやらCodeUri
は相対、動的パラメータ、または静的URLである可能性がありますが、空の文字列になることはありません。
https://github.com/awslabs/serverless-application-model/blob/master/HOWTO.md
CodeUriを何かに置き換える必要があると言うページがありますか? 最も安価な修正は、それをパラメーターとして含めることです。そうすれば、それを文書化する必要はありません。
すべてが機能したように見えますが、プロキシバケットとラムダ関数コードがアップロードされるバケットの2つのS3バケットが関係しているため、混乱を招きました。 ラムダのバケットを作成してその名前を指定し、使用されていないプロキシバケットの一意の名前も指定すると、クラウド形成のサーバーレス変換が機能しました。
ラムダパッケージを含むzipファイルを含むS3バケットが、ラムダ関数が作成されているのと同じリージョンにある必要があるという問題がまだあります。 これは直感に反し、私の意見ではひどいです。 複数のリージョンで同じテンプレートを活用する場合は、パッケージのコンテンツを複数のバケットに複製する必要があります。 少なくともCodeUriプロパティのURLを受け入れることができるので、パッケージを格納するためにパブリックバケットまたはgithubを使用できます。
そのためには、 CloudFormationチームにフィードバックを提供する必要があります。 CloudFormationの動作を変更することは、このリポジトリの範囲を超えています。
ラムダパッケージを含むzipファイルを含むS3バケットが、ラムダ関数が作成されているのと同じリージョンにある必要があるという問題がまだあります。 これは直感に反し、私の意見ではひどいです。 複数のリージョンで同じテンプレートを活用する場合は、パッケージのコンテンツを複数のバケットに複製する必要があります。 少なくともCodeUriプロパティのURLを受け入れることができるので、パッケージを格納するためにパブリックバケットまたはgithubを使用できます。
真剣に、これはひどいです。 すべてのリージョンで重複バケットを作成する代わりに、単一のs3バケットからのラムダ関数コードの更新をサポートできない場合のグローバルs3バケットの使用は何ですか。
最も参考になるコメント
真剣に、これはひどいです。 すべてのリージョンで重複バケットを作成する代わりに、単一のs3バケットからのラムダ関数コードの更新をサポートできない場合のグローバルs3バケットの使用は何ですか。