{"id":40526,"date":"2023-09-02T14:55:56","date_gmt":"2022-12-12T03:00:51","guid":{"rendered":"https:\/\/www.silicloud.com\/zh\/blog\/%e4%bd%bf%e7%94%a8aws-app2container%e5%b0%86%e7%8e%b0%e6%9c%89%e5%ba%94%e7%94%a8%e7%a8%8b%e5%ba%8f%e8%bd%ac%e5%8c%96%e4%b8%ba%e5%ae%b9%e5%99%a8%e5%8c%96%e5%ba%94%e7%94%a8%e7%a8%8b%e5%ba%8f%e3%80%82\/"},"modified":"2024-04-30T21:16:01","modified_gmt":"2024-04-30T13:16:01","slug":"%e4%bd%bf%e7%94%a8aws-app2container%e5%b0%86%e7%8e%b0%e6%9c%89%e5%ba%94%e7%94%a8%e7%a8%8b%e5%ba%8f%e8%bd%ac%e5%8c%96%e4%b8%ba%e5%ae%b9%e5%99%a8%e5%8c%96%e5%ba%94%e7%94%a8%e7%a8%8b%e5%ba%8f%e3%80%82","status":"publish","type":"post","link":"https:\/\/www.silicloud.com\/zh\/blog\/%e4%bd%bf%e7%94%a8aws-app2container%e5%b0%86%e7%8e%b0%e6%9c%89%e5%ba%94%e7%94%a8%e7%a8%8b%e5%ba%8f%e8%bd%ac%e5%8c%96%e4%b8%ba%e5%ae%b9%e5%99%a8%e5%8c%96%e5%ba%94%e7%94%a8%e7%a8%8b%e5%ba%8f%e3%80%82\/","title":{"rendered":"\u4f7f\u7528AWS App2Container\u5c06\u73b0\u6709\u5e94\u7528\u7a0b\u5e8f\u8f6c\u5316\u4e3a\u5bb9\u5668\u5316\u5e94\u7528\u7a0b\u5e8f"},"content":{"rendered":"<h2>\u9996\u5148<\/h2>\n<p>2020\u5e747\u67081\u65e5\uff0cAWS\u53d1\u5e03\u4e86\u4e00\u6b3e\u540d\u4e3aApp2Container\u7684\u5de5\u5177\uff0c\u7528\u4e8e\u5c06\u73b0\u6709\u7684.NET\u548cJava\u5e94\u7528\u7a0b\u5e8f\u5bb9\u5668\u5316\u3002<\/p>\n<p>AWS App2Container \u662f\u4e00\u9879\u65b0\u53d1\u5e03\u7684\u670d\u52a1\uff0c\u5b83\u53ef\u4ee5\u5c06\u5e94\u7528\u7a0b\u5e8f\u5bb9\u5668\u5316\u5e76\u8fc1\u79fb\u5230 AWS \u4e91\u4e0a\u3002<\/p>\n<p>AWS App2Container\u5c06\u542f\u52a8\u540e\u7684\u5e94\u7528\u7a0b\u5e8f\u53ca\u5176\u4f9d\u8d56\u5173\u7cfb\u6253\u5305\u6210\u5bb9\u5668\u6620\u50cf\uff0c\u751f\u6210ECS\u4efb\u52a1\u548cKubernetes Pod\u5b9a\u4e49\u3002\u540c\u65f6\uff0c\u8fd8\u53ef\u4ee5\u521b\u5efa\u7528\u4e8e\u5728AWS\u4e0a\u90e8\u7f72\u8fd9\u4e9b\u8d44\u6e90\u7684CloudFormation\u6a21\u677f\u4ee5\u53ca\u7528\u4e8eCI\/CD\u6d41\u6c34\u7ebf\u7684\u6a21\u677f\u3002<\/p>\n<p>AWS App2Container\u53ef\u4ee5\u514d\u8d39\u4f7f\u7528\uff0c\u4f46\u5bf9\u90e8\u7f72\u5728AWS\u4e0a\u7684\u8d44\u6e90\u4f1a\u4ea7\u751f\u5e38\u89c4\u8d39\u7528\u3002\u6211\u5206\u522b\u5c06Java\u5e94\u7528\u7a0b\u5e8f\u5bb9\u5668\u5316\uff0c\u5e76\u5728ECS on Fargate\u548cEKS\u4e0a\u8fdb\u884c\u4e86\u90e8\u7f72\u3002<\/p>\n<h2>\u524d\u63d0\u6761\u4ef6 (Qian2 ti2 tiao2 jian4)<\/h2>\n<p>\u4ee5\u4e0b\u662fJava\u5e94\u7528\u7a0b\u5e8f\u7684\u73af\u5883\u524d\u63d0\u6761\u4ef6\u3002<\/p>\n<p>\u53d7\u652f\u6301\u7684Java\u5e94\u7528\u6846\u67b6<\/p>\n<ul class=\"post-ul\">\n<li style=\"list-style-type: none;\">\n<ul class=\"post-ul\">Tomcat<\/ul>\n<\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<ul class=\"post-ul\">\n<li style=\"list-style-type: none;\">\n<ul class=\"post-ul\">Spring Boot<\/ul>\n<\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<ul class=\"post-ul\">\n<li style=\"list-style-type: none;\">\n<ul class=\"post-ul\">JBoss (standalone mode)<\/ul>\n<\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<ul class=\"post-ul\">\n<li style=\"list-style-type: none;\">\n<ul class=\"post-ul\">Weblogic (standalone mode)<\/ul>\n<\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<ul class=\"post-ul\">Websphere (standalone mode)<\/ul>\n<p>\u652f\u6301\u7684Linux\u53d1\u884c\u7248\u3002<\/p>\n<ul class=\"post-ul\">\n<li style=\"list-style-type: none;\">\n<ul class=\"post-ul\">Ubuntu<\/ul>\n<\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<ul class=\"post-ul\">\n<li style=\"list-style-type: none;\">\n<ul class=\"post-ul\">CentOS<\/ul>\n<\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<ul class=\"post-ul\">\n<li style=\"list-style-type: none;\">\n<ul class=\"post-ul\">RHEL<\/ul>\n<\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<ul class=\"post-ul\">Amazon Linux<\/ul>\n<p>\u5de5\u4f5c\u73af\u5883\u5fc5\u987b\u6ee1\u8db3\u4ee5\u4e0b\u6761\u4ef6\u3002\u5173\u4e8e\u8fd9\u4e9b\u5b89\u88c5\u548c\u8bbe\u7f6e\u6b65\u9aa4\uff0c\u5c06\u4e0d\u518d\u8be6\u8ff0\u3002<\/p>\n<ul class=\"post-ul\">\n<li style=\"list-style-type: none;\">\n<ul class=\"post-ul\">AWS CLI \u304c\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u6e08\u307f\u3067\u3042\u308b\u3053\u3068<\/ul>\n<\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<ul class=\"post-ul\">\n<li style=\"list-style-type: none;\">\n<ul class=\"post-ul\">Docker Engine \u306e\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u6e08\u307f\u3067\u3042\u308b\u3053\u3068<\/ul>\n<\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<ul class=\"post-ul\">\n<li style=\"list-style-type: none;\">\n<ul class=\"post-ul\">\u30b5\u30fc\u30d0\u30fc\u306e root \u30a2\u30af\u30bb\u30b9\u6a29\u304c\u3042\u308b\u3053\u3068<\/ul>\n<\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<ul class=\"post-ul\">\n<li style=\"list-style-type: none;\">\n<ul class=\"post-ul\">tar \u30b3\u30de\u30f3\u30c9\u304c\u5229\u7528\u53ef\u80fd\u3067\u3042\u308b\u3053\u3068<\/ul>\n<\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<ul class=\"post-ul\">\u30b9\u30c8\u30ec\u30fc\u30b8\u306b 20GB \u4ee5\u4e0a\u306e\u7a7a\u304d\u5bb9\u91cf\u304c\u3042\u308b\u3053\u3068<\/ul>\n<p>IAM\u7528\u6237\u9700\u8981\u7684\u6743\u9650\u5728\u4ee5\u4e0b\u6587\u4ef6\u4e2d\u6709\u6240\u8bb0\u5f55\u3002\u5728\u90e8\u7f72\u5bb9\u5668\u5316\u5e94\u7528\u7a0b\u5e8f\u65f6\uff0c\u770b\u8d77\u6765\u9700\u8981\u5148\u5177\u5907AdministratorAccess\u6743\u9650\u3002<\/p>\n<p>\u4f7f\u7528 App2Container \u8fdb\u884c\u8eab\u4efd\u9a8c\u8bc1\u548c\u8bbf\u95ee\u7ba1\u7406<br \/>\nhttps:\/\/docs.aws.amazon.com\/app2container\/latest\/UserGuide\/iam-a2c.html<\/p>\n<p>\u672c\u6b21\u5728Amazon Linux 2\u4e0a\u542f\u52a8\u5e76\u9a8c\u8bc1\u4e86\u4e00\u4e2aSpring Boot\u5e94\u7528\u7a0b\u5e8f\u3002<\/p>\n<h2>\u5e94\u7528\u51c6\u5907\u5b8c\u6210<\/h2>\n<p>\u4f7f\u7528Spring Boot CLI\u51c6\u5907Hello World\u5e94\u7528\u7a0b\u5e8f\u3002<br \/>\n\u6b65\u9aa4\u5982\u4e0b\u6240\u8ff0\u3002<br \/>\nhttps:\/\/spring.pleiades.io\/spring-boot\/docs\/current\/reference\/html\/spring-boot-cli.html<\/p>\n<pre class=\"post-pre\"><code><span class=\"nd\">@RestController<\/span>\r\n<span class=\"kd\">class<\/span> <span class=\"nc\">WebApplication<\/span> <span class=\"o\">{<\/span>\r\n\r\n    <span class=\"nd\">@RequestMapping<\/span><span class=\"o\">(<\/span><span class=\"s2\">\"\/\"<\/span><span class=\"o\">)<\/span>\r\n    <span class=\"n\">String<\/span> <span class=\"nf\">home<\/span><span class=\"o\">()<\/span> <span class=\"o\">{<\/span>\r\n        <span class=\"s2\">\"Hello World!\"<\/span>\r\n    <span class=\"o\">}<\/span>\r\n\r\n<span class=\"o\">}<\/span>\r\n<\/code><\/pre>\n<p>\u6253\u5f00\u5e94\u7528\u7a0b\u5e8f<\/p>\n<pre class=\"post-pre\"><code><span class=\"gp\">$<\/span> spring run hello.groovy\r\n<\/code><\/pre>\n<p>\u6211\u4f1a\u786e\u4fdd\u80fd\u591f\u6b63\u5e38\u54cd\u5e94\u3002<\/p>\n<pre class=\"post-pre\"><code><span class=\"gp\">$<\/span> curl localhost:8080\r\n<span class=\"go\">Hello World!\r\n<\/span><\/code><\/pre>\n<h2>\u5b89\u88c5 App2Container<\/h2>\n<h3>\u5b89\u88dd<\/h3>\n<p>\u4e0b\u8f7d\u5e76\u89e3\u538b\u5b89\u88c5\u5305\u3002<\/p>\n<pre class=\"post-pre\"><code><span class=\"gp\">$<\/span> curl <span class=\"nt\">-o<\/span> AWSApp2Container-installer-linux.tar.gz https:\/\/app2container-release-us-east-1.s3.us-east-1.amazonaws.com\/latest\/linux\/AWSApp2Container-installer-linux.tar.gz\r\n<span class=\"go\">  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current\r\n                                 Dload  Upload   Total   Spent    Left  Speed\r\n100  104M  100  104M    0     0  8360k      0  0:00:12  0:00:12 --:--:-- 9605k\r\n\r\n<\/span><span class=\"gp\">$<\/span> <span class=\"nb\">sudo tar <\/span>xvf AWSApp2Container-installer-linux.tar.gz\r\n<span class=\"go\">install.sh\r\nREADME\r\ntermsandconditions.txt\r\nsecurity\/\r\nsecurity\/app2container.sig\r\nsecurity\/app2container.cert\r\nAWSApp2Container.tar.gz\r\n<\/span><\/code><\/pre>\n<p>\u8bf7\u8fd0\u884c install.sh \u811a\u672c\u3002<br \/>\n\u9700\u8981\u60a8\u540c\u610f\u4f7f\u7528\u6761\u6b3e\u3002<\/p>\n<pre class=\"post-pre\"><code><span class=\"gp\">$<\/span> <span class=\"nb\">sudo<\/span> .\/install.sh\r\n<span class=\"go\">\r\nDetermining user ...\r\nDetermining Installer Path ...\r\nThe AWS App2Container tool is licensed as \"AWS Content\" under the terms and conditions of the AWS Customer Agreement, located at https:\/\/aws.amazon.com\/agreement and the Service Terms, located at https:\/\/aws.amazon.com\/service-terms. By installing, using or accessing the AWS App2Container tool, you agree to such terms and conditions. The term \"AWS Content\" does not include software and assets distributed under separate license terms (such as code licensed under an open source license).\r\nDo you accept the terms and conditions above? (y\/n): y\r\nInstalling AWS App2Container ...\r\n~~\u4ee5\u964d\u7701\u7565~~\r\nInstallation of AWS App2Container completed successfully!\r\nYou are currently running version 1.0.0.\r\nTo get started, run 'sudo app2container init'\r\nAWS App2Container was installed under \/usr\/local\/app2container\/AWSApp2Container.\r\n<\/span><\/code><\/pre>\n<p>\u786e\u8ba4\u5b89\u88c5\u6b63\u5e38\u3002<\/p>\n<pre class=\"post-pre\"><code><span class=\"gp\">$<\/span> <span class=\"nb\">sudo <\/span>app2container <span class=\"nt\">--version<\/span>\r\n<span class=\"go\">app2container version 1.0.0\r\n<\/span><\/code><\/pre>\n<h3>\u6700\u521d\u7684\u8bbe\u5b9a<\/h3>\n<p>\u4f7f\u7528 init \u547d\u4ee4\u8fdb\u884c\u521d\u59cb\u5316\u8bbe\u7f6e\u3002<br \/>\n\u5185\u5bb9\u5982\u6240\u8ff0\uff0c\u4f46\u53ef\u4ee5\u6307\u5b9a\u4e0e\u5bb9\u5668\u5316\u76f8\u5173\u7684\u5b58\u50a8\u76ee\u5f55\u4ee5\u53ca\u8981\u4f7f\u7528\u7684 AWS CLI \u914d\u7f6e\u6587\u4ef6\u3002<br \/>\n\u5982\u679c\u8981\u5c06\u827a\u672f\u54c1\u5b58\u50a8\u5728 S3 \u5b58\u50a8\u6876\u4e2d\uff08\u53ef\u9009\uff09\uff0c\u5219\u5728\u4f7f\u7528 App2Container \u8fdb\u884c AWS \u73af\u5883\u90e8\u7f72\u65f6\u9700\u8981\u6307\u5b9a\u3002<\/p>\n<pre class=\"post-pre\"><code><span class=\"gp\">$<\/span> <span class=\"nb\">sudo <\/span>app2container init\r\n<span class=\"go\">Workspace directory path for artifacts[default: \/root\/app2container]:\r\nAWS Profile (configured using 'aws configure --profile')[default: default]:\r\n<\/span><span class=\"gp\">Optional S3 bucket for application artifacts: &lt;your_bucket_name&gt;<\/span>\r\n<span class=\"go\">Report usage metrics to AWS? (Y\/N)[default: y]: N\r\nRequire images to be signed using Docker Content Trust (DCT)? (Y\/N)[default: n]: N\r\nConfiguration saved\r\n<\/span><\/code><\/pre>\n<h2>\u5e94\u7528\u5bb9\u5668\u5316<\/h2>\n<h3>\u5bf9\u73b0\u6709\u5e94\u7528\u7a0b\u5e8f\u8fdb\u884c\u5206\u6790<\/h3>\n<p>\u4f7f\u7528&#8221;inventory&#8221;\u547d\u4ee4\u53ef\u5217\u51fa\u5f53\u524d\u6b63\u5728\u8fd0\u884c\u7684\u5e94\u7528\u7a0b\u5e8f\u3002<br \/>\n\u5728\u4ee5\u4e0b\u793a\u4f8b\u4e2d\uff0c&#8221;java-generic-65424cc9&#8243;\u662f\u5e94\u7528\u7a0b\u5e8fID\uff0c<br \/>\n\u5728\u540e\u7eed\u7684\u547d\u4ee4\u6267\u884c\u4e2d\u9700\u8981\u8fdb\u884c\u6307\u5b9a\u3002<\/p>\n<pre class=\"post-pre\"><code><span class=\"gp\">$<\/span> <span class=\"nb\">sudo <\/span>app2container inventory\r\n<span class=\"go\">{\r\n                \"java-generic-65424cc9\": {\r\n                                \"processId\": 2493,\r\n                                \"cmdline\": \"\/usr\/lib\/jvm\/java-11-openjdk-11.0.7.10-4.amzn2.0.1.x86_64\/bin\/java ... \/usr\/local\/bin:\/usr\/local\/lib\/spring-boot-cli-2.3.1.RELEASE.jar org.springframework.boot.loader.JarLauncher run .\/hello.groovy \",\r\n                                \"applicationType\": \"java-generic\"\r\n                }\r\n}\r\n<\/span><\/code><\/pre>\n<p>\u6267\u884canalyze\u547d\u4ee4\u540e\uff0canalysis.json\u4f1a\u88ab\u4fdd\u5b58\u5728\u5728init\u65f6\u6307\u5b9a\u7684artifact\u76ee\u5f55\u4e2d\u3002\u8be5\u6587\u4ef6\u63cf\u8ff0\u4e86\u5e94\u7528\u7a0b\u5e8f\u8fd0\u884c\u6240\u9700\u7684\u4f9d\u8d56\u5173\u7cfb\uff0c\u5e76\u53ef\u4ee5\u6839\u636e\u9700\u8981\u624b\u52a8\u4fee\u6539\u503c\u3002<\/p>\n<pre class=\"post-pre\"><code><span class=\"gp\">$<\/span> <span class=\"nb\">sudo <\/span>app2container analyze <span class=\"nt\">--application-id<\/span> java-generic-65424cc9\r\n<span class=\"go\">\u2714 Created artifacts folder \/root\/app2container\/java-generic-65424cc9\r\n\u2714 Generated analysis data in \/root\/app2container\/java-generic-65424cc9\/analysis.json\r\n? Analysis successful for application java-generic-65424cc9\r\n\r\n? Next Steps:\r\n1. View the application analysis file at \/root\/app2container\/java-generic-65424cc9\/analysis.json.\r\n2. Edit the application analysis file as needed.\r\n3. Start the containerization process using this command: app2container containerize --application-id java-generic-65424cc9\r\n<\/span><\/code><\/pre>\n<details>\u5206\u6790.json \u7684\u4f8b\u5b50\uff08\u70b9\u51fb\u5c55\u5f00\uff09\u5206\u6790.json<br \/>\n{<br \/>\n&#8220;a2CTemplateVersion&#8221;: &#8220;1.0&#8221;,<br \/>\n&#8220;createdTime&#8221;: &#8220;2020-07-04 09:31:254&#8221;,<br \/>\n&#8220;containerParameters&#8221;: {<br \/>\n&#8220;_comment1&#8221;: &#8220;*** EDITABLE: \u4e0b\u9762\u7684\u90e8\u5206\u53ef\u4ee5\u6839\u636e\u5e94\u7528\u7a0b\u5e8f\u8981\u6c42\u8fdb\u884c\u7f16\u8f91\u3002\u8bf7\u53c2\u9605\u4e0b\u9762\u7684analysisInfo\u90e8\u5206\u83b7\u53d6\u6709\u5173\u5e94\u7528\u7a0b\u5e8f\u7684\u8be6\u7ec6\u4fe1\u606f\u3002***&#8221;,<br \/>\n&#8220;imageRepository&#8221;: &#8220;java-generic-65424cc9&#8221;,<br \/>\n&#8220;imageTag&#8221;: &#8220;latest&#8221;,<br \/>\n&#8220;containerBaseImage&#8221;: &#8220;amazonlinux:2&#8221;,<br \/>\n&#8220;appExcludedFiles&#8221;: [],<br \/>\n&#8220;appSpecificFiles&#8221;: [],<br \/>\n&#8220;applicationMode&#8221;: false,<br \/>\n&#8220;logLocations&#8221;: [],<br \/>\n&#8220;enableDynamicLogging&#8221;: false,<br \/>\n&#8220;dependencies&#8221;: []<br \/>\n},<br \/>\n&#8220;analysisInfo&#8221;: {<br \/>\n&#8220;_comment2&#8221;: &#8220;*** NON-EDITABLE: \u5206\u6790\u7ed3\u679c ***&#8221;,<br \/>\n&#8220;processId&#8221;: 2493,<br \/>\n&#8220;appId&#8221;: &#8220;java-generic-65424cc9&#8221;,<br \/>\n&#8220;userId&#8221;: &#8220;1001&#8221;,<br \/>\n&#8220;groupId&#8221;: &#8220;1001&#8221;,<br \/>\n&#8220;cmdline&#8221;: [<br \/>\n&#8220;\/usr\/lib\/jvm\/java-11-openjdk-11.0.7.10-4.amzn2.0.1.x86_64\/bin\/java&#8221;,<br \/>\n&#8220;-cp&#8221;,<br \/>\n&#8220;\/usr\/local\/bin:\/usr\/local\/lib\/spring-boot-cli-2.3.1.RELEASE.jar&#8221;,<br \/>\n&#8220;org.springframework.boot.loader.JarLauncher&#8221;,<br \/>\n&#8220;run&#8221;,<br \/>\n&#8220;.\/hello.groovy&#8221;<br \/>\n],<br \/>\n&#8220;osData&#8221;: {<br \/>\n&#8220;ANSI_COLOR&#8221;: &#8220;0;33&#8221;,<br \/>\n&#8220;CPE_NAME<\/p>\n<\/details>\n<h3>\u5bb9\u5668\u5316<\/h3>\n<p>\u60a8\u53ef\u4ee5\u4f7f\u7528 containerize \u547d\u4ee4\u6765\u5c06\u5e94\u7528\u7a0b\u5e8f\u5bb9\u5668\u5316\u3002<br \/>\n\u5728\u6b64\u8fc7\u7a0b\u4e2d\uff0c\u5fc5\u987b\u8bbe\u7f6e\u9002\u5f53\u7684 AWS CLI \u51ed\u636e\u4fe1\u606f\u3002<br \/>\n\uff08\u5982\u679c\u4f7f\u7528 sudo \u6267\u884c\u547d\u4ee4\uff0c\u5219\u9700\u8bbe\u7f6e\u4e3a root \u7528\u6237\u914d\u7f6e\u7684\u914d\u7f6e\u6587\u4ef6\uff09\u3002<br \/>\n\u76ee\u524d\uff0c\u5373\u4f7f\u5728 EC2 \u5b9e\u4f8b\u914d\u7f6e\u4e86\u5b9e\u4f8b\u914d\u7f6e\u6587\u4ef6\uff0c\u4f3c\u4e4e\u4ecd\u4e0d\u4f7f\u7528 IAM \u89d2\u8272\u7684\u4e34\u65f6\u51ed\u636e\uff0c<br \/>\n\u56e0\u6b64\u6211\u4eec\u9700\u8981\u5355\u72ec\u8bbe\u7f6e\u8bbf\u95ee\u5bc6\u94a5\u3002<\/p>\n<pre class=\"post-pre\"><code><span class=\"gp\">$<\/span> <span class=\"nb\">sudo <\/span>app2container containerize <span class=\"nt\">--application-id<\/span> java-generic-65424cc9\r\n<span class=\"go\">\u2714 AWS prerequisite check succeeded\r\n\u2714 Docker prerequisite check succeeded\r\n\u2714 Extracted container artifacts for application\r\n\u2714 Entry file generated\r\n\u2714 Dockerfile generated under \/root\/app2container\/java-generic-65424cc9\/Artifacts\r\n\u2714 Generated dockerfile.update under \/root\/app2container\/java-generic-65424cc9\/Artifacts\r\n\u2714 Generated deployment file at \/root\/app2container\/java-generic-65424cc9\/deployment.json\r\n? Containerization successful. Generated docker image java-generic-65424cc9\r\n\r\n? You're all set to test and deploy your container image.\r\n\r\nNext Steps:\r\n1. View the container image with \"docker images\" and test the application.\r\n2. When you're ready to deploy to AWS, please edit the deployment file as needed at \/root\/app2container\/java-generic-65424cc9\/deployment.json.\r\n3. Generate deployment artifacts using \"app2container generate app-deployment --application-id java-generic-65424cc9\"\r\n<\/span><\/code><\/pre>\n<p>\u4f7f\u7528containerize\u547d\u4ee4\u4f1a\u5728\u6267\u884cgenerate app-deployment\u547d\u4ee4\u65f6\u751f\u6210\u6240\u9700\u7684deployment.json\u3001Dockerfile\u548c\u5bb9\u5668\u955c\u50cf\u7b49\u5185\u5bb9\u3002<\/p>\n<pre class=\"post-pre\"><code><span class=\"nv\">$ <\/span><span class=\"nb\">sudo <\/span>tree \/root\/app2container\/java-generic-65424cc9\/\r\n\/root\/app2container\/java-generic-65424cc9\/\r\n\u251c\u2500\u2500 Artifacts\r\n\u2502   \u251c\u2500\u2500 ContainerFiles.tar \u2605\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u5b9f\u884c\u306e\u4f9d\u5b58\u95a2\u4fc2\u3092\u307e\u3068\u3081\u305f <span class=\"nb\">tar<\/span>\r\n\u2502   \u251c\u2500\u2500 Dockerfile \r\n\u2502   \u251c\u2500\u2500 Dockerfile.update \u2605 \u4f5c\u6210\u3055\u308c\u305f\u30a4\u30e1\u30fc\u30b8\u3092\u30d9\u30fc\u30b9\u30a4\u30e1\u30fc\u30b8\u3068\u3057\u305f Dockerfile \u306e\u30b5\u30f3\u30d7\u30eb\r\n\u2502   \u251c\u2500\u2500 entryfile \u2605 \u30b3\u30f3\u30c6\u30ca\u8d77\u52d5\u6642\u306e CMD \r\n\u2502   \u2514\u2500\u2500 excludedFiles \u2605 \u30b3\u30f3\u30c6\u30ca\u5316\u6642\u306b\u9664\u5916\u3055\u308c\u305f\u30d5\u30a1\u30a4\u30eb\u306e\u30ea\u30b9\u30c8\r\n\u251c\u2500\u2500 analysis.json\r\n\u2514\u2500\u2500 deployment.json\r\n<\/code><\/pre>\n<details>\u4ee5\u4e0b\u662fDockerfile\u7684\u793a\u4f8b\uff08\u5c55\u5f00\u540e\u53ef\u70b9\u51fb\u67e5\u770b\uff09\uff1a\u4eceamazonlinux:2\u5f00\u59cb<br \/>\n\u7ef4\u62a4\u8005AWS<br \/>\n\u5de5\u4f5c\u76ee\u5f55\u4e3a\/<br \/>\n# \u590d\u5236\u5165\u53e3\u6587\u4ef6<br \/>\n\u590d\u5236entryfile \/entryfile<br \/>\n# \u9884\u5b89\u88c5\u8f6f\u4ef6\u5305<br \/>\nRUN yum -y install tar &amp;&amp; yum -y install gzip &amp;&amp; yum -y install shadow-utils.x86_64<br \/>\n# \u6dfb\u52a0\u5e76\u89e3\u538bTar\u6587\u4ef6<br \/>\nCOPY ContainerFiles.tar \/<br \/>\nRUN tar xvfP \/ContainerFiles.tar &#8211;directory \/ &#8211;skip-old-files &#8211;same-owner &#8211;ignore-failed-read &amp;&amp; rm -rf \/ContainerFiles.tar<br \/>\n# \u6309\u7167\u4e0b\u9762\u7684\u793a\u4f8b\u66f4\u65b0\u6587\u4ef6# \u590d\u5236[&#8220;generic_config_file&#8221;\uff0c &#8220;\/root\/app2container\/java-generic-65424cc9\/Artifacts\/generic_config_file&#8221;]# \u73af\u5883\u53d8\u91cf<br \/>\nENV HOME \/home\/ssm-user<br \/>\nENV JAVA_HOME \/usr\/lib\/jvm\/java-11-openjdk-11.0.7.10-4.amzn2.0.1.x86_64<br \/>\nENV PWD \/home\/ssm-user<br \/>\nENV TERM xterm-256color<br \/>\nENV LANG C.UTF-8<br \/>\nENV OLDPWD \/usr\/local<br \/>\nENV PATH \/usr\/local\/sbin:\/usr\/local\/bin:\/usr\/sbin:\/usr\/bin<br \/>\nENV SHLVL 1<br \/>\nENV SPRING_HOME \/usr\/local<br \/>\n# \u66b4\u9732\u7aef\u53e3<br \/>\nEXPOSE 8080<br \/>\n# \u7528\u6237\u548c\u7528\u6237\u7ec4<br \/>\nRUN groupadd -f -r -g 1001 ssm-user<br \/>\nRUN id -u ssm-user &gt; \/dev\/null 2&gt;&amp;1 || useradd -r -g 1001 -u 1001 ssm-user<br \/>\nUSER ssm-user:ssm-user<br \/>\n\u5de5\u4f5c\u76ee\u5f55\u4e3a\/home\/ssm-user<br \/>\n# \u955c\u50cf\u5165\u53e3\u70b9<br \/>\nCMD \/entryfile<\/p>\n<\/details>\n<p>deployment.json\u53ef\u4ee5\u624b\u52a8\u7f16\u8f91\u3002<br \/>\n\u5173\u4e8eECS\u7684\u53c2\u6570\uff0c\u9ed8\u8ba4\u8bbe\u7f6e\u4e3acpu:2\uff0cmemory:4096\uff0c\u5e76\u4e14\u4f3c\u4e4e\u4f1a\u88ab\u4fdd\u7559\u4e3aFargate\u4efb\u52a1\u6267\u884c\u65f6\u7684\u8d44\u6e90\uff0c\u6240\u4ee5\u6839\u636e\u9700\u8981\u53ef\u80fd\u9700\u8981\u8fdb\u884c\u66f4\u6539\u3002<\/p>\n<details>deployment.json \u7684\u4f8b\u5b50 (\u70b9\u51fb\u5c55\u5f00)deployment.json<br \/>\n{<br \/>\n&#8220;a2CTemplateVersion&#8221;: &#8220;1.0&#8221;,<br \/>\n&#8220;applicationId&#8221;: &#8220;java-generic-65424cc9&#8221;,<br \/>\n&#8220;imageName&#8221;: &#8220;java-generic-65424cc9&#8221;,<br \/>\n&#8220;exposedPorts&#8221;: [<br \/>\n{<br \/>\n&#8220;localPort&#8221;: 8080,<br \/>\n&#8220;protocol&#8221;: &#8220;tcp6&#8221;<br \/>\n}<br \/>\n],<br \/>\n&#8220;environment&#8221;: [],<br \/>\n&#8220;ecrParameters&#8221;: {<br \/>\n&#8220;ecrRepoTag&#8221;: &#8220;latest&#8221;<br \/>\n},<br \/>\n&#8220;ecsParameters&#8221;: {<br \/>\n&#8220;createEcsArtifacts&#8221;: true,<br \/>\n&#8220;ecsFamily&#8221;: &#8220;java-generic-65424cc9&#8221;,<br \/>\n&#8220;cpu&#8221;: 2,<br \/>\n&#8220;memory&#8221;: 4096,<br \/>\n&#8220;dockerSecurityOption&#8221;: &#8220;&#8221;,<br \/>\n&#8220;enableCloudwatchLogging&#8221;: false,<br \/>\n&#8220;publicApp&#8221;: true,<br \/>\n&#8220;stackName&#8221;: &#8220;a2c-java-generic-65424cc9-ECS&#8221;,<br \/>\n&#8220;reuseResources&#8221;: {<br \/>\n&#8220;vpcId&#8221;: &#8220;&#8221;,<br \/>\n&#8220;cfnStackName&#8221;: &#8220;&#8221;,<br \/>\n&#8220;sshKeyPairName&#8221;: &#8220;&#8221;<br \/>\n},<br \/>\n&#8220;gMSAParameters&#8221;: {<br \/>\n&#8220;domainSecretsArn&#8221;: &#8220;&#8221;,<br \/>\n&#8220;domainDNSName&#8221;: &#8220;&#8221;,<br \/>\n&#8220;domainNetBIOSName&#8221;: &#8220;&#8221;,<br \/>\n&#8220;createGMSA&#8221;: false,<br \/>\n&#8220;gMSAName&#8221;: &#8220;&#8221;<br \/>\n}<br \/>\n},<br \/>\n&#8220;eksParameters&#8221;: {<br \/>\n&#8220;createEksArtifacts&#8221;: false,<br \/>\n&#8220;stackName&#8221;: &#8220;a2c-java-generic-65424cc9-EKS&#8221;,<br \/>\n&#8220;reuseResources&#8221;: {<br \/>\n&#8220;vpcId&#8221;: &#8220;&#8221;,<br \/>\n&#8220;cfnStackName&#8221;: &#8220;&#8221;,<br \/>\n&#8220;sshKeyPairName&#8221;: &#8220;&#8221;<br \/>\n}<br \/>\n}<br \/>\n}<\/p>\n<\/details>\n<p>\u5728\u8fd9\u4e2a\u9636\u6bb5\uff0c\u7531\u4e8e\u5bb9\u5668\u955c\u50cf\u5df2\u7ecf\u521b\u5efa\uff0c\u60a8\u4e5f\u53ef\u4ee5\u5728\u672c\u5730\u6267\u884c\u5e76\u8fdb\u884c\u9a8c\u8bc1\u3002<br \/>\n\u6211\u8ba4\u4e3a\u8fd9\u662f\u4e3a\u4e86\u518d\u73b0\u5f53\u524d\u8fd0\u884c\u4e2d\u7684\u73af\u5883\uff0c\u4f46\u955c\u50cf\u7684\u5927\u5c0f\u76f8\u5f53\u53ef\u89c2\u3002<\/p>\n<pre class=\"post-pre\"><code><span class=\"gp\">$<\/span> <span class=\"nb\">sudo <\/span>docker image <span class=\"nb\">ls<\/span>\r\n<span class=\"go\">REPOSITORY              TAG                 IMAGE ID            CREATED             SIZE\r\njava-generic-65424cc9   latest              d7843b85b3b9        About an hour ago   3.95GB\r\namazonlinux             2                   fa0a6a710ca7        3 days ago          163MB\r\n\r\n<\/span><span class=\"gp\">$<\/span> <span class=\"nb\">sudo <\/span>docker run <span class=\"nt\">--rm<\/span> <span class=\"nt\">-d<\/span> <span class=\"nt\">-p<\/span> 8080:8080 java-generic-65424cc9:latest\r\n<span class=\"go\">34e6266424e130f0b6fcb6213547cc7b744123b24805db37bea3e4da9edc094c\r\n\r\n<\/span><span class=\"gp\">$<\/span> <span class=\"nb\">sudo <\/span>docker ps\r\n<span class=\"go\">CONTAINER ID        IMAGE                          COMMAND                  CREATED             STATUS              PORTS                    NAMES\r\n<\/span><span class=\"gp\">34e6266424e1        java-generic-65424cc9:latest   \"\/bin\/sh -c \/entryfi\u2026\"   6 seconds ago       Up 5 seconds        0.0.0.0:8080-&gt;<\/span>8080\/tcp   vigilant_lederberg\r\n\r\n<span class=\"gp\">$<\/span> curl http:\/\/localhost:8080\r\n<span class=\"go\">Hello World!\r\n<\/span><\/code><\/pre>\n<h2>\u5e94\u7528\u7a0b\u5e8f\u7684\u90e8\u7f72<\/h2>\n<h3>\u521b\u5efa\u7528\u4e8e\u90e8\u7f72\u7684\u8d44\u6e90<\/h3>\n<p>\u901a\u8fc7\u4f7f\u7528 generate app-deployment \u547d\u4ee4\uff0c\u4f1a\u751f\u6210\u7528\u4e8e\u5c06\u5e94\u7528\u7a0b\u5e8f\u90e8\u7f72\u5230 AWS \u7684\u5404\u79cd\u8d44\u6e90\uff0c\u5982 CloudFormation \u6a21\u677f\u3002<br \/>\n\u901a\u8fc7\u6dfb\u52a0 &#8211;deploy \u9009\u9879\uff0c\u53ef\u4ee5\u76f4\u63a5\u6267\u884c\u90e8\u7f72\uff0c\u4f46\u5728\u8fd9\u91cc\u6211\u4eec\u5148\u53ea\u6267\u884c\u751f\u6210\u5de5\u4ef6\u7684\u6b65\u9aa4\u3002<\/p>\n<pre class=\"post-pre\"><code><span class=\"gp\">$<\/span> <span class=\"nb\">sudo <\/span>app2container generate app-deployment <span class=\"nt\">--application-id<\/span> java-generic-65424cc9\r\n<span class=\"go\">\u2714 AWS prerequisite check succeeded\r\n\u2714 Docker prerequisite check succeeded\r\n\u2714 Created ECR Repository\r\n\u2714 Registered ECS Task Definition with ECS\r\n<\/span><span class=\"gp\">\u2714 Uploaded CloudFormation resources to S3 Bucket: &lt;your_bucket_name&gt;<\/span>\r\n<span class=\"go\">\u2714 Generated CloudFormation Master template at: \/root\/app2container\/java-generic-65424cc9\/EcsDeployment\/ecs-master.yml\r\n? ECS CloudFormation templates and additional deployment artifacts generated successfully for application java-generic-65424cc9\r\n\r\n? You're all set to use AWS CloudFormation to manage your application stack.\r\n\r\nNext Steps:\r\n1. Edit the CloudFormation template as necessary.\r\n2. Create an application stack using the AWS CLI or the AWS Console. AWS CLI command:\r\n\r\n        aws cloudformation deploy --template-file \/root\/app2container\/java-generic-65424cc9\/EcsDeployment\/ecs-master.yml --capabilities CAPABILITY_NAMED_IAM --stack-name a2c-java-generic-65424cc9-ECS\r\n\r\n3. Set up a pipeline for your application stack using \"app2container:\r\n\r\n        app2container generate pipeline --application-id java-generic-65424cc9\"\r\n<\/span><\/code><\/pre>\n<p>\u5f53\u6267\u884c\u6210\u529f\u65f6\uff0c\u4f1a\u5728\u827a\u672f\u54c1\u76ee\u5f55\u4e2d\u653e\u7f6e\u7528\u4e8e\u90e8\u7f72ECS\u7684\u4efb\u52a1\u5b9a\u4e49\u3001CloudFormation\u7684\u4e3b\u6a21\u677f\u548c\u7ba1\u9053\u5b9a\u4e49\u6587\u4ef6\u3002<br \/>\n\u9ed8\u8ba4\u60c5\u51b5\u4e0b\uff0c\u4e0d\u4f1a\u521b\u5efa\u9488\u5bf9EKS\u7684\u8d44\u6e90\uff0c\u8bf7\u53c2\u8003\u6587\u7ae0\u7684\u540e\u534a\u90e8\u5206\u3002<\/p>\n<p>\u7531\u4e8eCloudFormation\u751f\u6210\u4e86\u5d4c\u5957\u5806\u6808\uff0c\u56e0\u6b64\u5176\u4f59\u7684\u6a21\u677f\u4f1a\u5728\u521d\u59cb\u5316\u65f6\u4e0a\u4f20\u5230\u6307\u5b9a\u7684S3\u5b58\u50a8\u6876\u4e2d\u3002<\/p>\n<pre class=\"post-pre\"><code><span class=\"gp\">$<\/span> <span class=\"nb\">sudo <\/span>tree \/root\/app2container\/java-generic-65424cc9\/\r\n<span class=\"go\">\/root\/app2container\/java-generic-65424cc9\/\r\n\u251c\u2500\u2500 Artifacts\r\n\u2502   \u251c\u2500\u2500 ContainerFiles.tar\r\n\u2502   \u251c\u2500\u2500 Dockerfile\r\n\u2502   \u251c\u2500\u2500 Dockerfile.update\r\n\u2502   \u251c\u2500\u2500 entryfile\r\n\u2502   \u2514\u2500\u2500 excludedFiles\r\n\u251c\u2500\u2500 EcsDeployment\r\n\u2502   \u2514\u2500\u2500 ecs-master.yml \u2605 CloudForamtion \u30c6\u30f3\u30d7\u30ec\u30fc\u30c8\r\n\u251c\u2500\u2500 analysis.json\r\n\u251c\u2500\u2500 deployment.json\r\n\u251c\u2500\u2500 pipeline.json \u2605 \u30d1\u30a4\u30d7\u30e9\u30a4\u30f3\u4f5c\u6210\u7528\u5b9a\u7fa9\u30d5\u30a1\u30a4\u30eb\r\n\u2514\u2500\u2500 taskDef.json \u2605 ECS\u7528\u30bf\u30b9\u30af\u5b9a\u7fa9\r\n\r\n<\/span><span class=\"gp\">$<\/span> aws s3 <span class=\"nb\">ls <\/span>s3:\/\/&lt;your_bucket_name&gt;\/a2c-&lt;application-id&gt;\/ecs\/subtemplates\/\r\n<span class=\"go\">2020-07-04 11:58:23      12258 ecs-cluster.yml\r\n2020-07-04 11:58:23       2327 ecs-dns.yml\r\n2020-07-04 11:58:24      16521 ecs-gmsa-automation-doc.yml\r\n2020-07-04 11:58:24       2545 ecs-gmsa-execute.yml\r\n2020-07-04 11:58:24       7216 ecs-gmsa-iam-roles.yml\r\n2020-07-04 11:58:24       6112 ecs-gmsa-lambda-functions.yml\r\n2020-07-04 11:58:24       3713 ecs-gmsa.yml\r\n2020-07-04 11:58:24      16909 ecs-lb-webapp.yml\r\n2020-07-04 11:58:24      19955 ecs-master.yml\r\n2020-07-04 11:58:24      10882 ecs-private-app.yml\r\n2020-07-04 11:58:24       9586 ecs-public-load-balancer.yml\r\n2020-07-04 11:58:24       3377 ecs-vpc.yml\r\n<\/span><\/code><\/pre>\n<p>\u6b64\u5916\uff0c\u5728\u6b64\u65f6\uff0c\u4efb\u52a1\u5b9a\u4e49\u5df2\u81ea\u52a8\u6ce8\u518c\u5230 ECS\uff0c\u5e76\u4e14\u955c\u50cf\u5df2\u63a8\u9001\u5230 ECR\u3002<\/p>\n<h3>\u5728Fargate\u4e0a\u90e8\u7f72ECS<\/h3>\n<p>\u4f7f\u7528\u751f\u6210\u7684 ecs-master.yml \u6587\u4ef6\u6765\u6267\u884c\u5e94\u7528\u90e8\u7f72\u547d\u4ee4\u3002<\/p>\n<pre class=\"post-pre\"><code><span class=\"gp\">$<\/span> <span class=\"nb\">sudo <\/span>aws cloudformation deploy <span class=\"nt\">--template-file<\/span> \/root\/app2container\/java-generic-65424cc9\/EcsDeployment\/ecs-master.yml <span class=\"nt\">--capabilities<\/span> CAPABILITY_NAMED_IAM <span class=\"nt\">--stack-name<\/span> a2c-java-generic-65424cc9-ECS\r\n<span class=\"go\">\r\nWaiting for changeset to be created..\r\nWaiting for stack create\/update to complete\r\nSuccessfully created\/updated stack - a2c-java-generic-65424cc9-ECS\r\n<\/span><\/code><\/pre>\n<p>\u5411\u521b\u5efa\u7684 ELB \u53d1\u9001\u8bf7\u6c42\u540e\uff0c\u6536\u5230\u4e86\u4e00\u6761\u6d88\u606f\u3002<\/p>\n<pre class=\"post-pre\"><code><span class=\"gp\">$<\/span> aws cloudformation describe-stacks <span class=\"nt\">--stack-name<\/span> a2c-java-generic-65424cc9-ECS <span class=\"nt\">--query<\/span> <span class=\"s1\">'Stacks[].Outputs[2]'<\/span>\r\n<span class=\"go\">[\r\n    {\r\n        \"ExportName\": \"a2c-java-generic-65424cc9-ECS-PublicLoadBalancerDNSForCLIOutput\",\r\n        \"OutputKey\": \"PublicLoadBalancerDNSName\",\r\n        \"OutputValue\": \"a2c-j-Publi-XXXXXXXXXXXX-111111111.ap-northeast-1.elb.amazonaws.com\"\r\n    }\r\n]\r\n\r\n<\/span><span class=\"gp\">$<\/span> curl http:\/\/a2c-j-Publi-XXXXXXXXXXXX-111111111.ap-northeast-1.elb.amazonaws.com\r\n<span class=\"go\">Hello World!\r\n<\/span><\/code><\/pre>\n<p>\u4e0e\u4e3a\u5bb9\u5668\u8bbe\u8ba1\u7684\u5e94\u7528\u7a0b\u5e8f\u76f8\u6bd4\uff0c\u9700\u8981\u8fdb\u884c\u5145\u5206\u9884\u5148\u9a8c\u8bc1\uff0c\u5e76\u4e14\u53ef\u80fd\u5b58\u5728\u8fd0\u8425\u7b49\u65b9\u9762\u7684\u6311\u6218\uff0c\u4f46\u53ea\u9700\u8981\u51e0\u4e2a\u6b65\u9aa4\u5c31\u53ef\u4ee5\u5b8c\u6210\u5bb9\u5668\u5316\u548c\u90e8\u7f72\u5230ECS on Fargate\uff0c\u8fd9\u975e\u5e38\u5177\u6709\u5438\u5f15\u529b\u3002<\/p>\n<h2>\u521b\u5efa CI\/CD \u6d41\u6c34\u7ebf<\/h2>\n<h3>\u521b\u5efa\u7528\u4e8e\u90e8\u7f72\u7684\u8d44\u6e90<\/h3>\n<p>\u4f7f\u7528generate pipeline\uff0c\u60a8\u53ef\u4ee5\u5728AWS CodePipeline\u4e2d\u521b\u5efaCI\/CD\u6d41\u6c34\u7ebf\u5e76\u751f\u6210\u6240\u9700\u7684\u5de5\u4ef6\u3002<br \/>\n\u60a8\u4e5f\u53ef\u4ee5\u50cf\u4f7f\u7528app-deployment\u4e00\u6837\u4f7f\u7528&#8211;deploy\u9009\u9879\u3002<\/p>\n<p>\u8981\u6267\u884c generate pipeline\uff0c\u9700\u8981\u5728\u751f\u6210\u7684 pipeline.json \u7684 releaseInfo \u4e2d\u6dfb\u52a0\u90e8\u7f72\u7684 ECS \u96c6\u7fa4\u540d\u548c\u670d\u52a1\u540d\u3002<\/p>\n<pre class=\"post-pre\"><code><span class=\"p\">{<\/span>\r\n        <span class=\"nl\">\"a2CTemplateVersion\"<\/span><span class=\"p\">:<\/span> <span class=\"s2\">\"1.0\"<\/span><span class=\"p\">,<\/span>\r\n        <span class=\"nl\">\"sourceInfo\"<\/span><span class=\"p\">:<\/span> <span class=\"p\">{<\/span>\r\n                <span class=\"nl\">\"CodeCommit\"<\/span><span class=\"p\">:<\/span> <span class=\"p\">{<\/span>\r\n                        <span class=\"nl\">\"repositoryName\"<\/span><span class=\"p\">:<\/span> <span class=\"s2\">\"a2c-java-generic-65424cc9-ecs\"<\/span><span class=\"p\">,<\/span>\r\n                        <span class=\"nl\">\"branch\"<\/span><span class=\"p\">:<\/span> <span class=\"s2\">\"master\"<\/span>\r\n                <span class=\"p\">}<\/span>\r\n        <span class=\"p\">},<\/span>\r\n        <span class=\"nl\">\"imageInfo\"<\/span><span class=\"p\">:<\/span> <span class=\"p\">{<\/span>\r\n                <span class=\"nl\">\"image\"<\/span><span class=\"p\">:<\/span> <span class=\"s2\">\"123456789012.dkr.ecr.ap-northeast-1.amazonaws.com\/java-generic-65424cc9:latest\"<\/span>\r\n        <span class=\"p\">},<\/span>\r\n        <span class=\"nl\">\"releaseInfo\"<\/span><span class=\"p\">:<\/span> <span class=\"p\">{<\/span>\r\n                <span class=\"nl\">\"ECS\"<\/span><span class=\"p\">:<\/span> <span class=\"p\">{<\/span>\r\n                        <span class=\"nl\">\"beta\"<\/span><span class=\"p\">:<\/span> <span class=\"p\">{<\/span>\r\n                                <span class=\"nl\">\"clusterName\"<\/span><span class=\"p\">:<\/span> <span class=\"s2\">\"\"<\/span><span class=\"p\">,<\/span>\r\n                                <span class=\"nl\">\"serviceName\"<\/span><span class=\"p\">:<\/span> <span class=\"s2\">\"\"<\/span><span class=\"p\">,<\/span>\r\n                                <span class=\"nl\">\"enabled\"<\/span><span class=\"p\">:<\/span> <span class=\"kc\">false<\/span>\r\n                        <span class=\"p\">},<\/span>\r\n                        <span class=\"nl\">\"prod\"<\/span><span class=\"p\">:<\/span> <span class=\"p\">{<\/span>\r\n                                <span class=\"nl\">\"clusterName\"<\/span><span class=\"p\">:<\/span> <span class=\"s2\">\"a2c-java-generic-65424cc9-ECS-Cluster\"<\/span><span class=\"p\">,<\/span>\r\n                                <span class=\"nl\">\"serviceName\"<\/span><span class=\"p\">:<\/span> <span class=\"s2\">\"a2c-java-generic-65424cc9-ECS-LBWebAppStack-XXXXXXXXXXXX-Service-YYYYYYYYYYYY\"<\/span><span class=\"p\">,<\/span>\r\n                                <span class=\"nl\">\"enabled\"<\/span><span class=\"p\">:<\/span> <span class=\"kc\">true<\/span>\r\n                        <span class=\"p\">}<\/span>\r\n                <span class=\"p\">}<\/span>\r\n        <span class=\"p\">}<\/span>\r\n<span class=\"p\">}<\/span>\r\n<\/code><\/pre>\n<p>\u5728\u8fd9\u91cc\uff0c\u6211\u4eec\u6307\u5b9a\u4e86\u521a\u521a\u90e8\u7f72\u7684\u8d44\u6e90\u4f5c\u4e3a\u201cprod\u201d\u3002<br \/>\n\u6267\u884c\u751f\u6210\u6d41\u6c34\u7ebf\u65f6\uff0c\u5c06\u521b\u5efa\u7528\u4e8e\u90e8\u7f72 CodePipline \u7684 CloudFormation \u548c CodeDeploy \u7684 buildspec.yml \u6a21\u677f\u3002<\/p>\n<pre class=\"post-pre\"><code><span class=\"gp\">$<\/span> <span class=\"nb\">sudo <\/span>app2container generate pipeline <span class=\"nt\">--application-id<\/span> java-generic-65424cc9\r\n<span class=\"go\">\u2714 Created CodeCommit repository\r\n\u2714 Generated buildspec file(s)\r\n\u2714 Generated CloudFormation templates\r\n\u2714 Committed files to CodeCommit repository\r\n? Pipeline resource template generation successful for application java-generic-65424cc9\r\n\r\n? You're all set to use AWS CloudFormation to manage your pipeline stack.\r\n\r\nNext Steps:\r\n1. Edit the CloudFormation template as necessary.\r\n2. Create a pipeline stack using the AWS CLI or the AWS Console. AWS CLI command:\r\n\r\n        aws cloudformation deploy --template-file \/root\/app2container\/java-generic-65424cc9\/Artifacts\/Pipeline\/CodePipeline\/ecs-pipeline-master.yml --capabilities CAPABILITY_NAMED_IAM --stack-name a2c-java-generic-65424cc9-ecs-pipeline-stack\r\n\r\n<\/span><span class=\"gp\">$<\/span> <span class=\"nb\">sudo <\/span>tree \/root\/app2container\/java-generic-65424cc9\/\r\n<span class=\"go\">\/root\/app2container\/java-generic-65424cc9\/\r\n\u251c\u2500\u2500 Artifacts\r\n\u2502   \u251c\u2500\u2500 ContainerFiles.tar\r\n\u2502   \u251c\u2500\u2500 Dockerfile\r\n\u2502   \u251c\u2500\u2500 Dockerfile.update\r\n\u2502   \u251c\u2500\u2500 Pipeline\r\n\u2502   \u2502   \u2514\u2500\u2500 CodePipeline\r\n\u2502   \u2502       \u251c\u2500\u2500 Dockerfile\r\n\u2502   \u2502       \u251c\u2500\u2500 buildspec.yml\r\n\u2502   \u2502       \u2514\u2500\u2500 ecs-pipeline-master.yml\r\n\u2502   \u251c\u2500\u2500 entryfile\r\n\u2502   \u2514\u2500\u2500 excludedFiles\r\n\u251c\u2500\u2500 EcsDeployment\r\n\u2502   \u2514\u2500\u2500 ecs-master.yml\r\n\u251c\u2500\u2500 analysis.json\r\n\u251c\u2500\u2500 deployment.json\r\n\u251c\u2500\u2500 pipeline.json\r\n\u2514\u2500\u2500 taskDef.json\r\n<\/span><\/code><\/pre>\n<h3>\u90e8\u7f72\u7ba1\u9053<\/h3>\n<p>\u4f7f\u7528 ecs-pipeline-master.yml \u6587\u4ef6\u8fdb\u884c\u90e8\u7f72\u3002<br \/>\n\u8be5\u6587\u4ef6\u4e5f\u5c06\u4f5c\u4e3a\u5d4c\u5957\u5806\u6808\u8fdb\u884c\u90e8\u7f72\u3002<\/p>\n<pre class=\"post-pre\"><code>$ sudo aws cloudformation deploy --template-file \/root\/app2container\/java-generic-65424cc9\/Artifacts\/Pipeline\/CodePipeline\/ecs-pipeline-master.yml --capabilities CAPABILITY_NAMED_IAM --stack-name a2c-java-generic-65424cc9-ecs-pipeline-stack\r\n\r\nWaiting for changeset to be created..\r\nWaiting for stack create\/update to complete\r\nSuccessfully created\/updated stack - a2c-java-generic-65424cc9-ecs-pipeline-stack\r\n<\/code><\/pre>\n<p>\u901a\u8fc7\u8fd9\u6837\u505a\uff0cDockerfile\u548cbuildspec.yml\u5c06\u5728CodeCommit\u4e2d\u8fdb\u884c\u7ba1\u7406\uff0c<br \/>\n\u5e76\u4e14\u5f53\u5bf9\u5b58\u50a8\u5e93\u8fdb\u884c\u66f4\u6539\u65f6\uff0c\u5c06\u68c0\u6d4b\u5230\u5e76\u542f\u52a8\u7ba1\u9053\u3002<br \/>\n\u4f7f\u7528CodeBuild\u8fdb\u884c\u5bb9\u5668\u6620\u50cf\u7684\u6784\u5efa\u548c\u63a8\u9001\uff0c\u4ee5\u53ca\u4efb\u52a1\u5b9a\u4e49\u7684\u7f16\u8f91\uff0c<br \/>\n\u53ef\u4ee5\u8f7b\u677e\u521b\u5efa\u4e00\u4e2a\u8fdb\u884cECS\u96c6\u7fa4\u90e8\u7f72\u7684\u7ba1\u9053\u3002<\/p>\n<div><img decoding=\"async\" class=\"post-images\" title=\"\" src=\"https:\/\/cdn.silicloud.com\/blog-img\/blog\/img\/657d40eb37434c4406c94033\/82-0.png\" alt=\"image.png\" \/><\/div>\n<h2>EKS \u90e8\u7f72<\/h2>\n<h3>\u521b\u5efa\u7528\u4e8e EKS \u90e8\u7f72\u7684\u6784\u4ef6\u3002<\/h3>\n<p>\u9700\u8981\u901a\u8fc7\u4f7f\u7528containerize\u547d\u4ee4\u521b\u5efa\u7684deployment.json\u6765\u521b\u5efa\u4e0eEKS\u76f8\u5173\u7684\u8d44\u6e90\uff0c\u8bf7\u7f16\u8f91eksParameters\u5e76\u5c06createEksArtifacts\u66f4\u6539\u4e3atrue\u3002<\/p>\n<pre class=\"post-pre\"><code>       \"eksParameters\": {\r\n              \"createEksArtifacts\": true,\r\n              \"stackName\": \"a2c-java-generic-65424cc9-EKS\",\r\n              \"reuseResources\": {\r\n                     \"vpcId\": \"\",\r\n                     \"cfnStackName\": \"\",\r\n                     \"sshKeyPairName\": \"\"\r\n              }\r\n       }\r\n<\/code><\/pre>\n<p>\u8bf7\u518d\u6b21\u8fd0\u884cgenerate app-deployment\u547d\u4ee4\u3002<br \/>\n\u8bf7\u6ce8\u610f\uff0cpipeline.json\u5c06\u88ab\u8986\u76d6\u3002<\/p>\n<pre class=\"post-pre\"><code><span class=\"gp\">$<\/span> <span class=\"nb\">sudo <\/span>app2container generate app-deployment <span class=\"nt\">--application-id<\/span> java-generic-65424cc9\r\n<span class=\"go\">\u2714 AWS prerequisite check succeeded\r\n\u2714 Docker prerequisite check succeeded\r\n\u2714 Created ECR Repository\r\n<\/span><span class=\"gp\">\u2714 Uploaded CloudFormation resources to S3 Bucket: &lt;your_bucket_name&gt;<\/span>\r\n<span class=\"go\">\u2714 Generated CloudFormation Master template at: \/root\/app2container\/java-generic-65424cc9\/EksDeployment\/amazon-eks-master.template.yaml\r\n? EKS CloudFormation templates and additional deployment artifacts generated successfully for application java-generic-65424cc9\r\n\r\n? You're all set to use AWS CloudFormation to manage your application stack.You're all set to use AWS CloudFormation to manage your application stack.\r\n\r\nNext Steps:\r\n1. Edit the CloudFormation template as necessary.\r\n2. Create an application stack using the AWS CLI or the AWS Console. AWS CLI command:\r\n\r\n        aws cloudformation deploy --template-file \/root\/app2container\/java-generic-65424cc9\/EksDeployment\/amazon-eks-master.template.yaml --capabilities CAPABILITY_NAMED_IAM --stack-name a2c-java-generic-65424cc9-EKS\r\n\r\n3. Setup a pipeline for your application stack using app2container:\r\n\r\n        app2container generate pipeline --application-id java-generic-65424cc9\r\n\r\n<\/span><\/code><\/pre>\n<p>\u521b\u5efa\u7528\u4e8e\u90e8\u7f72 EKS \u96c6\u7fa4\u7684 CloudFormation \u6a21\u677f\uff0c\u5e76\u521b\u5efa\u90e8\u7f72\u548c\u670d\u52a1\u6240\u9700\u7684\u6e05\u5355\u6587\u4ef6\u3002\u547d\u540d\u7a7a\u95f4\u53ef\u80fd\u9ed8\u8ba4\u4e3a default\uff0c\u56e0\u6b64\u6839\u636e\u9700\u8981\u8fdb\u884c\u81ea\u5b9a\u4e49\u3002<\/p>\n<pre class=\"post-pre\"><code><span class=\"gp\">$<\/span> <span class=\"nb\">sudo <\/span>tree \/root\/app2container\/java-generic-65424cc9\/\r\n<span class=\"go\">\/root\/app2container\/java-generic-65424cc9\/\r\n\u251c\u2500\u2500 Artifacts\r\n\u2502   \u251c\u2500\u2500 ContainerFiles.tar\r\n\u2502   \u251c\u2500\u2500 Dockerfile\r\n\u2502   \u251c\u2500\u2500 Dockerfile.update\r\n\u2502   \u251c\u2500\u2500 Pipeline\r\n\u2502   \u2502   \u2514\u2500\u2500 CodePipeline\r\n\u2502   \u2502       \u251c\u2500\u2500 Dockerfile\r\n\u2502   \u2502       \u251c\u2500\u2500 buildspec.yml\r\n\u2502   \u2502       \u2514\u2500\u2500 ecs-pipeline-master.yml\r\n\u2502   \u251c\u2500\u2500 entryfile\r\n\u2502   \u2514\u2500\u2500 excludedFiles\r\n\u251c\u2500\u2500 EcsDeployment\r\n\u2502   \u2514\u2500\u2500 ecs-master.yml\r\n\u251c\u2500\u2500 EksDeployment \u2605\r\n\u2502   \u251c\u2500\u2500 amazon-eks-master.template.yaml\r\n\u2502   \u2514\u2500\u2500 java-generic-65424cc9.pem\r\n\u251c\u2500\u2500 analysis.json\r\n\u251c\u2500\u2500 deployment.json\r\n\u251c\u2500\u2500 eks_deployment.yaml \u2605\r\n\u251c\u2500\u2500 eks_service.yaml \u2605\r\n\u251c\u2500\u2500 pipeline.json\r\n\u2514\u2500\u2500 taskDef.json\r\n<\/span><\/code><\/pre>\n<h3>\u5c06\u90e8\u7f72\u81f3 EKS \u96c6\u7fa4\u3002<\/h3>\n<p>\u4f7f\u7528 amazon-eks-master.template.yaml \u6587\u4ef6\u90e8\u7f72 EKS \u96c6\u7fa4\u4f1a\u82b1\u8d39\u4e00\u5b9a\u65f6\u95f4\u3002<\/p>\n<pre class=\"post-pre\"><code><span class=\"gp\">$<\/span> <span class=\"nb\">sudo <\/span>aws cloudformation deploy <span class=\"nt\">--template-file<\/span> \/root\/app2container\/java-generic-65424cc9\/EksDeployment\/amazon-eks-master.template.yaml <span class=\"nt\">--capabilities<\/span> CAPABILITY_NAMED_IAM <span class=\"nt\">--stack-name<\/span> a2c-java-generic-65424cc9-EKS\r\n<span class=\"go\">\r\nWaiting for changeset to be created..\r\nWaiting for stack create\/update to complete\r\nSuccessfully created\/updated stack - a2c-java-generic-65424cc9-EKS\r\n<\/span><\/code><\/pre>\n<p>\u4e5f\u53ef\u4ee5\u4e3a EKS \u521b\u5efa CI\/CD \u6d41\u6c34\u7ebf\uff0c\u4f46\u7531\u4e8e\u6b65\u9aa4\u4e0e ECS \u76f8\u540c\uff0c\u56e0\u6b64\u5c06\u4e0d\u518d\u8be6\u8ff0\u3002<\/p>\n<h2>\u8bf7\u63d0\u4f9b\u66f4\u591a\u7684\u4e0a\u4e0b\u6587\u4fe1\u606f\uff0c\u4f7f\u6211\u80fd\u591f\u6b63\u786e\u5730\u4e3a\u60a8\u7ffb\u8bd1\u3002<\/h2>\n<p>App2Container\u6587\u6863<br \/>\nhttps:\/\/docs.aws.amazon.com\/app2container\/latest\/UserGuide\/what-is-a2c.html<\/p>\n<p>\u5e0c\u671b\u8fd9\u4e9b\u5185\u5bb9\u5bf9\u4f60\u6709\u6240\u5e2e\u52a9\u3002<\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u9996\u5148 2020\u5e747\u67081\u65e5\uff0cAWS\u53d1\u5e03\u4e86\u4e00\u6b3e\u540d\u4e3aApp2Container\u7684\u5de5\u5177\uff0c\u7528\u4e8e\u5c06\u73b0\u6709\u7684.NET\u548cJava [&hellip;]<\/p>\n","protected":false},"author":7,"featured_media":0,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[],"class_list":["post-40526","post","type-post","status-publish","format-standard","hentry","category-uncategorized"],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v21.5 (Yoast SEO v21.5) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>\u4f7f\u7528AWS App2Container\u5c06\u73b0\u6709\u5e94\u7528\u7a0b\u5e8f\u8f6c\u5316\u4e3a\u5bb9\u5668\u5316\u5e94\u7528\u7a0b\u5e8f - Blog - Silicon Cloud<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.silicloud.com\/zh\/blog\/\u4f7f\u7528aws-app2container\u5c06\u73b0\u6709\u5e94\u7528\u7a0b\u5e8f\u8f6c\u5316\u4e3a\u5bb9\u5668\u5316\u5e94\u7528\u7a0b\u5e8f\u3002\/\" \/>\n<meta property=\"og:locale\" content=\"zh_CN\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"\u4f7f\u7528AWS App2Container\u5c06\u73b0\u6709\u5e94\u7528\u7a0b\u5e8f\u8f6c\u5316\u4e3a\u5bb9\u5668\u5316\u5e94\u7528\u7a0b\u5e8f\" \/>\n<meta property=\"og:description\" content=\"\u9996\u5148 2020\u5e747\u67081\u65e5\uff0cAWS\u53d1\u5e03\u4e86\u4e00\u6b3e\u540d\u4e3aApp2Container\u7684\u5de5\u5177\uff0c\u7528\u4e8e\u5c06\u73b0\u6709\u7684.NET\u548cJava [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.silicloud.com\/zh\/blog\/\u4f7f\u7528aws-app2container\u5c06\u73b0\u6709\u5e94\u7528\u7a0b\u5e8f\u8f6c\u5316\u4e3a\u5bb9\u5668\u5316\u5e94\u7528\u7a0b\u5e8f\u3002\/\" \/>\n<meta property=\"og:site_name\" content=\"Blog - Silicon Cloud\" \/>\n<meta property=\"article:published_time\" content=\"2022-12-12T03:00:51+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2024-04-30T13:16:01+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/cdn.silicloud.com\/blog-img\/blog\/img\/657d40eb37434c4406c94033\/82-0.png\" \/>\n<meta name=\"author\" content=\"\u79d1, \u9896\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"\u4f5c\u8005\" \/>\n\t<meta name=\"twitter:data1\" content=\"\u79d1, \u9896\" \/>\n\t<meta name=\"twitter:label2\" content=\"\u9884\u8ba1\u9605\u8bfb\u65f6\u95f4\" \/>\n\t<meta name=\"twitter:data2\" content=\"9 \u5206\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/%e4%bd%bf%e7%94%a8aws-app2container%e5%b0%86%e7%8e%b0%e6%9c%89%e5%ba%94%e7%94%a8%e7%a8%8b%e5%ba%8f%e8%bd%ac%e5%8c%96%e4%b8%ba%e5%ae%b9%e5%99%a8%e5%8c%96%e5%ba%94%e7%94%a8%e7%a8%8b%e5%ba%8f%e3%80%82\/\",\"url\":\"https:\/\/www.silicloud.com\/zh\/blog\/%e4%bd%bf%e7%94%a8aws-app2container%e5%b0%86%e7%8e%b0%e6%9c%89%e5%ba%94%e7%94%a8%e7%a8%8b%e5%ba%8f%e8%bd%ac%e5%8c%96%e4%b8%ba%e5%ae%b9%e5%99%a8%e5%8c%96%e5%ba%94%e7%94%a8%e7%a8%8b%e5%ba%8f%e3%80%82\/\",\"name\":\"\u4f7f\u7528AWS App2Container\u5c06\u73b0\u6709\u5e94\u7528\u7a0b\u5e8f\u8f6c\u5316\u4e3a\u5bb9\u5668\u5316\u5e94\u7528\u7a0b\u5e8f - Blog - Silicon Cloud\",\"isPartOf\":{\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/#website\"},\"datePublished\":\"2022-12-12T03:00:51+00:00\",\"dateModified\":\"2024-04-30T13:16:01+00:00\",\"author\":{\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/#\/schema\/person\/8ca01ba7f7362ad4edb7da206a12f29e\"},\"breadcrumb\":{\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/%e4%bd%bf%e7%94%a8aws-app2container%e5%b0%86%e7%8e%b0%e6%9c%89%e5%ba%94%e7%94%a8%e7%a8%8b%e5%ba%8f%e8%bd%ac%e5%8c%96%e4%b8%ba%e5%ae%b9%e5%99%a8%e5%8c%96%e5%ba%94%e7%94%a8%e7%a8%8b%e5%ba%8f%e3%80%82\/#breadcrumb\"},\"inLanguage\":\"zh-Hans\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.silicloud.com\/zh\/blog\/%e4%bd%bf%e7%94%a8aws-app2container%e5%b0%86%e7%8e%b0%e6%9c%89%e5%ba%94%e7%94%a8%e7%a8%8b%e5%ba%8f%e8%bd%ac%e5%8c%96%e4%b8%ba%e5%ae%b9%e5%99%a8%e5%8c%96%e5%ba%94%e7%94%a8%e7%a8%8b%e5%ba%8f%e3%80%82\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/%e4%bd%bf%e7%94%a8aws-app2container%e5%b0%86%e7%8e%b0%e6%9c%89%e5%ba%94%e7%94%a8%e7%a8%8b%e5%ba%8f%e8%bd%ac%e5%8c%96%e4%b8%ba%e5%ae%b9%e5%99%a8%e5%8c%96%e5%ba%94%e7%94%a8%e7%a8%8b%e5%ba%8f%e3%80%82\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"\u9996\u9875\",\"item\":\"https:\/\/www.silicloud.com\/zh\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"\u4f7f\u7528AWS App2Container\u5c06\u73b0\u6709\u5e94\u7528\u7a0b\u5e8f\u8f6c\u5316\u4e3a\u5bb9\u5668\u5316\u5e94\u7528\u7a0b\u5e8f\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/#website\",\"url\":\"https:\/\/www.silicloud.com\/zh\/blog\/\",\"name\":\"Blog - Silicon Cloud\",\"description\":\"\",\"inLanguage\":\"zh-Hans\"},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/#\/schema\/person\/8ca01ba7f7362ad4edb7da206a12f29e\",\"name\":\"\u79d1, \u9896\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"zh-Hans\",\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/8a6fb3cc7ba2f69d2189ba532aec4633ea7ed75ac0af162ec367cb3abc0fb2af?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/8a6fb3cc7ba2f69d2189ba532aec4633ea7ed75ac0af162ec367cb3abc0fb2af?s=96&d=mm&r=g\",\"caption\":\"\u79d1, \u9896\"},\"url\":\"https:\/\/www.silicloud.com\/zh\/blog\/author\/keying\/\"},{\"@type\":\"ImageObject\",\"inLanguage\":\"zh-Hans\",\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/%e4%bd%bf%e7%94%a8aws-app2container%e5%b0%86%e7%8e%b0%e6%9c%89%e5%ba%94%e7%94%a8%e7%a8%8b%e5%ba%8f%e8%bd%ac%e5%8c%96%e4%b8%ba%e5%ae%b9%e5%99%a8%e5%8c%96%e5%ba%94%e7%94%a8%e7%a8%8b%e5%ba%8f%e3%80%82\/#local-main-organization-logo\",\"url\":\"\",\"contentUrl\":\"\",\"caption\":\"Blog - Silicon Cloud\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"\u4f7f\u7528AWS App2Container\u5c06\u73b0\u6709\u5e94\u7528\u7a0b\u5e8f\u8f6c\u5316\u4e3a\u5bb9\u5668\u5316\u5e94\u7528\u7a0b\u5e8f - Blog - Silicon Cloud","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.silicloud.com\/zh\/blog\/\u4f7f\u7528aws-app2container\u5c06\u73b0\u6709\u5e94\u7528\u7a0b\u5e8f\u8f6c\u5316\u4e3a\u5bb9\u5668\u5316\u5e94\u7528\u7a0b\u5e8f\u3002\/","og_locale":"zh_CN","og_type":"article","og_title":"\u4f7f\u7528AWS App2Container\u5c06\u73b0\u6709\u5e94\u7528\u7a0b\u5e8f\u8f6c\u5316\u4e3a\u5bb9\u5668\u5316\u5e94\u7528\u7a0b\u5e8f","og_description":"\u9996\u5148 2020\u5e747\u67081\u65e5\uff0cAWS\u53d1\u5e03\u4e86\u4e00\u6b3e\u540d\u4e3aApp2Container\u7684\u5de5\u5177\uff0c\u7528\u4e8e\u5c06\u73b0\u6709\u7684.NET\u548cJava [&hellip;]","og_url":"https:\/\/www.silicloud.com\/zh\/blog\/\u4f7f\u7528aws-app2container\u5c06\u73b0\u6709\u5e94\u7528\u7a0b\u5e8f\u8f6c\u5316\u4e3a\u5bb9\u5668\u5316\u5e94\u7528\u7a0b\u5e8f\u3002\/","og_site_name":"Blog - Silicon Cloud","article_published_time":"2022-12-12T03:00:51+00:00","article_modified_time":"2024-04-30T13:16:01+00:00","og_image":[{"url":"https:\/\/cdn.silicloud.com\/blog-img\/blog\/img\/657d40eb37434c4406c94033\/82-0.png"}],"author":"\u79d1, \u9896","twitter_card":"summary_large_image","twitter_misc":{"\u4f5c\u8005":"\u79d1, \u9896","\u9884\u8ba1\u9605\u8bfb\u65f6\u95f4":"9 \u5206"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/www.silicloud.com\/zh\/blog\/%e4%bd%bf%e7%94%a8aws-app2container%e5%b0%86%e7%8e%b0%e6%9c%89%e5%ba%94%e7%94%a8%e7%a8%8b%e5%ba%8f%e8%bd%ac%e5%8c%96%e4%b8%ba%e5%ae%b9%e5%99%a8%e5%8c%96%e5%ba%94%e7%94%a8%e7%a8%8b%e5%ba%8f%e3%80%82\/","url":"https:\/\/www.silicloud.com\/zh\/blog\/%e4%bd%bf%e7%94%a8aws-app2container%e5%b0%86%e7%8e%b0%e6%9c%89%e5%ba%94%e7%94%a8%e7%a8%8b%e5%ba%8f%e8%bd%ac%e5%8c%96%e4%b8%ba%e5%ae%b9%e5%99%a8%e5%8c%96%e5%ba%94%e7%94%a8%e7%a8%8b%e5%ba%8f%e3%80%82\/","name":"\u4f7f\u7528AWS App2Container\u5c06\u73b0\u6709\u5e94\u7528\u7a0b\u5e8f\u8f6c\u5316\u4e3a\u5bb9\u5668\u5316\u5e94\u7528\u7a0b\u5e8f - Blog - Silicon Cloud","isPartOf":{"@id":"https:\/\/www.silicloud.com\/zh\/blog\/#website"},"datePublished":"2022-12-12T03:00:51+00:00","dateModified":"2024-04-30T13:16:01+00:00","author":{"@id":"https:\/\/www.silicloud.com\/zh\/blog\/#\/schema\/person\/8ca01ba7f7362ad4edb7da206a12f29e"},"breadcrumb":{"@id":"https:\/\/www.silicloud.com\/zh\/blog\/%e4%bd%bf%e7%94%a8aws-app2container%e5%b0%86%e7%8e%b0%e6%9c%89%e5%ba%94%e7%94%a8%e7%a8%8b%e5%ba%8f%e8%bd%ac%e5%8c%96%e4%b8%ba%e5%ae%b9%e5%99%a8%e5%8c%96%e5%ba%94%e7%94%a8%e7%a8%8b%e5%ba%8f%e3%80%82\/#breadcrumb"},"inLanguage":"zh-Hans","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.silicloud.com\/zh\/blog\/%e4%bd%bf%e7%94%a8aws-app2container%e5%b0%86%e7%8e%b0%e6%9c%89%e5%ba%94%e7%94%a8%e7%a8%8b%e5%ba%8f%e8%bd%ac%e5%8c%96%e4%b8%ba%e5%ae%b9%e5%99%a8%e5%8c%96%e5%ba%94%e7%94%a8%e7%a8%8b%e5%ba%8f%e3%80%82\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/www.silicloud.com\/zh\/blog\/%e4%bd%bf%e7%94%a8aws-app2container%e5%b0%86%e7%8e%b0%e6%9c%89%e5%ba%94%e7%94%a8%e7%a8%8b%e5%ba%8f%e8%bd%ac%e5%8c%96%e4%b8%ba%e5%ae%b9%e5%99%a8%e5%8c%96%e5%ba%94%e7%94%a8%e7%a8%8b%e5%ba%8f%e3%80%82\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"\u9996\u9875","item":"https:\/\/www.silicloud.com\/zh\/blog\/"},{"@type":"ListItem","position":2,"name":"\u4f7f\u7528AWS App2Container\u5c06\u73b0\u6709\u5e94\u7528\u7a0b\u5e8f\u8f6c\u5316\u4e3a\u5bb9\u5668\u5316\u5e94\u7528\u7a0b\u5e8f"}]},{"@type":"WebSite","@id":"https:\/\/www.silicloud.com\/zh\/blog\/#website","url":"https:\/\/www.silicloud.com\/zh\/blog\/","name":"Blog - Silicon Cloud","description":"","inLanguage":"zh-Hans"},{"@type":"Person","@id":"https:\/\/www.silicloud.com\/zh\/blog\/#\/schema\/person\/8ca01ba7f7362ad4edb7da206a12f29e","name":"\u79d1, \u9896","image":{"@type":"ImageObject","inLanguage":"zh-Hans","@id":"https:\/\/www.silicloud.com\/zh\/blog\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/8a6fb3cc7ba2f69d2189ba532aec4633ea7ed75ac0af162ec367cb3abc0fb2af?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/8a6fb3cc7ba2f69d2189ba532aec4633ea7ed75ac0af162ec367cb3abc0fb2af?s=96&d=mm&r=g","caption":"\u79d1, \u9896"},"url":"https:\/\/www.silicloud.com\/zh\/blog\/author\/keying\/"},{"@type":"ImageObject","inLanguage":"zh-Hans","@id":"https:\/\/www.silicloud.com\/zh\/blog\/%e4%bd%bf%e7%94%a8aws-app2container%e5%b0%86%e7%8e%b0%e6%9c%89%e5%ba%94%e7%94%a8%e7%a8%8b%e5%ba%8f%e8%bd%ac%e5%8c%96%e4%b8%ba%e5%ae%b9%e5%99%a8%e5%8c%96%e5%ba%94%e7%94%a8%e7%a8%8b%e5%ba%8f%e3%80%82\/#local-main-organization-logo","url":"","contentUrl":"","caption":"Blog - Silicon Cloud"}]}},"_links":{"self":[{"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/posts\/40526","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/users\/7"}],"replies":[{"embeddable":true,"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/comments?post=40526"}],"version-history":[{"count":2,"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/posts\/40526\/revisions"}],"predecessor-version":[{"id":94343,"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/posts\/40526\/revisions\/94343"}],"wp:attachment":[{"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/media?parent=40526"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/categories?post=40526"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/tags?post=40526"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}