ããã¯ããªã«ãããããŠæžãããã®ïŒ
AWSã䜿ã代ããã«ãLocalStackããã䜿ã£ãŠããã®ã§ããã
ç¹ã«AWS SAMã§ãããã€ãããš2åç®ä»¥éã§å°ã£ãããšã«ãªã£ãŠããã®ã§ãããããªããšãåé¿ããããšãããã
èããŠã¿ãŸããã
1åç®ã¯ããã®ã§ããã2åç®ã¯å¿çãè¿ããªããªããã¹ã¿ãã¯ãåé€ããããšããŠã倱æããã®ã§ãã£ããå°ã£ãŠ
ããã®ã§ãããããããæ¬ç©ã®AWSã§ããªãã®ã§ããããæéã«æéããããŠèª¿ã¹ãã®ããªããšæã£ãŠããã®ã§ã
ã©ã®ã¿ã¡çæéãã䜿ããªãã®ã§ãæ°èŠã«ãªãœãŒã¹ããããã€ããªããããšã«ããŸããã
çµè«
ããã§ããããšã«ããŸãã
ãããã€ã
$ yes | samlocal sync --stack-name $(uuidgen) --region us-east-1
AWS SAM Accelerateã䜿ããŸãã
Amazon API Gatewayã®REST API IDã®ååŸã
$ REST_API_ID=$(awslocal apigateway get-rest-apis --query 'reverse(sort_by(items[], &createdDate))[0].id' --output text)
ãããã€å ã«ã¢ã¯ã»ã¹ããæã®URLã
http://localhost:4566/restapis/$REST_API_ID/Prod/_user_request_/[path]
ç°å¢
確èªç°å¢ã¯ããã¡ãã§ãã
$ localstack --version 0.13.2.1 $ python3 -V Python 3.8.10 $ awslocal --version aws-cli/2.4.8 Python/3.8.8 Linux/5.4.0-91-generic exe/x86_64.ubuntu.20 prompt/off $ samlocal --version SAM CLI, version 1.36.0
èµ·åã
$ LAMBDA_EXECUTOR=docker-reuse localstack start
å°ã£ãŠããããš
ãšããããããªã«ã«å°ã£ãŠããããæžããŠãããŸãã
åçŸã®ããã«ããããžã§ã¯ããäœæã
$ samlocal init --name localstack-deploy-sample --runtime nodejs14.x --app-template hello-world --package-type Zip
ã¢ããªã±ãŒã·ã§ã³åãlocalstack-deploy-sample
ã«ããŠãã©ã³ã¿ã€ã ã¯Node.js 14.xã«ããŸãã
ãããžã§ã¯ãå ã«ç§»åã
$ cd localstack-deploy-sample
ãã®ãŸãŸãã«ãããŠãããã€ã
$ samlocal build $ awslocal s3 mb s3://my-bucket $ samlocal deploy --stack-name my-stack --region us-east-1 --s3-bucket my-bucket
LocalStackã®å ŽåãAmazon S3ãã±ãããå ã«äœã£ãŠãããªããšãããªãããã§ãããããé¢åãšããã°é¢åã§ãâŠã
1åç®ã¯ãåé¡ãªãããŸããããŸãã
2022-01-05 23:30:03 - Waiting for stack create/update to complete CloudFormation events from stack operations --------------------------------------------------------------------------------------------------------------------------------------------- ResourceStatus ResourceType LogicalResourceId ResourceStatusReason --------------------------------------------------------------------------------------------------------------------------------------------- CREATE_COMPLETE AWS::CloudFormation::Stack ServerlessRestApiDeployment510f4c - 1a20 CREATE_COMPLETE AWS::CloudFormation::Stack ServerlessRestApi - CREATE_COMPLETE AWS::CloudFormation::Stack HelloWorldFunctionRole - CREATE_COMPLETE AWS::CloudFormation::Stack ServerlessRestApiProdStage - CREATE_COMPLETE AWS::CloudFormation::Stack my-stack - CREATE_COMPLETE AWS::CloudFormation::Stack HelloWorldFunctionHelloWorldPermi - ssionProd CREATE_COMPLETE AWS::CloudFormation::Stack HelloWorldFunction - --------------------------------------------------------------------------------------------------------------------------------------------- CloudFormation outputs from deployed stack ---------------------------------------------------------------------------------------------------------------------------------------------- Outputs ---------------------------------------------------------------------------------------------------------------------------------------------- Key HelloWorldApi Description API Gateway endpoint URL for Prod stage for Hello World function Value https://nwoc71vnry.execute-api.amazonaws.com:4566/Prod/hello/ Key HelloWorldFunction Description Hello World Lambda Function ARN Value arn:aws:lambda:us-east-1:000000000000:function:my-stack-HelloWorldFunction-55d04da1 Key HelloWorldFunctionIamRole Description Implicit IAM Role created for Hello World function Value arn:aws:iam::000000000000:role/my-stack-HelloWorldFunctionRole-e4d3ca1d ---------------------------------------------------------------------------------------------------------------------------------------------- Successfully created/updated stack - my-stack in us-east-1
ããã§ããã1床ãããã€ããããšããŠã¿ãŸãã
$ samlocal deploy --stack-name my-stack --region us-east-1 --s3-bucket my-bucket
ãããšãä»åºŠã¯ããã§æ¢ãŸã£ãŠããŸããŸãã
2022-01-05 23:32:18 - Waiting for stack create/update to complete CloudFormation events from stack operations --------------------------------------------------------------------------------------------------------------------------------------------- ResourceStatus ResourceType LogicalResourceId ResourceStatusReason --------------------------------------------------------------------------------------------------------------------------------------------- UPDATE_COMPLETE AWS::CloudFormation::Stack HelloWorldFunction - UPDATE_COMPLETE AWS::CloudFormation::Stack HelloWorldFunctionHelloWorldPermi - ssionProd UPDATE_COMPLETE AWS::CloudFormation::Stack HelloWorldFunctionRole - CREATE_COMPLETE AWS::CloudFormation::Stack my-stack - UPDATE_COMPLETE AWS::CloudFormation::Stack ServerlessRestApiProdStage - UPDATE_COMPLETE AWS::CloudFormation::Stack ServerlessRestApiDeployment510f4c - 1a20 UPDATE_COMPLETE AWS::CloudFormation::Stack ServerlessRestApi - ---------------------------------------------------------------------------------------------------------------------------------------------
ã§ã¯ãã¹ã¿ãã¯ãåé€ãããããã®ã§ã¯ïŒãšæãã®ã§ãã
$ samlocal delete --stack-name my-stack --region us-east-1 Are you sure you want to delete the stack my-stack in the region us-east-1 ? [y/N]: y
ãããããŸããããŸããã
Traceback (most recent call last): File "/path/to/venv/bin/samlocal", line 41, in <module> main.cli() File "/path/to/venv/lib/python3.8/site-packages/click/core.py", line 1128, in __call__ return self.main(*args, **kwargs) File "/path/to/venv/lib/python3.8/site-packages/click/core.py", line 1053, in main rv = self.invoke(ctx) File "/path/to/venv/lib/python3.8/site-packages/click/core.py", line 1659, in invoke return _process_result(sub_ctx.command.invoke(sub_ctx)) File "/path/to/venv/lib/python3.8/site-packages/click/core.py", line 1395, in invoke return ctx.invoke(self.callback, **ctx.params) File "/path/to/venv/lib/python3.8/site-packages/click/core.py", line 754, in invoke return __callback(*args, **kwargs) File "/path/to/venv/lib/python3.8/site-packages/click/decorators.py", line 84, in new_func return ctx.invoke(f, obj, *args, **kwargs) File "/path/to/venv/lib/python3.8/site-packages/click/core.py", line 754, in invoke return __callback(*args, **kwargs) File "/path/to/venv/lib/python3.8/site-packages/samcli/lib/utils/version_checker.py", line 41, in wrapped actual_result = func(*args, **kwargs) File "/path/to/venv/lib/python3.8/site-packages/samcli/cli/main.py", line 87, in wrapper return func(*args, **kwargs) File "/path/to/venv/lib/python3.8/site-packages/samcli/commands/delete/command.py", line 77, in cli do_cli( File "/path/to/venv/lib/python3.8/site-packages/samcli/commands/delete/command.py", line 101, in do_cli delete_context.run() File "/path/to/venv/lib/python3.8/site-packages/samcli/commands/delete/delete_context.py", line 345, in run is_deployed = self.cf_utils.has_stack(stack_name=self.stack_name) File "/path/to/venv/lib/python3.8/site-packages/samcli/lib/delete/cfn_utils.py", line 33, in has_stack if stack["EnableTerminationProtection"]: KeyError: 'EnableTerminationProtection'
ãã€ãã©ãããŠããããšãããšãLocalStackãåèµ·åããŠããã®ã§ããã
ããã§ãã©ããããããªãšæã£ãŠããã®ã§ããã
ãŸããsam sync
ãšããã³ãã³ããèŠã€ããŸããŠãããã䜿ããšsam build
ãšsam deploy
ãäžæ°ã«ã§ããã¿ããã§ãã
AWS SAM Accelerateによるサーバーレス開発の加速 | Amazon Web Services ブログ
Getting started with AWS SAM Accelerate - AWS Serverless Application Model
ããã¯AWS SAM AccelerateãšããããããAWS CloudFormationã®å€æŽç¢ºèªãã¹ãããããã®ã§é«éãããã§ãã
ãªãã·ã§ã³ç¡ãã®sam syncã³ãã³ãã¯ãsam deployã³ãã³ããšåæ§ã«å šãŠã®ã€ã³ãã©ã¹ãã©ã¯ãã£ãšã³ãŒãããããã€ãŸãã¯ãã¢ããããŒãããŸãããã ããsam deployãšã¯ç°ãªããsam syncã¯AWS CloudFormationã®å€æŽã»ããããã»ã¹ããã€ãã¹ããŸãã
è©ŠããŠã¿ãŸãããã
$ samlocal sync --stack-name sync-stack --region us-east-1
Amazon S3ãã±ããã¯AWS SAMåŽã§äœã£ãŠãããã¿ããã§ãã
ååã¯ããããã衚瀺ãåºãŸãã
Creating the required resources... Successfully created!
ãŸãããã¬ãã¥ãŒæ©èœïŒãã€éçºç°å¢ã®ã¿ã§äœ¿ãããšãã ããã§ïŒã ããããå®è¡æã«ç¢ºèªãæ±ããããŸãã
Managed S3 bucket: aws-sam-cli-managed-default-samclisourcebucket-2d2f9b80 Default capabilities applied: ('CAPABILITY_NAMED_IAM', 'CAPABILITY_AUTO_EXPAND') To override with customized capabilities, use --capabilities flag or set it in samconfig.toml This feature is currently in beta. Visit the docs page to learn more about the AWS Beta terms https://aws.amazon.com/service-terms/. The SAM CLI will use the AWS Lambda, Amazon API Gateway, and AWS StepFunctions APIs to upload your code without performing a CloudFormation deployment. This will cause drift in your CloudFormation stack. **The sync command should only be used against a development stack**. Confirm that you are synchronizing a development stack and want to turn on beta features. Enter Y to proceed with the command, or enter N to cancel: [y/N]:
sam build
ã®åäœãèŠããåŸã«ãããã€ãå®è¡ãããå®äºããŸãã
Initiating deployment ===================== 2022-01-05 23:45:28 - Waiting for stack create/update to complete CloudFormation events from stack operations --------------------------------------------------------------------------------------------------------------------------------------------- ResourceStatus ResourceType LogicalResourceId ResourceStatusReason --------------------------------------------------------------------------------------------------------------------------------------------- CREATE_COMPLETE AWS::CloudFormation::Stack HelloWorldFunctionRole - CREATE_COMPLETE AWS::CloudFormation::Stack AwsSamAutoDependencyLayerNestedSt - ack UPDATE_COMPLETE AWS::CloudFormation::Stack AwsSamAutoDependencyLayerNestedSt - ack CREATE_COMPLETE AWS::CloudFormation::Stack ServerlessRestApiProdStage - CREATE_COMPLETE AWS::CloudFormation::Stack ServerlessRestApiDeployment510f4c - 1a20 CREATE_COMPLETE AWS::CloudFormation::Stack ServerlessRestApi - UPDATE_COMPLETE AWS::CloudFormation::Stack HelloWorldFunctionRole - CREATE_COMPLETE AWS::CloudFormation::Stack HelloWorldFunction - CREATE_COMPLETE AWS::CloudFormation::Stack sync-stack - CREATE_COMPLETE AWS::CloudFormation::Stack HelloWorldFunctionHelloWorldPermi - ssionProd CREATE_COMPLETE AWS::CloudFormation::Stack HelloWorldFunction - UPDATE_COMPLETE AWS::CloudFormation::Stack ServerlessRestApiProdStage - UPDATE_COMPLETE AWS::CloudFormation::Stack ServerlessRestApiDeployment510f4c - 1a20 UPDATE_COMPLETE AWS::CloudFormation::Stack ServerlessRestApi - CREATE_COMPLETE AWS::CloudFormation::Stack HelloWorldFunctionHelloWorldPermi - ssionProd --------------------------------------------------------------------------------------------------------------------------------------------- CloudFormation outputs from deployed stack ---------------------------------------------------------------------------------------------------------------------------------------------- Outputs ---------------------------------------------------------------------------------------------------------------------------------------------- Key HelloWorldFunction19d43fc4DepLayer Description Value Key HelloWorldApi Description API Gateway endpoint URL for Prod stage for Hello World function Value https://rxq2hpk9ab.execute-api.amazonaws.com:4566/Prod/hello/ Key HelloWorldFunction Description Hello World Lambda Function ARN Value arn:aws:lambda:us-east-1:000000000000:function:sync-stack-HelloWorldFunction-bd920b93 Key HelloWorldFunctionIamRole Description Implicit IAM Role created for Hello World function Value arn:aws:iam::000000000000:role/sync-stack-HelloWorldFunctionRole-c1e533fa ---------------------------------------------------------------------------------------------------------------------------------------------- Stack creation succeeded. Sync infra completed. {'StackId': 'arn:aws:cloudformation:us-east-1:000000000000:stack/sync-stack/76e2a488', 'ResponseMetadata': {'HTTPStatusCode': 200, 'HTTPHeaders': {'content-type': 'text/html; charset=utf-8', 'content-length': '254', 'access-control-allow-origin': '*', 'access-control-allow-methods': 'HEAD,GET,PUT,POST,DELETE,OPTIONS,PATCH', 'access-control-allow-headers': 'authorization,cache-control,content-length,content-md5,content-type,etag,location,x-amz-acl,x-amz-content-sha256,x-amz-date,x-amz-request-id,x-amz-security-token,x-amz-tagging,x-amz-target,x-amz-user-agent,x-amz-version-id,x-amzn-requestid,x-localstack-target,amz-sdk-invocation-id,amz-sdk-request', 'access-control-expose-headers': 'etag,x-amz-version-id', 'connection': 'close', 'date': 'Wed, 05 Jan 2022 14:45:28 GMT', 'server': 'hypercorn-h11'}, 'RetryAttempts': 0}}
ãªãããã1床å®è¡ãããšãšã©ãŒã«ãªã£ãŠããŸããŸããæ¢åã®ãªãœãŒã¹ããããšãã¡ã¿ããã§ããã
Initiating deployment ===================== 2022-01-05 23:46:06 - Waiting for stack create/update to complete CloudFormation events from stack operations --------------------------------------------------------------------------------------------------------------------------------------------- ResourceStatus ResourceType LogicalResourceId ResourceStatusReason --------------------------------------------------------------------------------------------------------------------------------------------- UPDATE_COMPLETE AWS::CloudFormation::Stack AwsSamAutoDependencyLayerNestedSt - ack UPDATE_FAILED AWS::CloudFormation::Stack sync-stack - --------------------------------------------------------------------------------------------------------------------------------------------- Failed to create/update the stack: sync-stack, Waiter StackUpdateComplete failed: Waiter encountered a terminal failure state: For expression "Stacks[].StackStatus" we matched expected path: "UPDATE_FAILED" at least once Error: Failed to create/update the stack: sync-stack, Waiter StackUpdateComplete failed: Waiter encountered a terminal failure state: For expression "Stacks[].StackStatus" we matched expected path: "UPDATE_FAILED" at least once
ãªã®ã§ãããç°å¢ã䜿ãæšãŠãããšãåæã«ãã¹ã¿ãã¯åãã©ã³ãã ïŒä»åã¯UUIDïŒã«ããŠããŸããŸãã
$ samlocal sync --stack-name $(uuidgen) --region us-east-1
ã©ã®ã¿ã¡ãéã³çµãã£ããçµäºããŸããããªãœãŒã¹ãå¢ããŠå°ãããã§ããã°åèµ·åããã°ããã®ã§âŠã
ãããŠãæ¯å確èªãããã®ãé¢åãªã®ã§ãyes
ã³ãã³ããã€ãªããŸãïŒç¢ºèªãçç¥ããæ¹æ³ã¯ããããŸããã§ããïŒã
$ yes | samlocal sync --stack-name $(uuidgen) --region us-east-1
ãããããšãAmazon API GatewayãããããäœãããŠããããšã«ãªããŸãããææ°ã®REST APIã®IDãæœåºããŸãã
$ REST_API_ID=$(awslocal apigateway get-rest-apis --query 'reverse(sort_by(items[], &createdDate))[0].id' --output text)
ãã¡ãã䜿ã£ãŠããããã€ããAPIã«ã¢ã¯ã»ã¹ããŸãã
http://localhost:4566/restapis/$REST_API_ID/Prod/_user_request_/[path]
ãããªæãã§ããã
ãŸãšã
LocalStackïŒAWS SAMã§ããã€ããããã€ãçŽãæã«å°ã£ãŠããã®ã§å¯ŸåŠæ¹æ³ãèããŠã¿ãŸããã
ãããçŽ çŽã«AWSã䜿ãã°ããã®ã§ã¯ãšãã話ãããã®ã§ãããLocalStackãšAWS SAMã®çµã¿åããã®å Žåã¯
ããã§ãªããšãããŠãããããªãšæããŸãã